Sdílet prostřednictvím


Kopírování transakční konzistentní kopie databáze ve službě Azure SQL Database

Platí pro:Azure SQL Database

Azure SQL Database nabízí několik metod pro vytvoření kopie existující databáze na stejném logickém serveru Azure SQL Database nebo na jiném logickém serveru. Databázi můžete zkopírovat pomocí webu Azure Portal, PowerShellu, Azure CLI nebo Jazyka Transact-SQL.

Poznámka:

ID Microsoft Entra se dříve označovalo jako Azure Active Directory (Azure AD).

Přehled

Kopie databáze je transakční konzistentní snímek zdrojové databáze v okamžiku, kdy je inicializován požadavek na kopírování. Pro kopii můžete vybrat stejný logický server nebo jiný logický server. Můžete také zvolit, jestli chcete zachovat redundanci zálohování a velikost výpočetních prostředků zdrojové databáze, nebo použít jinou redundanci úložiště zálohování nebo velikost výpočetních prostředků ve stejné úrovni služby. Databázi na úrovni služby Standard je také možné zkopírovat na úroveň Standard nebo Pro obecné účely a databázi v úrovni služby Premium na úroveň Premium nebo Pro důležité obchodní informace.

Po dokončení kopírování je nová databáze plně funkční a nezávislá databáze pro zdrojovou databázi. Přihlašovací údaje, uživatelé a oprávnění v kopírované databázi jsou spravovány nezávisle na zdrojové databázi. Kopie se vytvoří pomocí technologie geografické replikace. Po dokončení počáteční repliky se připojení geografické replikace automaticky ukončí. Všechny požadavky pro používání geografické replikace se vztahují i na operaci kopírování databáze. Podrobnosti najdete v přehledu aktivní geografické replikace.

Poznámka:

Azure Portal, PowerShell a Azure CLI nepodporují kopírování databáze do jiného předplatného.

Kopírování databáze pro databáze Hyperscale

U databází na úrovni služby Hyperscale cílová databáze určuje, jestli je kopie rychlá kopie, nebo kopírování velikosti dat:

  • Rychlé kopírování: Po dokončení kopírování ve stejné oblasti jako zdroj se kopie vytvoří ze snímků objektů blob, tato kopie je rychlá operace bez ohledu na velikost databáze.

  • Kopie velikosti dat: Pokud je cílová databáze v jiné oblasti než zdroj nebo pokud se redundance úložiště záloh databáze (místní, zónová, geografická) od cíle liší, operace kopírování je operace kopírování operace velikost dat. Doba kopírování není přímo úměrná velikosti, protože objekty blob serveru stránky se kopírují paralelně.

Přihlášení v kopii databáze

Když zkopírujete databázi na stejný logický server, můžete pro obě databáze použít stejná přihlášení. Objekt zabezpečení, který použijete ke kopírování databáze, se stane vlastníkem databáze v nové databázi.

Při kopírování databáze na jiný logický server se objekt zabezpečení, který inicioval operaci kopírování na cílovém logickém serveru, stane vlastníkem nové databáze.

Bez ohledu na cílový server se všichni uživatelé databáze, oprávnění a identifikátory zabezpečení (SID) zkopírují do kopie databáze. Použití uživatelů databáze s omezením pro přístup k datům zajistí, že zkopírovaná databáze bude mít stejné přihlašovací údaje uživatele, takže po dokončení kopie budete mít okamžitý přístup se stejnými přihlašovacími údaji.

Pokud používáte pro přístup k datům přihlášení na úrovni serveru a kopírujete databázi na jiný server, nemusí přístup založený na přihlášení fungovat. K tomu může dojít, protože přihlášení na cílovém logickém serveru neexistují, nebo protože se tato hesla a identifikátory zabezpečení (SID) liší. Další informace o správě přihlášení při kopírování databáze na jiný server najdete v tématu Konfigurace a správa zabezpečení služby Azure SQL Database pro geografické obnovení nebo převzetí služeb při selhání. Po úspěšné operaci kopírování na jiný logický server a před opětovným mapováním jiných uživatelů se k zkopírované databázi může přihlásit pouze přihlášení přidružené k vlastníkovi databáze nebo se správce serveru může přihlásit ke zkopírované databázi. Pokud chcete po dokončení operace kopírování vyřešit přihlášení a vytvořit přístup k datům, přečtěte si téma Řešení přihlášení.

