Saturday, January 24, 2009

Éxécuter un script sur plusieurs serveurs

Il y arrive parfois qu'on veut exécuter un script sur plusieurs serveurs en même temps, cependant on ne veut pas ouvrir un Query Analyser ou Studio Management et perdre du temps.

Voici une façon plus rapide et dans l'exemple on va utiliser un script sqlversion.sql.

Préparation :
1- Créer un fichier servers.txt qui contient servername, pwd, user par ligne.
svr01,abc,sa
svr02,dce,sa
....

2- Créer un fichier SQLScripts.bat qui contient
ECHO OFF
REM This procedure takes the server name as parameter
REM ------------------------------------------------------------
rem This is usefull to make the maintenance of the SQL databases
rem It reindexes and makes backups of all databases( except system db) on an SQL server
rem This batch could be run in remote mode for all SQL servers

REM SETTINGS that need to be changed from one server to an other
REM ------------------------------------------------------------
SET SQLSERVER=%1
SET USER=%2
SET PWD=%3
rem SET SQLSERVER=SRVSQLTEST-MTL
rem SET USERID=
rem SET PASSWORD=

rem DATE /T >> %SQLSERVER%.log
rem TIME /T >> %SQLSERVER%.log

rem echo allo
OSQL -U%USER% -P%PWD% -S%SQLSERVER% -dMASTER -n -b -r0 -i"sqlversion.sql" -o%SQLSERVER%.log
pause
REM check for the errors
REM ----------------------
IF %ERRORLEVEL% EQU 1 GOTO EXIT
ECHO OK %SQLSERVER%
GOTO END
:EXIT
ECHO ********** %SQLSERVER% ERROR *************
:END

3- un fichier RunScriptToAllMyServers.bat qui contient
FOR /F "eol=; tokens=1,2,3* delims=, " %%i in (servers.txt) do SQLScripts %%i %%j %%k
4- un fichier sqlversion.sql qui contient
SELECT @@Version

Exécution :
1- Remplir le fichier servers.txt avec les serveurs donc vous avez de besoin.
2- Remplacer sqlversion.sql par le nom de votre script
3- Les fichiers servers.txt, RunScriptToAllMyServers.bat, SQLScritpts.bat et votre script doivent être dans le même répertoire.
4- Le résultat se fait dans un fichier [SQLSERVER_NAME].log
5- Exécuter le fichier RunScriptToAllMyServers.bat

Tuesday, January 6, 2009

Détection du redémarrage de SQL Server

Il y a une façon très simple de détecter que SQL Server à été redémarré. Dans le log d’erreur, vous allez retrouver une ligne « starting databases… ». Cette ligne est toujours inscrite lors du redémarrage et cela pour toutes les bases de données de notre serveur.

Il y a une configuration possible pour ne pas afficher cette ligne « starting databases », cependant celle-ci s’applique uniquement à nos bases de données et non aux bases de données système.

Il y a une Stored Procedure qui lit le log de SQL Server, vous pouvez l’utiliser afin de faire votre propre script pour la détection du redémarrage.

Vous pouvez vous fier à cette ligne, j’ai validé les versions de SQL 2000-05-08 et cela en anglais et en français.