Erstellen einer Azure SQL-Datenbankkopie - Teil 1

cover image of blog article 'Erstellen einer Azure SQL-Datenbankkopie - Teil 1'

In der folgenden Artikelserie gehen wir auf das Erstellen einer Datenbankkopie in Azure SQL ein. Im ersten Teil beschreiben wir die einfache Erstellung einer Datenbankkopie mit Azure SQL. Im zweiten Teil widmen wir uns dem Automatisierungsprozess mit Azure Automation.

Start

Die ständige Implementierung von Datenbankänderungen gehört zum Arbeitsalltag eines Datenbankentwicklers. Im Normalfall werden entsprechende Objekte, Schemas und Datenbanken vorab gesichert, um Verluste zu vermeiden. Der DBA erstellt davon sogenannte Snapshots, die den aktuellen Ist-Stand der Objekte, Schemas und Datenbanken speichern. Sind jedoch neben den gängigen SQL Server Datenbanken auch Azure SQL Datenbanken enthalten, muss eine transaktionskonsistente Datenbankkopie erstellt werden.

Dafür benötigen Sie lediglich eine Azure SQL Quelldatenbank, von der eine transaktionsresistente Kopie erstellt werden soll. Für die Implementierung können Sie sowohl mit Azure PowerShell oder Azure CloudShell arbeiten, um die nötigen Ressourcen bereitzustellen.

Azure SQL kann eine transaktionskonsistente Datenbankkopie oder einen Snapshot aus der Quelldatenbank heraus erstellen. Dieser Prozess verläuft asynchron und verwendet dabei die aktive Georeplikationstopologie zum Kopieren der Daten. Ist der Prozess abgeschlossen, wird aus der neuen Datenbank eine vollfunktionsfähige Datenbank.

Prozess:

Stellen Sie eine Verbindung zum SQL Server Management Studio (SSMS) her und connecten Sie sich mit Ihrer Azure Datenbank.

Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Verwenden Sie das Azure Portal um die Datenbankkopie herzustellen. Navigieren Sie dazu im Portal zur Übersichtsseite Ihrer Quelldatenbank und klicken Sie auf copy.
Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Es öffnet sich ein neues Fenster zum Erstellen der Datenbankkopie.

  2. Hier können Sie die Anmeldedaten Ihres Azure SQL Abonnements, die Quelldatenbank und die Ressourcengruppe sehen.

Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Scrollen Sie zum Konfigurationsbereich für die Datenbankdetails.
Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Der Datenbankname sollte standardmäßig als Suffix_copy ausgegeben werden. Sie können jedoch den Namen gemäß Ihrer Anforderungen individuell anpassen.

  2. Sie können beispielsweise eine Datenbank auf denselben oder einen anderen Server kopieren. Zusätzlich gibt es die Möglichkeit einen Pool für elastische Datenbanken und verschiedene Abonnements herzustellen und dort ebenfalls Kopien zu erstellen.

  3. Es werden standardmäßig Gen5 vCores mit 32GB Speicher verwenden. Auch hier haben Sie jedoch die Möglichkeit anzupassen und Ihre Datenbankspezifikationen zu konfigurieren.

  4. Sind Sie mir Ihrer Konfiguration einverstanden, klicken Sie auf review + create und akzeptieren Sie alle Bedingungen.

Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Der Kopiervorgang startet.
Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Ist der Prozess beendet, sollten Sie im Nachgang Ihren Azure SQL Server aktualisieren. Es sollte nun die Kopie mit dem von Ihnen ausgewählten Namen erscheinen.

Datenbankkopie erstellen mit Transact SQL

Neben dem Azure Portal können Sie auch mittels SQL Abfragen eine Datenbankkopie innerhalb eines Servers erstellen. Folgenden Prozess müssen Sie dabei befolgen:

  1. Stellen Sie eine Verbindung zu Ihrer SQL Server Quelldatenbank her. Verwenden Sie dafür ein Admin-Login mit der Rolle dbmanager.

  2. Mit folgendem Transact SQL Befehl erstellen wir eine Datenbankkopie namens TestDB_copy aus der Quelldatenbank:

CREATE DATABASE TestDB_copy AS COPY OF TestDB;
  1. Möchten Sie eine dynamische Verwaltungsansicht erstellen, verwenden Sie folgenden Befehl:
