Dela via


Skapa en AlwaysOn-tillgänglighetsgrupp med hjälp av Transact-SQL (T-SQL)

gäller för:SQL Server

I det här avsnittet beskrivs hur du använder Transact-SQL för att skapa och konfigurera en tillgänglighetsgrupp på instanser av SQL Server där funktionen AlwaysOn-tillgänglighetsgrupper är aktiverad. En tillgänglighetsgrupp definierar en uppsättning användardatabaser som kommer att växla över som en enhet samt en uppsättning redundanspartners, kända som tillgänglighetsrepliker, som stöder redundansövergång.

Anmärkning

En introduktion till tillgänglighetsgrupper finns i Översikt över AlwaysOn-tillgänglighetsgrupper (SQL Server).

Anmärkning

Som ett alternativ till att använda Transact-SQL kan du använda guiden Skapa tillgänglighetsgrupp eller SQL Server PowerShell-cmdletar. Mer information finns i Använda guiden Tillgänglighetsgrupp (SQL Server Management Studio), Använd dialogrutan Ny tillgänglighetsgrupp (SQL Server Management Studio) eller Skapa en tillgänglighetsgrupp (SQL Server PowerShell).

Krav, begränsningar och rekommendationer

  • Innan du skapar en tillgänglighetsgrupp kontrollerar du att instanserna av SQL Server som är värd för tillgänglighetsrepliker finns på olika WSFC-noder (Windows Server Failover Clustering) i samma WSFC-redundanskluster. Kontrollera också att var och en av serverinstanserna uppfyller alla andra krav för AlwaysOn-tillgänglighetsgrupper. För mer information rekommenderar vi starkt att du läser krav, begränsningar och rekommendationer för AlwaysOn-tillgänglighetsgrupper (SQL Server).

Behörigheter

Kräver medlemskap i sysadmin fast serverroll samt antingen CREATE AVAILABILITY GROUP-serverbehörighet, ALTER ANY AVAILABILITY GROUP-behörighet eller CONTROL SERVER-behörighet.

Använda Transact-SQL för att skapa och konfigurera en tillgänglighetsgrupp

Sammanfattning av uppgifter och motsvarande Transact-SQL-instruktioner

I följande tabell visas de grundläggande uppgifter som ingår i att skapa och konfigurera en tillgänglighetsgrupp och anger vilka Transact-SQL instruktioner som ska användas för dessa uppgifter. Aktiviteterna för Always On-tillgänglighetsgrupper måste utföras i den ordning som de visas i tabellen.

Aktivitet Transact-SQL-uttalande(n) Var du ska utföra uppgiften*****
Skapa databasspeglingsslutpunkt (en gång per SQL Server-instans) SKAPA ENDPOINTslutpunktsnamn ... FÖR databasspegling Kör på varje serverinstans som saknar databasspeglingsslutpunkt.
Skapa tillgänglighetsgrupp SKAPA TILLGÄNGLIGHETSGRUPP Kör på den serverinstans som ska vara värd för den första primära repliken.
Ansluta sekundär replik till tillgänglighetsgrupp ÄNDRA TILLGÄNGLIGHETSGRUPPGROUP_NAME KOPPLING Kör på varje serverinstans som är värd för en sekundär replik.
Förbereda den sekundära databasen SÄKERHETSKOPIERing och ÅTERSTÄLLNING. Skapa säkerhetskopior på den serverinstans som är värd för den primära repliken.

Återställ säkerhetskopior på varje serverinstans som är värd för en sekundär replik med HJÄLP av RESTORE WITH NORECOVERY.
Starta datasynkronisering genom att ansluta varje sekundär databas till tillgänglighetsgruppen ALTER DATABASEdatabase_name SET HADR AVAILABILITY GROUP = group_name Kör på varje serverinstans som är värd för en sekundär replik.

*Om du vill utföra en viss uppgift ansluter du till den angivna serverinstansen eller instanserna.

Använda Transact-SQL

Anmärkning

En exempelkonfigurationsprocedur som innehåller kodexempel för var och en av dessa Transact-SQL-instruktioner finns i Exempel: Konfigurera en tillgänglighetsgrupp som använder Windows-autentisering.

  1. Anslut till den serverinstans som ska vara värd för den primära repliken.

  2. Skapa tillgänglighetsgruppen med hjälp av instruktionen SKAPA TILLGÄNGLIGHETSGRUPPTransact-SQL.

  3. Anslut den nya sekundära repliken till tillgänglighetsgruppen. Mer information finns i Ansluta en sekundär replik till en tillgänglighetsgrupp (SQL Server).

  4. För varje databas i tillgänglighetsgruppen skapar du en sekundär databas genom att återställa de senaste säkerhetskopiorna av den primära databasen med hjälp av RESTORE WITH NORECOVERY. Mer information finns i Exempel: Konfigurera en tillgänglighetsgrupp med Windows-autentisering (Transact-SQL), med början i steget som återställer databassäkerhetskopian.

  5. Anslut varje ny sekundär databas till tillgänglighetsgruppen. Mer information finns i Ansluta en sekundär replik till en tillgänglighetsgrupp (SQL Server).

