Wer eine SQL-Express nutzt möcte natürlich auch seine Datenbanken sichern. Es gibt einige Tools, wie „SQL Backup and FTP“ welche das ganz nett, auch in beschränkter Freeware-Variante machen. Man kann aber auch folgendes tun.
Vorbereitung:
Zunächst benötigen wir die SQLCMD-Hilfsprogramme. Die bekommt man z.B. hier: SQLCMD-Hilfsprogramm
Nach der Installation erstellen wir uns zunächst ein SQL-Statement wie folgt und speichern es auf dem SQL-Server als „MeinStatement.sql“ ab
---alle Datenbanken sichern DECLARE @name VARCHAR(50) -- database name DECLARE @path VARCHAR(256) -- path for backup files DECLARE @fileName VARCHAR(256) -- filename for backup DECLARE @fileDate VARCHAR(20) -- used for file name -- Lege Verzecihnis für Backup-Dateien fest (Pfad ändern mit Backslash am Ende, das Hochkomma vorn und hinten belassen) SET @path = 'D:\MSSQL\Backup\' -- Lege Dateinamen fest (Datenbankname gefolgt von datum & Zeitstempel) SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','') DECLARE db_cursor CURSOR READ_ONLY FOR SELECT name FROM master.dbo.sysdatabases --Schliesse Systemdatenbanken aus WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN SET @fileName = @path + @name + '_' + @fileDate + '.BAK' BACKUP DATABASE @name TO DISK = @fileName FETCH NEXT FROM db_cursor INTO @name END
Danach suchen wir uns den Speicherort der SQLcmd.exe (bei mir unter „C:\Program Files\Microsoft SQL Server\110\Tools\Binn\“, dies ist aber mitunter Versions- & Installationsabhängig). Wer möchte kann diese Pfad auch als Systemvariable setzen, wichtig am Ende den Backslash nicht zu vergessen.
Nun bauen wir uns ein kleines, klassiches BATCH-Script und passen die Werte für die SQL-Instanz und den Pfad zur vorher erstellen Statementfile an:
@echo off "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe" -E -S Servername\Instanzename -i ?.\????\MeinStatement.sql @pause exit
Nun können wir das Script als Admin starten und unsere Datenbanken werden gesichert.
Wer lieber Powershell zum ausführen des SQL-Statement nutzen mag:
$sql = @" sqlcmd -S "Servername\Instanzname" -U a -P a -i "LW:\ordner\MeinStatement.sql" "@ Invoke-Command $sql
Das ganze dann per Zeitplaner (Aufgabenplanung) in beliebiger Häufigkeit machbar.