Erstellen einer Azure SQL Datenbankkopie - Teil 2

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

In dem vorangegangenen Artikel haben wir eine transaktionskonsistente Datenbankkopie in Azure SQL hergestellt. Hier wurden Kopien auf denselben Server, einen anderen Server oder anderen Abonnement hergestellt. Die neue, in diesem Artikel hergestellte, Datenbankkopie wird unabhängig zur Quelldatenbank sein. Sie können im Nachgang Anmeldungen, Benutzer, Berechtigungen und Objekte wie eine normale Azure Datenbank verwalten.

Jeder Alltag eines Datenbankentwicklers ist vielfältig und kann beispielsweise als Arbeitsanforderung die regelmäßige Erstellung von Datenbankkopien, Codes und Leistungsoptimierung mit sich bringen. Eine Herausforderung könnte sein, dass die Datenbankkopie in einem anderen Azure SQL Server erstellt werden muss, der die Entwicklungsinstanz hostet. Um Zeit zu sparen und die Effizienz zu steigern, empfiehlt es sich mittels Azure Automation verschiedene Aufgaben zu automatisieren, um damit immer wiederkehrende manuelle Eingriffe zu vermeiden. In den nächsten Absätzen erklären wir Ihnen, wie Sie Azure Runbooks erstellen und Azure Automation implementieren.

Anforderungen

Bevor wir starten müssen folgende Anforderungen erfüllt sein:

  • Es muss eine Azure SQL Datenbank vorhanden sein, die über eine aktive Azure Quelldatenbank verfügt. Erstellen können Sie eine solche durch die Azure Schnittstelle oder PowerShell.
  • Erstellen Sie ein Azure Automation Konto. Automation stellt Runbooks bereits, die ihre Skripte in PowerShell und Python ausgeben. Diese Runbooks definieren Workflows und stellen notwendige Ressourcen bereit.

Folgende Parameter verwenden wir:

  • Ressourcengruppe: Test_Group
  • Server-FQDN: sql-test-one.database.windows.net
  • Datenbank: TestDB
  • Anmeldung des Serveradministrators: sqluser
  • Ort: ZentralindienAutomation-Konto: automation-test

Erstellen eines Azure Runbooks

Um mithilfe einer Azure Automation eine Datenbankkopie in Azure zu erstellen, möchten wir Azure Runbooks schreiben. Dafür verwenden wir PowerShell Skripte und erklären Ihnen in den folgenden Abschnitten, wie Sie die Teilschritte durchführen.

Zur Vorbereitung müssen wir das PowerShell Modul in unser Azure Automation Konto einbinden. Navigieren Sie dafür in Azure zum Automatisierungskonto → Module → Modul hinzufügen → Katalog durchsuchen. Importieren Sie nun das Az.Accounts und das Az.Sql Modul.

Erstellen einer Azure SQL Datenbankkopie - Teil 2
Erstellen einer Azure SQL Datenbankkopie - Teil 2
  • Nachfolgend müssen wir verschiedene Variablen festlegen, die den Azure-Server und die Datenbanknamen im Automatisierungskonto speichern. Dafür legen wir die Variablen sqlserver (Name des Azure Servers) und database (Name der Quelldatenbank).
Erstellen einer Azure SQL Datenbankkopie - Teil 2
Erstellen einer Azure SQL Datenbankkopie - Teil 2
  • Nun haben wir ein Azure Runbook erstellt, welches nachfolgend mit einem PowerShell Skript gefüllt werden soll. Dafür öffnen wir das Runbook und klicken auf bearbeiten.
Erstellen einer Azure SQL Datenbankkopie - Teil 2
  • Im Editor angekommen, fügen wir nun das folgende PowerShell Skript ein:
PARAM
(
    [Parameter(Mandatory=$true)]
    [string]$NewDbName
)
Read-Host $NewDbName = "Please Enter New Azure SQL Database Name"
$connectionName = "AzureRunAsConnection"
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         
Write-Output "Logging in to Azure..."
 
