Dela via


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 logiska Azure SQL Database-server eller en annan logisk server. Du kan kopiera en databas med hjälp av Azure-portalen, PowerShell, Azure CLI eller Transact-SQL.

Obs

Microsoft Entra ID tidigare kallades Azure Active Directory (Azure AD).

Överblick

En databaskopia är en transaktionsmässigt konsekvent ögonblicksbild av källdatabasen vid den tidpunkt då kopieringsbegäran initieras. Du kan välja samma logiska server eller en annan logisk 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å. Det går också att kopiera en databas på tjänstnivån Standard till antingen standard- eller generell användningsnivå och en databas på Premium-tjänstnivån till antingen premium- eller affärskritisk nivå.

När kopian är klar är den nya databasen en fullständigt funktionell och oberoende databas för källdatabasen. Inloggningar, användare och behörigheter i den kopierade databasen hanteras oberoende av källdatabasen. Kopian skapas med hjälp av geo-replikeringsteknik. När replikutsättningen är klar avslutas georeplikeringslänken automatiskt. Alla krav för att använda geo-replikering gäller för databaskopieringsåtgärden. Se Översikt över aktiv geo-replikering för mer information.

Obs

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

Databaskopiering för Hyperskala-databaser

För databaser på tjänstnivån Hyperskalaavgö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 blobbar. Den här kopian är en snabb åtgärd oavsett databasstorlek.

  • Storleksberoende datakopiering: När måldatabasen ligger i en annan region än källdatabasen eller om säkerhetskopieringslagringens redundans (lokal, zonindelad, geo) för målet skiljer sig från källdatabasen, är kopieringsåtgärden beroende av datamängden. Kopieringstiden är inte direkt proportionell mot storleken eftersom sidserverblobbar kopieras parallellt.

Inloggningar i databaskopian

När du kopierar en databas till samma logiska 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 logisk server blir säkerhetsobjektet som initierade kopieringsåtgärden på den logiska 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 den inloggningsbaserade åtkomsten inte fungerar. Detta kan inträffa eftersom inloggningarna inte finns på den logiska 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 Konfigurera och hantera Azure SQL Database-säkerhet för geo-återställning eller redundans. När kopieringsåtgärden till en annan logisk 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 kopieringen har slutförts finns i Lösa inloggningar.

Kopiera en databas

Du kan kopiera en databas med hjälp av PowerShell, Azure CLI och Transact-SQL (T-SQL).

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 den logiska målserver som du vill kopiera databasen till.

Skärmbild av Azure-portalen med alternativet Databaskopiering markerat på databasöversiktssidan.

Kopiera en databas med Transact-SQL

Logga in på master-databasen med inloggningen för serveradministratören 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- roll. Mer information om inloggningar och anslutning till den logiska servern finns i Auktorisera databasåtkomst.

Börja kopiera källdatabasen med CREATE DATABASE ... som en kopia av-instruktionen. T-SQL-instruktionen fortsätter att köras tills databaskopieringsåtgärden är klar.

Det här avsnittet innehåller Transact-SQL kommandon för följande åtgärder:

Obs

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

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

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

-- 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 inloggningen för serveradministratören eller inloggningen som skapade databasen som du vill kopiera. För att databaskopieringen ska lyckas måste användare som inte är serveradministratörer vara medlemmar i rollen dbmanager.

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

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

Anslut till den master databasen för den logiska 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å den logiska källservern. Inloggningen på den logiska målservern måste också vara medlem i dbmanager--rollen eller ha en serveradministratörsinloggning.

Det här kommandot kopierar Database1server1 till en ny databas med namnet Database2server2. Beroende på databasens storlek kan kopieringsåtgärden ta lite tid att slutföra.

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

Viktig

Båda brandväggarna för logiska servrar måste konfigureras för att tillåta inkommande anslutning från IP-adressen för klienten som utfärdar T-SQL CREATE DATABASE ... AS COPY OF-kommandot. För att fastställa källans IP-adress för den aktuella anslutningen kör du: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Obs

Databaskopiering med T-SQL stöds inte när du ansluter till den logiska målservern via en privat slutpunkt. Om en privat slutpunkt är konfigurerad men åtkomst till offentligt nätverk tillåts stöds databaskopiering när den är ansluten till den logiska 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 kopierar följande kommando Database1server1 till en ny databas med namnet Database2 i en elastisk pool med namnet pool2server2.

-- Execute on the master database of the target logical 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 logisk server för att kopiera databasen till en logisk 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- roll eller serveradministratör på både käll- och mål logiska servrar.

Tips

När du kopierar databaser i samma Microsoft Entra-ID-klientorganisation förenklas auktoriseringen på de logiska käll- och målservrarna om du initierar kopieringskommandot med en autentiseringsinloggning med tillräcklig åtkomst på båda logiska servrarna. Den minsta nödvändiga åtkomstnivån är medlemskap i dbmanager-rollen i master-databasen på båda de logiska servrarna. 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 logiska servrarna.

I följande skript är inloggningsnamnet som ska kopieras loginname.

Anslut först till den master databasen för den logiska källservern. Skapa en inloggning och användare i databasen master för den logiska Azure SQL Database-källservern.

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

Anslut till källanvändardatabasen. I källanvändardatabasen skapar du sedan användaren i källdatabasen och lägger till den i databasrollen dbowner i databasen.

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

Leta sedan reda på säkerhetsidentifieraren (SID) för användaren loginname från den master databasen för den logiska källservern.

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

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

Kör nästa skript på databasen master för den nya logiska servern eller måldatabasen. Skapa först en inloggning och användare i den master databasen för den logiska målservern och lägg till den i dbmanager-serverrollen. Ange en <strong password>och ersätt <SID of loginname login on source server> med SID från den logiska källservern.

--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 = '<strong password>', 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

Skapa den nya databasen i den master databasen för den logiska målservern. Ersätt new_database_name med önskat namn. Ersätt source_server_name och source_database_name med källans namn.

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

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

Tips

Kopiering av en databas från en prenumeration i en annan Azure-klient stöds endast när du använder T-SQL och en SQL-autentiseringsinloggning för att logga in på den logiska målservern. Det går inte att använda Microsoft Entra-autentisering för att skapa en kopia av en databas på en logisk server i en annan Azure-klient för Azure SQL.

Övervaka förloppet för kopieringsåtgärden

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

  • Om kopieringen misslyckas kommer kolumnen state_desc i sys.databases för den nya databasen att vara inställd på SUSPECT. Kör DROP-instruktionen på den nya databasen och försök igen senare.
  • Om kopieringen lyckas är kolumn state_desc i vyn sys.databases 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.

Obs

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

Viktig

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 logisk server och/eller en annan region. Mer information finns i Återställa en Azure SQL Database med hjälp av databassäkerhetskopior.

Behörigheter

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

  • Prenumerationsägare eller
  • SQL Server-deltagarroll eller
  • Anpassad roll på den logiska källservern med följande behörigheter:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write och
  • Anpassad roll på den logiska 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å den logiska målservern använder du instruktionen ALTER USER för att mappa om användarna från den nya databasen till inloggningar på den logiska målservern. Information om hur du löser överblivna användare finns i Felsöka överblivna användare. Se även Konfigurera och hantera Azure SQL Database-säkerhet för geoåterställning eller failover.

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 logisk server finns i Konfigurera och hantera Azure SQL Database-säkerhet för geo-återställning eller redundans.

Fel vid databaskopiering

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

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