Compartir a través de


Archivo Léame de Mirroring Failover (ODBC)

En este ejemplo se muestra la característica de conmutación por error de creación de reflejo del SP1 de SQL Server 2005. Este ejemplo no es compatible con SQL Server 2005 Express Edition (SQL Server Express).

Lenguajes

En este ejemplo se utiliza Visual C++.

Requisitos previos

Antes de ejecutar este ejemplo, asegúrese de que esté instalado el siguiente software:

  • SQL Server 2005, incluido el Database Engine (Motor de base de datos).
  • Los ejemplos del SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005). Estos ejemplos están incluidos en SQL Server 2005. Puede descargar la última versión de los ejemplos en el Centro para programadores de Microsoft SQL Server.
  • El SDK 2.0 de .NET Framework o Microsoft Visual Studio 2005. Puede obtener el SDK de .NET Framework de forma gratuita. Vea Instalar .NET Framework SDK. Necesitará modificar la variable de entorno INCLUDE a fin de incluir el directorio \Microsoft SQL Server\90\SDK\Include (si está utilizando Microsoft Visual Studio 2005, puede hacer esto en el entorno de desarrollo; vea el artículo sobre directorios de VC++, proyectos y soluciones, cuadro de diálogo Opciones para obtener más información).

También será necesario configurar una base de datos reflejada de la base de datos principal para la base de datos principal. Para obtener más información, vea How to: Set Large Data (OLE DB) y Solucionar problemas de configuración de la creación de reflejo de la base de datos.

Si lo prefiere, puede habilitar la creación de reflejo de la base de datos en el equipo mediante las siguientes secuencias de comandos. Estas secuencias de comandos se pueden ejecutar en SQL Server Management Studio o mediante SQLCMD en el símbolo del sistema.

Asegurarse de que la base de datos y los extremos utilizados en este ejemplo no existen en la instancia del servidor principal

La siguiente secuencia de comandos garantizará que el servidor principal no tiene un nombre de base de datos o de extremo utilizado por el ejemplo.

-- Step 1 (on Principal)
-- Return primary server instance to a premirroring state
-- 
ALTER DATABASE HADB SET PARTNER OFF
DROP DATABASE HADB;
DROP ENDPOINT Mirroring;
EXEC sys.sp_dbmmonitordropmonitoring;

Asegurarse de que la base de datos y los extremos utilizados en este ejemplo no existen en la instancia del servidor reflejado

La siguiente secuencia de comandos garantizará que la instancia del servidor reflejado no tiene un nombre de base de datos o de extremo utilizado por el ejemplo.

-- Step 2 (on Mirror)
-- Return mirror server instance to a premirroring state
-- 
ALTER DATABASE HADB SET PARTNER OFF
RESTORE DATABASE HADB WITH RECOVERY;
DROP DATABASE HADB;
DROP ENDPOINT Mirroring;

Crear bases de datos y copias de seguridad de ellas

Esta secuencia de comandos, que se ejecuta en la instancia del servidor principal, crea la base de datos y las copias de seguridad de ésta.

-- Step 3 (on Principal)
-- create db and backups
-- 
USE master;
GO
CREATE DATABASE HADB; 
ALTER DATABASE HADB SET RECOVERY FULL; 

-- CREATE BACKUPS
BACKUP DATABASE HADB 
    TO DISK = 'C:\HADB.bak'
    WITH FORMAT;
GO

BACKUP LOG HADB
   TO DISK = 'C:\HADB.bak';

Crear la base de datos reflejada

Esta secuencia de comandos, que se ejecuta en la instancia del servidor que contendrá la base de datos reflejada, crea la base de datos reflejada a partir de la copia de seguridad creada en la secuencia de comandos anterior. Si el servidor reflejado y el servidor principal no se encuentran en el mismo equipo físico, necesitará copiar c:\hadb.bak desde el equipo del servidor principal en el equipo del servidor reflejado.

-- Step 4 (on Mirror)
-- Create the mirror database
RESTORE DATABASE HADB
FROM DISK='C:\HADB.bak'
WITH NORECOVERY, FILE=1,
MOVE 'HADB' TO 'C:\HADB.mdf',
MOVE 'HADB_log' TO 'C:\HADB_log.ldf'
;

RESTORE LOG HADB
FROM DISK='C:\HADB.bak'
WITH NORECOVERY, FILE=2,
MOVE 'HADB' TO 'C:\HADB.mdf',
MOVE 'HADB_log' TO 'C:\HADB_log.ldf'
;

Crear extremo de reflejo en el servidor principal

