fugu
Goto Top

Microsoft SQL Server Sicherung per Batch

Hey ho ihr Batch und Datenbank Spezis!

Über ein installiertes SQL Management Studio kann man ja einfach per Rechtsklick Datenbanken sichern. Das ist für einen Umzug der Datenbank oder zu anderen Gelegenheiten sicher praktisch und sinnvoll.

Ich würde eine spezielle Datenbank aber gerne täglich automatisiert sichern und suche nach eine Batch-Lösung dafür.

Microsoft hat in seinen Docs einen Einzeiler für die Linux Konsole, für Windows jedoch muss man erst Raketentechnik studieren, um diesem Skript folgen zu können.

Da muss es doch über Sqlcmd noch irgendwelche Möglichkeiten geben... oder nicht?!
In der normalen Befehlsausgabehilfe
sqlcmd /?
erkenne ich aber nur Verbindungsmöglichkeiten zu einer Datenbank - keine Schalter für Sicherungen.

Hat jemand einen Tip?

Thx, Fugu

Content-ID: 543944

Url: https://administrator.de/contentid/543944

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

bloodstix
bloodstix 05.02.2020 aktualisiert um 15:13:36 Uhr
Goto Top
Hi,

ist eigentlich recht einfach. Hier das SQL-File:
DECLARE @name VARCHAR(50)
DECLARE @path VARCHAR(256)
DECLARE @fileName VARCHAR(256)

SET @path = 'C:\Sicherungspfad\'  

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('tempdb')  
 
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name
 
WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '.BAK'    
       BACKUP DATABASE @name TO DISK = @fileName  
       FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor
Das sichert alle Datenbanken als c:\Sicherungspfad\Dbname.BAK
Kannst natürlich auch die Schleife entfernen und nur das "BACKUP DATABASE 'Dbname' TO DISK = 'C:\Sicherungspfad\Db.BAK' direkt aufrufen.

Ausführen tust du es so:
@ECHO OFF
SQLCMD -E -S ServerName\MySQL-Instanzname -i C:\PfadZumObigenSQL.sql > C:\MySQL-Backup.log 2>&1

Pfade kannst du entsprechend anpassen.

Grüße
bloody
142232
142232 05.02.2020 aktualisiert um 15:13:04 Uhr
Goto Top
SeaStorm
Lösung SeaStorm 05.02.2020 um 15:24:01 Uhr
Goto Top
Hi

dafür gibt es im ssms den Wartungsplan und da kann man auch eine nächtliche Sicherung mit allen schweinereien einplanen
sabines
sabines 05.02.2020 um 15:37:21 Uhr
Goto Top
Zitat von @SeaStorm:
dafür gibt es im ssms den Wartungsplan und da kann man auch eine nächtliche Sicherung mit allen schweinereien einplanen

Moin,

Recht hast Du, nur die gibt's in den Express Versionen nicht, von daher per cmd/powershell ist schon richtig und/oder gescheites Backup System.

Gruss
fugu
fugu 05.02.2020 um 17:06:38 Uhr
Goto Top
Wow, das Ding kannte ich noch nicht. Hammer! Danke!
sabines
sabines 06.02.2020 um 08:46:40 Uhr
Goto Top
Zitat von @fugu:

Wow, das Ding kannte ich noch nicht. Hammer! Danke!

Ähem, was genau machst Du da? face-wink
fugu
fugu 07.02.2020 um 15:34:49 Uhr
Goto Top
Ich meine den Wartungsplan ... ist ein voller SQL - nicht die Express Edt.
Habe ich auf den falschen Post geklickt zum Antworten? Sorry face-wink
SachsenHessi
SachsenHessi 03.06.2020 um 13:35:47 Uhr
Goto Top
Hallo,

Script-Beispiel (DasSQLBackUpScript.sql):
DECLARE @Datum varchar(10)
DECLARE @Heute datetime
DECLARE @DB11 varchar(500) --DB
DECLARE @DB12 varchar(500) --DB

SET @Heute = GETDATE()
SET @Datum = CONVERT(VARCHAR(10), @HEUTE, 112) 

PRINT @Datum
PRINT 'START BACKUP ['  + @Datum + ']'  
PRINT '========================================================='  
SET @DB11 = 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.2\MSSQL\Backup\' + @Datum + '_myDB.bak'   
SET @DB12 = @Datum + '_myDB.bak'   

BACKUP DATABASE <DBName> TO DISK = @DB11
                             WITH Name = @DB12 , COPY_ONLY;
PRINT ' '  
PRINT '========================================================='  

PRINT 'ENDE BACKUP [' + @Datum + ']'  
-- ----------------------------------------------

Das ganze aufrufen mit:
sqlcmd -E -S DBSERVER\SQLEXPRESS -i C:\xxxxxx\DasSQLBackUpScript.sql  -o "C:\xxxxxx\Logs\SQLLOG.txt" -b -m-1  
Den Aufruf kannst Du auch in den Windows-Scheduler setzen.

Einziger Nachteil beim Zurückspielen musst Du händisch (oder per Script) die User anpassen (bzw. evtl Neuanlegen).

SH