Compartir a través de


Diagnóstico de problemas de configuración de reflejo de base de datos (SQL Server)

En este tema se proporciona información para ayudarle a solucionar problemas al configurar una sesión de creación de reflejo de la base de datos.

Nota:

Asegúrese de cumplir todos los prerrequisitos para el reflejo de bases de datos.

Cuestión Resumen
Mensaje de error 1418 Este mensaje de SQL Server indica que no se puede acceder a la dirección de red del servidor o no existe, y sugiere que compruebe el nombre de la dirección de red y vuelva a emitir el comando. Para obtener más información, consulte el tema MSSQLSERVER_1418 .
Cuentas Analiza los requisitos para configurar correctamente las cuentas en que se ejecuta SQL Server .
Puntos finales Se discuten los requisitos para configurar correctamente el punto de conexión de reflejo de la base de datos de cada instancia de servidor.
SystemAddress Resume las opciones para especificar el nombre del sistema de una instancia de servidor en una configuración de reflejo de base de datos.
Acceso de red Documenta el requisito de que cada instancia del servidor pueda acceder a los puertos de la otra instancia de servidor o instancias a través de TCP.
Preparación de la base de datos reflejada Resume los requisitos para preparar la base de datos reflejada y permitir que el reflejo de datos se inicie.
Error en la operación create-file Describe cómo responder a una operación de creación de archivo con errores.
Inicio de la creación de reflejo mediante Transact-SQL Describe el orden necesario para las instrucciones ALTER DATABASE database_name SET PARTNER ='partner_server' .
Transacciones entre bases de datos Una conmutación automática por error podría dar lugar a una resolución automática y posiblemente incorrecta de transacciones dudosas. Por este motivo, el reflejo de bases de datos no admite transacciones cruzadas entre bases de datos.

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 las mismas cuentas de dominio, se reducen las posibilidades de una configuración incorrecta.

    2. Si las cuentas se ejecutan en dominios diferentes o no son cuentas de dominio, el inicio de sesión de una cuenta debe crearse en master en el otro equipo, y se le deben conceder permisos CONNECT en el punto de conexión. Para obtener más información, consulte Administración de los metadatos cuando una base de datos pasa a estar disponible en otro servidor (SQL Server). Esto incluye la cuenta de servicio de red.

  2. Si SQL Server se ejecuta como un servicio que usa la cuenta del sistema local, debe usar certificados para la autenticación. Para obtener más información, consulte Usar certificados para un extremo de creación de reflejo de la base de datos (Transact-SQL).

Puntos de conexión

Los extremos deben estar configurados correctamente.

  1. Asegúrese de que cada instancia del servidor (servidor principal, servidor reflejado y testigo, si existe) tenga un endpoint de reflejo de base de datos. Para obtener más información, vea sys.database_mirroring_endpoints (Transact-SQL) y, en función de la forma de autenticación, cree un punto de conexión de creación de reflejo de la base de datos para la autenticación de Windows (Transact-SQL) o Use Certificates for a Database Mirroring Endpoint (Transact-SQL).

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

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

  3. En el caso de los problemas de configuración de reflejo de la base de datos que son difíciles de explicar, recomendamos inspeccionar cada instancia de servidor para determinar si está escuchando en los puertos correctos. Para obtener información sobre cómo comprobar la disponibilidad del puerto, consulte MSSQLSERVER_1418.

  4. Asegúrese de que se han iniciado los extremos (STATE=STARTED). En cada instancia del servidor, use la siguiente instrucción Transact-SQL.

    SELECT state_desc FROM sys.database_mirroring_endpoints  
    

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

    Para iniciar un punto de conexión, use 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).

  5. Compruebe que el ROL es correcto. En cada instancia del servidor, use 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).

  6. El inicio de sesión de la cuenta de servicio de la otra instancia del servidor requiere el permiso CONNECT. 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 punto de conexión, en cada instancia del servidor, use la siguiente instrucción Transact-SQL.

    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

Para el nombre del sistema de una instancia de servidor en una configuración de reflejo de base de datos, puede usar cualquier nombre que identifique inequívocamente el sistema. La dirección del servidor puede ser un nombre del sistema (si los sistemas están en el mismo dominio), un nombre de dominio completo o una dirección IP (preferiblemente, una dirección IP estática). Se garantiza que el uso del nombre de dominio completo funcione. 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 a la red

