Configuración de Transact-SQL y modos de funcionamiento de la creación de reflejo de la base de datos
Este tema trata sobre el funcionamiento de una sesión de creación de reflejo de la base de datos desde el punto de vista de la configuración de ALTER DATABASE y de los estados de la base de datos reflejada y del testigo. Este tema está dirigido a los usuarios que administran la creación de reflejo de la base de datos principal o exclusivamente mediante Transact-SQL, en vez de mediante MicrosoftSQL Server Management Studio. Si no está familiarizado con los modos de funcionamiento, vea Sesiones de creación de reflejo de la base de datos.
[!NOTA]
Como alternativa al uso de Transact-SQL, puede controlar el modo de funcionamiento de una sesión en el Explorador de objetos mediante la página Creación de reflejos del cuadro de diálogo Propiedades de la base de datos. Para obtener más información, vea Cómo configurar una sesión de creación de reflejo de la base de datos (SQL Server Management Studio).
Cómo la seguridad de transacción y el estado del testigo afectan al modo de funcionamiento
El modo de funcionamiento de una sesión viene determinado por la combinación de su configuración de seguridad de las transacciones y el estado del testigo. En cualquier momento, el propietario de la base de datos puede cambiar la configuración de seguridad de las transacciones y puede agregar o quitar el testigo.
Seguridad de las transacciones
La seguridad de las transacciones es una propiedad de base de datos específica de la creación de reflejo que determina si una sesión de creación de reflejo de base de datos funciona de forma sincrónica o asincrónica. Hay dos niveles de seguridad: FULL y OFF.
SAFETY FULL
La seguridad de las transacciones completa hace que la sesión funcione de forma asincrónica en modo de alta seguridad. Si existe un testigo, una sesión admite la conmutación automática por error.
Cuando se establece una sesión mediante instrucciones ALTER DATABASE, ésta empieza con el valor SAFETY establecido en FULL; es decir, la sesión empieza en modo de alta seguridad. Una vez que se ha iniciado la sesión, puede agregarse un testigo.
Para obtener más información, vea Creación de reflejo sincrónico de la base de datos (modo de alta seguridad).
SAFETY OFF
Desactivar la seguridad de las transacciones hace que la sesión funcione de forma asincrónica, en modo de alto rendimiento. Si la propiedad SAFETY está establecida en OFF, la propiedad WITNESS también debe estar establecida en OFF (el valor predeterminado). Para obtener información acerca del efecto del testigo en el modo de alto rendimiento, vea "Estado del testigo" a continuación. Para obtener más información acerca de la ejecución con la seguridad de las transacciones desactivada, vea Operación asincrónica de creación de reflejo de la base de datos (Modo de alto rendimiento).
La configuración de seguridad de las transacciones de la base de datos está registrada en cada asociado de la vista de catálogo sys.database_mirroring en las columnas mirroring_safety_level y mirroring_safety_level_desc. Para obtener más información, vea sys.database_mirroring (Transact-SQL).
El propietario de la base de datos puede cambiar el nivel de seguridad de las transacciones en cualquier momento.
Estado del testigo
Si se establece un testigo, es necesario que haya quórum, por lo que el estado del testigo será siempre significativo.
Si existe, el testigo tendrá uno de estos dos estados:
Cuando el testigo está conectado a un asociado, el testigo tiene el estado CONNECTED en relación con el asociado y tiene quórum con ese asociado. En este caso, la base de datos puede estar disponible, incluso si alguno de los asociados no está disponible.
Cuando hay un testigo pero no está conectado a un asociado, el testigo tiene el estado UNKOWN o DISCONNECTED en relación con el asociado. En este caso, el testigo carece de quórum con ese asociado y, si los asociados no están conectados entre sí, la base de datos se vuelve no disponible.
Para obtener información sobre el quórum, vea Quórum: cómo un testigo afecta a la disponibilidad de la base de datos.
El estado de cada testigo en una instancia de servidor se registra en la vista de catálogo sys.database_mirroring, en las columnas mirroring_witness_state y mirroring_witness_state_desc. Para obtener más información, vea sys.database_mirroring (Transact-SQL).
En la tabla siguiente se resume cómo el modo de funcionamiento de una sesión depende de su configuración de seguridad de las transacciones y del estado del testigo.
Modo de funcionamiento |
Seguridad de las transacciones |
Estado del testigo |
---|---|---|
Modo de alto rendimiento |
OFF |
NULL (sin testigo)2 |
Modo de alta seguridad sin conmutación automática por error |
FULL |
NULL (sin testigo) |
Modo de alta seguridad con conmutación automática por error1 |
FULL |
CONNECTED |
1 Si el testigo se desconecta, se recomienda establecer WITNESS OFF hasta que la instancia del servidor testigo esté disponible.
2 Si hay un testigo en modo de alto rendimiento, no participa en la sesión. Sin embargo, para que la base de datos esté disponible, al menos dos de las instancias de servidor deben permanecer conectadas. Por lo tanto, se recomienda mantener la propiedad WITNESS establecida en OFF en las sesiones en modo de alto rendimiento. Para obtener más información, vea Quórum: cómo un testigo afecta a la disponibilidad de la base de datos.
Ver la configuración de seguridad y el estado del testigo
Para ver la configuración de seguridad y el estado del testigo de una base de datos, utilice la vista de catálogo sys.database_mirroring. Las columnas relevantes son:
Factor |
Columnas |
Descripción |
---|---|---|
Seguridad de las transacciones |
mirroring_safety_level o mirroring_safety_level_desc |
La configuración de seguridad de las transacciones para las actualizaciones de la base de datos reflejada es una de las siguientes: UNKNOWN OFF FULL NULL= la base de datos no está en línea. |
¿Existe un testigo? |
mirroring_witness_name |
Nombre de servidor del testigo de creación de reflejo de la base de datos o NULL, que indica que no existe ningún testigo. |
Estado del testigo |
mirroring_witness_state o mirroring_witness_state_desc |
Estado del testigo en la base de datos en un determinado asociado: UNKNOWN CONNECTED DISCONNECTED NULL = no existe ningún testigo o la base de datos no está en línea. |
Por ejemplo, en el servidor principal o el servidor reflejado, escriba:
SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring
Para obtener más información acerca de esta vista de catálogo, vea sys.database_mirroring (Transact-SQL).
Para agregar un testigo
Para quitar un testigo
Para cambiar la seguridad de las transacciones
Factores que afectan el comportamiento en caso de pérdida del servidor principal
En la tabla siguiente se resume el efecto combinado de la configuración de seguridad de las transacciones, el estado de la base de datos y el estado del testigo en el comportamiento de una sesión de creación de reflejos en caso de pérdida del servidor principal.
Seguridad de las transacciones |
Estado del reflejo de la base de datos reflejada |
Estado del testigo |
Comportamiento al perderse el servidor principal |
---|---|---|---|
FULL |
SYNCHRONIZED |
CONNECTED |
Se produce la conmutación automática por error. |
FULL |
SYNCHRONIZED |
DISCONNECTED |
El servidor reflejado se detiene; la conmutación por error no es posible y no se puede hacer que la base de datos esté disponible. |
OFF |
SUSPENDED o DISCONNECTED |
NULL (sin testigo) |
El servicio se puede forzar en el servidor reflejado (con posible pérdida de datos). |
FULL |
SYNCHRONIZING o SUSPENDED |
NULL (sin testigo) |
El servicio se puede forzar en el servidor reflejado (con posible pérdida de datos). |
Vea también