Kopírování databáze

Databázi můžete zkopírovat pomocí PowerShellu, Azure CLI a Jazyka Transact-SQL (T-SQL).

Pokud chcete zkopírovat databázi pomocí webu Azure Portal, otevřete stránku databáze a pak zvolte Kopírovat , aby se otevřela stránka Vytvořit databázi SQL – Kopírování databáze . Vyplňte hodnoty cílového logického serveru, do kterého chcete databázi zkopírovat.

Snímek obrazovky webu Azure Portal se zvýrazněnou možností kopírování databáze na stránce přehledu databáze

Kopírování databáze pomocí Transact-SQL

Přihlaste se k databázi master pomocí přihlášení správce serveru nebo přihlášení, které vytvořilo databázi, kterou chcete zkopírovat. Aby kopírování databáze proběhlo úspěšně, musí být přihlášení, která nejsou správcem serveru, členy role dbmanager . Další informace o přihlášeních a připojování k logickému serveru naleznete v tématu Autorizace přístupu k databázi.

Začněte kopírovat zdrojovou databázi pomocí příkazu CREATE DATABASE ... AS COPY OF – příkaz. Příkaz T-SQL pokračuje v provozu, dokud se nedokoní operace kopírování databáze.

Tato část obsahuje Transact-SQL příkazy pro následující operace:

Poznámka:

Ukončení příkazu T-SQL neukončí operaci kopírování databáze. Pokud chcete operaci ukončit, odstraňte cílovou databázi.

Kopírování na stejný logický server

Přihlaste se k databázi master pomocí přihlášení správce serveru nebo přihlášení, které vytvořilo databázi, kterou chcete zkopírovat. Aby kopírování databáze proběhlo úspěšně, musí být přihlášení, která nejsou správcem serveru, členy role dbmanager .

Tento příkaz zkopíruje Database1 do nové databáze s názvem Database2 na stejném logickém serveru. V závislosti na velikosti databáze může dokončení operace kopírování nějakou dobu trvat.

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

Kopírování do elastického fondu

Přihlaste se k databázi master pomocí přihlášení správce serveru nebo přihlášení, které vytvořilo databázi, kterou chcete zkopírovat. Aby kopírování databáze proběhlo úspěšně, musí být přihlášení, která nejsou správcem serveru, členy role dbmanager .

Tento příkaz zkopíruje Database1 do nové databáze pojmenované Database2 v elastickém fondu s názvem pool1. V závislosti na velikosti databáze může dokončení operace kopírování nějakou dobu trvat.

Database1 může být jedna databáze nebo databáze ve fondu. Kopírování mezi různými fondy vrstev se podporuje, ale některé kopie mezi vrstvami selžou. Můžete například zkopírovat databázi s jedním nebo elastickým standardem do fondu pro obecné účely, ale nemůžete kopírovat standardní elastickou databázi do fondu úrovně Premium.

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

Kopírování na jiný logický server

Připojte se k master databázi cílového logického serveru, kde se má nová databáze vytvořit. Použijte přihlašovací jméno a heslo stejné jako jméno a heslo vlastníka zdrojové databáze na zdrojovém logickém serveru. Přihlášení na cílovém logickém serveru musí být také členem dbmanager role, nebo musí být přihlášení správcem serveru.

Tento příkaz zkopíruje Database1 na server1 do nové databáze s názvem Database2 v server2. V závislosti na velikosti databáze může dokončení operace kopírování nějakou dobu trvat.

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

Důležité

Obě brány firewall logického serveru musí být nakonfigurované tak, aby povolovaly příchozí připojení z IP adresy klienta, který vydává příkaz T-SQL CREATE DATABASE ... AS COPY OF. Pokud chcete určit zdrojovou IP adresu aktuálního připojení, spusťte: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Poznámka:

