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 erkenne ich aber nur Verbindungsmöglichkeiten zu einer Datenbank - keine Schalter für Sicherungen.
Hat jemand einen Tip?
Thx, Fugu
Ü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 /?
Hat jemand einen Tip?
Thx, Fugu
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 543944
Url: https://administrator.de/contentid/543944
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
8 Kommentare
Neuester Kommentar
Hi,
ist eigentlich recht einfach. Hier das SQL-File:
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:
Pfade kannst du entsprechend anpassen.
Grüße
bloody
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
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
Wer hinkt denn noch mit Batch durch die Gegend
https://www.sqlservercentral.com/articles/backing-up-sql-server-database ...
https://www.sqlservercentral.com/articles/backing-up-sql-server-database ...
Zitat von @SeaStorm:
dafür gibt es im ssms den Wartungsplan und da kann man auch eine nächtliche Sicherung mit allen schweinereien einplanen
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
Ähem, was genau machst Du da?
Hallo,
Script-Beispiel (DasSQLBackUpScript.sql):
Das ganze aufrufen mit:
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
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
Einziger Nachteil beim Zurückspielen musst Du händisch (oder per Script) die User anpassen (bzw. evtl Neuanlegen).
SH