Sdílet prostřednictvím


ALTER DATABASE (Transact-SQL) Zrcadlení databáze

platí pro:SQL Server

Poznámka:

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Místo toho používejte skupiny dostupnosti AlwaysOn.

Řídí zrcadlení databáze pro databázi. Hodnoty uvedené v možnostech zrcadlení databáze platí jak pro kopie databáze, tak pro celou zrcadlenou relaci databáze. Na jeden výkaz ALTER DATABASE je povolen pouze jeden <database_mirroring_option> .

Poznámka:

Doporučujeme nastavit zrcadlení databáze mimo špičku, protože konfigurace může ovlivnit výkon.

Pro možnosti ALTER DATABASE viz ALTER DATABASE. Pro možnosti ALTER DATABASE SET viz ALTER DATABASE SET Options.

Transact-SQL konvence syntaxe

Syntaxe


ALTER DATABASE database_name
SET { <partner_option> | <witness_option> }
  <partner_option> ::=
    PARTNER { = 'partner_server'
            | FAILOVER
            | FORCE_SERVICE_ALLOW_DATA_LOSS
            | OFF
            | RESUME
            | SAFETY { FULL | OFF }
            | SUSPEND
            | TIMEOUT integer
            }
  <witness_option> ::=
    WITNESS { = 'witness_server'
            | OFF
            }
  

Arguments

Důležité

Příkaz SET PARTNER nebo SET WITNESS může být úspěšně dokončen při zadání, ale později selže.

Poznámka:

Možnosti zrcadlení databáze ALTER DATABASE nejsou dostupné pro uzavřenou databázi.

database_name Je název databáze, která má být upravována.

PARTNER <partner_option> Řídí vlastnosti databáze, které definují partnery pro failover v rámci zrcadlení databáze a jejich chování. Některé možnosti SET PARTNER lze nastavit na kterékoliv partnery; jiné jsou omezeny na hlavní server nebo na zrcadlový server. Pro více informací viz jednotlivé možnosti PARTNER, které jsou níže. Klauzule SET PARTNER ovlivňuje obě kopie databáze, bez ohledu na partnera, na kterém je určena.

Pro provedení příkazu SET PARTNER musí být STAV koncových točk obou partnerů nastaven na STARTED. Dále je třeba poznamenat, že ROLE endpointu zrcadlení databáze každého partnerského serveru musí být nastavena buď na PARTNER, nebo na ALL. Pro informace o tom, jak specifikovat koncový bod, viz Vytvořit zrcadlený endpoint databáze pro autentizaci Windows. Pro zjištění role a stavu databázového zrcadlovacího endpointu serverové instance na této instanci použijte následující Transact-SQL příkaz:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

<partner_option> ::=

Poznámka:

Pouze jeden <partner_option> je povolen na klauzuli SET PARTNER.

'partner_server' Specifikuje serverovou síťovou adresu instance SQL Serveru, která slouží jako partner pro failover v nové relaci zrcadlení databáze. Každá relace vyžaduje dva partnery: jeden začíná jako hlavní server a druhý jako zrcadlový server. Doporučujeme, aby tito partneři bydleli na různých počítačích.

Tato možnost je specifikována jednou za seanci u každého partnera. Zahájení zrcadlení databáze vyžaduje dva příkazy ALTER DATABASE database SET PARTNER ='partner_server' . Jejich řád je významný. Nejprve se připojte k zrcadlenému serveru a zadejte hlavní instanci serveru jako partner_server (SET PARTNER ='principal_server'). Za druhé, připojte se k hlavnímu serveru a specifikujte instanci zrcadlového serveru jako partner_server (SET PARTNER ='mirror_server'); Tím se spustí zrcadlení databáze mezi těmito dvěma partnery. Pro více informací viz Nastavení zrcadlení databáze.

Hodnota partner_server je síťová adresa serveru. Má následující syntaxi:

TCP**://<system-address>:**<port>

where

  • <systémová adresa> je řetězec, například systémové jméno, plně kvalifikované doménové jméno nebo IP adresa, který jednoznačně identifikuje cílový počítačový systém.
  • <port> je číslo portu, které je přiřazeno k zrcadlenému koncovému bodu instance partnerského serveru.

Pro více informací viz Specifikace adresy serverové sítě – Zrcadlení databáze.

Následující příklad ilustruje klauzuli SET PARTNER ='partner_server':

'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'

Důležité

Pokud je relace nastavena pomocí příkazu ALTER DATABASE místo SQL Server Management Studio, relace je ve výchozím nastavení nastavena na plnou bezpečnost transakcí (SAFETY je nastavena na FULL) a běží v režimu vysoké bezpečnosti bez automatického přepínače v failoveru. Pro umožnění automatického přepnutí v případě pádu nakonfigurujte svědka; Pro spuštění v režimu vysokého výkonu vypněte bezpečnost transakcí (SAFETY OFF).