Kopírování databáze pomocí T-SQL se nepodporuje při připojování k cílovému logickému serveru přes privátní koncový bod. Pokud je nakonfigurovaný privátní koncový bod, ale je povolený přístup k veřejné síti, podporuje se kopírování databáze při připojení k cílovému logickému serveru z veřejné IP adresy pomocí ověřování SQL. Po dokončení operace kopírování je možné veřejný přístup zamítnout.

Podobně následující příkaz zkopíruje Database1 na server1 do nové databáze s názvem Database2 v elastickém fondu s názvem pool2v server2.

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

Kopírování do jiného předplatného

Pomocí kroků v části Kopírování databáze SQL do jiného logického serveru oddílu můžete zkopírovat databázi na logický server v jiném předplatném pomocí T-SQL. Ujistěte se, že používáte přihlášení se stejným názvem a heslem jako vlastník databáze zdrojové databáze. Kromě toho musí být přihlášení členem role dbmanager nebo správcem serveru na zdrojovém i cílovém logickém serveru.

Tip

Při kopírování databází ve stejném tenantovi Microsoft Entra ID se autorizace na zdrojových a cílových logických serverech zjednoduší, pokud zahájíte příkaz kopírování pomocí přihlášení pro ověřování s dostatečným přístupem na obou logických serverech. Minimální nezbytná úroveň oprávnění je členství v roli dbmanager v databázi master na obou logických serverech. Můžete například použít přihlášení Microsoft Entra ID, které je členem skupiny určené jako správce serveru na obou logických serverech.

V následujících skriptech je přihlašovací jméno, které se má zkopírovat, loginname.

Nejprve se připojte k master databázi zdrojového logického serveru. Vytvořte přihlášení a uživatele v master databázi zdrojového logického serveru Azure SQL Database.

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

Připojte se ke zdrojové uživatelské databázi. Dále ve zdrojové uživatelské databázi vytvořte uživatele ve zdrojové databázi a přidejte ho do role databáze dbowner v databázi.

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

Dále vyhledejte identifikátor zabezpečení (SID) uživatele loginname z master databáze zdrojového logického serveru.

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

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

Spusťte další skript na master databázi nového nebo cílového logického serveru. Nejprve vytvořte přihlašovací jméno a uživatele v master databázi cílového logického serveru a přidejte ho do role serveru dbmanager. Zadejte <strong password>a nahraďte <SID of loginname login on source server> identifikátorem SID ze zdrojového logického serveru.

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

V master databázi cílového logického serveru vytvořte novou databázi. Nahraďte new_database_name požadovaným názvem. Nahraďte source_server_name a source_database_name názvy zdroji.

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

Tip

Kopírování databáze z předplatného v jiné organizaci (tenantovi) Azure je podporováno pouze, pokud se používá T-SQL a přihlášení pomocí ověřování SQL pro přihlášení k cílovému logickému serveru. Vytvoření kopie databáze na logickém serveru v jiném tenantovi Azure není podporováno ověřování Microsoft Entra pro Azure SQL.

Monitorování průběhu operace kopírování

Sledujte proces kopírování dotazováním zobrazení sys.databases, sys.dm_database_copies a sys.dm_operation_status . Zatímco probíhá kopírování, state_desc sloupec sys.databases zobrazení nové databáze je nastaven na COPYINGhodnotu .

  • Pokud kopírování selže, state_desc nastaví se sloupec sys.databases zobrazení nové databáze na SUSPECThodnotu . Spusťte příkaz DROP v nové databázi a zkuste to znovu později.
  • Pokud kopírování proběhne úspěšně, state_desc nastaví se sloupec sys.databases zobrazení nové databáze na ONLINEhodnotu . Kopírování je hotové a nová databáze je běžná databáze, kterou je možné změnit nezávisle na zdrojové databázi.

Poznámka:

Pokud se rozhodnete zrušit kopírování, zatímco probíhá, spusťte v nové databázi příkaz DROP DATABASE .

Důležité

