Kopieren einer transaktionskonsistenten Kopie einer Datenbank in Azure SQL-Datenbank

GILT FÜR: Azure SQL-Datenbank

Azure SQL-Datenbank bietet verschiedene Methoden, um eine Kopie einer vorhandenen Datenbank auf demselben Server oder auf einem anderen Server zu erstellen. Sie können eine Datenbank über das Azure-Portal, PowerShell, die Azure CLI oder T-SQL kopieren.

Übersicht

Bei einer Datenbankkopie handelt es sich um eine im Hinblick auf Transaktionen konsistente Momentaufnahme der Quelldatenbank zu einem Zeitpunkt, nachdem die Kopieranforderung initiiert wurde. Sie können denselben Server oder einen anderen Server für die Kopie auswählen. Außerdem können Sie die Sicherungsredundanz, die Dienstebene und die Computegröße der Quelldatenbank beibehalten oder eine andere Sicherungsspeicherredundanz und/oder Computegröße innerhalb derselben oder einer anderen Dienstebene verwenden. Nachdem der Kopiervorgang abgeschlossen ist, wird die Kopie zu einer voll funktionsfähigen, unabhängigen Datenbank. Die Anmeldungen, Benutzer und Berechtigungen in der kopierten Datenbank werden unabhängig von der Quelldatenbank verwaltet. Die Kopie wird mithilfe der Georeplikationstechnik erstellt. Sobald das Replikat-Seeding abgeschlossen ist, wird der Georeplikationslink automatisch beendet. Alle Anforderungen zur Nutzung der Georeplikation gelten für den Datenbank-Kopiervorgang. Weitere Informationen finden Sie unter Aktive Georeplikation – Übersicht.

Hinweis

Die konfigurierbare Sicherungsspeicherredundanz von Azure SQL-Datenbank ist zurzeit nur in der Azure-Region „Brasilien, Süden“ als Public Preview und in der Region „Asien, Südosten“ allgemein verfügbar. Wird die Quelldatenbank mit lokal redundanter oder zonenredundanter Sicherungsspeicherredundanz erstellt, wird in der Vorschauversion das Kopieren einer Datenbank auf einen Server in einer anderen Azure-Region nicht unterstützt.

Datenbankkopie für Azure SQL Hyperscale

Für Azure SQL Hyperscale bestimmt die Zieldatenbank, ob es sich bei der Kopie um eine schnelle Kopie oder um eine Kopie der Größe der Daten handelt.

Schnelles Kopieren: Wenn der Kopiervorgang in derselben Region wie die Quelle erfolgt, wird die Kopie aus den Momentaufnahmen von Blobs erstellt. Diese Kopie ist unabhängig von der Datenbankgröße ein schneller Vorgang.

Kopie der Größe der Daten: Wenn sich die Zieldatenbank in einer anderen Region befindet als die Quelldatenbank oder wenn sich die Redundanz des Datenbanksicherungsspeichers (lokal, zonenbasiert, geografisch) der Zieldatenbank von der der Quelldatenbank unterscheidet, ist der Kopiervorgang ein Vorgang der Größe der Daten. Die für das Kopieren benötigte Zeit ist nicht direkt proportional zur Größe, da Seitenserverblobs parallel kopiert werden.

Anmeldungen in der Datenbankkopie

Wenn Sie eine Datenbank auf denselben Server kopieren, können für beide Datenbanken dieselben Anmeldedaten verwendet werden. Der Sicherheitsprinzipal, den Sie zum Kopieren der Datenbank verwenden, wird zum Datenbankbesitzer der neuen Datenbank.

Wenn Sie eine Datenbank auf einen anderen Server kopieren, wird der Sicherheitsprinzipal, der den Kopiervorgang auf den Zielserver initiiert hat, zum Besitzer der neuen Datenbank.