Connect-AzAccount `
            -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
 
$SQLServerName = Get-AutomationVariable -Name "sqlserver"
$database = Get-AutomationVariable -Name "database"
    
Write-Output "Azure SQL Database server"
Write-Output $SQLServerName
Write-Output "Azure SQL Database name"
Write-Output $database
$resourceGroupName="Test_Group"
 
$replicaDb = (Get-AzSqlDatabase -ResourceGroupName $resourceGroupName -DatabaseName $NewDbName `
-ServerName $SQLServerName -ErrorAction SilentlyContinue)
 
write-Output $replicaDb
 
if($replicaDb)
{
    write-Output "Specified target Azure SQL Database already exists."
}
else
{
    write-Output "Creating a database copy using Azure Automation runbook.."   
    New-AzSqlDatabaseCopy -ResourceGroupName $resourceGroupName -ServerName $SQLServerName -DatabaseName $database -CopyResourceGroupName $resourceGroupName -CopyServerName $SQLServerName -CopyDatabaseName $NewDbName    
 
}
  • Um das Skript etwas besser zu verstehen, gehen wir nun auf die einzelnen Teilbereiche näher ein.

→ Definition eines Parameters für den neuen Namen der Azure SQL Datenbank.

Am Anfang des Skripts definieren wir einen Parameter, indem wir den neuen Namen der Azure SQL Datenbank festlegen. Der Parameter dafür heißt $NewDBName.

PARAM
(
    [Parameter(Mandatory=$true)]
    [string]$NewDbName
)
Read-Host $NewDbName = "Please Enter New Azure SQL Database Name"

→ Informationsfreigabe zur Azure Automatisierungsverbindung

Im nächsten Abschnitt des Skripts verwenden wir Get-AzAutomationConnection, um Metadaten für die AzureRunAsConnection abzurufen.

$connectionName = "AzureRunAsConnection"
# Get the connection "AzureRunAsConnection "
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName       
Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

→ Verbindung mit authentifiziertem Azure Konto

Um die Verbindung zum dem Azure SQL Konto herzustellen, haben wir das PowerShell Cmdlet Connect-AzAccount verwendet. Wir verbinden uns mit mittels einer zertifikatbasierten Dienstprinzipal Authentifizierung.

Connect-AzAccount `
    -ServicePrincipal `
   -TenantId $servicePrincipalConnection.TenantId `
   -ApplicationId $servicePrincipalConnection.ApplicationId `
   -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint

→ Abrufen der Azure Variablen

Zu Beginn haben wir bereits die Azure- Server und Datenbanknamen Variablen gespeichert. Nun rufen wir ab und speichern sie unter dem Cmdlet Get-AutomationVariable. Um die Information in PowerShell ausgeben zu lassen, verwenden wir im Nachgang das Write-Ouput Cmdlet. Die Parameter nennen sich:

  • $SQLServerName
  • $database
#Enter the name for your server variable
$SQLServerName = Get-AutomationVariable -Name "sqlserver"
#Enter the name for your database variable
$database = Get-AutomationVariable -Name "database"
    
Write-Output "Azure SQL Database server"
 
Write-Output $SQLServerName
 
Write-Output "Azure SQL Database name"
Write-Output $database

→ Kopiervorgang der Azure SQL Datenbank

In diesem Schritt implementieren wir das Azure Automation Runbook. Dafür verwenden wir zu Beginn Get-AzSqlDatabase, um die Zieldatenbank auf bereits vorhandene Kopien zu überprüfen. Die Ergebnisse werden im Parameter $replicadb gespeichert. Existiert bereits eine Zieldatenbank, wird das Skript beendet und die Meldung “DB name already exists” ausgegeben. Existiert noch keine Zieldatenbank, kreiert das Skript eine ELSE-Bedingung und gibt die Meldung “Creating DB” aus. Dafür wird das PowerShell Cmdlet New-AzSQLDatabase verwendet, um die Datenbank mit der Quell- & Zielressourcengruppe, dem Azure SQL Server und der Datenbankinformation zu kopieren. Ausgegeben wird die Quelle mit den Parametern ResourceGroupeName, ServerName und DatabaseName. Im Zielserver werden die Parameter CopyResourceGroupName, CopyServerName und CopyDatabaseName verwendet.

