Sdílet prostřednictvím


Vytvoření skupiny dostupnosti AlwaysOn pomocí Transact-SQL (T-SQL)

platí pro:SQL Server

Toto téma popisuje, jak pomocí Transact-SQL vytvořit a nakonfigurovat skupinu dostupnosti na instancích SQL Serveru, na kterých je povolená funkce Skupiny dostupnosti AlwaysOn. Skupina dostupnosti definuje sadu uživatelských databází, které se při selhání přepnou jako jedna jednotka, a sadu partnerů pro převzetí služeb při selhání, označovaných jako repliky dostupnosti , které podporují toto přepnutí.

Poznámka:

Úvod do skupin dostupnosti najdete v tématu Přehled skupin dostupnosti AlwaysOn (SQL Server).

Poznámka:

Jako alternativu k použití jazyka Transact-SQL můžete použít průvodce vytvořením skupiny dostupnosti nebo cmdlety SQL Server PowerShell. Další informace najdete v tématu Použití Průvodce skupinou dostupnosti (SQL Server Management Studio),Použití dialogového okna Nová skupina dostupnosti (SQL Server Management Studio) nebo Vytvoření skupiny dostupnosti (SQL Server PowerShell).

Požadavky, omezení a doporučení

  • Před vytvořením skupiny dostupnosti ověřte, že instance SQL Serveru, které hostují repliky dostupnosti, se nacházejí na různých uzlech Windows Server Failover Clustering (WSFC) ve stejném WSFC clusteru s podporou převzetí služeb při selhání. Ověřte také, že každá instance serveru splňuje všechny ostatní požadavky skupin dostupnosti AlwaysOn. Důrazně doporučujeme přečíst si pro další informace požadavky, omezení a doporučení pro skupiny dostupnosti Always On (SQL Server).

Povolení

Vyžaduje členství v pevné roli serveru správce systému a buď oprávnění k vytvoření SKUPINY DOSTUPNOSTI, oprávnění ke změně jakékoli SKUPINY DOSTUPNOSTI nebo oprávnění ke správě SERVERU.

Vytvoření a konfigurace skupiny dostupnosti pomocí Transact-SQL

Souhrn úkolů a odpovídajících výroků Transact-SQL

Následující tabulka uvádí základní úlohy, které jsou součástí vytváření a konfigurace skupiny dostupnosti, a uvádí, které Transact-SQL příkazy, které se mají pro tyto úlohy použít. Úlohy skupin dostupnosti AlwaysOn musí být provedeny v pořadí, ve kterém jsou uvedeny v tabulce.

Úkol Transact-SQL – prohlášení Kde provést úlohu*****
Vytvoření koncového bodu zrcadlení databáze (jednou na instanci SQL Serveru) VYTVOŘIT KONCOVÝ BODendpointName ... PRO DATABASE_MIRRORING Spusťte na každé instanci serveru, která postrádá koncový bod zrcadlení databáze.
Vytvoření skupiny dostupnosti VYTVOŘENÍ SKUPINY DOSTUPNOSTI Spusťte na instanci serveru, která je hostitelem počáteční primární repliky.
Připojení sekundární repliky ke skupině dostupnosti ALTER AVAILABILITY GROUPgroup_name JOIN Spusťte na každé instanci serveru, která je hostitelem sekundární repliky.
Příprava sekundární databáze ZÁLOHOVÁNÍ a OBNOVENÍ. Vytvořte zálohy v instanci serveru, která je hostitelem primární repliky.

Obnovte zálohy na každé instanci serveru, která je hostitelem sekundární repliky, pomocí funkce RESTORE WITH NORECOVERY.
Spuštění synchronizace dat připojením každé sekundární databáze ke skupině dostupnosti ALTER DATABASEdatabase_name SET HADR AVAILABILITY GROUP = group_name Spusťte na každé instanci serveru, která je hostitelem sekundární repliky.

*Chcete-li provést danou úlohu, připojte se k určené instanci serveru nebo instancím.

Použití Transact-SQL

Poznámka:

