jeudi 27 novembre 2008

Utilitaires pour SQL Server 7

Cet article est surtout dédié au SQL 7... toujours très actif dans notre société.

Stored procedures
sp_force_Shrink_log
Stored procedure de Andrew Zanevsky (AZ Databases) pour SQL 7.
Cette stored proc est l'outil indispensable pour tronquer le log-file de façon significative (permettant ainsi a ce dernier de retrouver une taille acceptable). J'ai déjà été amener à l'utiliser plusieurs fois avec grand success.
Voir cet artcile sur SQL Server Central


EXEC sp_force_shrink_log @target_size_MB=250

sp_who3
Cette stored procedure pour Sql7 & Sql2000 de Rodrigo Acosta fournit une liste très complete de tous les processus SQL en cours d'exécution. On y trouvera les commandes exécutées, les processus bloqués, etc.
Nouvelle ressource apparue durant ma formation SQL, sp_who 3 peut fournir des informations de premier plan lors d'une situation de stress.
sp_Who3 permet de filter sur spid, login, hostname et dbname.
Voir cet article sur SQL Server Central.

EXEC sp_Who3 @DBName='MyDatabase'

sp_activity
Stored procedure de Mitch van Huuksloot pour SQL 2000 fournissant une liste des processus SQL, les commandes exécutées et des locks actifs.

Pour plus d'information, voir cet article.

Note:
Pour fonctionner correctement sur SQL7:
  1. Remplacer le data type BigInt par Numeric.
  2. Remplacer la lecture de la colonne req_transactionID (inexistante en SQL7) par NULL
sp_msforeachtable
sp_msforeachdb et sp_msforeachtable sont deux petites perles non documentée facilitant grandement la vie des administrateur.
En effet, cette stored procedure peut lancer des commandes (séparées par des point-virgule) pour toutes les tables d'une base de donnée (ou toutes les bases de données).

Dans l'exemple suivant, la stored procedure génère un script de maintance.
Cette approche permet de modifier le script avant de l'exécuter... utile si l'on sait que le checktable sur notre table d'audit met 2h40m.

sp_msforeachtable 'print ''DBCC CHECKTABLE( "?" )'' ; print ''GO'' ;' 

Un autre exemple plus expéditif

sp_msforeachtable 'print ''Check table ?'' ; DBCC CHECKTABLE( ''?'' ) ; GO ;'

Forcer le check-point
Permet d'imposer un check point (ecriture des données dans le data file) afin de pouvoir tronquer le log file sereinement.

CHECKPOINT

Déplacer la TempDB sur un autre drive
La tempDB est sollicitée pour certaines opérations SQL. C'est en autre le cas de DBCC CHECKTABLE.
Dans ce cas, il est nécessaire d'autoriser la TempDB à grandir... mais que faire lorsque 11 Go sont nécessaires et que seulement 4 Go sont disponible sur le disque system?
Et bien, il faut déplacer la DB temporaire sur un autre disque.

Méthode 1:
Facile et efficace, elle permet de faire rapidement l'operation avec deux commandes SQL.
Mais attention, après l'excution des commandes, il faut:
  1. Arrêter et redémarrage le service SQL.
  2. Effacer manuellement les anciens fichiers TempDB (surtout s'ils sont gros).
USE master
GO
ALTER DATABASE TempDB MODIFY FILE
    (NAME = tempdev, FILENAME = 'd:\MSSQL7\data\tempdb.mdf')
GO
ALTER DATABASE TempDB MODIFY FILE
    (NAME = templog, FILENAME = 'd:\MSSQL7\data\templog.ldf')
GO


Pour plus d'informations, voir cet article sur blog.sqlauthority.com.

Méthode 2:
En utilisant cette méthode plus alambiquée décrite sur cet article de Microsoft MSDN

Single User Mode
Placer la base de donnée en modesimple utilisateur (single user) est nécessaire lorsqu'un DBCC CHECKTABLE est exécuté avec un paramétrage de réparation.
Il est plus facile de placer une base de donnée en Single User Mode en utilisant l'interactive SQL.

EXEC sp_dboption 'pubs', 'single user', 'TRUE'

Utilitaires DBCC pour SQL 7
  • DBCC CHECKTABLE( 'tablename' )
    DBCC CHECKTABLE( 'tablename', REPAIR_ALLOW_DATA_LOSS )
  • DBCC CHECKDB ( 'DBName' )
    Attention: peut literallement exploser la tempDB et remplir completement l disque système. A utiliser avec partimonie sur les grosses bases de données. Préférez DBCC CheckTable
  • DBCC command references chez Microsof.
  • DBCC undocumented stuff article très intéressant du Sql User Group belge.
    C'est en autre là que j'ai déniché sp_msforeachtable et sp_msforeachtable.

Aucun commentaire: