Solucionar problemas de configuración de creación de reflejo de la base de datos (SQL Server)
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.
Nota
Asegurarse de que cumple todos los requisitos previos para la creación de reflejo de la base de datos.
Problema | Resumen |
---|---|
Mensaje de error 1418 | Este mensaje de SQL Server indica que la dirección de red del servidor es inaccesible 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 el tema MSSQLSERVER_1418 . |
Cuentas | Analiza 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. |
SystemAddress | 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 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 provocar la resolución automática y posiblemente incorrecta de transacciones dudosas. Por esta razón, la creación de reflejo de la base de datos no admite transacciones entre bases de datos. |
Cuentas
Las cuentas en las que se ejecuta SQL Server deben estar configuradas correctamente.
¿Tienen las cuentas los permisos adecuados?
Si las cuentas se ejecutan en el mismo dominio, disminuye la probabilidad de una configuración incorrecta.
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, consulte Administración de los metadatos cuando una base de datos pasa a estar disponible en otro servidor (SQL Server). Esto incluye la cuenta Servicio de red.
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, 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.
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, consulte sys.database_mirroring_endpoints (Transact-SQL) y, en función de la forma de autenticación, o bien Crear un punto de conexión para la creación de reflejo de base de datos para la autenticación de Windows (Transact-SQL), o bien Usar certificados para un punto de conexión de creación de reflejo de la base de datos (Transact-SQL).
Compruebe que los números de puerto son correctos.
Para identificar el puerto asociado actualmente al punto de conexión de creació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 .
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 sobre la comprobación de disponibilidad de puertos, vea MSSQLSERVER_1418.
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 sobre la columna state_desc, consulte sys.database_mirroring_endpoints (Transact-SQL).
Para iniciar un punto de conexión, 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).
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).
El inicio de sesión de la cuenta de servicio desde la otra instancia de servidor necesita 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, 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.
También se recomienda que, si es posible, la ruta de acceso al archivo (incluida la letra de unidad) de la base de datos reflejada sea idéntica a la de la base de datos principal. Si las rutas de acceso de archivo deben ser diferentes (por ejemplo, si la base de datos principal se encuentra en la unidad 'F:' pero el sistema reflejado no tiene unidad F:), se debe incluir la opción MOVE en la instrucción RESTORE.
Importante
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 Preparar una base de datos reflejada para la creación de reflejo - SQL Server.
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:
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.
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.
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, consulte Quitar la creación de reflejo de la base de datos (SQL Server), Preparar una base de datos reflejada para la creación de reflejo (SQL Server), 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 un punto de conexión de creación de reflejo de la base de datos (Transact-SQL) o Establecer una sesión de creació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.
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.
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, 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, consulte 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 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 Transacciones entre bases de datos no compatibles con la creación de reflejo de la base de datos o grupos de disponibilidad AlwaysOn (SQL Server).
Consulte también
Configurar la creación de reflejo de la base de datos (SQL Server)
Seguridad de transporte para la creación de reflejo de la base de datos y grupos de disponibilidad AlwaysOn (SQL Server)