Freigeben über


Infodatei für Datenbankspiegelungs-Failover (ODBC)

In diesem Beispiel wird das Feature des Datenbankspiegelungs-Failover in SQL Server 2005 SP1 veranschaulicht. Dieses Beispiel wird in SQL Server 2005 Express Edition (SQL Server Express) nicht unterstützt.

Sprachen

Dieses Beispiel verwendet Visual C++.

Voraussetzungen

Stellen Sie vor dem Ausführen dieses Beispiels sicher, dass die folgende Software installiert ist:

  • SQL Server 2005, einschließlich Datenbankmodul.
  • Die Beispiele zu SQL Server 2005-Datenbankmodul. Diese Beispiele sind in SQL Server 2005 enthalten. Sie können die aktuelle Version der Beispiele vom Microsoft SQL Server Developer Center downloaden.
  • .NET Framework SDK 2.0 oder Microsoft Visual Studio 2005. Das .NET Framework SDK ist kostenlos erhältlich. Informationen hierzu finden Sie unter Installieren des .NET Framework SDK. Sie müssen die INCLUDE-Umgebungsvariable so ändern, dass sie das Verzeichnis \Microsoft SQL Server\90\SDK\Include enthält (wenn Sie Microsoft Visual Studio 2005 verwenden, können Sie dies in der Entwicklungsumgebung ausführen; weitere Informationen hierzu finden Sie unter VC++-Verzeichnisse, Projekte und Projektmappen, Dialogfeld "Optionen").

Darüber hinaus müssen Sie eine Spiegeldatenbank für die Prinzipaldatenbank konfigurieren. Weitere Informationen finden Sie unter How to: Set Large Data (OLE DB) und Problembehandlung beim Einrichten einer Datenbankspiegelung.

Gegebenenfalls können Sie die Datenbankspiegelung auf dem Computer mithilfe der folgenden Skripts aktivieren. Diese Skripts können in SQL Server Management Studio oder mithilfe von SQLCMD an der Eingabeaufforderung ausgeführt werden.

Überprüfen, ob die in diesem Beispiel verwendete Datenbank und verwendeten Endpunkte nicht auf der Prinzipalserverinstanz vorhanden sind

Mit dem folgenden Skript wird sichergestellt, dass auf dem Prinzipalserver keine Datenbank bzw. kein Endpunkt mit einem Namen vorhanden ist, der im Beispiel verwendet wird.

-- 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;

Überprüfen, ob die in diesem Beispiel verwendete Datenbank und Endpunkte nicht auf der Spiegelserverinstanz vorhanden sind

Mit dem folgenden Skript wird sichergestellt, dass auf der Spiegelserverinstanz keine Datenbank bzw. kein Endpunkt mit einem Namen vorhanden ist, der im Beispiel verwendet wird.

-- 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;

Erstellen von Datenbanken und Datenbanksicherungen

Mit diesem Skript, das auf der Prinzipalserverinstanz ausgeführt wird, werden die Datenbank und die Datenbanksicherungen erstellt.

-- 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';

Erstellen der Spiegeldatenbank

Mit diesem Skript, das auf der Serverinstanz ausgeführt wird, die die Spiegeldatenbank enthalten soll, wird die Spiegeldatenbank aus der Sicherung erstellt, die mit dem vorherigen Skript erstellt wurde. Wenn sich der Spiegelserver und der Prinzipalserver nicht auf demselben physikalischen Computer befinden, müssen Sie c:\hadb.bak vom Prinzipalservercomputer auf den Spiegelservercomputer kopieren.

-- 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'
;

Erstellen eines Spiegelungsendpunktes auf dem Prinzipalserver

Mit diesem Skript, das in der Prinzipalserverinstanz ausgeführt wird, wird ein Spiegelungsendpunkt erstellt.

-- 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);

Erstellen eines Spiegelungsendpunktes auf der Spiegelserverinstanz

Mit diesem Skript, das in der Spiegelserverinstanz ausgeführt wird, wird ein Spiegelungsendpunkt erstellt.

Sie können den Namen des Computers und den Domänennamen (den vollständigen Computernamen) bestimmen, indem Sie die Eigenschaften des jeweiligen Computers anzeigen (klicken Sie unter Windows XP mit der rechten Maustaste auf Arbeitsplatz, klicken Sie auf Eigenschaften, und sehen Sie auf der Registerkarte Computername nach).

-- 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';

