Freigeben über


Kopieren einer transaktionskonsistenten Kopie einer Datenbank in Azure SQL-Datenbank

Gilt für::Azure SQL-Datenbank

Azure SQL-Datenbank bietet mehrere Methoden zum Erstellen einer Kopie einer vorhandenen Datenbank auf demselben logischen Azure SQL-Datenbankserver oder einem anderen logischen Server. Sie können eine Datenbank über das Azure-Portal, PowerShell, die Azure CLI oder Transact-SQL kopieren.

Hinweis

Microsoft Entra ID war zuvor als Azure Active Directory (Azure AD) bekannt.

Übersicht

Bei einer Datenbankkopie handelt es sich um eine im Hinblick auf Transaktionen konsistente Momentaufnahme der Quelldatenbank zum Zeitpunkt, wenn die Kopieranforderung initiiert wurde. Sie können denselben logischen Server oder einen anderen logischen Server für die Kopie auswählen. Außerdem können Sie die Sicherungsredundanz und die Computegröße der Quelldatenbank beibehalten oder eine andere Sicherungsspeicherredundanz und/oder Computegröße innerhalb derselben Dienstebene verwenden. Es ist auch möglich, eine Datenbank der Dienstebene Standard auf die Dienstebene Standard oder General Purpose und eine Datenbank der Dienstebene Premium auf die Dienstebene Premium oder Business Critical zu kopieren.

Nach Abschluss der Kopie ist die neue Datenbank eine voll funktionsfähige und unabhängige Datenbank für die Quelldatenbank. 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

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

Datenbankkopie für Hyperscale-Datenbanken

Bei Datenbanken in der Hyperscale-Dienstebene bestimmt die Zieldatenbank, ob es sich um eine schnelle Kopie oder eine Kopie nach Datengröße 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 logischen Server kopieren, können dieselben Anmeldungen in beiden Datenbanken verwendet werden. Der Sicherheitsprinzipal, den Sie zum Kopieren der Datenbank verwenden, wird zum Datenbankbesitzer der neuen Datenbank.

Wenn Sie eine Datenbank auf einen anderen logischen Server kopieren, wird der Sicherheitsprinzipal, der den Kopiervorgang auf dem logischen 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 passieren, da die Anmeldungen nicht auf dem logischen Zielserver vorhanden sind oder dass diese Kennwörter und Sicherheits-IDs (SIDs) unterschiedlich sind. Weitere Informationen zum Verwalten von Anmeldungen beim Kopieren einer Datenbank auf einen anderen Server finden Sie unter Konfigurieren und Verwalten der Sicherheit von Azure SQL-Datenbank für die Geowiederherstellung oder den Failover. Nachdem der Kopiervorgang auf einem anderen logischen Server erfolgreich ausgeführt wurde und bevor andere Benutzer erneut zugeordnet werden, kann sich nur die dem Datenbankbesitzer zugeordnete Anmeldung anmelden, oder der Serveradministrator kann sich bei der kopierten Datenbank anmelden. Informationen zum Auflösen von Anmeldungen nach Abschluss des Kopiervorgangs finden Sie unter Auflösen von Anmeldungen.

Kopieren einer Datenbank

Sie können eine Datenbank mithilfe von PowerShell, der Azure CLI und Transact-SQL (T-SQL) kopieren.

Um eine Datenbank mithilfe des Azure-Portal zu kopieren, öffnen Sie die Seite für die Datenbank und wählen dann Kopieren aus, um die Seite SQL-Datenbank erstellen – Datenbank kopieren zu öffnen. Füllen Sie die Werte für den logischen Zielserver aus, in den Sie die Datenbank kopieren möchten.

Screenshot des Azure-Portals mit hervorgehobener Option „Datenbankkopie“ auf der Übersichtsseite der Datenbank

Kopieren einer Datenbank mit Transact-SQL

Melden Sie sich bei der master-Datenbank mit der Serveradministratoranmeldung oder der Anmeldung an, die die Datenbank erstellt hat, die Sie kopieren möchten. Damit der Datenbankkopiervorgang funktioniert, müssen alle Anmeldungen, die kein Serveradministrator sind, Mitglieder der Rolle dbmanager sein. Weitere Informationen zu Anmeldungen und Herstellen einer Verbindung mit dem logischen Server finden Sie unter Autorisieren des Datenbankzugriffs.

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.

