MS SQL Wartungs Batch
Hallo zusammen
Ich habe versucht einen Batch zu schreiben der die Wartung userer SQL Datenbank vereinfacht. (verwendete SW: SQL Server Management Studio Express 2005)
Ziel ist es folgende Scripts in einem Batch zusammenzufassen:
DBCC CHECKDB
REORGANIZEINDEX --> Script von MSDN zum identifizieren von Indexen welche fragmentiert sind und defragmentiert diese
DBCC SHRINKDATABASE
Da aber im Batch unterbrochen werden soll, wenn ein Fehler autaucht, habe ich versucht mit if %errorlevel%==0 das Script zu unterbrechen
Das ganze wird dann in einem log file gespeichert.
Da ich jedoch nicht so eine grosse Ahnung von Batch Files und SQL habe, habe ich keine Ahnung ob das ganze so einen Sinn macht oder ob es bessere Varianten gibt.
Der Batch funktioniert zwar und auch das Log wird wie gewünscht erstellt, jedoch habe ich keine Ahnung was passieren würde, wenn ein Fehler in einem der Scripts passieren würde.
Batch File:
[Edit Biber] Codeformatierung [/Edit]
Ich habe versucht einen Batch zu schreiben der die Wartung userer SQL Datenbank vereinfacht. (verwendete SW: SQL Server Management Studio Express 2005)
Ziel ist es folgende Scripts in einem Batch zusammenzufassen:
DBCC CHECKDB
REORGANIZEINDEX --> Script von MSDN zum identifizieren von Indexen welche fragmentiert sind und defragmentiert diese
DBCC SHRINKDATABASE
Da aber im Batch unterbrochen werden soll, wenn ein Fehler autaucht, habe ich versucht mit if %errorlevel%==0 das Script zu unterbrechen
Das ganze wird dann in einem log file gespeichert.
Da ich jedoch nicht so eine grosse Ahnung von Batch Files und SQL habe, habe ich keine Ahnung ob das ganze so einen Sinn macht oder ob es bessere Varianten gibt.
Der Batch funktioniert zwar und auch das Log wird wie gewünscht erstellt, jedoch habe ich keine Ahnung was passieren würde, wenn ein Fehler in einem der Scripts passieren würde.
Batch File:
@echo on
REM Wartung der DB Spirateam
cd /d D:\xxx\App\3pa\MsSqlDbms\Maintenance
del SpiraTeamDB_Maintenance.txt.temp
rename SpiraTeamDB_Maintenance.txt SpiraTeamDB_Maintenance.txt.temp
echo ***************************SQL Spirateam Check1*************************** >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
"D:\xxx\App\3pa\MsSqlDbms\90\Tools\Binn\SQLCMD.EXE" -S.\SQLExpress -i D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Check.sql -V 1 >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
if %errorlevel%==0 (
echo ***************************SQL Spirateam ReorganizeIndex*************************** >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
"D:\xxx\App\3pa\MsSqlDbms\90\Tools\Binn\SQLCMD.EXE" -S.\SQLExpress -i D:\xxx\App\3pa\MsSqlDbms\Maintenance\ReorganizeIndex.sql -V 1 >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
) else (
pause
)
if %errorlevel%==0 (
echo ***************************SQL Spirateam Shrink*************************** >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
"D:\xxx\App\3pa\MsSqlDbms\90\Tools\Binn\SQLCMD.EXE" -S.\SQLExpress -i D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Shrink.sql -V 1 >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
) else (
pause
)
if %errorlevel%==0 (
echo ***************************SQL Spirateam Check2*************************** >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
"D:\xxx\App\3pa\MsSqlDbms\90\Tools\Binn\SQLCMD.EXE" -S.\SQLExpress -i D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Check.sql -V 1 >> D:\xxx\App\3pa\MsSqlDbms\Maintenance\SpiraTeamDB_Maintenance.txt
) else (
pause
)
Pause
[Edit Biber] Codeformatierung [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 136103
Url: https://administrator.de/contentid/136103
Ausgedruckt am: 23.11.2024 um 03:11 Uhr
2 Kommentare
Neuester Kommentar
Moin yearzero,
willkommen im Forum.
Okay.........
Ja.......
Das klappt ja, aber.....
?? Ist das denn der ganze Plan?
Oder anders gefragt...
Ein Batch/Skriptablauf ist ja eigentlich nur sinnvoll, wenn sich dadurch etwas automatisieren lässt.
Und alle Erfolgs/Fehlerfälle irgendwie zu einem weiteren Prozess-Ablauf linksrum oder rechtsrum führen.
"alle Fälle" natürlich in der Bedeutung von "alle Fälle, an die ich beim Skripten gedacht habe".
Wenn du einen Schönwetterbatch schreibst wie oben, der -sollte kein Fehler auftreten- anstandslos jede Nacht um 03:34h automatish gestartet wird und sich im 03:37 wieder schlafen legt....okay.
Wenn aber die einzige Reaktion auf einen Fehler ist (so wie oben), dass morgens wenn die Putzfrau kommt irgendwo auf einem der Bildschirme ein "bitte beliebige Taste drücken" leuchtet...
Hmm.. dieser Plan hat noch Potentiale.
-> In das Log MUSS geschrieben werden, wenn es klappt, ja. Aber erst recht, wenn es nicht klappt und der Rest abgebrochen wurde.
-> Wenn der Batch nicht "allein" auf einen Fehler reagieren kann, sondern mit PAUSE warten muss, bis ein beherztes Admin-Wesen Strg-C drückt oder den Netzstecker zieht...
Dann wartet noch mit dem Skripten und sortiert/diskutiert erstmal, ob und was da automatisierbar ist.
[Ist nicht gehässig, sondern durchaus konstruktiv gemeint!]
Grüße
Biber
willkommen im Forum.
Da aber im Batch unterbrochen werden soll, wenn ein Fehler autaucht, habe ich versucht mit if %errorlevel%==0 das Script zu unterbrechen
Okay.........
Ja.......
Das klappt ja, aber.....
?? Ist das denn der ganze Plan?
Oder anders gefragt...
Ein Batch/Skriptablauf ist ja eigentlich nur sinnvoll, wenn sich dadurch etwas automatisieren lässt.
Und alle Erfolgs/Fehlerfälle irgendwie zu einem weiteren Prozess-Ablauf linksrum oder rechtsrum führen.
"alle Fälle" natürlich in der Bedeutung von "alle Fälle, an die ich beim Skripten gedacht habe".
Wenn du einen Schönwetterbatch schreibst wie oben, der -sollte kein Fehler auftreten- anstandslos jede Nacht um 03:34h automatish gestartet wird und sich im 03:37 wieder schlafen legt....okay.
Wenn aber die einzige Reaktion auf einen Fehler ist (so wie oben), dass morgens wenn die Putzfrau kommt irgendwo auf einem der Bildschirme ein "bitte beliebige Taste drücken" leuchtet...
Hmm.. dieser Plan hat noch Potentiale.
-> In das Log MUSS geschrieben werden, wenn es klappt, ja. Aber erst recht, wenn es nicht klappt und der Rest abgebrochen wurde.
-> Wenn der Batch nicht "allein" auf einen Fehler reagieren kann, sondern mit PAUSE warten muss, bis ein beherztes Admin-Wesen Strg-C drückt oder den Netzstecker zieht...
Dann wartet noch mit dem Skripten und sortiert/diskutiert erstmal, ob und was da automatisierbar ist.
[Ist nicht gehässig, sondern durchaus konstruktiv gemeint!]
Grüße
Biber