FAILOVER Ručně přejde přes hlavní server na zrcadlený server. FAILOVER můžete specifikovat pouze na hlavním serveru. Tato možnost platí pouze tehdy, když je nastavení BEZPEČNOST PLNĚ (výchozí).

Volba FAILOVER vyžaduje master jako databázový kontext.

FORCE_SERVICE_ALLOW_DATA_LOSS Nutí službu databáze do zrcadlové databáze poté, co hlavní server selže, když je databáze v nesynchronizovaném stavu nebo v synchronizovaném stavu, pokud nedochází k automatickému failoveru.

Důrazně doporučujeme vynutit službu pouze tehdy, pokud hlavní server již neběží. Jinak by někteří klienti mohli pokračovat v přístupu k původní hlavní databázi místo k nové hlavní databázi. FORCE_SERVICE_ALLOW_DATA_LOSS je dostupný pouze na zrcadleném serveru a pouze za všech následujících podmínek:

  • Hlavní server je mimo provoz.
  • WITNESS je nastaven na VYPNUTO, nebo je witness připojen k mirror serveru.

Vynuťte službu pouze tehdy, pokud jste ochotni riskovat ztrátu některých dat, abyste mohli okamžitě obnovit službu do databáze.

Vynucené služby pozastaví relaci, čímž se dočasně zachovají všechna data v původní hlavní databázi. Jakmile je původní principal v provozu a může komunikovat s novým hlavním serverem, správce databáze může službu obnovit. Když relace pokračuje, všechny neodeslané záznamy v logu a odpovídající aktualizace jsou ztraceny.

VYPNUTO Odstraní zrcadločasovou relaci databáze a odstraní zrcadlení z databáze. Můžete si u kteréhokoliv partnera určit VYPNUTO. Pro více informací viz o dopadu odstranění zrcadlení v článku Odstranění zrcadlení databází.

RESUME Obnovuje pozastavenou zrcadlovací relaci databáze. RESUME můžete specifikovat pouze na hlavním serveru.

BEZPEČNOST { FULL | VYPNUTO } Nastavuje úroveň bezpečnosti transakcí. BEZPEČNOST můžete specifikovat pouze na hlavním serveru.

Výchozí nastavení je PLNO. Při plné bezpečnosti běží synchronizace zrcadlení databáze (v režimu vysoké bezpečnosti). Pokud je SAFETY nastaveno na VYPNUTO, zrcadlení databáze běží asynchronně (v režimu vysokého výkonu).

Chování režimu vysoké bezpečnosti závisí částečně na svědkovi, a to následovně:

  • Když je bezpečnost nastavena na FULL a svědek je nastaven pro relaci, relace běží v režimu vysoké bezpečnosti s automatickým failoverem. Když je hlavní server ztracen, relace automaticky přechází, pokud je databáze synchronizována a instance zrcadlového serveru a svědek jsou stále propojeni (tedy mají kvórum). Pro více informací viz Quorum: Jak svědek ovlivňuje dostupnost databáze – zrcadlení databáze.

    Pokud je pro relaci nastaven svědek, ale momentálně je odpojený, ztráta zrcadlového serveru způsobí výpadek hlavního serveru.

  • Když je bezpečnost nastavena na FULL a svědek na VYPNUTO, relace běží v režimu vysoké bezpečnosti bez automatického přepínaní v záložním režimu. Pokud instance zrcadlového serveru přestane fungovat, instance hlavního serveru zůstává neovlivněna. Pokud hlavní instance serveru přestane fungovat, můžete vynutit službu (s možnou ztrátou dat) na instanci zrcadleného serveru.

  • Pokud je SAFETY nastaveno na VYPNUTO, relace běží v režimu vysokého výkonu a automatické a manuální přepínaní nejsou podporovány. Problémy na zrcadle však principal neovlivňují, a pokud hlavní serverová instance přestane fungovat, můžete v případě potřeby vynutit službu (s možnou ztrátou dat) na instanci zrcadlového serveru – pokud je WITNESS nastaven na VYPNUTO nebo je witness aktuálně připojen ke zrcadlovému serveru. Pro více informací o nucené službě viz "FORCE_SERVICE_ALLOW_DATA_LOSS" dříve v této části.

Důležité

Režim vysokého výkonu není určen k použití svědka. Kdykoli však nastavíte BEZPEČNOST na VYPNUTO, důrazně doporučujeme, abyste se ujistili, že SVĚDEK je nastaven na VYPNUTO.

SUSPEND Pauzuje zrcadlení databáze.

Můžete specifikovat SUSPEND u kteréhokoliv partnera.

