zunaras
Goto Top

SQL Server 2005, nach Wartungsplan-Auftrag eine Batch-Datei ausführen

Hallo Leute,

der SQL-Server 2005 führt zu bestimmten Zeiten laut Wartungsplan Backups durch, Datenbanken und Protokolle.
Zwischendurch läuft immer wieder durch die geplanten Tasks ein Skript zum komprimieren der Backupdaten. Pro Tag habe ich so eine ZIP-Datei.

Meine Frage: Ich würde diesen Zip-Skript gerne ausführen nachdem das Vollbackup (morgens) und das Diff-Backup (Mittags) ausgeführt wurde. Kann man dieses über den Wartungsplan mitplanen? Entweder den Inhalt des Skriptes dort hinterlegen oder die Datei von dort starten.

Gruß
Zunaras

Content-Key: 130407

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

Printed on: April 19, 2024 at 09:04 o'clock

Member: Netzheimer
Netzheimer Dec 03, 2009 at 07:58:55 (UTC)
Goto Top
Hallo Zunaras,

kannst du es etwas deutlicher fassen?

Wenn ich es bisher verstanden habe, läuft das Zip-Skript außerhalb der Wartungstasks und es handelt sich um eine Batch-Datei.

Ein Versuch wäre ein Skripttask (T-SQL-Anweisung ausführen) und du rufst damit die Batch per XP_CMDSHELL auf, z.B. EXEC master..xp_cmdshell 'RunZip.BAT'

Gruß
Netzheimer
Member: Zunaras
Zunaras Dec 03, 2009 at 18:40:21 (UTC)
Goto Top
Hallo,

ja genau. So läuft es im Moment.

Die Möglichkeit mit der xp_cmdshell probier ich morgen aus.
Ist ein guter Tipp!

Gruß
Zunaras
Member: Zunaras
Zunaras Dec 04, 2009 at 10:16:51 (UTC)
Goto Top
Hallo,

ich komme leider nicht weiter.

Ich habe einen Job angelegt mit dem T-SQL-Befehl
EXEC xp_cmdshell 'C:\Dokumente\MITARBEITER\Server\stapel-server-SQL-zippen.bat'  

Diese wird irgendwie nicht komplett abgearbeitet. Die Dateien werden zwar verschoben aber das Winzip läuft nicht mehr an. Und verursacht dabei ständig CPU-Last. Ich glaub, da läuft eine Schleife.

Hier der Code von der bat.
md "d:\Sicherung"  
md "d:\Sicherung\Sicherung-SQL"  
md "d:\Sicherung\Sicherung-SQL-gezippt"  

@echo off & setlocal
set "Quelle=d:\sicherung\Sicherung-SQL"  
set "Ziel=d:\Sicherung\Sicherung-SQL-gezippt"  

pushd "%Quelle%"  
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"  
for /d %%i in (*.*) do call :ProcessDir "%%i"  
popd
goto :eof

:ProcessFile
for /f "tokens=1-3 delims=. " %%a in ("%~t1") do set "Datum=%%c%%b%%a"  
if not exist "%Datum%" md "%Datum%"  
move %1 "%Datum%"  
goto :eof

:ProcessDir
pushd %1
set "Datum=%~nx1"  
:zip
start /wait c:\programme\winzip\wzzip /m /u /yb /p "%Ziel%\Sicherung-SQL-projdat_%Datum%.zip" *.*  
dir /a-d >nul 2>&1 && goto :zip
popd
rd %1
goto :eof

Wenn ich die Batch per Hand starte, läuft es durch.

Gruß
Zunaras
Member: Netzheimer
Netzheimer Dec 07, 2009 at 08:04:40 (UTC)
Goto Top
Hallo Zunaras,

das Script legt den neuen Pfad jedesmal neu an? Wo und wann wird dann der Pfad wieder gelöscht?

Es kann sein, dass das Problem hier liegt. Eventuell machen hier auch pushd und popd Probleme, da er sich ja die %Quelle% merkt und anschließend wieder dorthin zurückkehrt. Ich bin mir nicht sicher, ob der Aufruf vom SQL-Server aus das so mitmacht.

Gruß
Netzheimer
Member: Zunaras
Zunaras Dec 07, 2009 at 13:55:35 (UTC)
Goto Top
Zitat von @Netzheimer:

das Script legt den neuen Pfad jedesmal neu an? Wo und wann wird dann der Pfad wieder gelöscht?

Gute Frage. Ich vermute die /m Moveoption von wzzip löscht es wenns leer ist.

Wenn es nicht funktioniert ist es nicht weiter schlimm.
Es war halt so eine Idee den Ablauf etwas zu vereinfachen.

Erstmal vielen Dank für die Hilfe!

Grüße
Zunaras