Pokud potřebujete vytvořit kopii s podstatně menším cílem služby než zdroj, nemusí mít cílová databáze dostatek prostředků k dokončení procesu počátečního zpracování a může způsobit selhání operace kopírování. V tomto scénáři použijte žádost o geografické obnovení k vytvoření kopie na jiném logickém serveru nebo jiné oblasti. Další informace najdete v tématu Obnovení služby Azure SQL Database pomocí záloh databází.

Oprávnění

Pokud chcete vytvořit kopii databáze, musíte být v následujících rolích:

  • Vlastník předplatného nebo
  • Role přispěvatele SQL Serveru nebo
  • Vlastní role na zdrojovém logickém serveru s následujícími oprávněními:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write a
  • Vlastní role na cílovém logickém serveru s následujícími oprávněními:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

Pokud chcete zrušit kopii databáze, musíte být v následujících rolích:

  • Vlastník předplatného nebo
  • Role přispěvatele SQL Serveru nebo
  • Vlastní role v cílové databázi s následujícím oprávněním:
    • Microsoft.Sql/servers/databases/delete

Ke správě kopírování databáze pomocí webu Azure Portal potřebujete také následující oprávnění:

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

Pokud chcete zobrazit operace v rámci nasazení ve skupině prostředků na portálu, operace napříč několika poskytovateli prostředků, včetně operací SQL, potřebujete tato další oprávnění:

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

Řešení problémů s přihlášeními

Jakmile bude nová databáze na cílovém logickém serveru online, pomocí příkazu ALTER USER znovu namapujte uživatele z nové databáze na přihlášení na cílovém logickém serveru. Pokud chcete vyřešit osamocené uživatele, přečtěte si téma Řešení potíží se osamocenými uživateli. Viz také na Konfiguraci a správu zabezpečení služby Azure SQL Database pro geografické obnovení nebo obnovení služeb při selhání.

Všichni uživatelé v nové databázi si zachovají oprávnění, která měli ve zdrojové databázi. Uživatel, který spustil kopii databáze, se stane vlastníkem databáze nové databáze. Po úspěšném kopírování a před opětovným namapováním jiných uživatelů se k nové databázi může přihlásit jenom vlastník databáze.

Informace o správě uživatelů a přihlášení, když kopírujete databázi na jiný logický server, najdete v tématu Konfigurace a správa zabezpečení služby Azure SQL Database pro obnovu po geografické poruše nebo převzetí služeb při selhání.

Chyby kopírování databáze

Při kopírování databáze v Azure SQL Database může docházet k následujícím chybám. Další informace najdete v tématu Kopírování transakční konzistentní kopie databáze ve službě Azure SQL Database.

Kód chyby Závažnost Popis
40635 16 Klient s IP adresou %.*ls je dočasně zakázaný.
40637 16 Vytvoření kopie databáze je momentálně zakázáno.
40561 16 Kopírování databáze selhalo. Zdrojová nebo cílová databáze neexistuje.
40562 16 Kopírování databáze selhalo. Zdrojová databáze byla vyřazena.
40563 16 Kopírování databáze selhalo. Cílová databáze byla vyřazena.
40564 16 Kopírování databáze selhalo kvůli vnitřní chybě. Zahoďte cílovou databázi a zkuste to znovu.
40565 16 Kopírování databáze selhalo. Není povoleno více než 1 souběžné kopírování databáze ze stejného zdroje. Zahoďte cílovou databázi a zkuste to znovu později.
40566 16 Kopírování databáze selhalo kvůli vnitřní chybě. Zahoďte cílovou databázi a zkuste to znovu.
40567 16 Kopírování databáze selhalo kvůli vnitřní chybě. Zahoďte cílovou databázi a zkuste to znovu.
40568 16 Kopírování databáze selhalo. Zdrojová databáze začala být nedostupná. Zahoďte cílovou databázi a zkuste to znovu.
40569 16 Kopírování databáze selhalo. Cílová databáze začala být nedostupná. Zahoďte cílovou databázi a zkuste to znovu.
40570 16 Kopírování databáze selhalo kvůli vnitřní chybě. Zahoďte cílovou databázi a zkuste to znovu později.
40571 16 Kopírování databáze selhalo kvůli vnitřní chybě. Zahoďte cílovou databázi a zkuste to znovu později.