TIMEOUT celé číslo Určuje časovou dobu v sekundách. Časová doba je maximální doba, po kterou serverová instance čeká na obdržení PING zprávy od jiné instance v zrcadlení relace, než tuto druhou instanci považuje za odpojenou.

Možnost TIMEOUT můžete nastavit pouze na hlavním serveru. Pokud tuto možnost nespecifikujete, ve výchozím nastavení je časové období 10 sekund. Pokud určíte 5 nebo více, časová doba je nastavena na stanovený počet sekund. Pokud zadáte hodnotu timeoutu od 0 do 4 sekund, time-out se automaticky nastaví na 5 sekund.

Důležité

Doporučujeme ponechat časový limit na 10 sekund nebo vyšší. Nastavení hodnoty na méně než 10 sekund vytváří možnost, že silně zatížený systém přehlédne PINGy a vyhlásí falešné selhání.

Pro více informací viz Možné selhání během zrcadlení databáze.

WITNESS <witness_option> Ovládá vlastnosti databáze, které definují svědka zrcadlení databáze. Klauzule SET WITNESS ovlivňuje obě kopie databáze, ale můžete zadat SET WITNESS pouze na hlavním serveru. Pokud je svědek určen pro jednání, je vyžadováno kvórum k doručení databázi bez ohledu na nastavení BEZPEČNOSTI; pro více informací viz Quorum: Jak svědek ovlivňuje dostupnost databáze – zrcadlení databáze.

Doporučujeme, aby svědek a partneři pro failover bydleli na oddělených počítačích. Pro informace o svědkovi viz Databáze zrcadlící svědek.

Pro provedení příkazu SET WITNESS musí být STAV koncových bodů jak serveru principal, tak witness instance nastaven na STARTED. Dále je třeba poznamenat, že ROLE endpointu zrcadlení databáze instance witness serveru musí být nastavena buď na WITNESS, nebo na ALL. Informace o specifikaci koncového bodu naleznete v článku The Database Mirroring Endpoint.

Pro zjištění role a stavu databázového zrcadlovacího endpointu serverové instance na této instanci použijte následující Transact-SQL příkaz:

SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

Poznámka:

Vlastnosti databáze nelze na svědka nastavit.

<witness_option> ::=

Poznámka:

Podle klauzule SET WITNESS je povolen pouze jeden <witness_option> .

'witness_server' Specifikuje instanci databázového enginu, která slouží jako svědecký server pro zrcadlení databáze. Příkazy SET WITNESS můžete zadat pouze na hlavním serveru.

Ve výroku SET WITNESS ='witness_server' je syntaxe witness_server stejná jako syntax partner_server.

VYPNUTO Odstraní svědka ze zrcadlení databáze. Nastavení svědka na VYPNUTO automaticky vypne automatické přepnutí v záloži. Pokud je databáze nastavena na PLNOU BEZPEČNOST a svědek na VYPNUTO, selhání zrcadlového serveru způsobí, že hlavní server databázi znepřístupní.

Poznámky

Examples

A. Vytvoření databázové zrcadlovací relace se svědkem

Nastavení zrcadlení databáze se svědkem vyžaduje konfiguraci bezpečnosti a přípravu zrcadlové databáze, a také použití ALTER DATABASE k nastavení partnerů. Pro příklad kompletního procesu nastavení viz Nastavení zrcadlení databáze.

B. Ruční propadání přes zrcadlení databáze

Ruční failover může být zahájen kterýmkoli partnerem pro zrcadlení databáze. Před přepnutím byste měli ověřit, že server, o kterém se domníváte, že je aktuálně hlavním serverem, skutečně je hlavním serverem. Například pro databázi AdventureWorks2025 na instanci serveru, o které si myslíte, že je aktuálním hlavním serverem, proveďte následující dotaz:

SELECT db.name, m.mirroring_role_desc
FROM sys.database_mirroring m
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks2022';
GO

Pokud je instance serveru skutečně principal, hodnota mirroring_role_desc je .Principal Pokud by tato instance serveru byla zrcadleným serverem, SELECT příkaz by vrátil Mirror.

Následující příklad předpokládá, že server je aktuálním principálem.

  1. Ruční fail na partnera pro zrcadlení databáze:

    ALTER DATABASE AdventureWorks2022 SET PARTNER FAILOVER;
    GO
    
  2. Pro ověření výsledků failoveru na novém zrcadle proveďte následující dotaz:

    SELECT db.name, m.mirroring_role_desc
    FROM sys.database_mirroring m
    JOIN sys.databases db
    ON db.database_id = m.database_id
    WHERE db.name = N'AdventureWorks2022';
    GO
    

Aktuální hodnota je mirroring_role_desc nyní Mirror.

Viz také