SELECT database_id, start_date,modify_date,percent_complete,partner_server,partner_database,replication_state_desc
FROM sys.dm_database_copies
SELECT state_desc, * FROM sys.databases
  1. Die sys.database gibt den state_desc als COPYING zurück, während die Daten kopiert werden.
Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Sie können zur Überprüfung die Überwachungs-DMW ausführen. Sie zeigt den replication_state_desc als SEEDING an. Dies bedeutet, dass die kopierte Datenbank noch nicht vollständig mit der Quelldatenbank synchron ist. Die Verbindung dazu kann auch nicht hergestellt werden, da der Status noch auf COPYING verweist.
Erstellen einer Azure SQL-Datenbankkopie - Teil 1
  1. Sie sehen nun die vorgenommenen Änderungen von replication_state_desc zu CATCH_UP, bevor die Datenbankkopie online geht.
  1. Ist die kopierte Datenbank online, können Sie nun die Datenbank wie eine unabhängige Datenbank behandeln, sie verbinden und Abfragen stellen.
Erstellen einer Azure SQL-Datenbankkopie - Teil 1

Wichtig zu wissen ist, sollten Sie die Datenbank auf einen anderen Server kopieren, funktionieren in der Regel die Server Logins nicht mehr. Dies liegt möglicherweise an einer anderen Sicherheits-ID. Mithilfe des Datenbankeigentümers können Sie eine Verbindung zur Kopie herstellen, indem Sie ALTER USER verwenden. Die vorhandenen Berechtigungen und Sicherheitskennungen werden in der Regel in die neue Datenbank kopiert. Sie folgen den Benutzern in die neue Datenbank. Ebenfalls wichtig zu wissen: Die Anmeldung, die Sie beim Erstellen der Kopie verwenden, wird automatisch als Datenbankeigentümer deklariert.

Möchten Sie eine Kopie auf einem anderen Server erstellen, müssen Sie vorab einen Quell- und einen Zielserver festlegen. Führen Sie dafür folgende SQL Abfrage auf dem Zielserver aus:

CREATE DATABASE [databasename] AS COPY OF server1. [databasename];

Hierbei sollten Sie beachten, dass auf dem Zielserver einen Mitglied mit der Rolle dbmanager vorhanden sein sollte. Der Kopierprozess kann je nach Datenbankgröße einige Zeit in Anspruch nehmen. Sie sollten daher auch bestenfalls die DMVs überwachen.

Kopieren einer Datenbank mit Azure CloudShell

Neben TransactSQL kann auch Azure Cloud Shell für den Kopiervorgang verwendet werden, um eine Datenbank auf denselben Server, nur unter anderem Namen zu kopieren. Azure Cloud Shell ist eine interaktive, browserbasierte Komponente für PowerShell- & Bash Befehle. Dafür verwenden wir das Cmdlet New-AzSqlDatabaseCopy und füllen folgende Parameter aus:

  • ResourceGroupName: Geben Sie die Ressourcengruppe für Azure an.
  • ServerName: Geben Sie den Namen des Quellservers an.
  • CopyServerName: Geben Sie den Namen des Zielservers an.
  • DatabaseName: Geben Sie den Namen der Quelldatenbank an.
  • CopyDatabaseName: Geben Sie den Namen der kopierten Datenbank auf dem Zielserver an.
$ResourceGroup="Test_Group"
$sourceserver="sql-test-one"
$targetserver="sql-test-one"
$databasename="TestDB"
$targetdatabase="TestDB_copy_shell"
New-AzSqlDatabaseCopy -ResourceGroupName $ResourceGroup -ServerName $sourceserver -DatabaseName $databasename `
    -CopyResourceGroupName $ResourceGroup -CopyServerName $targetserver -CopyDatabaseName $targetdatabase

Starten Sie nun die Azure CloudShell für PowerShell und führen das obige Skript aus. Folgende Ausgabe erhalten Sie dann:

Erstellen einer Azure SQL-Datenbankkopie - Teil 1

Bereinigen Sie im letzten Schritt die Azure Ressourcen, um unnötige Kosten zu vermeiden. Sie können dafür folgendes Skript ausführen:

Remove-AzResourceGroup -ResourceGroupName $ResourceGroup

Fazit

In den vergangenen Artikeln haben wir verschiedene Methodiken zur Erstellung einer Datenbankkopie in Azure SQL vorgeführt. Dabei haben wir gezeigt, dass Sie eine Datenbankkopie auf demselben Server, verschiedenen Servern und Abonnements, sowie Konfigurationen erstellen können. Auch die Durchführung ist durch verschiedene Maßnahmen wie z.B. im Azure Portal, Azure CLI, CloudShell TransactSQL möglich.

Gerne helfen wir Ihnen bei spezifischen Themen weiter. Kontaktieren Sie uns dafür gerne über das Kontaktformular und lassen sich von unseren Expert:innen beraten.