Solucionar problemas de la implementación de la creación de reflejo de la base de datos

En este tema se ofrece información que le ayudará a solucionar problemas de configuración de una sesión de creación de reflejo de una base de datos.

Problema

Resumen

Cuentas

Explica los requisitos para configurar correctamente las cuentas en que se ejecuta SQL Server.

Extremos

Explica los requisitos para configurar correctamente el extremo de la creación de reflejo de la base de datos de cada instancia de servidor.

Dirección del sistema

Resume las alternativas para especificar el nombre del sistema de una instancia de servidor en una configuración de creación de reflejo de la base de datos.

Acceso de red

Explica el requisito por el que cada instancia de servidor debe poder tener acceso a los puertos de las otras instancias de servidor a través de TCP.

Preparación de la base de datos reflejada

Resume los requisitos de preparación de la base de datos reflejada para habilitar el inicio de la creación de reflejo.

Error en una operación de creación de archivo

Describe cómo responder a un error en una operación de creación de archivo.

Iniciar creación de reflejo (Transact-SQL)

Describe el orden necesario para las instrucciones ALTER DATABASE database_name SET PARTNER ='partner_server'.

Cuentas

Las cuentas en las que se ejecuta SQL Server deben estar configuradas correctamente.

  1. ¿Tienen las cuentas los permisos adecuados?

    1. Si las cuentas se ejecutan en el mismo dominio, disminuye la probabilidad de una configuración incorrecta.

    2. Si las cuentas se ejecutan en distintos dominios o no son cuentas de dominio, cree en la base de datos master del otro equipo el inicio de sesión de una cuenta y concédale permisos CONNECT en el extremo. Para obtener más información, vea Administrar los metadatos cuando una base de datos pasa a estar disponible en otra instancia de servidor. Esto incluye la cuenta Servicio de red.

  2. Si SQL Server se ejecuta como un servicio que usa la cuenta del sistema local, deben utilizarse certificados para la autenticación. Para obtener más información, vea Usar certificados para la creación de reflejos de la base de datos

Extremos

Los extremos deben estar configurados correctamente.

  1. Asegúrese de que cada instancia de servidor (principal, reflejado y testigo, si existe) tiene un extremo de creación de reflejo de la base de datos. Para obtener más información, vea sys.database_mirroring_endpoints (Transact-SQL) y, en función del modo de autenticación, Cómo crear un extremo de reflejo para la autenticación de Windows (Transact-SQL) o Cómo permitir que la creación de reflejo de la base de datos use certificados para las conexiones salientes (Transact-SQL).

  2. Compruebe que los números de puerto son correctos.

    Para identificar el puerto asociado actualmente al extremo de creación de reflejo de la base de datos de una instancia de servidor, utilice las vistas de catálogo sys.database_mirroring_endpoints y sys.tcp_endpoints.

  3. El inicio de sesión de la cuenta de servicio desde la otra instancia de servidor requiere el permiso CONNECT.

  4. En caso de problemas de configuración de la creación de reflejo de la base de datos difíciles de explicar, se recomienda que compruebe cada una de las instancias de servidor para determinar si escuchan en los puertos correctos. Para obtener más información acerca de la comprobación de disponibilidad de puertos, vea MSSQLSERVER_1418.

  5. Asegúrese de que se han iniciado los extremos (STATE=STARTED). En cada una de las instancias de servidor, utilice la siguiente instrucción Transact-SQL. 

    SELECT state_desc FROM sys.database_mirroring_endpoints
    

    Para obtener más información acerca de la columna state_desc, vea sys.database_mirroring_endpoints (Transact-SQL).

    Para iniciar un extremo, utilice la siguiente instrucción Transact-SQL.

    ALTER ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS TCP (LISTENER_PORT = <port_number>)
    FOR database_mirroring (ROLE = ALL);
    GO
    

    Para obtener más información, vea ALTER ENDPOINT (Transact-SQL).

  6. Compruebe que el valor de ROLE sea correcto. En cada una de las instancias de servidor, utilice la siguiente instrucción Transact-SQL.

    SELECT role FROM sys.database_mirroring_endpoints;
    GO
    

    Para obtener más información, vea sys.database_mirroring_endpoints (Transact-SQL).

  7. Asegúrese de que el inicio de sesión del otro servidor dispone de permiso CONNECT. Para determinar quién tiene permiso CONNECT para un extremo, utilice la siguiente instrucción Transact-SQL en cada instancia de servidor:

    SELECT 'Metadata Check';
    SELECT EP.name, SP.STATE, 
       CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) 
          AS GRANTOR, 
       SP.TYPE AS PERMISSION,
       CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) 
          AS GRANTEE 
       FROM sys.server_permissions SP , sys.endpoints EP
       WHERE SP.major_id = EP.endpoint_id
       ORDER BY Permission,grantor, grantee; 
    GO
    

Dirección del sistema

Como nombre del sistema de una instancia de servidor en una configuración de creación de reflejo de la base de datos, se puede utilizar cualquier nombre que identifique el sistema de forma inequívoca. La dirección del sistema puede ser un nombre del sistema (si los sistemas se encuentran en el mismo dominio), un nombre de dominio completo o una dirección IP (de preferencia, una dirección IP estática). Se garantiza que el uso de un nombre de dominio completo funciona correctamente. Para obtener más información, vea Especificar una dirección de red de servidor (creación de reflejo de la base de datos).

