Kopiera en transaktionsmässigt konsekvent kopia av en databas i Azure SQL Database

Gäller för:Azure SQL Database

Azure SQL Database innehåller flera metoder för att skapa en kopia av en befintlig databas på antingen samma server eller en annan server. Du kan kopiera en databas med hjälp av Azure-portalen, PowerShell, Azure CLI eller Transact-SQL.

Kommentar

Microsoft Entra-ID är det nya namnet för Azure Active Directory (Azure AD). Vi uppdaterar dokumentationen just nu.

Översikt

En databaskopia är en transaktionsmässigt konsekvent ögonblicksbild av källdatabasen från och med en tidpunkt efter att kopieringsbegäran har initierats. Du kan välja samma server eller en annan server för kopian. Du kan också välja att behålla säkerhetskopieringsredundansen och beräkningsstorleken för källdatabasen, eller använda en annan redundans och/eller beräkningsstorlek inom samma tjänstnivå. När kopian är klar blir den en fullständigt funktionell, oberoende databas. Inloggningarna, användarna och behörigheterna i den kopierade databasen hanteras oberoende av källdatabasen. Kopian skapas med hjälp av geo-replikeringstekniken. När replikseeding är klar avslutas geo-replikeringslänken automatiskt. Alla krav för användning av geo-replikering gäller för databaskopieringsåtgärden. Mer information finns i Översikt över aktiv geo-replikering.

Kommentar

Azure-portalen, PowerShell och Azure CLI stöder inte databaskopiering till en annan prenumeration.

Databaskopiering för Azure SQL Hyperskala

För Azure SQL Hyperscale avgör måldatabasen om kopian är en snabb kopia eller en datastorlekskopia.

  • Snabb kopiering: När kopian görs i samma region som källan skapas kopian från ögonblicksbilderna av blobar. Den här kopian är en snabb åtgärd oavsett databasstorlek.

  • Datastorlekskopiering: När måldatabasen finns i en annan region än källan eller om redundansen för lagring av säkerhetskopior (lokal, zonindelad, geo) från målet skiljer sig från källdatabasen, är kopieringsåtgärden en datastorleksåtgärd. Kopieringstiden är inte direkt proportionell mot storleken eftersom sidserverblobbar kopieras parallellt.

Inloggningar i databaskopian

När du kopierar en databas till samma server kan samma inloggningar användas på båda databaserna. Säkerhetsobjektet som du använder för att kopiera databasen blir databasägaren för den nya databasen.

När du kopierar en databas till en annan server blir det säkerhetobjekt som initierade kopieringsåtgärden på målservern ägare till den nya databasen.

Oavsett målserver kopieras alla databasanvändare, behörigheter och säkerhetsidentifierare (SID) till databaskopian. Om du använder oberoende databasanvändare för dataåtkomst ser du till att den kopierade databasen har samma användarautentiseringsuppgifter, så att du omedelbart kan komma åt den med samma autentiseringsuppgifter när kopieringen är klar.

Om du använder inloggningar på servernivå för dataåtkomst och kopierar databasen till en annan server kanske inte den inloggningsbaserade åtkomsten fungerar. Detta kan inträffa eftersom inloggningarna inte finns på målservern eller på grund av att dessa lösenord och säkerhetsidentifierare (SID) skiljer sig åt. Mer information om hur du hanterar inloggningar när du kopierar en databas till en annan server finns i Hantera Azure SQL Database-säkerhet efter haveriberedskap. När kopieringsåtgärden till en annan server har slutförts och innan andra användare mappas om kan endast inloggningen som är associerad med databasägaren eller serveradministratören logga in på den kopierade databasen. Information om hur du löser inloggningar och upprättar dataåtkomst när kopieringsåtgärden är klar finns i Lösa inloggningar.

Kopiera med Azure Portal

Om du vill kopiera en databas med hjälp av Azure-portalen öppnar du sidan för databasen och väljer sedan Kopiera för att öppna sidan Skapa SQL Database – Kopiera databas . Fyll i värdena för målservern där du vill kopiera databasen till.

Screenshot of Azure portal, showing Database copy option highlighted on the database overview page.

Kopiera med PowerShell eller Azure CLI

Om du vill kopiera en databas använder du följande exempel.

För PowerShell använder du cmdleten New-AzSqlDatabaseCopy .

Viktigt!

Modulen PowerShell Azure Resource Manager (RM) stöds fortfarande av Azure SQL Database, men all framtida utveckling gäller för Az.Sql-modulen. AzureRM-modulen fortsätter att ta emot felkorrigeringar fram till åtminstone december 2020. Argumenten för kommandona i Az-modulen och i AzureRm-modulerna är väsentligen identiska. Mer information om deras kompatibilitet finns i Introduktion till den nya Azure PowerShell Az-modulen.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

Databaskopian är en asynkron åtgärd, men måldatabasen skapas omedelbart efter att begäran har godkänts. Om du behöver avbryta kopieringsåtgärden medan den fortfarande pågår släpper du måldatabasen med cmdleten Remove-AzSqlDatabase .

