netzheimer
Goto Top

Datenbank automatisch Wiederherstellen

SQL-Server 2005

Moin.

Ich möchte jeden Tag das Backup des Vortages vom Produktivsystem als Restore in mein Test- und auch das Entwicklungssystem automatisch einspielen.

Das Vortagesbackup ist eines von 10 Backup-Files (+10 Transaktionsprotokolle) (Aufbau: DatenbanknameYYYYMMDDHHMM.bak)

Gibt es eine Möglichkeit über ein T-SQL im Wartungsplan diesen Vorgang automatisch darzustellen?

Mein Ansatz war: Filenamen als Variable aufbauen, aber irgendwie bekomme ich das nicht hin.

Danke für eure Hilfen.

Daniel

Content-ID: 101811

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

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

mnbesc
mnbesc 14.11.2008 um 09:20:00 Uhr
Goto Top
Aloa,

zuerst die gute Nachricht... ich hab so ein Skript schon mal erstellt, aber gerade nicht griffbereit.
Ich kann es morgen posten.

Bis dann.

mnbesc
problemsolver
problemsolver 14.11.2008 um 09:36:37 Uhr
Goto Top
Hallo,

sowas Ähnliches habe ich schon umgesetzt.
Kurz zu meiner Vorgehensweise:
Es wird über ein Batch Script ein Backup einer Datenbank erstellt und dieses Backup wird dann über die gleiche Batch-Datei auf einem anderen Rechner in eine Datenbank "restored".
Hierzu nutzt dann das BackupRestoreScript zusätzlich eine Komprimierung, um die Bandbreite zwischen den beiden Systemen zu schonen. (sehr angenehm bei niedriger Bandbreitenverfügbarkeit)

Hierzu habe ich grob eine Übersicht skizziert:
Global: Es wird sqlcmd oder osql benötigt (beide Systeme), psexec von sysinternals und einen Packer deiner Wahl z.B. 7-zip.... naja und n paar Scripting Kenntnisse face-smile

1) Überprüfung auf Erreichbarkeit des "Restore-Gerätes" anhand ping -n 2 restorerechner
1a) Abbruch bei Errorlevel NEQ 0
2) Erstellen des backup und restore Scriptes
3) Ausführen des Backupscriptes
4) Packen und Kopieren des gepackten Backups auf den Zielserver
5) Mittels psexec (sysinternals) ein Script auf dem Zielsystem starten, was die gepackte Datei wieder entpackt. (Spart ne Meeeenge Bandbreite... ich hatte nur eine 2 MBit Leitung zur Verfügung und das Backup / Restore Vorhaben würde einfach zu lange dauern... face-wink )
6) Starten des restorescripts auf dem Zielsystem.
7) Löschen der Temporären Dateien und abschließen des JOBs. Bei einem Fehler wird eine E-Mail oder net use Nachricht geschickt.

Beispielauszüge aus meinem Backup und Restore Script:
:: [...]
set "backupscript1=BACKUP DATABASE [%backupDBname%] TO  DISK = N'%backupspeicherort%' WITH NOFORMAT, NOINIT,  NAME = N'%backupDBname%-Vollständig Datenbank Sichern', SKIP, NOREWIND, NOUNLOAD,  STATS = 10"  
:: [...]
set "restorescript1=RESTORE DATABASE [%restoreDBname%] FROM  DISK = N'%restoreSpeicherPfadLokal%\%GlobalBackupName%' WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10"  
:: [...]
"%SQLCMDoderOSQLexe%" -S %backupSERVER% -U %backupUSER% -P %backupPASS% -i "%~dp0\%backupscriptname%"  
:: [...]
"%SQLCMDoderOSQLexe%" -S %restoreSERVERInstance% -U %restoreUSER% -P %restorePASS% -i "%~dp0\%restorescriptname%"  
:: [...]

Naja... ich denke mal, dass das als Denkunterstützung schon mehr wie ausreichen ist und wünsch Dir viel Erfolg und Spaß bei der Umsetzung!

Gruß

Markus
Netzheimer
Netzheimer 14.11.2008 um 09:46:34 Uhr
Goto Top
Der Ansatz ist absolut brauchbar, jedoch wollte ich den Vorgang als T-SQL-Skript im Wartungsplan haben.

Danke für die Idee.
Netzheimer
Netzheimer 14.11.2008 um 09:46:54 Uhr
Goto Top
Da warte ich doch gerne etwas.
Netzheimer
Netzheimer 17.11.2008 um 08:09:37 Uhr
Goto Top
...dann hilf dir selbst!

Ich habe eine neue Backup-Datei angelegt, die jeden Tag überschrieben wird. Aus dieser ziehe ich mir die Restores.

Die anderen Backups (tgl. Vollständig...) bleiben somit unangetastet und ich habe was ich wollte.