$replicaDb = (Get-AzSqlDatabase -ResourceGroupName $resourceGroupName -DatabaseName $NewDbName -ServerName $SQLServerName -ErrorAction SilentlyContinue)
write-Output $replicaDb
 
if($replicaDb)
{
    write-Output " Specified target Azure SQL Database already exists"
}
else
{
    write-Output " Creating a database copy using Azure Automation runbook”
    New-AzSqlDatabaseCopy -ResourceGroupName $resourceGroupName -ServerName $SQLServerName -DatabaseName $database -CopyResourceGroupName $resourceGroupName -CopyServerName $SQLServerName -CopyDatabaseName $NewDbName    
 
}

Wichtig: Speichern Sie sich vor Ausführung des Kopiervorgangs unbedingt das Runbook, um ggf. nachjustieren und korrigieren zu können.

Erstellen einer Azure SQL Datenbankkopie - Teil 2

Test des Runbook Skripts im Testbereich

Klicken Sie auf das Testfenster und geben den Parameter NewDBName ein. Klicken Sie danach auf Start. Es wird nun eine Verbindung zum Azure Konto hergestellt. Während des Vorgangs werden erforderliche Parameter und Variablenwerte abgerufen und eine konsistente Kopie der Azure SQL Quelldatenbank erstellt. Die Ausführung kann einige Minuten in Anspruch nehmen.

Erstellen einer Azure SQL Datenbankkopie - Teil 2

Ist der Vorgang abgeschlossen, sollten Sie Ihr Azure Portal aktualisieren. Navigieren Sie anschließend zum Azure SQL Server, der Ihnen zwei Datenbanken anzeigen wird:

TestDB: Quelldatenbank
TestDB_copy: Kopie der Quelldatenbank

Erstellen einer Azure SQL Datenbankkopie - Teil 2

Verbindung der Azure SQL Datenbank mit SSMS und Azure Data Studio

Wenn Sie möchten, dass die Azure SQL Datenbank in Ihrem SQL Server Management Studio auftaucht, können Sie diese wie nachfolgend aufgeführt verbinden. Notieren Sie sich vorab dazu den FQDN Ihres Azure Servers aus dem oben stehenden Skript.

Erstellen einer Azure SQL Datenbankkopie - Teil 2

Nun sollte die Azure SQL Datenbank in der linken Leiste aufgelistet sein.

Veröffentlichen und Planen des Azure Automation Runbooks

Nachdem der Test unseres Runbooks erfolgreich war, möchten wir es nun final implementieren und unserem Azure Portal. Hierfür klicken wir auf publish in der PowerShell Runbook Maske. Checken Sie danach im Dashboard die Veröffentlichungen, sollte hier nun ein neuer Eintrag auftauchen.

Erstellen einer Azure SQL Datenbankkopie - Teil 2

Sie haben nun die Möglichkeit, Ihr Runbook gemäß den Anforderungen zu planen und wiederkehrende Kopien zu erstellen. Über Schedules können Sie ganz einfach ein Timesheet erstellen, welches das Runbook zur geplanten Zeit ausführt. Der Zeitplan gibt Ihnen obligatorische Werte vor, die Sie für den Vorgang angeben müssen.

Erstellen einer Azure SQL Datenbankkopie - Teil 2

Fazit

Sie sollten nun über alle wissenswerten Schritte und Vorgänge zum Thema Erstellen einer Datenbankkopie in Azure SQL Bescheid wissen. Wir sind auf das simple Erstellen einer transaktionalen Datenbankkopie in Azure SQL eingegangen, wie Sie eine Azure Automation implementieren und ein Runbook erstellen.

Gerne stehen wir Ihnen bei weiteren Fragen zur Seite. Vereinbaren Sie mit unseren Spezialisten ein Informationsgespräch oder kontaktieren Sie uns ganz einfach über unser Kontaktformular.