
dbatools ist ein praktisches OpenSource PowerShell Modul, mit dem administrative Aufgaben des Microsoft SQL Server Managements bequem aus der PowerShell erledigt werden können. Mit den mehr als 500 Befehlen, die dbatools beherrscht, ist der Einsatz für eine Vielzahl von Aufgaben und Szenarien denkbar.
In diesem ersten Artikel unserer mehrteiligen Reihe durchlaufen wir die Installation der dbatools und untersuchen einige der Befehle, die für eine vollständige Server-Migration unverzichtbar sind. Im Fokus stehen vor allem das Migrieren der Konfigurationseinstellungen, Logins sowie von Datenbanken.
Folgender Vergleich aus dem offiziellen GitHub der dbatools beschreibt die Funktionalität sehr passend:
„think of it like a command-line SQL Server Management Studio”.
Aufbau unserer Umgebung
In unserem Szenario laufen zwei Virtuelle Maschinen (VMs) OPWin22Sql17 sowie OPWin22Sql19 auf einem privaten Cloud Cluster. Sie befinden sich in derselben Domäne. Arbeitsumgebung von der administriert wird ist eine weitere VM, die sich ebenfalls in dem Cluster-Netzwerk befindet. Alle Befehle werden von dort aus in der PowerShell ausgeführt.
Auf der VM OPWin22Sql17 läuft ein SQL 2017 Server mit einer AdventureWorks2017
Beispieldatenbank und diversen Logins. Diesen Server migrieren wir auf den frisch eingerichteten SQL 2019 Server der OPWin22Sql19 VM. Beide SQL Server sind über Windows Authentication gesichert.
Installation der dbatools
Die ersten beiden Schritte müssen nur ausgeführt werden, falls in der Vergangenheit noch kein PowerShell Modul aus der PowerShellGallery, der zentralen Repository für PowerShell-Inhalte, installiert wurde.
Zunächst müssen wir sichergehen, dass wir remote signierte Zertifikate ausführen können. Dazu ändern wir die ExecutionPolicy in der PowerShell folgendermaßen.
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Und bestätigen mit A. Nun haben wir die Berechtigung remote signierte Skripte vertrauenswürdigen Herausgeber, sowie unsere eigenen lokalen Skripte auszuführen.
Als nächstes erlauben wir Installationen aus der PowerShell Gallery.
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Nun zur eigentlichen Installation. Wir installieren das Modul mit dem install-Module Befehl:
Install-Module dbatools
und bestätigen anschließend in der Eingabeaufforderung mit A, sodass wir dbatools als Publisher immer vertrauen. Nun können wir mit dem Ausführen von dbatools Befehlen beginnen.
Für eine detailliertere Schritt-für-Schritt Installation unter Windows empfehlen wir diesen offiziellen Artikel von dbatools.
Verbindung testen (Optional)
Nachdem dbatools eingerichtet ist, möchten wir uns zunächst Informationen über die Verbindung zur SQL Instanz ausgeben lassen. Das geht mit dem Test-DbaInstance
. Gleichzeit stellen wir sicher, dass wir mit der PowerShell remote Ausführungsrechte auf den Servern haben. Um den Befehl auszuführen, setzen wir die beiden Namen unserer SQL Server hinter den -SqlInstance
Parameter in dem Test-DbaInstance
Befehl.
Test-DbaConnection -SqlInstance OPWIN22SQL17, OPWin22Sql19
Nach dem Ausführen erhalten wir folgende Ausgabe:

Bei diesem dbatools Befehl ist besonderes Augenmerk auf den [-SqlInstance]
Parameter zu richten. Er ist fast immer ein Pflichtparameter und wird uns noch häufiger über den Weg laufen. In diesem Beispiel übergeben wir in einem einzigen Befehl sogar zwei verschiedene SQL Server in den Parametern. Damit wird einer der Gründe deutlich, wieso dbatools so nützlich ist, denn mit fast jedem dbatools Befehl lassen sich mehrere SQL Instanzen gleichzeitig ansprechen!
Bevor wir mit der Migration loslegen, ist es eine gute Idee zu überprüfen, ob wir uns mit unseren SQL Servern verbinden können. Das Prinzip des Verbindungsaufbaus ist das gleiche wie bei SSMS. Wir benutzen dazu den Connect-DbaInstance
Befehl.
Connect-DbaInstance -SqlInstance OPWin22Sql19,OPWIN22SQL17

Verbindungen lassen sich auch auf Instanzen mit vom Standard abweichenden Port Nummern herstellen. Ebenso ist es möglich sich mit SQL Server Authentication, Azure Active Directory (AAD) oder Azure SQL Database zu verbinden, und das sogar bei Nutzung von Multifactor authentication (MFA). Für diese Szenarien schaut man gegebenenfalls in die offizielle Dokumentation.
An dieser Stelle bietet sich noch ein Datenbank-Check zum Beispiel mit CheckDB an, um die Integrität unserer Datenbank zu überprüfen. Wie man CheckDB richtig verwendet und Datenbanken gegebenenfalls reparieren kann in diesem Artikel nachlesen.