Exempel: Konfigurera en tillgänglighetsgrupp som använder Windows-autentisering

Det här exemplet skapar ett exempel på konfigurationsproceduren för AlwaysOn-tillgänglighetsgrupper som använder Transact-SQL för att konfigurera databasspeglingsslutpunkter som använder Windows-autentisering och för att skapa och konfigurera en tillgänglighetsgrupp och dess sekundära databaser.

Det här exemplet innehåller följande avsnitt:

Förutsättningar för att använda exempelkonfigurationsproceduren

Den här exempelproceduren har följande krav:

  • Serverinstanserna måste ha stöd för AlwaysOn-tillgänglighetsgrupper. Mer information finns i krav, begränsningar och rekommendationer för AlwaysOn-tillgänglighetsgrupper (SQL Server).

  • Två exempeldatabaser, MyDb1 och MyDb2, måste finnas på den serverinstans som ska vara värd för den primära repliken. Följande kodexempel skapar och konfigurerar dessa två databaser och skapar en fullständig säkerhetskopia av var och en. Kör dessa kodexempel på den serverinstans där du tänker skapa exempeltillgänglighetsgruppen. Den här serverinstansen är värd för den första primära repliken av exempeltillgänglighetsgruppen.

    1. Följande Transact-SQL exempel skapar dessa databaser och ändrar dem för att använda den fullständiga återställningsmodellen:

      -- 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. I följande kodexempel skapas en fullständig databassäkerhetskopia av MyDb1 och MyDb2. I det här kodexemplet används en fiktiv säkerhetskopieringsresurs, \\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]

Exempel på konfigurationsprocedur

I den här exempelkonfigurationen skapas tillgänglighetsrepliken på två fristående serverinstanser vars tjänstkonton körs under olika men betrodda domäner (DOMAIN1 och DOMAIN2).

I följande tabell sammanfattas de värden som används i den här exempelkonfigurationen.

Inledande roll Systemet Värdinstans för SQL Server
Primär COMPUTER01 AgHostInstance
Sekundär COMPUTER02 Förvald instans.
  1. Skapa en databasspeglingsslutpunkt med namnet dbm_endpoint på den serverinstans där du planerar att skapa tillgänglighetsgruppen (det här är en instans med namnet AgHostInstanceCOMPUTER01). Den här slutpunkten använder port 7022. Observera att den serverinstans där du skapar tillgänglighetsgruppen är värd för den primära repliken.

    -- 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. Skapa en slutpunkt dbm_endpoint på den serverinstans som ska vara värd för den sekundära repliken (detta är standardserverinstansen på COMPUTER02). Den här slutpunkten använder 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. Anmärkning

    Om tjänstkontona för de serverinstanser som ska vara värd för dina tillgänglighetsrepliker körs under samma domänkonto är det här steget onödigt. Hoppa över det och gå direkt till nästa steg.

    Om tjänstkontona för serverinstanserna körs under olika domänanvändare skapar du en inloggning för den andra serverinstansen på varje serverinstans och ger den här inloggningsbehörigheten för åtkomst till den lokala databasens speglingsslutpunkt.

    I följande kodexempel visas Transact-SQL instruktioner för att skapa en inloggning och ge den behörighet på en slutpunkt. Domänkontot för fjärrserverinstansen visas här som 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. Skapa tillgänglighetsgruppen på den serverinstans där användardatabaserna finns.

    I följande kodexempel skapas en tillgänglighetsgrupp med namnet MyAG på den serverinstans där exempeldatabaserna MyDb1 och MyDb2 skapades. Den lokala serverinstansen , AgHostInstanceCOMPUTER01 anges först. Den här instansen kommer att hysa den första primära repliken. En fjärrserverinstans, standardserverinstansen på COMPUTER02, anges som värd för en sekundär replik. Båda repliker för tillgänglighet är konfigurerade för att använda asynkront-kommittläge med manuell växling (för asynkron-kommittreplik innebär manuell växling framtvingad växling med möjlig dataförlust).

    -- 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  
    

    Ytterligare Transact-SQL kodexempel för att skapa en tillgänglighetsgrupp finns i SKAPA TILLGÄNGLIGHETSGRUPP (Transact-SQL).

  5. På den serverinstans som är värd för den sekundära repliken ansluter du den sekundära repliken till tillgänglighetsgruppen.

    I följande kodexempel kopplas den sekundära repliken COMPUTER02 till MyAG tillgänglighetsgruppen.

    -- On the server instance that hosts the secondary replica,   
    -- join the secondary replica to the availability group:  
    ALTER AVAILABILITY GROUP MyAG JOIN;  
    GO  
    
  6. På den serverinstans som är värd för den sekundära repliken skapar du de sekundära databaserna.

    I följande kodexempel skapas de sekundära databaserna MyDb1 och MyDb2 genom att återställa databassäkerhetskopior med HJÄLP av 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. Säkerhetskopiera transaktionsloggen på var och en av de primära databaserna på den serverinstans som är värd för den primära repliken.

    Viktigt!

    När du konfigurerar en verklig tillgänglighetsgrupp rekommenderar vi att du pausar loggsäkerhetskopieringen för dina primära databaser innan du utför den här loggsäkerhetskopian tills du har anslutit motsvarande sekundära databaser till tillgänglighetsgruppen.

    I följande kodexempel skapas en säkerhetskopia av transaktionsloggen på MyDb1 och på 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
    

    Tips/Råd

    Vanligtvis måste en loggsäkerhetskopia göras på varje primär databas och sedan återställas på motsvarande sekundära databas (med HJÄLP av WITH NORECOVERY). Den här loggsäkerhetskopian kan dock vara onödig om databasen just har skapats och ingen loggsäkerhetskopia har gjorts ännu eller om återställningsmodellen just har ändrats från SIMPLE till FULL.

  8. På den serverinstans som är värd för den sekundära repliken använder du loggsäkerhetskopior på de sekundära databaserna.

    Följande kodexempel tillämpar säkerhetskopior på sekundära MyDb1 - och MyDb2-databaser genom att återställa databassäkerhetskopior med HJÄLP av RESTORE WITH NORECOVERY.

    Viktigt!

    När du förbereder en faktisk sekundär databas, måste du tillämpa varje loggbackup som tagits sedan den databassäkerhetskopia som du använde för att skapa den sekundära databasen, börjar med den tidigaste och alltid använda RESTORE WITH NORECOVERY. Om du återställer både fullständiga och differentiella databassäkerhetskopieringar behöver du naturligtvis bara använda loggsäkerhetskopiorna som görs efter differentiell säkerhetskopiering.

    -- 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. På den serverinstans som är värd för den sekundära repliken ansluter du de nya sekundära databaserna till tillgänglighetsgruppen.

    I följande kodexempel ansluter du den sekundära MyDb1-databasen och sedan de sekundära MyDb2-databaserna till myAG-tillgänglighetsgruppen .

    -- 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  
    