Ukázkový postup konfigurace obsahující příklady kódu pro každý z těchto příkazů Transact-SQL najdete v tématu Příklad: Konfigurace skupiny dostupnosti, která používá ověřování systému Windows.

  1. Připojte se k instanci serveru, která je hostitelem primární repliky.

  2. Vytvořte skupinu dostupnosti pomocí příkazu CREATE AVAILABILITY GROUPTransact-SQL.

  3. Připojte novou sekundární repliku ke skupině dostupnosti. Další informace najdete v tématu Připojení sekundární repliky ke skupině dostupnosti (SQL Server).

  4. Pro každou databázi ve skupině dostupnosti vytvořte sekundární databázi obnovením nedávných záloh primární databáze pomocí FUNKCE RESTORE WITH NORECOVERY. Další informace najdete v tématu Příklad: Nastavení skupiny dostupnosti pomocí ověřování systému Windows (Transact-SQL), počínaje krokem, který obnoví zálohu databáze.

  5. Připojte každou novou sekundární databázi ke skupině dostupnosti. Další informace najdete v tématu Připojení sekundární repliky ke skupině dostupnosti (SQL Server).

Příklad: Konfigurace skupiny dostupnosti, která používá ověřování systému Windows

Tento příklad vytvoří ukázkový postup konfigurace skupin dostupnosti AlwaysOn, který používá Transact-SQL k nastavení koncových bodů zrcadlení databáze, které používají ověřování systému Windows, a k vytvoření a konfiguraci skupiny dostupnosti a jejích sekundárních databází.

Tento příklad obsahuje následující části:

Požadavky pro použití ukázkové konfigurační procedury

Tento ukázkový postup má následující požadavky:

  • Instance serveru musí podporovat skupiny dostupnosti AlwaysOn. Další informace najdete v tématu Požadavky, omezení a doporučení pro skupiny dostupnosti AlwaysOn (SQL Server).

  • V instanci serveru, která bude hostovat primární repliku, musí existovat dvě ukázkové databáze MyDb1 a MyDb2. Následující příklady kódu vytvoří a nakonfigurují tyto dvě databáze a vytvoří úplnou zálohu každé databáze. Tyto příklady kódu spusťte v instanci serveru, ve které chcete vytvořit ukázkovou skupinu dostupnosti. Tato instance serveru bude hostit počáteční primární repliku vzorové skupiny dostupnosti.

    1. Následující Transact-SQL příklad vytvoří tyto databáze a změní je tak, aby používaly úplný model obnovení:

      -- Create sample databases:  
      CREATE DATABASE MyDb1;  
      GO  
      ALTER DATABASE MyDb1 SET RECOVERY FULL;  
      GO  
      
      CREATE DATABASE MyDb2;  
      GO  
      ALTER DATABASE MyDb2 SET RECOVERY FULL;  
      GO  
      
    2. Následující příklad kódu vytvoří úplnou zálohu databáze MyDb1 a MyDb2. Tento příklad kódu používá fiktivní sdílenou složku zálohování \\FILESERVER\SQLbackups.

      -- Backup sample databases:  
      BACKUP DATABASE MyDb1   
      TO DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
          WITH FORMAT;  
      GO  
      
      BACKUP DATABASE MyDb2   
      TO DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
          WITH FORMAT;  
      GO  
      

[TopOfExample]

Ukázkový postup konfigurace

V této ukázkové konfiguraci se replika dostupnosti vytvoří na dvou samostatných instancích serveru, jejichž účty služeb běží v různých, ale důvěryhodných doménách (DOMAIN1 a DOMAIN2).

Následující tabulka shrnuje hodnoty použité v této ukázkové konfiguraci.

