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.
