Agregar un testigo de creación de reflejo de la base de datos mediante la autenticación de Windows (Transact-SQL)

Se aplica a:SQL Server

Para configurar un testigo para la base de datos, el propietario de ésta debe asignar una instancia de Motor de base de datos al rol de servidor testigo. La instancia de servidor testigo puede ejecutarse en el mismo equipo que la instancia de servidor principal o reflejado, aunque de este modo se reduce la solidez de la conmutación automática por error.

Se recomienda que el testigo se aloje en un equipo independiente. Un servidor determinado puede participar en varias sesiones simultáneas de creación de reflejo de la base de datos con el mismo asociado o con asociados distintos. Un servidor específico puede ser asociado en algunas sesiones y testigo en otras.

El testigo está pensado exclusivamente para el modo de alta seguridad con conmutación automática por error. Antes de definir un testigo, es recomendable que se asegure de que la propiedad SAFETY está definida actualmente como FULL.

Importante

Se recomienda configurar la creación de reflejo de la base de datos durante los periodos de poca actividad, dado que este proceso puede afectar al rendimiento.

Establecimiento de un testigo

  1. En la instancia de servidor testigo, asegúrese de que existe un extremo para la creación de reflejo de la base de datos. Independientemente del número de sesiones de creación de reflejo que deban admitirse, la instancia del servidor solo debe tener un extremo de creación de reflejo de la base de datos. Si tiene previsto usar esta instancia de servidor exclusivamente como testigo en las sesiones de creación de reflejo de la base de datos, asigne el rol de testigo al extremo (ROLE**=**WITNESS). Si lo que quiere es utilizar la instancia de servidor como asociado en una o más sesiones de creación de reflejo de la base de datos, asigne el rol del extremo a ALL.

    Para ejecutar una instrucción SET WITNESS, es preciso haber iniciado previamente la sesión de creación de reflejo de la base de datos (entre los asociados) y el valor STATE del extremo del testigo debe establecerse en STARTED.

    Para saber si la instancia del servidor testigo tiene su extremo de creación de reflejo de la base de datos y para conocer su rol y su estado, utilice la siguiente instrucción Transact-SQL en dicha instancia:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints  
    

    Importante

    Si existe un extremo para la creación de reflejo de la base de datos y ya se está utilizando, se recomienda utilizar ese extremo para cada sesión en la instancia de servidor. Si quita un extremo en uso, se interrumpirán las conexiones de las sesiones existentes. Si se ha establecido un testigo para una sesión, la eliminación del extremo de creación de reflejo de la base de datos puede hacer que el servidor principal de esa sesión pierda quórum; si sucede esto, la base de datos se queda sin conexión y sus usuarios quedan desconectados. Para más información, vea Cuórum: cómo un testigo afecta a la disponibilidad de la base de datos (Creación de reflejo de la base de datos).

    Si el asociado carece de un punto de conexión, vea Crear un punto de conexión de creación de reflejo de la base de datos para la autenticación de Windows (Transact-SQL).

  2. Si las instancias de asociados se ejecutan en cuentas de usuario de distintos dominios, cree un inicio de sesión para las diferentes cuentas de la base de datos maestra de cada instancia. Para obtener más información, vea Permitir el acceso de red a un punto de conexión de creación de reflejo de la base de datos mediante la autenticación de Windows (SQL Server).

  3. Conéctese al servidor principal y emita la siguiente instrucción:

    ALTER DATABASE <nombre_de_base_de_datos> SET WITNESS =<dirección_de_red_de_servidor>

    donde <nombre_de_base_de_datos> es el nombre de la base de datos de la que se va a crear el reflejo (este nombre es el mismo para ambos asociados) y <dirección_de_red_de_servidor> es la dirección de red de servidor de la instancia del servidor testigo.

    La sintaxis para una dirección de red de servidor es la siguiente:

    TCP://<dirección-sistema>:<puerto>

    donde <dirección-sistema> es una cadena que identifica de forma inequívoca el sistema del equipo de destino y <puerto>, el número de puerto que usa el punto de conexión de la creación de reflejo de la instancia de servidor asociado. Para obtener más información, vea Especificar una dirección de red de servidor (Creación de reflejo de la base de datos).

    Por ejemplo, en la instancia del servidor principal, la siguiente instrucción ALTER DATABASE define el testigo. El nombre de la base de datos es AdventureWorks, la dirección del sistema es DBSERVER3 (el nombre del sistema testigo) y el puerto que usa el punto de conexión de creación de reflejo de la base de datos del testigo es 7022:

    ALTER DATABASE AdventureWorks   
      SET WITNESS = 'TCP://DBSERVER3:7022'  
    

Ejemplo

En el siguiente ejemplo se establece un testigo de creación de reflejo de datos. En la instancia del servidor testigo (instancia predeterminada en WITNESSHOST4):

  1. Cree un extremo para esta instancia de servidor solo para el rol WITNESS usando el puerto 7022.

    CREATE ENDPOINT Endpoint_Mirroring  
        STATE=STARTED   
        AS TCP (LISTENER_PORT=7022)   
        FOR DATABASE_MIRRORING (ROLE=WITNESS)  
    GO  
    
  2. Cree un inicio de sesión para la cuenta de usuario de dominio de las instancias de asociados, si son diferentes; por ejemplo, suponga que el testigo se está ejecutando como SOMEDOMAIN\witnessuser, pero los asociados se están ejecutando como MYDOMAIN\dbousername. Cree un inicio de sesión para los asociados, como se indica a continuación:

    --Create a login for the partner server instances,  
    --which are both running as MYDOMAIN\dbousername:  
    USE master ;  
    GO  
    CREATE LOGIN [MYDOMAIN\dbousername] FROM WINDOWS ;  
    GO  
    --Grant connect permissions on endpoint to login account   
    --of partners  
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [MYDOMAIN\dbousername];  
    GO  
    
  3. En cada instancia del servidor asociado, cree un inicio de sesión para la instancia del servidor testigo:

    --Create a login for the witness server instance,  
    --which is running as SOMEDOMAIN\witnessuser:  
    USE master ;  
    GO  
    CREATE LOGIN [SOMEDOMAIN\witnessuser] FROM WINDOWS ;  
    GO  
    --Grant connect permissions on endpoint to login account   
    --of partners  
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [SOMEDOMAIN\witnessuser];  
    GO  
    
  4. En el servidor principal, establezca el testigo (que se encuentra en WITNESSHOST4):

    ALTER DATABASE AdventureWorks   
        SET WITNESS =   
        'TCP://WITNESSHOST4:7022'  
    GO  
    

Nota:

La dirección de red del servidor indica la instancia del servidor de destino mediante el número de puerto, que se asigna al extremo de creación de reflejo de la instancia.

Para ver un ejemplo completo en el que se muestra la configuración de seguridad, se prepara la base de datos reflejada, se configuran los asociados y se agrega un testigo, vea Configurar la creación de reflejo de la base de datos (SQL Server).

Consulte también

ALTER DATABASE (Transact-SQL)
Permitir el acceso de red a un extremo de creación de reflejo de la base de datos mediante la autenticación de Windows (SQL Server)
Crear un extremo de reflejo de la base de datos para la autenticación de Windows (Transact-SQL)
Establecer una sesión de creación de reflejo de la base de datos mediante la autenticación de Windows (Transact-SQL)
Quitar el testigo de una sesión de creación de reflejo de la base de datos (SQL Server)
Testigo de creación de reflejo de la base de datos