yearzero
Goto Top

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:

@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]

Content-ID: 136103

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

Ausgedruckt am: 23.11.2024 um 03:11 Uhr

Biber
Biber 16.02.2010 um 19:37:14 Uhr
Goto Top
Moin yearzero,

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
yearzero
yearzero 17.02.2010 um 08:25:25 Uhr
Goto Top
Vielen Dank für die Antwort

Was deine Kritik angeht, hast du absolut recht. Es braucht immer noch irgendjemand der Anwesend ist wenn das Script läuft.

Es ist jedoch so, dass wir bis jetzt immer einmal im moment jedes dieser SQL Scripts einzeln ausgeführt haben um die DB zu warten. Dies benötigte auch einen Admin und brauchte auch mehr Zeit.
Ziel dieses Batches ist es, dass der Admin nur noch den Batch ausführen kann, statt jedes Script einzeln.
Aber langsam frage ich mich ob es wirklich Sinnvol ist so.