Fichier Lisezmoi du basculement vers le miroir (ODBC)
Cet exemple présente la fonctionnalité de basculement vers le miroir disponible dans SQL Server 2005 SP1. Cet exemple n'est pas pris en charge avec SQL Server 2005 Express Edition (SQL Server Express).
Langages
Cet exemple utilise Visual C++.
Configuration préalable
Avant d'exécuter cet exemple, assurez-vous que les logiciels suivants sont installés sur votre ordinateur :
- SQL Server 2005 comprenant le moteur de base de données.
- Exemples du moteur de base de données SQL Server 2005. Ces exemples accompagnent SQL Server 2005. Vous pouvez télécharger la dernière version des exemples sur le site Web du Microsoft SQL Server Developer Center (Centre des développeurs SQL Server).
- Kit de développement .NET Framework SDK 2.0 ou Microsoft Visual Studio 2005. Vous pouvez vous procurer gratuitement le Kit de développement .NET Framework SDK. Consultez Installation du SDK .NET Framework. Vous devrez modifier la variable d'environnement INCLUDE afin d'inclure le répertoire \Microsoft SQL Server\90\SDK\Include (si vous utilisez Microsoft Visual Studio 2005, vous pouvez le faire dans l'environnement de développement ; consultez Répertoires de VC++, Projets et solutions, boîte de dialogue Options pour plus d'informations).
Vous aurez également besoin de configurer une base de données miroir de la base de données principale. Pour plus d'informations, consultez How to: Set Large Data (OLE DB) et Dépannage de l'établissement d'une mise en miroir de bases de données.
Si vous le préférez, vous pouvez activer la mise en miroir de bases de données sur votre ordinateur à l'aide des scripts présentés ci-dessous. Ces scripts peuvent être exécutés dans SQL Server Management Studio ou par le biais de SQLCMD à l'invite de commandes.
Assurez-vous que la base de données et les points de terminaison dans cet exemple n'existent pas dans l'instance de serveur principal
Le script suivant garantit que le serveur principal ne dispose pas d'un nom de base de données ou de point de terminaison utilisé dans l'exemple.
-- 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;
Assurez-vous que la base de données et les points de terminaison dans cet exemple n'existent pas dans l'instance de serveur miroir
Le script suivant garantit que l'instance de serveur miroir ne dispose pas d'un nom de base de données ou de point de terminaison utilisé dans l'exemple.
-- 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;
Créez la base de données et des sauvegardes de la base de données
Ce script exécuté sur l'instance de serveur principal permet de créer la base de données et des sauvegardes de cette dernière.
-- 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';
Créez la base de données miroir
Ce script exécuté sur l'instance de serveur censé accueillir la base de données miroir permet de créer la base de données miroir à partir de la sauvegarde créée dans le script précédent. Si le serveur miroir et le serveur principal ne se trouvent pas sur le même ordinateur physique, vous devrez copier c:\hadb.bak de l'ordinateur serveur principal vers l'ordinateur serveur miroir.
-- 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'
;
Créez un point de terminaison miroir sur le serveur principal
Ce script exécuté sur l'instance de serveur principal permet de créer un point de terminaison de mise en miroir.
-- 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);
Créez un point de terminaison miroir sur l'instance de serveur miroir
Ce script exécuté sur l'instance de serveur miroir permet de créer un point de terminaison de mise en miroir.
Vous pouvez rechercher le nom de votre ordinateur et votre nom de domaine (nom d'ordinateur complet) en examinant les propriétés de votre ordinateur (sous Windows XP, cliquez avec le bouton droit sur Poste de travail, cliquez sur Propriétés, puis regardez dans l'onglet Nom de l'ordinateur).
-- 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';
Définissez le serveur principal sur le serveur miroir
Ce script exécuté sur le serveur principal permet de spécifier la base de données miroir. Vous pouvez constater un échec à cette étape si le serveur principal est doté d'un pare-feu qui empêche toute connexion sur le port 7022. Dans ce cas, faites une exception pour ce numéro de port dans votre pare-feu.
-- 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;
Génération de l'exemple
Pour générer l'exemple, ouvrez le fichier Failover.sln dans Visual Studio (CTRL+SHIFT+O) et cliquez sur Générer la solution dans le menu Générer, ou bien appelez MSBUILD à partir d'une invite de commandes dans la solution.
Exécution de l'exemple
- Dans Visual Studio, appelez Exécuter sans débogage (Ctrl+F5).
- Si vous avez effectué la génération avec MSBuild.exe, appelez Failover.exe.
- Modifiez le serveur principal et le serveur miroir dans l'interface utilisateur conformément à vos noms de serveurs.
- Cliquez sur Initialiser la table. Une simple table dotée d'une colonne servant de compteur de mise à jour est créée.
- Cliquez sur Se connecter.
- Cliquez sur Mettre à jour pour mettre la table à jour, puis sur Valider pour valider les modifications de votre base de données.
- Pour procéder à un basculement manuel, cliquez sur Basculer.
Notes
Vous pouvez désormais cliquer sur Se connecter, Mettre à jour, Valider et Déconnecter. Le champ Count est incrémenté d'une valeur chaque fois que vous cliquez sur Mettre à jour. Si vous cliquez sur Basculer avec des mises à jour non validées, vous déconnectez, puis vous reconnectez, vous verrez l'état de la mise à jour s'afficher après votre dernière validation. Lorsque vous vous déconnectez, une erreur s'affiche et la connexion et la transaction en cours sont restaurées après le basculement.
Une application est capable de détecter à quel serveur elle se connecte ainsi que le partenaire de ce dernier. Pour bénéficier de cette fonction, activez la case à cocher Suivi des modifications. L'avantage de cette fonction est qu'une application qui met à jour sa chaîne de connexion a plus de chance de se diriger vers le serveur actif au démarrage. Malgré le peu d'intérêt qu'il présente en terme de gain, cet avantage peut signifier des coûts de maintenance nuls à long terme. Imaginez un serveur A mis en miroir par un serveur B. Le serveur A échoue et fait du serveur B le serveur actif. Un nouveau serveur C est alors introduit en tant que miroir du serveur B. Une application qui nécessite le serveur A comme serveur principal et le serveur B comme serveur miroir ne parviendrait pas se connecter dès que le serveur B bascule sur le serveur C.
Cliquez sur Test continu et observez le compteur. Cliquez ensuite sur Basculer par intervalles. Le temps de basculement s'affiche (examinez le code pour connaître le mode de mesure). De plus, le code décrit une simple logique de basculement à haut niveau. Partez alors du principe que la transaction en cours est perdue ; effectuez quelques tentatives de reconnexion (trois dans la démonstration) et répétez la transaction qui a échoué ou signalez-la à l'utilisateur.
Certains boutons permettent d'obtenir un paramètre client actuel pour l'alias ActiveServer, puis de définir cette alias sur le serveur actif en cours. Si vous utilisez un alias par le biais de scripts et d'utilitaires, vous pouvez faire appel à SMO (SQL Management Objects) pour mettre l'alias à jour après le basculement. Les utilitaires et les scripts se connectent alors au nouveau serveur actif.