Ungeachtet des Zielservers werden alle Datenbankbenutzer, ihre Berechtigungen und ihre Sicherheits-IDs (SIDs) in die Datenbankkopie kopiert. Durch die Verwendung von eigenständigen Datenbankbenutzern für den Datenzugriff stellen Sie sicher, dass die kopierte Datenbank die gleichen Benutzeranmeldeinformationen verwendet, sodass sofort nach Abschluss des Kopiervorgang ein Zugriff mit denselben Anmeldeinformationen möglich ist.

Wenn Sie Anmeldungen auf Serverebene für den Datenzugriff verwenden und die Datenbank auf einen anderen Server kopieren, funktioniert der anmeldungsbasierte Zugriff möglicherweise nicht. Dies kann der Fall sein, wenn Anmeldungen auf dem Zielserver nicht vorhanden oder Kennwörter und Sicherheits-IDs (SIDs) unterschiedlich sind. Informationen zum Verwalten von Anmeldungen beim Kopieren einer Datenbank auf einen anderen Server finden Sie unter Verwalten der Sicherheit der Azure SQL-Datenbank nach der Notfallwiederherstellung. Nach einem erfolgreichen Kopiervorgang auf einen anderen Server kann sich, bevor andere Benutzer neu zugeordnet werden, nur die dem Datenbankbesitzer zugeordnete Anmeldung oder der Serveradministrator bei der kopierten Datenbank anmelden. Informationen zum Auflösen von Anmeldungen nach Abschluss des Kopiervorgangs finden Sie unter Auflösen von Anmeldungen.

Kopieren mithilfe des Azure-Portals

Um eine Datenbank über das Azure-Portal zu kopieren, öffnen Sie die Seite für Ihre Datenbank, und klicken Sie auf Kopieren.

Datenbankkopie

Kopieren mithilfe von PowerShell oder der Azure CLI

Verwenden Sie die folgenden Beispiele, wenn Sie eine Datenbank kopieren möchten.

Verwenden Sie in PowerShell das Cmdlet New-AzSqlDatabaseCopy.

Wichtig

Das Azure Resource Manager-Modul von PowerShell wird von Azure SQL-Datenbank weiterhin unterstützt, aber alle zukünftigen Entwicklungen erfolgen für das Az.Sql-Modul. Das AzureRM-Modul erhält mindestens bis Dezember 2020 weiterhin Fehlerbehebungen. Die Argumente für die Befehle im Az-Modul und den AzureRm-Modulen sind im Wesentlichen identisch. Weitere Informationen zur Kompatibilität finden Sie in der Einführung in das neue Azure PowerShell Az-Modul.

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

Der Datenbank-Kopiervorgang ist ein asynchroner Vorgang, aber die Zieldatenbank wird sofort erstellt, nachdem die Anforderung akzeptiert wurde. Wenn Sie den Kopiervorgang abbrechen müssen, während er noch ausgeführt wird, sollten Sie die Zieldatenbank mit dem Cmdlet Remove-AzSqlDatabase löschen.

Ein vollständiges PowerShell-Beispielskript finden Sie unter Kopieren einer Datenbank auf einen neuen Server.

Kopieren mithilfe von Transact-SQL

Melden Sie sich mit der Serveradministratoranmeldung oder der Anmeldung, mit der die zu kopierende Datenbank erstellt wurde, bei der Masterdatenbank an. Damit der Datenbankkopiervorgang funktioniert, müssen alle Anmeldungen, die kein Serveradministrator sind, Mitglieder der Rolle dbmanager sein. Weitere Informationen zu Anmeldungen und zum Herstellen einer Verbindung mit dem Server finden Sie unter Verwalten von Anmeldungen.

Starten Sie das Kopieren der Quelldatenbank mit der Anweisung CREATE DATABASE ... AS COPY OF. Die T-SQL-Anweisung wird weiter ausgeführt, bis der Datenbankkopiervorgang beendet ist.

Hinweis