Ett fullständigt PowerShell-exempelskript finns i Kopiera en databas till en ny server.

Kopiera med Transact-SQL

Logga in på master databasen med serveradministratörsinloggningen eller inloggningen som skapade databasen som du vill kopiera. För att databaskopian ska lyckas måste inloggningar som inte är serveradministratör vara medlemmar i dbmanager-rollen . Mer information om inloggningar och anslutning till servern finns i Hantera inloggningar.

Börja kopiera källdatabasen med CREATE DATABASE ... SOM KOPIA AV -instruktionen. T-SQL-instruktionen fortsätter att köras tills databaskopieringsåtgärden är klar.

Kommentar

Om du avslutar T-SQL-instruktionen avslutas inte databaskopieringsåtgärden. Om du vill avsluta åtgärden släpper du måldatabasen.

Kopiera till samma server

Logga in på master databasen med serveradministratörsinloggningen eller inloggningen som skapade databasen som du vill kopiera. För att databaskopieringen ska lyckas måste inloggningar som inte är serveradministratör vara medlemmar i dbmanager-rollen .

Det här kommandot kopieras Database1 till en ny databas med namnet Database2 på samma server. Kopieringsåtgärden kan ta lite tid att slutföra beroende på databasens storlek.

-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;

Kopiera till en elastisk pool

Logga in på master databasen med serveradministratörsinloggningen eller inloggningen som skapade databasen som du vill kopiera. För att databaskopieringen ska lyckas måste inloggningar som inte är serveradministratör vara medlemmar i dbmanager-rollen .

Det här kommandot kopierar Database1 till en ny databas med namnet Database2 i en elastisk pool med namnet pool1. Kopieringsåtgärden kan ta lite tid att slutföra beroende på databasens storlek.

Database1 kan vara en enkel databas eller en pooldatabas. Kopiering mellan olika nivåpooler stöds, men vissa kopior på flera nivåer misslyckas. Du kan till exempel kopiera en enkel eller elastisk standarddatabas till en pool för generell användning, men du kan inte kopiera en elastisk standarddatabas till en premiumpool.

-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool1 ));

Kopiera till en annan server

Anslut till master databasen på målservern där den nya databasen ska skapas. Använd en inloggning som har samma namn och lösenord som databasägaren för källdatabasen på källservern. Inloggningen på målservern måste också vara medlem i dbmanager-rollen eller vara serveradministratörens inloggning.

Det här kommandot kopieras Database1 på server1 till en ny databas med namnet Database2 på server2. Kopieringsåtgärden kan ta lite tid att slutföra beroende på databasens storlek.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

Viktigt!

Båda servrarnas brandväggar måste konfigureras för att tillåta inkommande anslutning från IP-adressen för klienten som utfärdar T-SQL CREATE DATABASE ... SOM KOPIA AV kommandot. Kör sys.dm_exec_connections för att fastställa källans IP-adress för den aktuella anslutningen SELECT client_net_address FROM WHERE session_id = @@SPID;

Kommentar

Databaskopiering med T-SQL stöds inte när du ansluter till målservern via en privat slutpunkt. Om en privat slutpunkt har konfigurerats men åtkomst till offentligt nätverk tillåts stöds databaskopiering när den är ansluten till målservern från en offentlig IP-adress med SQL-autentisering. När kopieringsåtgärden är klar kan offentlig åtkomst nekas.

På samma sätt kopieras Database1 kommandot nedan på server1 till en ny databas med namnet Database2 i en elastisk pool med namnet pool2, på server2.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool2 ) );

Kopiera till en annan prenumeration

Du kan använda stegen i avsnittet Kopiera en SQL Database till en annan server för att kopiera databasen till en server i en annan prenumeration med hjälp av T-SQL. Kontrollera att du använder en inloggning som har samma namn och lösenord som databasägaren för källdatabasen. Dessutom måste inloggningen vara medlem i dbmanager-rollen eller en serveradministratör på både käll- och målservrar.

Dricks

När du kopierar databaser i samma Microsoft Entra-ID-klientorganisation förenklas auktoriseringen på käll- och målservrarna om du initierar kopieringskommandot med en autentiseringsinloggning med tillräcklig åtkomst på båda servrarna. Den minsta nödvändiga åtkomstnivån är medlemskap i dbmanager-rollen i databasen på båda servrarna master . Du kan till exempel använda en Microsoft Entra-ID-inloggning som är medlem i en grupp som är utsedd till serveradministratör på båda servrarna.

--Step# 1
--Create login and user in the master database of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 2
--Create the user in the source database and grant dbowner permission to the database.

CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO

--Step# 3
--Capture the SID of the user "loginname" from master database

SELECT [sid] FROM sysusers WHERE [name] = 'loginname';

--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx', SID = [SID of loginname login on source server];
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 5
--Execute the copy of database script from the destination server using the credentials created

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

Dricks

