SQL-Express Datenbanksicherung
Diese Anleitung beschriebt wie eine SQL-Datenbank in einem SQL-Express - Datenbank -Server auf Windows Server gesichert werden kann. Ich hatte das Problem da es für eine SQL-Express-Datenbank keine Backup-Möglichkeit von Microsoft gibt. Daher musste ich mir selber helfen....
los gehts....
Datei → Neu → Abfrage mit aktueller Verbindung
den folgenden Code in das sich öffnende Fenster kopieren
auf ausführen klicken
Das Programm schließen, die Änderungen müssen nicht gespeichert werden.
Aufgabenbeschreibung ausfüllen damit die Aufgabe später nochmal nachvollzogen werden kann → Weiter
Täglich anklicken → Weiter
Die Startzeit auf 0:30h legen → Weiter
Programm starten → Weiter
Den Pfad zum Script eingeben oder Auswählen → Weiter
Angaben kontrollieren, dann → Fertigstellen
Links unter „Aufgabenplanungsbibliothek“ wird der Auftrag jetzt aufgelistet und kann bei Bedarf bearbeitet werden.
Am Ende die erstellte Aufgabe nochmal doppelt anklicken und die Einstellung „Unabhängig von der Benutzeranmeldung ausführen“ anklicken und speichern.
Eine Datei C:\Datensicherung\aufraemen.bat erstellen mit folgendem Inhalt:
Das Script verschiebt alle älteren Dateien in einen neuen Ordner und löscht diesen dann....
Bei Hinweisen, Fehlern, Ergänzungen... bitte eine Nachricht schicken. Viel Erfolg
Meine Voraussetzungen
- Installierter und funktionsfähiger SQL-Server 2017 Express
- ODBC- Treiber Version 17
- Installiertes Microsoft SQL-Server Management Studio 18.5 (SSMS)
- die zu sichernde Datenbank ist bereits eingerichtet
Übersicht
- Mit Hilfe des SSMS wird eine Prozedur erstellt
- Diese Prozedur wir mithilfe eines Scripts aufgerufen
- Dieses Script wir mittels „geplanten Tasks“ regelmäßig aufgerufen
los gehts....
Prozedur erstellen
SSMS aufrufen und mit dem Server VerbindenDatei → Neu → Abfrage mit aktueller Verbindung
den folgenden Code in das sich öffnende Fenster kopieren
/ Copyright © Microsoft Corporation. All Rights Reserved.
// This code released under the terms of the
// Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
USE [master]
GO
/****** Object: StoredProcedure [dbo].[sp_BackupDatabases] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Microsoft
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================
CREATE PROCEDURE [dbo].[sp_BackupDatabases]
@databaseName sysname = null,
@backupType CHAR(1),
@backupLocation nvarchar(200)
AS
SET NOCOUNT ON;
DECLARE @DBs TABLE
(
ID int IDENTITY PRIMARY KEY,
DBNAME nvarchar(500)
)
-- Pick out only databases which are online in case ALL databases are chosen to be backed up
-- If specific database is chosen to be backed up only pick that out from @DBs
INSERT INTO @DBs (DBNAME)
SELECT Name FROM master.sys.databases
where state=0
AND name=@DatabaseName
OR @DatabaseName IS NULL
ORDER BY Name
-- Filter out databases which do not need to backed up
IF @backupType='F'
BEGIN
DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
END
ELSE IF @backupType='D'
BEGIN
DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
END
ELSE IF @backupType='L'
BEGIN
DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
END
ELSE
BEGIN
RETURN
END
-- Declare variables
DECLARE @BackupName varchar(100)
DECLARE @BackupFile varchar(100)
DECLARE @DBNAME varchar(300)
DECLARE @sqlCommand NVARCHAR(1000)
DECLARE @dateTime NVARCHAR(20)
DECLARE @Loop int
-- Loop through the databases one by one
SELECT @Loop = min(ID) FROM @DBs
WHILE @Loop IS NOT NULL
BEGIN
-- Database Names have to be in [dbname] format since some have - or _ in their name
SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'
-- Set the current date and time n yyyyhhmmss format
SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')
-- Create backup filename in path\filename.extension format for full,diff and log backups
IF @backupType = 'F'
SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
ELSE IF @backupType = 'D'
SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
ELSE IF @backupType = 'L'
SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'
-- Provide the backup a name for storing in the media
IF @backupType = 'F'
SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
IF @backupType = 'D'
SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
IF @backupType = 'L'
SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime
-- Generate the dynamic SQL command to be executed
IF @backupType = 'F'
BEGIN
SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
END
IF @backupType = 'D'
BEGIN
SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
END
IF @backupType = 'L'
BEGIN
SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
END
-- Execute the generated SQL command
EXEC(@sqlCommand)
-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
END
auf ausführen klicken
Das Programm schließen, die Änderungen müssen nicht gespeichert werden.
Script erstellen
- den Ordner C:\Datensicherung SQL\ erstellen
- die Datei backup.bat erstellen, bearbeiten und den folgenden Befehl einfügen
sqlcmd -U SA -P 123456 -S .\SQLEXPRESS -Q "EXEC sp_BackupDatabases @databaseName = vmeister, @backupLocation =N'C:\Datensicherung SQL\', @BackupType=N'F'"
- 123456 muss durch das Passwort für den Benutzer SA des SQl-Servers ersetzt werden!
- Die Datei speichern und 1x aufrufen. Nach einigen Sekunden müsste eine neue Datei im Ordner erstellt werden.
- den Datenbanknamen (im Beispiel "vmeister") muss man an seinen eigenen Datenbanknamen anpassen!
geplanten Task erstellen
- Die Windows Aufgabenplanung öffnen
- auf „Einfache Aufgabe erstellen…“ klicken
Aufgabenbeschreibung ausfüllen damit die Aufgabe später nochmal nachvollzogen werden kann → Weiter
Täglich anklicken → Weiter
Die Startzeit auf 0:30h legen → Weiter
Programm starten → Weiter
Den Pfad zum Script eingeben oder Auswählen → Weiter
Angaben kontrollieren, dann → Fertigstellen
Links unter „Aufgabenplanungsbibliothek“ wird der Auftrag jetzt aufgelistet und kann bei Bedarf bearbeitet werden.
Am Ende die erstellte Aufgabe nochmal doppelt anklicken und die Einstellung „Unabhängig von der Benutzeranmeldung ausführen“ anklicken und speichern.
Hinweise und Links
- Der Zielordner muss in das regelmäßige Backup eingeschlossen werden!
- https://docs.microsoft.com/de-de/sql/relational-databases/stored-procedu ...
- https://support.microsoft.com/en-us/help/2019698/how-to-schedule-and-aut ...
ältere Backups löschen
da die SQL-Backups jetzt täglich gesichert werden, wird natürlich der Datenbestand im Sicherungsordner immer größer. Mit dem folgenden Script lösche ich alle Backups, die älter als 4 Tage sind (natürlich nachdem ich sie vorher au ein externes Medium gesichert habe):Eine Datei C:\Datensicherung\aufraemen.bat erstellen mit folgendem Inhalt:
mkdir C:\TEMP
robocopy.exe C:\Datensicherung C:\TEMP *.bak /E /MOVE /MINAGE:4 /R:1 /W:1
rmdir C:\TEMP /s /q
Bei Hinweisen, Fehlern, Ergänzungen... bitte eine Nachricht schicken. Viel Erfolg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 607303
Url: https://administrator.de/contentid/607303
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
6 Kommentare
Neuester Kommentar
Klar, kann man auch händisch machen...
Ich nutze seit vielen Jahren das Tool SQLBackupAndFTP für die Datenbanksicherung von SQLExpress-Servern. Das Tool bietet dann noch ein paar Goodies, wie z.B. das automatische Zippen der Sicherungen und auch eine Transaktionsprotokollsicherung.
Die Free-Version dürfte für die meisten User vollkommen ausreichen.
Ich nutze seit vielen Jahren das Tool SQLBackupAndFTP für die Datenbanksicherung von SQLExpress-Servern. Das Tool bietet dann noch ein paar Goodies, wie z.B. das automatische Zippen der Sicherungen und auch eine Transaktionsprotokollsicherung.
Die Free-Version dürfte für die meisten User vollkommen ausreichen.
Zitat von @DiBaDu:
Ich hatte das Problem da es für eine SQL-Express-Datenbank keine Backup-Möglichkeit von Microsoft gibt. Daher musste ich mir selber helfen....
Ich hatte das Problem da es für eine SQL-Express-Datenbank keine Backup-Möglichkeit von Microsoft gibt. Daher musste ich mir selber helfen....
Wenn es keine Backupmöglichkeit von Microsoft gibt, warum benutzt du dann ausschließlich Tools und Code von Microsoft für dein Backup? 🙃 Aber gute Anleitung... 👍
/Thomas
Hallo,
ich nutze das Script auch, verwende aber zum routieren der Backups die delag32.exe
und für die E-Mail Benachrichtigung blat.
Bis jetzt (SQL 2012) funktioniert das prima.
grüße vom it-frosch
ich nutze das Script auch, verwende aber zum routieren der Backups die delag32.exe
und für die E-Mail Benachrichtigung blat.
Bis jetzt (SQL 2012) funktioniert das prima.
grüße vom it-frosch