Dieser Abschnitt enthält Transact-SQL Befehle für die folgenden Vorgänge:

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.

Kopieren auf denselben logischen Server

Melden Sie sich bei der master-Datenbank mit der Serveradministratoranmeldung oder der Anmeldung an, die die Datenbank erstellt hat, die Sie kopieren möchten. Damit der Datenbankkopiervorgang funktioniert, müssen alle Anmeldungen, die kein Serveradministrator sind, Mitglieder der Rolledbmanager sein.

Dieser Befehl kopiert Database1 in eine neue Datenbank namens Database2 auf demselben logischen Server. 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 bei der master-Datenbank mit der Serveradministratoranmeldung oder der Anmeldung an, die die Datenbank erstellt hat, die Sie kopieren möchten. Damit der Datenbankkopiervorgang funktioniert, müssen alle Anmeldungen, die kein Serveradministrator sind, Mitglieder der Rolledbmanager 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 fehlschlagen. 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 logischen Server

Stellen Sie eine Verbindung mit der master Datenbank des logischen Zielservers her, auf dem die neue Datenbank erstellt werden soll. Verwenden Sie eine Anmeldung mit demselben Namen und Kennwort wie der Datenbankbesitzer der Quelldatenbank auf dem logischen Quellserver. Bei der Anmeldung auf dem logischen Zielserver muss es sich zudem um ein Mitglied der Rolle dbmanager oder die Serveradministratoranmeldung handeln.

Dieser Befehl kopiert Database1 auf server1 in eine neue Datenbank mit dem Namen Database2 für server2. Je nach Größe Ihrer Datenbank kann es einige Zeit dauern, bis der Kopiervorgang abgeschlossen ist.

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

Wichtig

Beide logischen Serverfirewalls müssen so konfiguriert werden, dass eingehende Verbindungen von der IP des Clients zugelassen werden, der den T-SQL-CREATE DATABASE ... AS COPY OF-Befehl ausgibt. Um die IP-Quelladresse der aktuellen Verbindung zu ermitteln, führen Sie folgendes aus: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Hinweis

Das Kopieren einer Datenbank mithilfe von T-SQL wird nicht unterstützt, wenn eine Verbindung mit dem logischen Zielserver über einen privaten Endpunkt besteht. Wenn ein privater Endpunkt konfiguriert ist, aber der Zugriff auf öffentliche Netzwerke zulässig ist, wird die Datenbankkopie unterstützt, wenn eine Verbindung mit dem logischen Zielserver von einer öffentlichen IP-Adresse mithilfe der SQL-Authentifizierung hergestellt wird. Nach Abschluss des Kopiervorgangs kann der öffentliche Zugriff verweigert werden.

Ebenso kopiert der folgende Befehl Database1 von server1 in eine neue Datenbank mit dem Namen Database2, die sich in einem elastischen Pool mit dem Namen pool2auf server2befindet.

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

Kopieren in ein anderes Abonnement

Sie können die Schritte im Kopieren einer SQL-Datenbank auf einen anderen logischen Server Abschnitt verwenden, um Ihre Datenbank mit T-SQL in einen logischen Server in einem anderen Abonnement zu 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 logischen Quell- als auch dem Zielserver um ein Mitglied der dbmanager-Rolle oder einen Serveradministrator handeln.

Tipp

Beim Kopieren von Datenbanken im selben Microsoft Entra ID-Mandanten wird die Autorisierung auf den logischen Quell- und Zielservern vereinfacht, wenn Sie den Kopierbefehl mithilfe einer Authentifizierungsanmeldung mit ausreichendem Zugriff auf beide logische Server initiieren. Die minimale erforderliche Zugriffsebene ist die Mitgliedschaft in der Rolle des dbmanagers in der master-Datenbank auf beiden logischen Servern. Sie können z. B. eine Microsoft Entra-ID-Anmeldung verwenden, die Mitglied einer Gruppe ist, die als Serveradministrator auf beiden logischen Servern festgelegt ist.

