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

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 výpis 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 ALTER DATABASE možnosti viz ALTER DATABASE. Pro ALTER DATABASE SET možnosti viz ALTER DATABASE SET Možnosti.

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 PARTNER nebo WITNESS může SET být úspěšně dokončen při zadání, ale později selže.SET

Poznámka:

ALTER DATABASE Možnosti zrcadlení databáze 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é SET PARTNER možnosti lze nastavit na kterémkoli partnerovi; 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.

Pokud chcete spustit SET příkaz PARTNER, musí být stav koncových bodů obou partnerů nastavený na HODNOTU STARTED. Dále je třeba poznamenat, že endpoint ROLE zrcadlení databáze každého instance partnerského serveru musí být nastaven na PARTNER nebo 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 jednu SET klauzuli 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 dvaSETALTER DATABASE příkazy database PARTNER ='partner_server'. Jejich řád je významný. Nejprve se připojte k zrcadlenému serveru a zadejte instanci hlavního serveru jako partner_server (SET PARTNER ='principal_server'). Za druhé, připojte se k hlavnímu serveru a specifikujte instanci zrcadlené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 transakční bezpečnost (SAFETY je nastavena na PLNOU) a běží v režimu vysoké bezpečnosti bez automatického přepínače v záloži. 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 WITNESS můžete specifikovat SET 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 částí jak serveru, tak witness serveru nastaven na STARTED. Dále je třeba poznamenat, že koncový bod ROLE zrcadlení databáze instance witness serveru musí být nastaven 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 WITNESS je povolen pouze jeden <witness_optionSET>.

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

Ve SET výroku 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 pro 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é