Počáteční role Systém Hostování instance SQL Serveru
Primární COMPUTER01 AgHostInstance
Sekundární COMPUTER02 Výchozí instance.
  1. Vytvořte koncový bod zrcadlení databáze s názvem dbm_endpoint na instanci serveru, na které plánujete vytvořit skupinu dostupnosti (jde o instanci s názvem AgHostInstance na COMPUTER01). Tento koncový bod používá port 7022. Všimněte si, že instance serveru, na které vytvoříte skupinu dostupnosti, bude hostitelem primární repliky.

    -- Create endpoint on server instance that hosts the primary replica:  
    CREATE ENDPOINT dbm_endpoint  
        STATE=STARTED   
        AS TCP (LISTENER_PORT=7022)   
        FOR DATABASE_MIRRORING (ROLE=ALL);  
    GO  
    
  2. Vytvořte koncový bod dbm_endpoint v instanci serveru, která bude hostitelem sekundární repliky (jedná se o výchozí instanci serveru).COMPUTER02 Tento koncový bod používá port 5022.

    -- Create endpoint on server instance that hosts the secondary replica:   
    CREATE ENDPOINT dbm_endpoint  
        STATE=STARTED   
        AS TCP (LISTENER_PORT=5022)   
        FOR DATABASE_MIRRORING (ROLE=ALL);  
    GO  
    
  3. Poznámka:

    Pokud účty služeb instancí serveru, které mají hostovat repliky dostupnosti, běží pod stejným účtem domény, tento krok není nutný. Přeskočte ho a přejděte přímo k dalšímu kroku.

    Pokud účty služeb instancí serveru běží pod různými uživateli domény, vytvořte na každé instanci serveru přihlašovací jméno pro druhou instanci serveru a udělte tomuto přihlašovacímu oprávnění pro přístup k místnímu koncovému bodu zrcadlení databáze.

    Následující příklad kódu ukazuje příkazy Transact-SQL pro vytvoření přihlášení a udělení oprávnění ke koncovému bodu. Účet domény instance vzdáleného serveru je zde reprezentován jako domain_name\user_name.

    -- If necessary, create a login for the service account, domain_name\user_name  
    -- of the server instance that will host the other replica:  
    USE master;  
    GO  
    CREATE LOGIN [domain_name\user_name] FROM WINDOWS;  
    GO  
    -- And Grant this login connect permissions on the endpoint:  
    GRANT CONNECT ON ENDPOINT::dbm_endpoint   
       TO [domain_name\user_name];  
    GO  
    
  4. V instanci serveru, ve které se nacházejí uživatelské databáze, vytvořte skupinu dostupnosti.

    Následující příklad kódu vytvoří skupinu dostupnosti MyAG na instanci serveru, ve které byly vytvořeny ukázkové databáze MyDb1 a MyDb2. Nejprve je zadána instance AgHostInstancemístního serveru v COMPUTER01 . Tato instance bude hostovat počáteční primární repliku. Pro hostování sekundární repliky je zadaná instance vzdáleného serveru, výchozí instance serveru na COMPUTER02. Obě repliky dostupnosti jsou nakonfigurované tak, aby používaly režim asynchronního potvrzení s ručním převzetím služeb při selhání (pro repliky asynchronního potvrzení ruční převzetí služeb při selhání znamená vynucené převzetí služeb při selhání s možnou ztrátou dat).

    -- Create the availability group, MyAG:   
    CREATE AVAILABILITY GROUP MyAG   
       FOR   
          DATABASE MyDB1, MyDB2   
       REPLICA ON   
          'COMPUTER01\AgHostInstance' WITH   
             (  
             ENDPOINT_URL = 'TCP://COMPUTER01.Adventure-Works.com:7022',   
             AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,  
             FAILOVER_MODE = MANUAL  
             ),  
          'COMPUTER02' WITH   
             (  
             ENDPOINT_URL = 'TCP://COMPUTER02.Adventure-Works.com:5022',  
             AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,  
             FAILOVER_MODE = MANUAL  
             );   
    GO  
    

    Další Transact-SQL příklady kódu pro vytvoření skupiny dostupnosti najdete v tématu CREATE AVAILABILITY GROUP (Transact-SQL).

  5. V instanci serveru, která je hostitelem sekundární repliky, připojte sekundární repliku ke skupině dostupnosti.

    Následující příklad kódu připojuje sekundární repliku na COMPUTER02 ke skupině dostupnosti MyAG.

    -- On the server instance that hosts the secondary replica,   
    -- join the secondary replica to the availability group:  
    ALTER AVAILABILITY GROUP MyAG JOIN;  
    GO  
    
  6. V instanci serveru, která je hostitelem sekundární repliky, vytvořte sekundární databáze.

    Následující příklad kódu vytvoří sekundární databáze MyDb1 a MyDb2 obnovením záloh databáze pomocí RESTORE WITH NORECOVERY.

    -- On the server instance that hosts the secondary replica,   
    -- Restore database backups using the WITH NORECOVERY option:  
    RESTORE DATABASE MyDb1   
        FROM DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
        WITH NORECOVERY;  
    GO  
    
    RESTORE DATABASE MyDb2   
        FROM DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
        WITH NORECOVERY;  
    GO 
    
  7. V instanci serveru, která je hostitelem primární repliky, zálohujte transakční protokol pro každou z primárních databází.

    Důležité

    Při konfiguraci skutečné skupiny dostupnosti doporučujeme před provedením tohoto zálohování protokolů pozastavit úlohy zálohování protokolů pro primární databáze, dokud nepřipojíte odpovídající sekundární databáze ke skupině dostupnosti.

    Následující příklad kódu vytvoří zálohu transakčního protokolu na MyDb1 a myDb2.

    -- On the server instance that hosts the primary replica,   
    -- Backup the transaction log on each primary database:  
    BACKUP LOG MyDb1   
    TO DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
        WITH NOFORMAT;  
    GO  
    
    BACKUP LOG MyDb2   
    TO DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
        WITH NOFORMAT;  
    GO
    

    Návod

    Záloha logů se obvykle musí provést pro každou primární databázi a potom obnovit odpovídající sekundární databázi s možností NORECOVERY. Toto zálohování protokolů však může být zbytečné, pokud byla databáze právě vytvořena a ještě nebyla provedena žádná záloha protokolu nebo se model obnovení právě změnil z SIMPLE na FULL.

  8. V instanci serveru, která je hostitelem sekundární repliky, použijte zálohy protokolů na sekundární databáze.

    Následující příklad kódu aplikuje zálohy na sekundární databáze MyDb1 a MyDb2 obnovením záloh databáze pomocí RESTORE WITH NORECOVERY.

    Důležité

    Při přípravě skutečné sekundární databáze musíte použít každou zálohu protokolu vytvořenou od zálohy databáze, ze které jste vytvořili sekundární databázi, počínaje nejstarším a vždy pomocí funkce RESTORE WITH NORECOVERY. Samozřejmě, pokud obnovíte úplné i rozdílové zálohy databáze, budete muset použít pouze zálohy protokolů vytvořené po rozdílovém zálohování.

    -- Restore the transaction log on each secondary database,  
    -- using the WITH NORECOVERY option:  
    RESTORE LOG MyDb1   
        FROM DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
        WITH FILE=1, NORECOVERY;  
    GO  
    RESTORE LOG MyDb2   
        FROM DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
        WITH FILE=1, NORECOVERY;  
    GO  
    
  9. V instanci serveru, která je hostitelem sekundární repliky, připojte nové sekundární databáze ke skupině dostupnosti.

    Následující příklad kódu připojí sekundární databázi MyDb1 a potom sekundární databáze MyDb2 ke skupině dostupnosti MyAG .

    -- On the server instance that hosts the secondary replica,   
    -- join each secondary database to the availability group:  
    ALTER DATABASE MyDb1 SET HADR AVAILABILITY GROUP = MyAG;  
    GO  
    
    ALTER DATABASE MyDb2 SET HADR AVAILABILITY GROUP = MyAG;  
    GO  
    

