Zrcadlení databáze na SQL Serveru

Stáhnout ADO.NET

Poznámka:

Zrcadlení databáze v SQL Serveru je odlišná technologie od zrcadlení databáze Microsoft Fabric.

Zrcadlení databáze na SQL Serveru umožňuje zachovat kopii nebo zrcadlo databáze SQL Serveru na pohotovostním serveru. Zrcadlení zajišťuje, že vždy existují dvě samostatné kopie dat, které poskytují vysokou dostupnost a úplnou redundanci dat. Zprostředkovatel Microsoft SqlClient pro SQL Server poskytuje implicitní podporu zrcadlení databází. Vývojář nemusí dělat nic, jakmile je klient nakonfigurovaný pro databázi SQL Serveru. Objekt SqlConnection také podporuje explicitní režim připojení, který umožňuje zadat název partnerského serveru pro převzetí služeb při selhání v ConnectionString.

Pro SqlConnection objekt cílený na databázi nakonfigurovanou pro databázové zrcadlení nastává následující zjednodušená posloupnost událostí:

  1. Klientská aplikace se úspěšně připojí k hlavní databázi a server odešle zpět název partnerského serveru, který klient ukládá do mezipaměti.
  2. Pokud server obsahující hlavní databázi selže nebo dojde k přerušení připojení, připojení a stav transakce se ztratí. Klientská aplikace se pokusí znovu navázat připojení k hlavní databázi a selže.
  3. Klientská aplikace se pak transparentně pokusí navázat připojení k zrcadlové databázi na partnerském serveru. Pokud bude úspěšné, připojení se přesměruje do zrcadlové databáze, která se pak stane novou hlavní databází.

Určení partnera pro převzetí služeb při selhání v připojovacím řetězci

Pokud do připojovacího řetězce zadáte název záložního partnerského serveru a hlavní databáze nebude při připojení klientské aplikace k dispozici, klient se transparentně pokusí o připojení k záložnímu partnerovi.

";Failover Partner=PartnerServerName"

Pokud vynecháte název partner serveru pro převzetí služeb při selhání a hlavní databáze není při prvním připojení klientské aplikace k dispozici, dojde k SqlException.

SqlConnection Po úspěšném otevření server vrátí název partnera pro převzetí služeb při selhání, který nahrazuje všechny hodnoty zadané v připojovacím řetězci.

Poznámka:

V připojovacím řetězci musíte explicitně zadat počáteční katalog nebo název databáze ve scénářích zrcadlení databáze. Pokud klient v rámci připojení, které nemá explicitně zadaný počáteční katalog ani databázi, obdrží informace o převzetí služeb při selhání, tyto informace se neukládají do mezipaměti a aplikace se nepokusí o převzetí služeb při selhání, pokud primární server selže. Pokud je v připojovacím řetězci zadána hodnota partnera převzetí služeb při selhání, ale není zadána hodnota pro počáteční katalog ani databázi, je vyvolána výjimka InvalidArgumentException.

Načtení aktuálního názvu serveru

Když dojde k převzetí služeb při selhání, můžete pomocí vlastnosti DataSource objektu SqlConnection načíst název serveru, ke kterému je aktuální připojení. Následující fragment kódu získá název aktivního serveru za předpokladu, že proměnná connection odkazuje na otevřený SqlConnection.

Když dojde k události převzetí služeb při selhání a připojení se přepne na mirror server, vlastnost DataSource se aktualizuje tak, aby odrážela název mirror serveru.

string activeServer = connection.DataSource;

Chování mirroringu SqlClient

Klient se vždy pokusí připojit k hlavnímu serveru. Pokud se to nezdaří, zkusí partnerský server pro převzetí služeb při selhání. Pokud již byla zrcadlová databáze na partnerském serveru přepnuta do role hlavní databáze, připojení bude úspěšné a klientovi se odešle nové mapování hlavní a zrcadlové databáze, které se uloží do mezipaměti po dobu životnosti volání AppDomain. Neukládá se v trvalém úložišti a není k dispozici pro budoucí připojení v jiné doméně nebo procesu AppDomain . Je ale k dispozici pro pozdější připojení ve stejné doméně AppDomain. Jiný AppDomain nebo proces spuštěný na stejném nebo jiném počítači má vždy svůj fond připojení a tato připojení se nerestartují. V takovém případě dojde k výpadku primární databáze, každý proces nebo appDomain jednou selže a fond se automaticky vymaže.

Poznámka:

Podpora zrcadlení na serveru se konfiguruje pro každou databázi. Pokud se operace manipulace s daty provádějí nad jinými databázemi, které nejsou součástí sady hlavní/zrcadlová databáze, a to buď pomocí vícedílných názvů, nebo změnou aktuální databáze, změny v těchto ostatních databázích se v případě selhání nepřenášejí. Při změně dat v databázi, která není zrcadlená, se nevygeneruje žádná chyba. Vývojář musí vyhodnotit možný dopad těchto operací.