Cada instancia de servidor debe poder acceder a los puertos de la otra instancia de servidor o instancias a través de TCP. Esto es especialmente importante si las instancias del servidor están en dominios diferentes que no confían entre sí (dominios que no son de confianza). Esto restringe gran parte de la comunicación entre las instancias del servidor.

Preparación de la base de datos espejo

Tanto si se inicia el reflejo por primera vez como si se reinicia después de haberlo quitado, compruebe que la base de datos espejo está preparada para el reflejo.

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 el mismo nombre de base de datos y utilizando la opción WITH NORECOVERY. Además, todas las copias de seguridad de registros creadas después de realizar esa copia de seguridad también deben aplicarse, de nuevo (CON NORECOVERY).

Además, se recomienda que, si es posible, la ruta de archivo (incluida la letra de unidad) de la base de datos reflejada sea idéntica a la ruta de la base de datos principal. Si las rutas de acceso de archivo deben diferir, por ejemplo, si la base de datos principal está en la unidad "F:" pero el sistema reflejado carece de una unidad "F:", debe incluir la opción MOVE en la instrucción RESTORE.

Importante

Si mueve los archivos de base de datos al crear la base de datos duplicada, es posible que no pueda agregar archivos a la base de datos más adelante sin que se suspenda la duplicación.

Si se ha detenido la creación de reflejo de la base de datos, todas las copias de seguridad de registros posteriores realizadas en la base de datos principal deben aplicarse a la base de datos reflejada antes de que se pueda reiniciar la creación de reflejo.

Para obtener más información, vea Preparar una base de datos reflejada para la creación de reflejo (SQL Server).

Operación Create-File fallida

Agregar un archivo sin afectar a una sesión de creación de reflejo requiere que la ruta de acceso del archivo exista en ambos servidores. Por lo tanto, si mueve los archivos de la base de datos al crear la base de datos reflejada, es posible que falle una operación de adición de archivos posterior en la base de datos reflejada y se suspenda el proceso de 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 realizar una copia de seguridad del registro que contiene la operación de agregar 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 WITH MOVE. Al realizar esta acción, se crea la ruta de acceso especificada del archivo en el servidor espejo y el nuevo archivo se restaura en esa ubicación.

  3. Para preparar la base de datos para una nueva sesión de reflejo, el propietario también debe restaurar SIN RECUPERACIÓN cualquier otra copia de seguridad de registro pendiente desde el servidor principal.

Para obtener más información, vea Eliminar el reflejo de la base de datos (SQL Server), Preparar una base de datos para el reflejo (SQL Server), Establecer una sesión de reflejo de la base de datos mediante la autenticación de Windows (Transact-SQL), Usar certificados para un punto de conexión de reflejo de la base de datos (Transact-SQL) o Establecer una sesión de reflejo de la base de datos mediante la autenticación de Windows (SQL Server Management Studio).

Iniciar la creación de reflejo mediante 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 debe ejecutarse en el servidor espejo. Cuando se emite esta instrucción, el servidor reflejado no intenta ponerse en contacto con ninguna otra instancia del servidor. En su lugar, el servidor reflejado indica a su base de datos que espere hasta que el servidor principal se haya puesto en contacto con el servidor reflejado.

  2. La segunda instrucción ALTER DATABASE debe ejecutarse en el servidor principal. Esta instrucción hace que el servidor principal intente conectarse al servidor reflejado. Después de crear esa conexión, el reflejo intenta conectarse al servidor principal en otra conexión.

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

Nota:

Para obtener información sobre cómo usar SQL Server Management Studio para iniciar la creación de reflejo, vea Establecer una sesión de creación de reflejo de la base de datos mediante la autenticación de Windows (SQL Server Management Studio) .

Transacciones entre bases de datos

Cuando se refleja una base de datos en modo de alta seguridad con conmutación automática por error, una conmutación automática por error podría provocar una resolución automática y posiblemente incorrecta de transacciones dudosas. Si se produce un failover automático en cualquiera de las bases de datos mientras se confirma una transacción entre distintas bases de datos, pueden producirse 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 incluyen lo siguiente:

  • Transacción que actualiza varias bases de datos en la misma instancia de SQL Server.

  • Transacciones que usan un Coordinador de transacciones distribuidas de Microsoft (MS DTC).

Para obtener más información, consulte Transacciones entre bases de datos no compatibles con el reflejo de base de datos o los Grupos de disponibilidad AlwaysOn (SQL Server).

Véase también

Configurar la creación de reflejo de la base de datos (SQL Server)
Seguridad de transferencia para la duplicación de bases de datos y los grupos de disponibilidad AlwaysOn (SQL Server)