Kompletní příklad kódu pro ukázkovou konfigurační proceduru

Následující příklad sloučí příklady kódu ze všech kroků ukázkové konfigurační procedury. Následující tabulka shrnuje zástupné hodnoty použité v tomto příkladu kódu. Další informace o krocích v tomto příkladu kódu naleznete v tématu Předpoklady pro použití ukázkové konfigurační procedury a ukázkové konfigurační procedury výše v tomto tématu.

Zástupný text Popis
\\ SOUBOROVÝ SERVER\SQLbackups Fiktivní záložní sdílení.
\\ SOUBOROVÝ SERVER\SQLbackups\MyDb1.bak Záložní soubor pro MyDb1.
\\ SOUBOROVÝ SERVER\SQLbackups\MyDb2.bak Záložní soubor pro MyDb2.
7022 Číslo portu přiřazené každému koncovému bodu databázového zrcadlení
COMPUTER01\AgHostInstance Instance serveru, která je hostitelem počáteční primární repliky.
COMPUTER02 Instance serveru, která je hostitelem počáteční sekundární repliky. Toto je výchozí instance serveru na .COMPUTER02
dbm_endpoint Název zadaný pro každý koncový bod databázového zrcadlení.
MyAG Název ukázkové skupiny dostupnosti
MyDb1 Název první ukázkové databáze
MyDb2 Název druhé ukázkové databáze
DOMAIN1\user1 Účet služby instance serveru, která je hostitelem počáteční primární repliky.
DOMAIN2\user2 Účet služby instance serveru, která je hostitelem počáteční sekundární repliky.
TCP:// COMPUTER01.Adventure-Works.com:7022 Adresa URL koncového bodu instance AgHostInstance SQL Serveru na COMPUTER01
TCP:// COMPUTER02.Adventure-Works.com:5022 Adresa URL koncového bodu výchozí instance SQL Serveru na COMPUTER02

Poznámka:

Další Transact-SQL příklady kódu pro vytvoření skupiny dostupnosti najdete v tématu CREATE AVAILABILITY GROUP (Transact-SQL).

-- on the server instance that will host the primary replica,   
-- create sample databases:  
CREATE DATABASE MyDb1;  
GO  
ALTER DATABASE MyDb1 SET RECOVERY FULL;  
GO  
  
CREATE DATABASE MyDb2;  
GO  
ALTER DATABASE MyDb2 SET RECOVERY FULL;  
GO  
  
-- Backup sample databases:  
BACKUP DATABASE MyDb1   
TO DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
    WITH FORMAT;  
