SQL Express – Sicherung mit der Powershell

Hinweise: 11.11.2016 Anleitung für die Aufgabenplanung ergänzt

Die SQL Express Edition erfreut sich gerade für kleine Anwendungen großer Beliebtheit da sie keine Lizenzkosten verursacht. Diese Beliebtheit dürfte sogar noch steigen seit dem Microsoft mit dem Service Pack 1 für den SQL Server 2016 viele Funktionen der Standard und sogar Enterprise Edition nun auch in der Express Edition verfügbar macht.

Nun stehen hier auch viele der InMemory Features und Sicherheitsfunktionen wie AlwaysEncrypted auch in der Express Edition bereit.

Informationen zu allen Neuerungen findet man in der offiziellen Ankündigung unter https://blogs.msdn.microsoft.com/sqlreleaseservices/sql-server-2016-service-pack-1-sp1-released/

Der Agent

Etwas was aber weiterhin nicht enthalten ist, ist der SQL Server Agent. Da nicht zu erwarten ist, dass sich dies noch ändert, muss man sich Alternativen überlegen wie man geplante Aufgaben abgebildet bekommt.

Problem Datensicherungen

Dieser Umstand wird gerade für die Datensicherung der Datenbank zum Problem. Mit dem Bordmitteln des SQL Server Express gibt es keine Möglichkeit seine Datenbanken automatisch / zeit basiert zu sichern.

Bei der Suche im Internet findet man häufig die Vorgehensweise die Datenbank Datei direkt zu sichern indem man die mdf Datei kopiert.

Der Nachteil an dieser Methode ist aber, dass der SQL Server Dienst für den Zeitraum der Sicherung nicht laufen darf, da sonst die Datei(en) noch im Zugriff sind.

Ein Weitere Nachteil ist zudem dass man die Datenbank nur im Wiederherstellungsmodel „Einfach“ betreiben kann da eine Log Sicherung und damit das leeren des Transaktionslogs nicht möglich ist.

Alternative Powershell

Microsoft stellt aber mit der Powershell eine einfache Möglichkeit bereit wie man auch in der Express Edition seine Datenbanken sichern kann.

Hierfür braucht man lediglich ein kleines Powershell Skript und den Aufgaben Planer von Windows und fertig ist die Sicherungslösung.

$Server= „SERVER“ # Servername des Windows Servers
$Instanz= „INSTANZ“ # Instanz Name des SQL Servers  
$Zielpfad= „c:\temp\backup\“ # Ziel der Sicherung
$date = Get-Date -Format o | foreach {$_ -replace „:“, „.“}
$dbs= dir sqlserver:\sql\$Server\$Instanz\databases -force | Where-Object {$_.name -notlike „tempdb“}
if(!(test-path $zielpfad)){New-Item $zielpfad -ItemType directory}
$dbs | foreach-object {Backup-SqlDatabase -ServerInstance $server\$Instanz -Database $_.name -BackupFile „$zielpfad\$_$date.bak“}

Das Skript sichert alle Datenbanken außer der TempDB in das Zielverzeichnis. Für jede Datenbank wird ein eigener Ordner erstellt und jede Sicherungsdatei erhält einen Zeitstempel.

Das Skript speichert man ab und ruft es über den Aufgabenplaner von Windows im gewünschten Intervall auf.

Um eine Transaktionslog Sicherung für eine Datenbank durchzuführen nutzt man einen zusätzlichen Parameter

Backup-SqlDatabase -ServerInstance Computer\Instanz -Database MEINEDB -BackupAction Log

Aufgabe erstellen

Im Windows Aufgaben Planer erstellt man nun eine neue Aufgabe.

Im Reiter „Aktionen“ wählt man „Programm starten“ aus und wählt als Programm die Powershell EXE aus. Diese findet man im typischerweise in folgendem Verzeichnis:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Bei „Argumente hinzufügen“ gibt man nun den Pfad und den Namen des Powershell Skriptes an.

aufagabe

Fertig ist die Sicherung der SQL Server Datenbanken.

Ich wünsche viel Spaß mit der Express Edition.

Advertisements

2 Gedanken zu “SQL Express – Sicherung mit der Powershell

  1. Gerd 13. September 2017 / 9:49

    Hallo
    Ich habe da irgendwie das Problem mit der Zeile:
    „$dbs= dir sqlserver:\sql\$Server\$Instanz\databases -force | Where-Object {$_.name -notlike „tempdb“} “

    entweder ich übersehe was oder begreif es nicht, wenn ich nur diese Zeile als test ausführe bekomme ich diese Meldung:
    dir : Cannot find drive. A drive with the name ’sqlserver‘ does not exist.

    Was muss ich da anpassen?
    Danke für dein Feedback.

    mfg
    Gerd

    Gefällt mir

  2. Benjamin Hoch 18. September 2017 / 9:58

    Die Frage hatte sich ja über das TechNet Forum beantwortet? Wenn nicht einfach nochmals melden.
    Gruß Benjamin

    Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s