Esta secuencia de comandos, ejecutada en la instancia del servidor principal, crea un extremo de reflejo.

-- Step 5 (on Principal)
-- create mirroring endpoint on PRINCIPAL server
-- 
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP(LISTENER_PORT = 7022)
FOR database_mirroring (ROLE = PARTNER);

Crear extremo de reflejo en la instancia del servidor reflejado

Esta secuencia de comandos, ejecutada en la instancia del servidor reflejado, crea un extremo de reflejo.

Es posible descubrir el nombre del equipo y el del dominio (nombre completo del equipo) si se examinan las propiedades del equipo (en Windows XP, haga clic con el botón secundario en Mi PC, haga clic en Propiedades y examine la ficha Nombre del equipo).

-- Step 6 (on MIRROR)
-- create mirroring endpoint
-- 
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP(LISTENER_PORT = 7023)
FOR database_mirroring (ROLE = PARTNER);

-- also on mirror, set partner to PRINCIPAL server 
--(This must be done on mirror first.)
ALTER DATABASE HADB SET PARTNER='tcp://machine_name.domain:7022';

Establecer principal en el servidor reflejado

Esta secuencia de comandos, ejecutada en el servidor principal, especifica la base de datos reflejada. Es posible que se produzca un error en este momento si el servidor principal tiene un firewall que evita las conexiones en el puerto 7022. En ese caso, realice una excepción en el firewall para este número de puerto.

-- Step 7 (on Principal)
-- Set partner to the mirror server on port 7023
-- 
ALTER DATABASE HADB SET PARTNER='tcp://machine_name.domain:7023';

-- start collecting mirroring history:
USE master;
EXEC sys.sp_dbmmonitoraddmonitoring;

Generar el ejemplo

Para generar el ejemplo, abra Failover.sln en Visual Studio (CTRL+MAYÚS+O) y haga clic en Generar solución en el menú Generar o llame a MSBUILD desde un símbolo del sistema de la solución.

Ejecutar el ejemplo

  • Desde Visual Studio, invoque Iniciar sin depurar (CTRL+F5).
  • Si la generación se ha realizado con MSBuild.exe, invoque Failover.exe.
  • Cambie el servidor principal y el servidor reflejado en la interfaz de usuario a los nombres de su servidor.
  • Haga clic en Init Table. Esto crea una tabla sencilla con una columna utilizada como contador de actualización.
  • Haga clic en Conectar.
  • Haga clic en Actualizar para actualizar la tabla y en Confirmar para confirmar los cambios en la base de datos.
  • Para forzar la conmutación por error manual, haga clic en Conmutación por error.

Notas

Ahora puede hacer clic en Conectar, Actualizar, Confirmar y Desconectar. El campo Count aumenta cada vez que hace clic en Actualizar. Si hace clic en Conmutación por error con actualizaciones no confirmadas, desconecta y vuelva a conectar, verá el estado de actualización después de la última confirmación. Al desconectar, verá un error y la conexión y la transacción actual revertirán después de que se produzca la conmutación por error.

Una aplicación puede detectar a qué servidor se conecta, así como el asociado del servidor. Para hacerlo, active la casilla de verificación Seguimiento de cambios. La ventaja es que una aplicación que actualiza su cadena de conexión tiene más probabilidad de ir directamente al servidor activo en el inicio, que es una mejora mínima, y puede tener costos de mantenimiento cero a largo plazo. Supongamos que A es reflejado por B y A origina un error, dando lugar a que B pase a ser el servidor activo. Ahora se especifica un nuevo servidor C como reflejo para B. Una aplicación que solicite A como principal y B como reflejo produciría un error al conectar cuando B conmuta por error a C.

Haga clic en Prueba continua y observe el contador. Ahora haga clic en Conmutación por error a intervalos. Aparece el tiempo hasta la conmutación por error (mire el código para ver cómo se mide). Además, el código muestra una lógica sencilla de conmutación por error de alto nivel. Es decir, supongamos que la transacción actual se pierde, realice algunos intentos de reconexión (tres en el ejemplo) y repita la transacción errónea o informe de ello al usuario.

Hay botones para obtener una configuración de cliente actual para el alias ActiveServer y para establecer este alias en el servidor activo actual. Si utiliza un alias con secuencias de comandos y utilidades, puede utilizar los SMO para actualizar el alias después de la conmutación por error. Ahora las utilidades y secuencias de comandos se conectarán al nuevo servidor activo.

Vea también

Conceptos

Ejemplos de acceso de datos

Ayuda e información

Obtener ayuda sobre SQL Server 2005