GO  
  
BACKUP DATABASE MyDb2   
TO DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
    WITH FORMAT;  
GO  
  
-- Create the endpoint on the server instance that will host the primary replica:  
CREATE ENDPOINT dbm_endpoint  
    STATE=STARTED   
    AS TCP (LISTENER_PORT=7022)   
    FOR DATABASE_MIRRORING (ROLE=ALL);  
GO  
  
-- Create the endpoint on the server instance that will host the secondary replica:   
CREATE ENDPOINT dbm_endpoint  
    STATE=STARTED   
    AS TCP (LISTENER_PORT=7022)   
    FOR DATABASE_MIRRORING (ROLE=ALL);  
GO  
  
-- If both service accounts run under the same domain account, skip this step. Otherwise,   
-- On the server instance that will host the primary replica,   
-- create a login for the service account   
-- of the server instance that will host the secondary replica, DOMAIN2\user2,   
-- and grant this login connect permissions on the endpoint:  
USE master;  
GO  
CREATE LOGIN [DOMAIN2\user2] FROM WINDOWS;  
GO  
GRANT CONNECT ON ENDPOINT::dbm_endpoint   
   TO [DOMAIN2\user2];  
GO  
  
-- If both service accounts run under the same domain account, skip this step. Otherwise,   
-- On the server instance that will host the secondary replica,  
-- create a login for the service account   
-- of the server instance that will host the primary replica, DOMAIN1\user1,   
-- and grant this login connect permissions on the endpoint:  
USE master;  
GO  
  
CREATE LOGIN [DOMAIN1\user1] FROM WINDOWS;  
GO  
GRANT CONNECT ON ENDPOINT::dbm_endpoint   
   TO [DOMAIN1\user1];  
GO  
  
-- On the server instance that will host the primary replica,   
-- create the availability group, MyAG:  
CREATE AVAILABILITY GROUP MyAG   
   FOR   
      DATABASE MyDB1, MyDB2   
   REPLICA ON   
      'COMPUTER01\AgHostInstance' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER01.Adventure-Works.com:7022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = AUTOMATIC  
         ),  
      'COMPUTER02' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER02.Adventure-Works.com:7022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = AUTOMATIC  
         );   
GO  
  
-- On the server instance that hosts the secondary replica,   
-- join the secondary replica to the availability group:  
ALTER AVAILABILITY GROUP MyAG JOIN;  
GO  
  
-- Restore database backups onto this server instance, using RESTORE WITH NORECOVERY:  
RESTORE DATABASE MyDb1   
    FROM DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
    WITH NORECOVERY;  
GO  
  
RESTORE DATABASE MyDb2   
    FROM DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
    WITH NORECOVERY;  
GO  
  
-- Back up the transaction log on each primary database:  
BACKUP LOG MyDb1   
TO DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
    WITH NOFORMAT;  
GO  
  
BACKUP LOG MyDb2   
TO DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
    WITH NOFORMAT  
GO  
  
-- Restore the transaction log on each secondary database,  
-- using the WITH NORECOVERY option:  
RESTORE LOG MyDb1   
    FROM DISK = N'\\FILESERVER\SQLbackups\MyDb1.bak'   
    WITH FILE=1, NORECOVERY;  
GO  
RESTORE LOG MyDb2   
    FROM DISK = N'\\FILESERVER\SQLbackups\MyDb2.bak'   
    WITH FILE=1, NORECOVERY;  
GO  
  
-- On the server instance that hosts the secondary replica,   
-- join each secondary database to the availability group:  
ALTER DATABASE MyDb1 SET HADR AVAILABILITY GROUP = MyAG;  
GO  
  
ALTER DATABASE MyDb2 SET HADR AVAILABILITY GROUP = MyAG;  
GO  

Související úkoly

Chcete-li konfigurovat vlastnosti skupiny dostupnosti a repliky

Dokončení konfigurace skupiny dostupnosti

alternativní způsoby vytvoření skupiny dostupnosti

Povolte skupiny dostupnosti Always On

Nakonfigurovat koncový bod pro zrcadlení databáze

Jak na řešení potíží s konfigurací skupin dostupnosti Always On

Související obsah

Viz také

Koncový bod zrcadlení databáze (SQL Server)
přehled skupin dostupnosti AlwaysOn (SQL Server)
Naslouchací služby Skupiny dostupnosti, Připojení klientů a Přepnutí služeb při selhání aplikací (SQL Server)
Požadavky, omezení a doporučení pro skupiny dostupnosti Always On (SQL Server)