SQL-Express Datenbanken sichern

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.