Festlegen des Prinzipals auf den Spiegelserver

Mit diesem Skript, das auf dem Prinzipalserver ausgeführt wird, wird die Spiegeldatenbank angegeben. Möglicherweise tritt an dieser Stelle ein Fehler auf, wenn der Prinzipalserver über eine Firewall verfügt, die Verbindungen über Port 7022 verhindert. Legen Sie in diesem Fall für die Firewall eine Ausnahme in Bezug auf diese Portnummer fest.

-- 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;

Erstellen des Beispiels

Zum Erstellen des Beispiels öffnen Sie MirroringFailover.sln in Visual Studio (STRG+UMSCHALT+O), und klicken Sie im Menü Erstellen auf Projektmappe erstellen, oder rufen Sie an einer Eingabeaufforderung MSBUILD für die Projektmappe auf.

Ausführen des Beispiels

  • Rufen Sie in Visual Studio den Befehl Starten ohne Debuggen (STRG+F5) auf.
  • Wenn Sie das Beispiel mit MSBuild.exe erstellt haben, rufen Sie Failover.exe auf.
  • Ändern Sie den Namen des Prinzipalservers und des Spiegelservers in der Benutzeroberfläche in den Ihres Servers.
  • Klicken Sie auf Init Table. Dadurch wird eine einfache Tabelle mit einer Spalte erstellt, die als Aktualisierungszähler verwendet wird.
  • Klicken Sie auf Connect.
  • Klicken Sie auf Update, um die Tabelle zu aktualisieren, und klicken Sie auf Commit, um einen Commit der Änderungen für die Datenbank auszuführen.
  • Wenn Sie ein manuelles Failover erzwingen möchten, klicken Sie auf Failover.

Hinweise

Sie können nun auf Connect, Update, Commit und Disconnect klicken. Immer wenn Sie auf Update klicken, erhöht sich der Zähler im Feld Count. Wenn Sie auf Failover klicken und Aktualisierungen vorhanden sind, für die kein Commit ausgeführt wurde, und Sie die Verbindung trennen und wiederherstellen, wird der Aktualisierungsstatus nach dem letzten Commit angezeigt. Wenn Sie die Verbindung trennen, wird ein Fehler ausgegeben, und nach dem Failover wird ein Rollback der Verbindung und der aktuellen Transaktion ausgeführt.

Eine Anwendung kann den Server ermitteln, mit dem eine Verbindung hergestellt wird, sowie dessen Partner. Aktivieren Sie dazu das Kontrollkästchen Track Changes. Dies bietet den Vorteil, dass eine Anwendung, deren Verbindungszeichenfolge aktualisiert wird, mit höherer Wahrscheinlichkeit direkt beim Start eine Verbindung mit dem aktiven Server herstellt. Dies ist eine geringfügige Verbesserung, bei der möglicherweise keine langfristigen Wartungskosten anfallen. Angenommen, A wird durch B gespiegelt, und A fällt aus, wodurch B zum aktiven Server wird. Nun wird ein neuer Server C als Spiegel von B eingerichtet. Eine Anwendung, die A als Prinzipal und B als Spiegel fordert, kann keine Verbindung herstellen, wenn ein Failover von B nach C erfolgt.

Klicken Sie auf Continuous Test, und beobachten Sie den Zähler. Klicken Sie nun in bestimmten Intervalle auf Failover. Die Failoverdauer wird angezeigt (im Code wird dargestellt, wie diese gemessen wird). Darüber hinaus wird im Code auch eine einfache allgemeine Failoverlogik dargestellt. Angenommen, die aktuelle Transaktion geht verloren. Versuchen Sie mehrfach, die Verbindung wiederherzustellen (drei Versuche im Beispiel), und wiederholen Sie die ausgefallene Transaktion, oder benachrichtigen Sie den Benutzer über das Problem.

Es sind Schaltflächen vorhanden, mit denen eine aktuelle Clienteinstellung für den Alias ActiveServer abgerufen und dieser Alias auf den derzeit aktiven Server festgelegt werden kann. Wenn Sie einen Alias mit Skripts und Dienstprogrammen verwenden, können Sie den Alias nach einem Failover mithilfe von SMO aktualisieren. Nun stellen Dienstprogramme und Skripts die Verbindung mit dem neuen aktiven Server her.

Siehe auch

Konzepte

Datenzugriffsbeispiele

Hilfe und Informationen

Informationsquellen für SQL Server 2005