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

Para configurar un testigo para la base de datos, el propietario de ésta debe asignar una instancia del Motor de base de datos a la función de servidor de testigo. La instancia de servidor testigo puede ejecutarse en el mismo equipo que la instancia de servidor principal o de reflejo, 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 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.

Nota importanteImportante

Se recomienda configurar la creación de reflejo de la base de datos durante las horas de menor actividad, ya que la configuración puede afectar al rendimiento.

Para establecer un testigo

  1. En la instancia de servidor testigo, asegúrese de que existe un extremo para la creación de reflejo de base de datos. Independientemente del número de sesiones de creación de reflejo que deban admitirse, la instancia del servidor sólo debe tener un extremo de creación de reflejo de base de datos. Si tiene previsto utilizar esta instancia de servidor exclusivamente como testigo en las sesiones de creación de reflejo de base de datos, asigne la función 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 base de datos, asigne la función 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 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 base de datos y para conocer su función y estado, utilice la siguiente instrucción Transact-SQL en dicha instancia:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    Nota importanteImportante

    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 obtener más información, vea Quórum: cómo un testigo afecta a la disponibilidad de la base de datos.

    Si el testigo carece de extremo, vea Cómo crear un extremo de reflejo 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 Cómo permitir el acceso a una red de creación de reflejo de la base de datos mediante la autenticación de Windows (Transact-SQL).

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

    ALTER DATABASE <database_name> SET WITNESS =<server_network_address>

    donde <database_name> 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 <server_network_address> 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**://<system-address>:**<port>

    donde <system-address> es una cadena que identifica de forma inequívoca el sistema del equipo de destino y <port> es el número de puerto que utiliza el extremo de la creación de reflejo de la instancia del 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 utilizado por el extremo 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 sólo para la función 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.