Durch das Beenden der T-SQL-Anweisung wird der Datenbankkopiervorgang nicht beendet. Um den Vorgang zu beenden, müssen Sie die Zieldatenbank löschen.

Hinweis

Datenbankkopien werden nicht unterstützt, wenn für die Quell- und/oder Zielserver ein privater Endpunkt konfiguriert und der Zugriff über das öffentliche Netzwerk deaktiviert ist. Wenn ein privater Endpunkt konfiguriert wurde, aber der Zugriff über das öffentliche Netzwerk zulässig ist, kann nach der Verbindungsherstellung mit dem Zielserver über eine öffentliche IP-Adresse erfolgreich eine Datenbankkopie eingeleitet werden. Führen Sie SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID; aus, um die Quell-IP-Adresse der aktuellen Verbindung zu ermitteln.

Wichtig

Das Auswählen einer Sicherungsspeicherredundanz bei Verwendung des Befehls „T-SQL CREATE DATABASE ... AS COPY OF“ wird noch nicht unterstützt.

Kopieren auf denselben Server

Melden Sie sich mit der Serveradministratoranmeldung oder der Anmeldung, mit der die zu kopierende Datenbank erstellt wurde, bei der Masterdatenbank an. Damit der Datenbankkopiervorgang funktioniert, müssen alle Anmeldungen, die kein Serveradministrator sind, Mitglieder der dbmanager-Rolle sein.

Mit diesem Befehl wird Database1 in eine neue Datenbank mit dem Namen „Database2“ auf demselben Server kopiert. Je nach Größe Ihrer Datenbank kann es einige Zeit dauern, bis der Kopiervorgang abgeschlossen ist.

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

Kopieren in einen Pool für elastische Datenbanken

Melden Sie sich mit der Serveradministratoranmeldung oder der Anmeldung, mit der die zu kopierende Datenbank erstellt wurde, bei der Masterdatenbank an. Damit der Datenbankkopiervorgang funktioniert, müssen alle Anmeldungen, die kein Serveradministrator sind, Mitglieder der dbmanager-Rolle sein.

Dieser Befehl kopiert „Database1“ in eine neue Datenbank namens „Database2“ in einen Pool für elastische Datenbanken namens „pool1“. Je nach Größe Ihrer Datenbank kann es einige Zeit dauern, bis der Kopiervorgang abgeschlossen ist.

„Database1“ kann eine einzelne oder eine Pooldatenbank sein. Das Kopieren zwischen verschiedenen Ebenenpools wird zwar unterstützt, aber einige ebenenübergreifende Kopien werden nicht erfolgreich sein. Sie können z. B. eine einzelne oder eine Datenbank vom Typ „Elastisch Standard“ in einen universellen Pool kopieren, aber Sie können keine Datenbank vom Typ „Elastisch Standard“ in einen Pool vom Typ „Premium“ kopieren.

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

Kopieren auf einen anderen Server

Melden Sie sich auf dem Zielserver, auf dem die neue Datenbank erstellt werden soll, bei der Masterdatenbank an. Verwenden Sie eine Anmeldung mit dem Namen und dem Kennwort des Datenbankbesitzers der Quelldatenbank auf dem Quellserver. Bei der Anmeldung auf dem Zielserver muss es sich zudem um ein Mitglied der dbmanager-Rolle oder die Serveradministratoranmeldung handeln.

Mit diesem Befehl wird Database1 auf server1 in eine neue Datenbank mit dem Namen „Database2“ auf server2 kopiert. Je nach Größe Ihrer Datenbank kann es einige Zeit dauern, bis der Kopiervorgang abgeschlossen ist.

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

Wichtig

Die Firewalls beider Server müssen so konfiguriert werden, dass sie eingehende Verbindungen von der IP-Adresse des Clients zulassen, der den T-SQL-Befehl „CREATE DATABASE ... AS COPY OF“ ausgibt.

Kopieren in ein anderes Abonnement