Acceso de red

Cada instancia de servidor debe tener acceso a los puertos de las demás instancias de servidor a través de TCP. Esto es especialmente importante si las instancias de servidor están en distintos dominios que no confían unos en otros (dominios que no son de confianza). Así se restringe mucho la comunicación entre las instancias de servidor.

Preparación de la base de datos reflejada

Cuando se inicia la creación de reflejo por primera vez o se inicia de nuevo después de eliminar la creación de reflejo, compruebe que la base de datos reflejada esté preparada para esta operación.

Al crear la base de datos reflejada en el servidor reflejado, asegúrese de restaurar la copia de seguridad de la base de datos principal especificando la misma base de datos con la opción WITH NORECOVERY. Además, también deben aplicarse todas las copias de seguridad de registros creadas después de crear la copia de seguridad, de nuevo con WITH NORECOVERY.

Además, se recomienda que, si es posible, la ruta de acceso (incluida la letra de unidad) de la base de datos reflejada sea idéntica a la de la base de datos principal. Si los diseños de archivo deben ser diferentes (por ejemplo, si la base de datos principal se encuentra en la unidad "F:", pero el sistema del servidor reflejado no tiene la unidad F:), se debe incluir la opción MOVE en la instrucción RESTORE.

Nota importanteImportante

Si mueve los archivos de la base de datos al crear la base de datos reflejada, es posible que no pueda agregar archivos a la base de datos posteriormente sin suspender la creación de reflejo.

Si la creación de reflejo de la base de datos se ha detenido, todas las copias de seguridad de registros subsiguientes que se realicen en la base de datos principal deben aplicarse a la base de datos reflejada para poder reiniciar la creación de reflejo.

Para obtener más información, vea Cómo preparar una base de datos reflejada para la creación de reflejo (Transact-SQL).

Error en una operación de creación de archivo

Para poder agregar un archivo sin afectar a una sesión de creación de reflejo, la ruta de acceso del archivo debe existir en ambos servidores. Por consiguiente, si mueve los archivos de base de datos al crear la base de datos reflejada, se podría producir un error en una operación posterior para agregar un archivo en la base de datos reflejada y provocar la suspensión de la creación del reflejo.

Para corregir el problema:

  1. El propietario de la base de datos debe quitar la sesión de creación de reflejo y restaurar una copia de seguridad completa del grupo de archivos que contiene el archivo agregado.

  2. A continuación, el propietario debe hacer una copia de seguridad del registro que contenga la operación para agregar el archivo en el servidor principal y restaurar manualmente la copia de seguridad del registro en la base de datos reflejada utilizando las opciones WITH NORECOVERY y MOVE. De este modo, se crea la ruta de acceso del archivo especificado en el servidor reflejado y se restaura el archivo nuevo en esa ubicación.

  3. Para preparar la base de datos para una nueva sesión de creación de reflejo, el propietario también debe restaurar WITH NO RECOVERY cualquier otra copia de seguridad del registro pendiente desde el servidor principal.

Para obtener más información, vea Quitar la creación de reflejo de la base de datos, Cómo preparar una base de datos reflejada para la creación de reflejo (Transact-SQL), Cómo establecer una sesión de creación de reflejo de la base de datos mediante la autenticación de Windows (Transact-SQL), Usar certificados para la creación de reflejos de la base de datos o Cómo configurar una sesión de creación de reflejo de la base de datos (SQL Server Management Studio).

Iniciar la creación de reflejo (Transact-SQL)

El orden en que se emiten las instrucciones ALTER DATABASE database_name SET PARTNER ='partner_server' es muy importante.

  1. La primera instrucción se debe ejecutar en el servidor reflejado. Cuando se emite la instrucción, el servidor reflejado no intenta ponerse en contacto con ninguna otra instancia de servidor. En lugar de ello, el servidor reflejado indica a su base de datos que espere a que el servidor principal se haya puesto en contacto con el servidor reflejado.

  2. La segunda instrucción ALTER DATABASE se debe ejecutar en el servidor principal. Esta instrucción provoca que el servidor principal intente conectarse al servidor reflejado. Una vez creada dicha conexión, el servidor reflejado intenta conectarse al servidor principal a través de otra conexión.

Para obtener más información, vea ALTER DATABASE (Transact-SQL).

Mensaje de error 1418

Este mensaje de SQL Server indica que la dirección de red del servidor no se encuentra o no existe, y recomienda que se compruebe el nombre de dirección de red y se vuelva a emitir el comando. Para obtener más información, vea MSSQLSERVER_1418.

Transacciones entre bases de datos

Cuando se realiza la creación de reflejo de una base de datos en modo de alta seguridad con conmutación automática por error, dicha conmutación puede generar una solución automática y posiblemente incorrecta de transacciones dudosas. Si se produce una conmutación automática por error en una base de datos cuando se está confirmando una transacción entre bases de datos, se pueden generar incoherencias lógicas entre las bases de datos.

Los tipos de transacciones entre bases de datos que pueden verse afectadas por una conmutación automática por error son:

  • Una transacción que actualice varias bases de datos en la misma instancia de SQL Server.

  • Transacciones que utilizan el Coordinador de transacciones distribuidas de Microsoft DTC (Coordinador de transacciones distribuidas).

Para obtener más información, vea Creación de reflejo de la base de datos y transacciones entre bases de datos.