In den folgenden Skripten ist der zu kopierende Anmeldename loginname.

Stellen Sie zunächst eine Verbindung mit der master Datenbank des logischen Quellservers her. Erstellen Sie einen Login und einen Benutzer in der master-Datenbank des logischen Azure SQL-Datenbank-Quellservers.

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

Stellen Sie eine Verbindung mit der Quellbenutzerdatenbank her. Erstellen Sie als Nächstes in der Quellbenutzerdatenbank den Benutzer in der Quelldatenbank, und fügen Sie ihn der Datenbankrolle "dbowner" in der Datenbank hinzu.

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

Suchen Sie als Nächstes die Sicherheits-ID (SID) des Benutzers loginname, aus der master-Datenbank des logischen Quellservers.

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

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

Führen Sie das nächste Skript auf der master-Datenbank des neuen logischen Servers oder Zielservers aus. Erstellen Sie zunächst eine Anmeldung und einen Benutzer in der master Datenbank des logischen Zielservers, und fügen Sie ihn der Dbmanager-Serverrolle hinzu. Stellen Sie ein <strong password> bereit, und ersetzen Sie <SID of loginname login on source server> durch die SID des logischen Quellservers.

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

Erstellen Sie in der master-Datenbank des logischen Zielservers die neue Datenbank. Ersetzen Sie new_database_name durch den gewünschten Namen. Ersetzen Sie source_server_name und source_database_name durch die Namen der Quelle.

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

Tipp

Das Kopieren einer Datenbank aus einem Abonnement in einem anderen Azure-Mandanten wird nur unterstützt, wenn T-SQL und eine SQL-Authentifizierungsanmeldung zum Anmelden beim logischen Zielserver verwendet wird. Das Erstellen einer Datenbankkopie auf einem logischen Server in einem anderen Azure-Mandanten wird mit Microsoft Entra-Authentifizierung für Azure SQLnicht unterstützt.

Ü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 enthält die Spalte state_desc der Sicht sys.databases für die neue Datenbank den Wert COPYING.

  • Ist der Kopiervorgang nicht erfolgreich, enthält die Spalte state_desc der Sicht sys.databases für die neue Datenbank den Wert SUSPECT. Führen Sie die DROP-Anweisung in der neuen Datenbank aus, und wiederholen Sie den Vorgang später noch einmal.
  • Ist der Kopiervorgang erfolgreich, enthält die Spalte state_desc der Sicht sys.databases für die neue Datenbank den Wert ONLINE. 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 Geowiederherstellungsanforderung, um eine Kopie auf einem anderen logischen Server und/oder einer anderen Region zu erstellen. Weitere Informationen finden Sie unter Wiederherstellen einer Azure SQL-Datenbank mit Datenbanksicherungen.

Berechtigungen

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

  • Besitzer des Abonnements
  • Rolle „Mitwirkender von SQL Server“ oder
  • Benutzerdefinierte Rolle auf dem logischen Quellserver mit folgenden Berechtigungen:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write und
  • Benutzerdefinierte Rolle auf dem logischen Zielserver mit folgenden Berechtigungen:
    • Microsoft.Sql/servers/read
    • 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 den folgenden Berechtigungen:
    • Microsoft.Sql/servers/databases/delete

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

  • Microsoft.Resources/subscriptions/resources/read
  • 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 logischen Zielserver online ist, verwenden Sie die ALTER USER-Anweisung, um die Benutzer aus der neuen Datenbank den Anmeldungen auf dem logischen Zielserver neu zuzuordnen. Informationen zum Auflösen von verwaisten Benutzern finden Sie unter Problembehandlung bei verwaisten Benutzern. Siehe auch Konfigurieren und Verwalten der Sicherheit von Azure SQL-Datenbank für die Geowiederherstellung oder den Failover.

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 logischen Server finden Sie unter Konfigurieren und Verwalten der Azure SQL-Datenbanksicherheit für Geowiederherstellung oder Failover.

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 transaktionskonsensalen Kopie einer Datenbank in der 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.