Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Anslut till den serverinstans som ska vara värd för den primära repliken.
Skapa tillgänglighetsgruppen med hjälp av instruktionen SKAPA TILLGÄNGLIGHETSGRUPPTransact-SQL.
Anslut den nya sekundära repliken till tillgänglighetsgruppen. Mer information finns i Ansluta en sekundär replik till en tillgänglighetsgrupp (SQL Server).
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.
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.
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
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
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. |
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
AgHostInstance
påCOMPUTER01
). 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
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
-
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
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 ,
AgHostInstance
på COMPUTER01 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).
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
tillMyAG
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
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
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.
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
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
Ändra tillgänglighetsläget för en tillgänglighetsreplik (SQL Server)
Ändra failover-läget för en tillgänglighetsreplik (SQL Server)
Skapa eller konfigurera en tillgänglighetsgrupplyssnare (SQL Server)
Ange slutpunkts-URL:en när du lägger till eller ändrar en tillgänglighetsreplik (SQL Server)
Konfigurera säkerhetskopiering av tillgänglighetsrepliker (SQL Server)
Konfigurera Read-Only åtkomstinställningar på en tillgänglighetsreplika (SQL Server)
Konfigurera Read-Only routning för en tillgänglighetsgrupp (SQL Server)
Ändra Session-Timeout period för en tillgänglighetsreplik (SQL Server)
Slutför konfiguration av tillgänglighetsgrupp
ansluta en sekundär replik till en tillgänglighetsgrupp (SQL Server)
Förbereda en sekundär databas manuellt för en tillgänglighetsgrupp (SQL Server)
Ansluta en sekundär databas till en tillgänglighetsgrupp (SQL Server)
Skapa eller konfigurera en tillgänglighetsgrupplyssnare (SQL Server)
Alternativa sätt att skapa en tillgänglighetsgrupp
Använd guiden för tillgänglighetsgrupper (SQL Server Management Studio)
Använd dialogrutan Ny tillgänglighetsgrupp (SQL Server Management Studio)
Aktivera AlwaysOn-tillgänglighetsgrupper
Konfigurera en databasspeglingsslutpunkt
Skapa en databasspeglingsslutpunkt för AlwaysOn-tillgänglighetsgrupper (SQL Server PowerShell)
Skapa en databasspeglingsslutpunkt för Windows-autentisering (Transact-SQL)
Använda certifikat för en databasspeglingsslutpunkt (Transact-SQL)
Ange slutpunkts-URL:en när du lägger till eller ändrar en tillgänglighetsreplik (SQL Server)
Felsökning av konfigurationen för Always On-tillgänglighetsgrupper
Felsöka Konfiguration av AlwaysOn-tillgänglighetsgrupper (SQL Server)
Felsöka en misslyckad Add-File åtgärd (Always On-tillgänglighetsgrupper)
Relaterat innehåll
Bloggar:
AlwaysOn – HADRON Learning Series: Användning av arbetspooler för HADRON-aktiverade databaser
SQL Server Always On Team-blogg: Den officiella bloggen för SQL Server Always On-teamet
vitarbeten:
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)