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

Se aplica a:SQL Server

Precaución

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Para lograr una alta disponibilidad, use grupos de disponibilidad AlwaysOn en su lugar.

Importante

La duplicación de bases de datos en SQL Server es una tecnología distinta de la duplicación de bases de datos de Microsoft Fabric. La creación de reflejo en Fabric proporciona un mejor rendimiento analítico, la capacidad de unificar el patrimonio de datos con OneLake en Fabric y abrir el acceso a los datos en formato Delta Parquet.

Con el reflejo en Microsoft Fabric, puede replicar continuamente su ecosistema de datos existente directamente en OneLake dentro de Fabric, incluidos los datos de SQL Server 2016+, Azure SQL Database, Azure SQL Managed Instance, Cosmos DB, Oracle, Snowflake y más.

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 la instancia de servidor reflejado, pero esto reduce sustancialmente la robustez de la conmutación automática por error.

Recomendamos encarecidamente que el testigo esté en un equipo distinto. 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á destinado exclusivamente al modo de alta seguridad con conmutación automática por error. Antes de configurar un testigo, le recomendamos encarecidamente que se asegure de que la propiedad SAFETY esté establecida actualmente en 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 del servidor testigo, asegúrese de que exista un punto de conexión para la duplicación 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 piensa 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 punto de conexión (ROLE**=**WITNESS). Si tiene previsto usar esta instancia de servidor como asociado en una o varias sesiones de creación de reflejo de la base de datos, establezca el rol del extremo en ALL.

    Para ejecutar una instrucción SET WITNESS, la sesión de creación de reflejo de la base de datos ya debe haberse iniciado (entre los asociados), y el estado del punto de conexión del testigo debe estar establecido 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. Eliminar un punto de conexión en uso interrumpe 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, consulte Cuórum: cómo un testigo afecta la disponibilidad de la base de datos (Duplicación de la base de datos).

    Si el testigo carece de un extremo, vea Crear un extremo 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, consulte 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).

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

    ALTER DATABASE <database_name>SET WITNESS =<server_network_address>

    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 del sistema> es una cadena que identifica de forma inequívoca el sistema informático de destino, y <puerto> es el número de puerto utilizado por el extremo de creación de reflejo de la instancia de servidor asociada. Para obtener más información, consulte Especificar una dirección de red del servidor (Creación de reflejo de la base de datos).

    Por ejemplo, en la instancia principal del servidor, la siguiente sentencia ALTER DATABASE configura 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 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 asociadas, si es distinto; por ejemplo, suponga que el testigo se ejecuta con SOMEDOMAIN\witnessuser, pero las instancias asociadas se ejecutan con 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, configure el testigo (que está en WITNESSHOST4):

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

Nota:

La dirección de red del servidor especifica la instancia de servidor de destino mediante el número de puerto, que se asigna al extremo de duplicación 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 duplicación de la base de datos (SQL Server)
Testigo de creación de reflejo de la base de datos