Sie können Ihre Datenbank mit den im Abschnitt Kopieren einer SQL-Datenbank auf einen anderen Server beschriebenen Schritten und mithilfe von T-SQL auf einen Server in einem anderen Abonnement kopieren. Stellen Sie sicher, dass Sie eine Anmeldung mit dem Namen und dem Kennwort des Datenbankbesitzers der Quelldatenbank auf dem Quellserver verwenden. Außerdem muss es sich bei der Anmeldung sowohl auf dem Quell- als auch dem Zielserver um ein Mitglied der dbmanager-Rolle oder einen Serveradministrator handeln.

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

Hinweis

Das Azure-Portal, PowerShell und die Azure CLI bieten keine Unterstützung für das Kopieren von Datenbanken in ein anderes Abonnement.

Tipp

Die Datenbankkopie, die T-SQL verwendet, unterstützt das Kopieren einer Datenbank aus einem Abonnement in einem anderen Azure-Mandanten. Dies wird nur unterstützt, wenn für die Anmeldung am Zielserver eine SQL-Authentifizierungsanmeldung verwendet wird. Das Erstellen einer Datenbankkopie auf einem logischen Server in einem anderen Azure-Mandanten wird nicht unterstützt, wenn die Azure Active Directory-Authentifizierung auf dem logischen Quell- oder Zielserver aktiviert ist.

Überwachen des Fortschritts des Kopiervorgangs

Überwachen Sie den Kopiervorgang, indem Sie die Ansichten sys.databases, sys.dm_database_copies und sys.dm_operation_status abfragen. Während des Kopiervorgangs wird die Spalte state_desc der Ansicht „sys.databases“ für die neue Datenbank auf COPYING gesetzt.

  • Wenn beim Kopieren ein Fehler auftritt, wird die Spalte state_desc der Ansicht „sys.databases“ für die neue Datenbank auf SUSPECT gesetzt. Führen Sie die DROP-Anweisung in der neuen Datenbank aus, und wiederholen Sie den Vorgang später noch einmal.
  • Wenn der Kopiervorgang erfolgreich ist, wird die Spalte state_desc der Ansicht „sys.databases“ für die neue Datenbank auf ONLINE gesetzt. Der Kopiervorgang ist abgeschlossen, und die neue Datenbank ist eine normale Datenbank, die unabhängig von der Quelldatenbank geändert werden kann.

Hinweis

Wenn Sie den Kopiervorgang während der Ausführung abbrechen möchten, führen Sie die Anweisung DROP DATABASE für die neue Datenbank aus.

Wichtig

Falls Sie eine Kopie mit einem deutlich niedrigeren Dienstziel als die Quelle erstellen müssen, verfügt die Zieldatenbank ggf. nicht über genügend Ressourcen für die Durchführung des Seedingprozesses. Möglicherweise schlägt dadurch der Kopiervorgang fehl. Verwenden Sie in diesem Szenario eine Anforderung einer Geowiederherstellung, um eine Kopie auf einem anderen Server bzw. in einer anderen Region zu erstellen. Weitere Informationen finden Sie unter Wiederherstellen einer Azure SQL-Datenbank mit Datenbanksicherungen.

Azure RBAC-Rollen und -Berechtigungen zum Verwalten der Datenbankkopie

Zum Erstellen einer Datenbankkopie müssen Sie über die folgenden Rollen verfügen:

  • Besitzer des Abonnements

  • Rolle „Mitwirkender von SQL Server“ oder

  • Benutzerdefinierte Rolle für die Quell- und Zieldatenbank mit folgender Berechtigung:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

Zum Abbrechen eines Datenbank-Kopiervorgangs müssen Sie über die folgenden Rollen verfügen:

  • Besitzer des Abonnements

  • Rolle „Mitwirkender von SQL Server“ oder

  • Benutzerdefinierte Rolle für die Quell- und Zieldatenbank mit folgender Berechtigung:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

