Język

Dublowanie bazy danych w programie SQL Server

Dublowanie bazy danych w SQL Server umożliwia przechowywanie kopii, czyli kopii lustrzanej, bazy danych SQL Server na serwerze rezerwowym. Dublowanie gwarantuje, że przez cały czas istnieją dwie oddzielne kopie danych, zapewniając wysoką dostępność i kompletną nadmiarowość danych. Po skonfigurowaniu dublowania bazy danych dla bazy danych SQL Server Microsoft.Data.SqlClient obsługuje je bez dodatkowego kodu klienta. Można również określić serwer partnera trybu failover we właściwości ConnectionString.

Następująca sekwencja zdarzeń występuje, gdy obiekt SqlConnection jest skierowany do bazy danych skonfigurowanej do mirroringu:

  1. Aplikacja kliencka pomyślnie łączy się z główną bazą danych, a serwer wysyła z powrotem nazwę serwera partnerskiego, który jest następnie buforowany na kliencie.

  2. Jeśli serwer zawierający główną bazę danych ulegnie awarii lub połączenie zostanie przerwane, połączenie i stan transakcji zostanie utracony. Aplikacja kliencka próbuje ponownie nawiązać połączenie z główną bazą danych i kończy się niepowodzeniem.

  3. Następnie aplikacja kliencka przezroczysto próbuje nawiązać połączenie z bazą danych lustrzaną na serwerze partnerskim. Jeśli to się powiedzie, połączenie zostanie przekierowane do dublowanej bazy danych, która stanie się nową główną bazą danych.

Określanie partnera trybu failover w parametrach połączenia

Jeśli podasz nazwę serwera partnera trybu failover w parametrze połączenia, klient automatycznie będzie próbował nawiązać połączenie z partnerem trybu failover, jeśli główna baza danych jest niedostępna, gdy aplikacja kliencka po raz pierwszy nawiązuje połączenie.

";Failover Partner=PartnerServerName"

Jeśli pominięto nazwę serwera partnera trybu failover, a główna baza danych jest niedostępna, gdy aplikacja kliencka po raz pierwszy się łączy, dostawca zgłasza błąd SqlException.

Po pomyślnym otwarciu SqlConnection serwer zwraca nazwę partnera trybu failover. Ta nazwa zastępuje wartość w parametry połączenia.

Uwaga

Musisz jawnie określić początkową nazwę katalogu lub bazy danych w łańcuchu połączenia dla scenariuszy mirroringu bazy danych. Jeśli klient odbiera informacje o przejściu w tryb failover na połączeniu, które nie ma jawnie określonego katalogu początkowego lub bazy danych, informacje o trybie failover nie są buforowane, a aplikacja nie próbuje przejść w tryb failover, jeśli serwer główny ulegnie awarii. Jeśli łańcuch połączenia zawiera wartość dla partnera trybu failover, ale nie zawiera wartości dla początkowego katalogu lub bazy danych, zgłaszany jest InvalidArgumentException.

Pobieranie bieżącej nazwy serwera

Po przełączeniu awaryjnym użyj właściwości DataSource, aby pobrać nazwę połączonego serwera. Poniższy fragment kodu zakłada, że zmienna connection odwołuje się do otwartego wystąpienia klasy SqlConnection.

Gdy wystąpi zdarzenie trybu failover i połączenie zostanie przełączone na serwer lustrzany, DataSource właściwość zostanie zaktualizowana, aby odzwierciedlić nazwę serwera lustrzanego.

Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;

Zachowanie mirroringu SQLClient

Klient zawsze próbuje nawiązać połączenie z bieżącym serwerem głównym. Jeśli zakończy się to niepowodzeniem, spróbuje uruchomić partnera trybu failover. Jeśli baza danych lustrzanych została już przełączona do roli głównej na serwerze partnerskim, połączenie powiedzie się, a nowe mapowanie główny-lustro jest wysyłane do klienta i buforowane przez okres istnienia wywołania AppDomain. Nie jest on przechowywany w magazynie trwałym i nie jest dostępny dla kolejnych połączeń w innym AppDomain lub procesie. Jednak jest on dostępny dla kolejnych połączeń w ramach tego samego AppDomain. Należy pamiętać, że inny AppDomain lub proces uruchomiony na tym samym lub innym komputerze zawsze ma pulę połączeń, a te połączenia nie są resetowane. W takim przypadku, jeśli podstawowa baza danych ulegnie awarii, każdy proces lub AppDomain zakończy się niepowodzeniem jednorazowo, a pula zostanie automatycznie wyczyszczona.

Uwaga

Obsługa dublowania na serwerze jest konfigurowana dla poszczególnych baz danych. Jeśli operacje manipulowania danymi są wykonywane na innych bazach danych nieuwzględnianych w zestawie głównym/zapasowym, używając nazw wieloczęściowych lub zmieniając bieżącą bazę danych, zmiany w tych innych bazach danych nie są propagowane w przypadku awarii. Nie generuje się błędu, gdy dane są modyfikowane w bazie danych, która nie jest replikowana. Deweloper musi ocenić możliwy wpływ takich operacji.

Zasoby mirroringu bazy danych

Aby uzyskać dokumentację koncepcyjną i informacje na temat konfigurowania, wdrażania i administrowania dublowaniem, zobacz następujące zasoby w dokumentacji programu SQL Server.

Zasób opis
Dublowanie bazy danych Opisuje sposób ustawiania i konfigurowania mirroringu w programie SQL Server.

Zobacz też