mardi 27 janvier 2009

SqlServer single-user mode

Parmi les opérations peu fréquentes sous SQL server, il y a l'isolation d'une base de donnée pour raison administrative.
Par exemple, lors remplacement d'une clé primaire "Clustered Primary Key" par une "unique constraint, il est nécessaire de retirer la clé primaire pour la remplacer ensuite par la contrainte (évident n'est-ce pas). Durant le laps de temps entre ces deux opérations, la table reste en libre accès. Il y a donc un risque non négligeable de voir s'insérer des enregistrements indésirables (ne répondant plus au contrainte).
Il convient donc de se protéger contre ce risque!
L'une des options disponibles est de placer la DB en single-user mode.

Note:
Dans notre environnement, nous n'utilisons que des scripts sql.

Et dans ce cadre, il est bien plus facile de placer la DB en single-mode que d'en sortir (arf!!).
Il faut avouer qu'Internet manque cruellement de documentation en la matière. Etant pris au piège pour la Nième fois, je me décide donc documenter cette fonctionalité.

Mettre une DB en Single-user mode
A mon avis, passer en single-user mode est beaucoup trop simple.
A noter que toutes les autres connections SQL sont interrompues.

ALTER DATABASE [TheDatabaseName]
SET SINGLE_USER WITH NO_WAIT

Par contre, pour en sortir, le plus efficace est encore d'utiliser:
C'est ici qu'il est moins facile de trouver la documentation adéquate.

ALTER DATABASE [TheDatabaseName]
SET MULTI_USER

ou encore

EXEC SP_DBOption 'TheDatabaseName', 'single user','false'

Démarrer SqlServer en Single-user mode
Démarrer le moteur SQL en Single-User mode peut s'avérer nécessaire lorsqu'il faut réparer la "master" db.
Voici quelques notes/références annexes:

Aucun commentaire: