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

Platí pro:Azure SQL Database

Azure SQL Database poskytuje několik metod pro vytvoření kopie existující databáze na stejném serveru nebo jiné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 jako bod v čase po zahájení žádosti o kopírování. Pro kopii můžete vybrat stejný server nebo jiný 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. Existuje několik výjimek, kdy je možné zkopírovat databázi na úrovni služby Standard nebo Pro obecné účely a databázi v úrovni služby Premium je možné zkopírovat do úrovně Premium nebo Pro důležité obchodní informace. Po dokončení kopírování se z ní stane plně funkční nezávislá databáze. 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 Azure SQL Hyperscale

U Azure SQL Hyperscale cílová databáze určuje, jestli je kopie rychlá kopie, nebo kopírování dat s velikostí.

  • 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

Při kopírování databáze na stejný server je možné použít stejná přihlášení v obou databázích. 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ý server se objekt zabezpečení, který inicioval operaci kopírování na cílovém serveru, stává 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 serveru neexistují, nebo protože tato hesla a identifikátory zabezpečení (SID) se liší. Další informace o správě přihlášení při kopírování databáze na jiný server naleznete v tématu Správa zabezpečení služby Azure SQL Database po zotavení po havárii. Po úspěšném dokončení operace kopírování na jiný server a před opětovným namapování 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í s použitím webu Azure Portal

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 serveru, do kterého chcete databázi zkopírovat.

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

Kopírování pomocí PowerShellu nebo Azure CLI

Pokud chcete zkopírovat databázi, použijte následující příklady.

Pro PowerShell použijte rutinu New-AzSqlDatabaseCopy .

Důležité

Azure SQL Database stále podporuje modul Azure Resource Manageru (RM), ale veškerý budoucí vývoj je určený pro modul Az.Sql. Modul AzureRM bude dál dostávat opravy chyb až do alespoň prosince 2020. Argumenty pro příkazy v modulu Az a v modulech AzureRm jsou podstatně identické. Další informace o jejich kompatibilitě najdete v tématu Představení nového modulu Az Azure PowerShellu.

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

Kopie databáze je asynchronní operace, ale cílová databáze se vytvoří okamžitě po přijetí požadavku. Pokud potřebujete operaci kopírování zrušit, i když stále probíhá, odstraňte cílovou databázi pomocí rutiny Remove-AzSqlDatabase .

Úplný ukázkový skript PowerShellu najdete v tématu Kopírování databáze na nový server.

Kopírování pomocí jazyka Transact-SQL

Přihlaste se k master databázi 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 serveru najdete v tématu Správa přihlášení.

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.

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

Přihlaste se k master databázi 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 novou databázi pojmenovanou Database2 na stejné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 master databázi 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ý server

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

Tento příkaz zkopíruje Database1 server1 do nové databáze s názvem Database2 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 server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

Důležité

Brány firewall obou serverů musí být nakonfigurovány tak, aby umožňovaly příchozí připojení z IP adresy klienta vydávajícího T-SQL CREATE DATABASE ... JAKO KOPIE příkazu. 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 při připojování k cílovému serveru přes privátní koncový bod nepodporuje. 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 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 serveru 1 novou databázi pojmenovanou Database2 v rámci elastického fondu s názvem pool2 na serveru2.

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

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

Pomocí kroků v části Kopírování služby SQL Database do jiné části serveru můžete databázi zkopírovat na server v jiném předplatném pomocí jazyka 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ávce serveru na zdrojovém i cílové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 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 serverech. Minimální nezbytná úroveň přístupu je členství v roli dbmanager v master databázi na obou 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 serverech.

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

Tip

Kopírování databáze pomocí T-SQL podporuje kopírování databáze z předplatného v jiném tenantovi Azure. To se podporuje jenom v případě, že k přihlášení k cílovému serveru používáte přihlášení pomocí ověřování SQL. Vytvoření kopie databáze na logickém serveru v jiném tenantovi Azure se nepodporuje, pokud je ověřování Microsoft Entra aktivní (povoleno) na zdrojovém nebo cílovém logickém serveru.

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 serveru nebo jiné oblasti. Další informace najdete v tématu Obnovení služby Azure SQL Database pomocí záloh databází.

Role a oprávnění Azure RBAC ke správě kopírování databáze

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 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 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 serveru online, použijte příkaz ALTER USER k přemapování uživatelů z nové databáze na přihlášení na cílové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é Postup správy zabezpečení služby Azure SQL Database po zotavení po havárii.

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í při kopírování databáze na jiný server najdete v tématu Správa zabezpečení služby Azure SQL Database po zotavení po havárii.

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í databáze služby 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.