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.
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.
Stellen Sie eine Verbindung zum SQL Server Management Studio (SSMS) her und connecten Sie sich mit Ihrer Azure Datenbank.
Es öffnet sich ein neues Fenster zum Erstellen der Datenbankkopie.
Hier können Sie die Anmeldedaten Ihres Azure SQL Abonnements, die Quelldatenbank und die Ressourcengruppe sehen.
Der Datenbankname sollte standardmäßig als Suffix_copy ausgegeben werden. Sie können jedoch den Namen gemäß Ihrer Anforderungen individuell anpassen.
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.
Es werden standardmäßig Gen5 vCores mit 32GB Speicher verwenden. Auch hier haben Sie jedoch die Möglichkeit anzupassen und Ihre Datenbankspezifikationen zu konfigurieren.
Sind Sie mir Ihrer Konfiguration einverstanden, klicken Sie auf review + create und akzeptieren Sie alle Bedingungen.
Neben dem Azure Portal können Sie auch mittels SQL Abfragen eine Datenbankkopie innerhalb eines Servers erstellen. Folgenden Prozess müssen Sie dabei befolgen:
Stellen Sie eine Verbindung zu Ihrer SQL Server Quelldatenbank her. Verwenden Sie dafür ein Admin-Login mit der Rolle dbmanager.
Mit folgendem Transact SQL Befehl erstellen wir eine Datenbankkopie namens TestDB_copy
aus der Quelldatenbank:
CREATE DATABASE TestDB_copy AS COPY OF TestDB;
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
COPYING
zurück, während die Daten kopiert werden.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.CATCH_UP
, bevor die Datenbankkopie online geht.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.
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:
$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:
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
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.
Kontaktieren Sie uns gerne über das
Kontaktformular und vereinbaren ein unverbindliches
Beratungsgespräch mit unseren Berater:innen zur
Bedarfsevaluierung. Gemeinsam optimieren wir Ihre
Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!