Komplett kodexempel för exempelkonfigurationsprocedur

I följande exempel sammanfogas kodexemplen från alla steg i exempelkonfigurationsproceduren. I följande tabell sammanfattades de platshållarvärden som används i det här kodexemplet. Mer information om stegen i det här kodexemplet finns i Krav för att använda exempelkonfigurationsproceduren och exempelkonfigurationsproceduren tidigare i det här avsnittet.

Platshållare Beskrivning
\\ FILSERVER\SQLbackups Fiktiv säkerhetskopieringsdelning.
\\ FILSERVER\SQLbackups\MyDb1.bak Säkerhetskopieringsfil för MyDb1.
\\ FILSERVER\SQLbackups\MyDb2.bak Säkerhetskopieringsfil för MyDb2.
7022 Portnummer som tilldelats varje databasspeglingsslutpunkt.
COMPUTER01\AgHostInstance Serverinstans som är värd för den första primära repliken.
COMPUTER02 Serverinstans som är värd för den första sekundära repliken. Det här är standardserverinstansen på COMPUTER02.
dbm_endpoint Namn som angetts för varje databasspeglingsslutpunkt.
MyAG Namn på exempeltillgänglighetsgrupp.
MyDb1 Namnet på den första exempeldatabasen.
MyDb2 Namnet på den andra exempeldatabasen.
DOMAIN1\user1 Tjänstkonto för den serverinstans som ska vara värd för den första primära repliken.
DOMAIN2\user2 Tjänstkonto för serverinstansen som ska vara värd för den första sekundära repliken.
TCP:// COMPUTER01.Adventure-Works.com:7022 Slutpunkts-URL för AgHostInstance-instansen av SQL Server på COMPUTER01.
TCP:// COMPUTER02.Adventure-Works.com:5022 Slutpunkts-URL för standardinstansen av SQL Server på COMPUTER02.

Anmärkning

Ytterligare Transact-SQL kodexempel för att skapa en tillgänglighetsgrupp finns i SKAPA TILLGÄNGLIGHETSGRUPP (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  

Relaterade uppgifter

Konfigurera egenskaper för tillgänglighetsgrupp och repliker

Slutför konfiguration av tillgänglighetsgrupp

Alternativa sätt att skapa en tillgänglighetsgrupp

Aktivera AlwaysOn-tillgänglighetsgrupper

Konfigurera en databasspeglingsslutpunkt

Felsökning av konfigurationen för Always On-tillgänglighetsgrupper

Relaterat innehåll

Se även

Databas-speglingsslutpunkt (SQL Server)
översikt över AlwaysOn-tillgänglighetsgrupper (SQL Server)
Lyssnare för tillgänglighetsgrupper, klientanslutning och applikationsomkoppling (SQL Server)
krav, begränsningar och rekommendationer för AlwaysOn-tillgänglighetsgrupper (SQL Server)