Databaskopiering med T-SQL stöder kopiering av en databas från en prenumeration i en annan Azure-klientorganisation. Detta stöds endast när du använder en SQL-autentiseringsinloggning för att logga in på målservern. Det går inte att skapa en databaskopia på en logisk server i en annan Azure-klientorganisation när Microsoft Entra-autentisering är aktiv (aktiverad) på någon av de logiska käll- eller målservrarna.

Övervaka kopieringsåtgärdens förlopp

Övervaka kopieringsprocessen genom att fråga sys.databases, sys.dm_database_copies och sys.dm_operation_status vyer. Medan kopieringen pågår state_desc är kolumnen i sys.databases vyn för den nya databasen inställd på COPYING.

  • Om kopieringen misslyckas state_desc är kolumnen i sys.databases vyn för den nya databasen inställd på SUSPECT. Kör DROP-instruktionen på den nya databasen och försök igen senare.
  • Om kopieringen lyckas state_desc är kolumnen i sys.databases vyn för den nya databasen inställd på ONLINE. Kopieringen är klar och den nya databasen är en vanlig databas som kan ändras oberoende av källdatabasen.

Kommentar

Om du bestämmer dig för att avbryta kopieringen medan den pågår kör du DROP DATABASE-instruktionen på den nya databasen.

Viktigt!

Om du behöver skapa en kopia med ett betydligt mindre tjänstmål än källan kanske måldatabasen inte har tillräckligt med resurser för att slutföra seeding-processen och det kan leda till att kopieringsåtgärden misslyckas. I det här scenariot använder du en geo-återställningsbegäran för att skapa en kopia på en annan server och/eller en annan region. Mer information finns i Återställa en Azure SQL Database med hjälp av databassäkerhetskopior.

Azure RBAC-roller och behörigheter för att hantera databaskopiering

Om du vill skapa en databaskopia måste du ha följande roller:

  • Prenumerationsägare eller
  • SQL Server-deltagarroll eller
  • Anpassad roll på källservern med följande behörigheter:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write och
  • Anpassad roll på målservern med följande behörigheter:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

Om du vill avbryta en databaskopia måste du ha följande roller:

  • Prenumerationsägare eller
  • SQL Server-deltagarroll eller
  • Anpassad roll i måldatabasen med följande behörighet:
    • Microsoft.Sql/servers/databases/delete

Om du vill hantera databaskopiering med Hjälp av Azure-portalen behöver du även följande behörigheter:

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

Om du vill se åtgärderna under distributioner i resursgruppen på portalen, åtgärder mellan flera resursprovidrar, inklusive SQL-åtgärder, behöver du följande ytterligare behörigheter:

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

Lösa inloggningar

När den nya databasen är online på målservern använder du ALTER USER-instruktionen för att mappa om användarna från den nya databasen till inloggningar på målservern. Information om hur du löser överblivna användare finns i Felsöka överblivna användare. Se även Hantera Azure SQL Database-säkerhet efter haveriberedskap.

Alla användare i den nya databasen behåller de behörigheter som de hade i källdatabasen. Användaren som initierade databaskopian blir databasägaren för den nya databasen. När kopieringen har slutförts och innan andra användare mappas om kan endast databasägaren logga in på den nya databasen.

Mer information om hur du hanterar användare och inloggningar när du kopierar en databas till en annan server finns i Hantera Azure SQL Database-säkerhet efter haveriberedskap.

Fel vid databaskopiering

Följande fel kan uppstå vid kopiering av en databas i Azure SQL Database. Mer information finns i Kopiera en Azure SQL Database.

Felkod Allvarlighetsgrad beskrivning
40635 16 Klienten med IP-adressen %.*ls är tillfälligt inaktiverad.
40637 16 Skapa databaskopiering är för närvarande inaktiverat.
40561 16 Databaskopieringen misslyckades. Käll- eller måldatabasen finns inte.
40562 16 Databaskopieringen misslyckades. Källdatabasen har tagits bort.
40563 16 Databaskopieringen misslyckades. Måldatabasen har tagits bort.
40564 16 Databaskopieringen misslyckades på grund av ett internt fel. Ta bort måldatabasen och försök igen.
40565 16 Databaskopieringen misslyckades. Högst 1 samtidig databaskopiering från samma källa tillåts. Ta bort måldatabasen och försök igen senare.
40566 16 Databaskopieringen misslyckades på grund av ett internt fel. Ta bort måldatabasen och försök igen.
40567 16 Databaskopieringen misslyckades på grund av ett internt fel. Ta bort måldatabasen och försök igen.
40568 16 Databaskopieringen misslyckades. Källdatabasen har blivit otillgänglig. Ta bort måldatabasen och försök igen.
40569 16 Databaskopieringen misslyckades. Måldatabasen har blivit otillgänglig. Ta bort måldatabasen och försök igen.
40570 16 Databaskopieringen misslyckades på grund av ett internt fel. Ta bort måldatabasen och försök igen senare.
40571 16 Databaskopieringen misslyckades på grund av ett internt fel. Ta bort måldatabasen och försök igen senare.