Zum Verwalten der Datenbankkopie über das Azure-Portal benötigen Sie außerdem die folgenden Berechtigungen:

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

Falls Sie die Operationen unter "Deployments" in der Ressourcengruppe des Portals, Operationen über mehrere Ressourcenanbieter einschließlich SQL-Operationen sehen möchten, so benötigen Sie diese zusätzlichen Berechtigungen:

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

Auflösen von Anmeldungen

Nachdem die neue Datenbank auf dem Zielserver online ist, können Sie die ALTER USER-Anweisung verwenden, um die Benutzer aus der neuen Datenbank den Anmeldungen auf dem Zielserver neu zuzuordnen. Informationen zum Auflösen von verwaisten Benutzern finden Sie unter Problembehandlung bei verwaisten Benutzern. Siehe auch Verwalten der Sicherheit der Azure SQL-Datenbank nach der Notfallwiederherstellung.

Für alle Benutzer werden in der neuen Datenbank die Berechtigungen beibehalten, über die sie auch in der Quelldatenbank verfügt haben. Der Benutzer, der das Kopieren der Datenbank initiiert hat, wird zum Datenbankbesitzer der neuen Datenbank. Nachdem der Kopiervorgang erfolgreich abgeschlossen wurde und bevor andere Benutzer neu zugeordnet werden, kann sich nur der Datenbankbesitzer bei der neuen Datenbank anmelden.

Informationen zum Verwalten von Benutzern und Anmeldungen beim Kopieren einer Datenbank auf einen anderen Server finden Sie unter Verwalten der Sicherheit der Azure SQL-Datenbank nach der Notfallwiederherstellung.

Fehler beim Kopieren von Datenbanken

Die folgenden Fehler können beim Kopieren einer Datenbank in Azure SQL-Datenbank auftreten. Weitere Informationen finden Sie unter Kopieren einer Azure SQL-Datenbank.

Fehlercode severity BESCHREIBUNG
40635 16 Der Client mit der IP-Adresse „%.*ls“ ist vorübergehend deaktiviert.
40637 16 Das Kopieren von Datenbanken ist derzeit deaktiviert.
40561 16 Fehler beim Kopieren der Datenbank. Die Quell- oder die Zieldatenbank ist nicht vorhanden.
40562 16 Fehler beim Kopieren der Datenbank. Die Quelldatenbank wurde gelöscht.
40563 16 Fehler beim Kopieren der Datenbank. Die Zieldatenbank wurde gelöscht.
40564 16 Interner Fehler beim Kopieren der Datenbank. Löschen Sie die Zieldatenbank, und wiederholen Sie den Vorgang.
40565 16 Fehler beim Kopieren der Datenbank. Es darf jeweils nur eine Datenbankkopie von derselben Quelle erstellt werden. Löschen Sie die Zieldatenbank, und versuchen Sie es später erneut.
40566 16 Interner Fehler beim Kopieren der Datenbank. Löschen Sie die Zieldatenbank, und wiederholen Sie den Vorgang.
40567 16 Interner Fehler beim Kopieren der Datenbank. Löschen Sie die Zieldatenbank, und wiederholen Sie den Vorgang.
40568 16 Fehler beim Kopieren der Datenbank. Die Quelldatenbank ist nicht mehr verfügbar. Löschen Sie die Zieldatenbank, und wiederholen Sie den Vorgang.
40569 16 Fehler beim Kopieren der Datenbank. Die Zieldatenbank ist nicht mehr verfügbar. Löschen Sie die Zieldatenbank, und wiederholen Sie den Vorgang.
40570 16 Interner Fehler beim Kopieren der Datenbank. Löschen Sie die Zieldatenbank, und versuchen Sie es später erneut.
40571 16 Interner Fehler beim Kopieren der Datenbank. Löschen Sie die Zieldatenbank, und versuchen Sie es später erneut.

Nächste Schritte