22 options existent au niveau d'une base pour en contrôler le fonctionnement. Par défaut, toutes les options sont à FAUX sauf celles qui sont à VRAI dans la base model. ces options sont modifiables via SQL Server Enterprise Manager ou par la procédure stockée système sp_dboption. Toutes les options correspondent à des bits dans les colonnes status et status2 de la table sysdatabases, bien que certains bits ne peuvent pas positionnés par le propriétaire de la base (comme lorsque la base est dans le processus de récupération).
Certaines de ces options ont des options SET correspondantes qui peuvent être positionnées à ON ou OFF pour une connexion particulière. Soyez attentif au fait que les drivers ODBC et OLE DB positionnent des options.
L'exécution de sp_dboption sans paramètre montre toutes les options modifiables:
> EXEC sp_dboption Settable database options: ----------------------------------- ANSI null default ANSI nulls ANSI warnings auto create statistics auto update statistics autoclose autoshrink concat null yields null cursor close on commit dbo use only default to local cursor merge publish offline published quoted identifier read only recursive triggers select into/bulkcopy single user subscribed torn page detection trunc. log on chkpt. |
Trois de ces options réagissent suivant le comportement des valeurs NULLs. La liste suivante décrit le sens de chacune de ces options.
ANSI warnings Positionnée à TRUE, des erreurs et des warnings sont déclenchés sur des opérations comme "division par zéro" ou "dépassement arithmétique".
auto create statistics Positionnée à TRUE, le statistiques sont créés automatiquement par l'optimiseur SQL Server sur les colonnes référencées par une clause WHERE. L'ajout de statistiques améliore les performances car l'optimiseur détermine plus finement comment il peut évaluer une requête. par défaut, l'option vaut TRUE.
auto update statistics Positionnée à TRUE, les statistiques existantes sont mises à jour automatiquement si les données des tables ont changées. SQL Server comptabilise le nombre de modifications et détermine quand les statistiques doivent être recalculées. Positionnée à FALSE, les statistiques existantes ne sont pas mises à jour automatiquement. Il faut le faire manuellement. Par défaut, auto update statistics vaut TRUE.
autoclose Positionnée à TRUE, la base est fermée et arrêtée proprement après le dernier utilisateur. Cette option vaut TRUE pour toutes les bases lorsque SQL Server tourne sur Windows 95 ou Windows 98. Quand un utilisateur essaye d'ouvrir la base à nouveau, elle est réouverture. Si la base a été arrêtée proprement, elle n'est pas initialisée (réouverture) tant qu'un utilisateur essaie de réutiliser la base la prochaine fois que SQL Server est démarrée. L'option autoclose est sympa pour les bases micro car elle vous permet de gérer les fichiers de bases de données comme des fichiers normaux. Vous pouvez les déplacer, les copier, etc. Cependant, cette option ne doit pas être utilisée pour les bases accédées par application qui multiplie les connexions et déconnexions à la base. Le surcoût d'ouverture et de fermeture de base entre chaque connexion est pénalisant.
autoshrink Positionnée à TRUE, les fichiers de base de données (données et journal) sont candidats pour une réduction périodique. La seule manière de libérer de l'espace dans les fichier du journal est de sauvegarder le journal ou de positionner l'option trunc. log on chkpt. à TRUE. Les fichiers du journal sont réduits au moment de la sauvegarde ou du troncate.
cursor close on commit Positionnée à TRUE, n'importe quel curseur ouvert est automatiquement fermé (norme SQL-92) quand la transaction est validée. Par défaut, l'option vaut FALSE et les curseurs restent ouverts au delà des limites de transaction et sont fermés à la fermeture de la connexion ou s'ils sont explicitement fermés. Ce paramètre n'a aucun effet sur ROLLBACK.
dbo use only Positionnée à TRUE, cette option évite que tous les utilisateurs excepté le propriétaire de la base d'utiliser la base. Cette option est utilisée de manière temporaire pour changer, par exemple, la structure de la base et empêcher les autres utilisateurs d'y accéder tant que les modifications ne sont pas terminées. (Si vous voulez éviter qu'un utilisateur utilise la base, vous n'avez qu'à ne pas l'ajouter à la table sysusers de la base.)
default to local cursor Positionnée à TRUE, les curseurs non spécifiés GLOBAL, ont une étendue locale au batch, à la procédure stockée ou au trigger dans lequel le curseur a été créé. Le curseur peut être référencé par des variables locales de curseur dans le batch, la procédure stockée, le trigger ou un paramètre en sortie de la procédure stockée. Quand l'option vaut FALSE, les curseurs non spécifiés LOCAL ont une visibilité globale à la connexion. Le curseur peut être référencé dans n'importe quelle procédure stockée ou batch de la connexion.
merge publish Positionnée à TRUE, la base peut être utilisée en réplication de type publication partagée. Cette option est positionnée par les assistants de réplication.
offline Cette option est utilisée pour les bases sur des supports amovibles comme les CDs. Cette option permet d'activer ou non une base pendant que SQL Server tourne.
published Cette option permet aux tables de la base d'être publiées par la réplication. Comme l'option merge publish, elle est positionnée par les assistants de réplication.
quoted identifier Positionnée à TRUE, les identifiants peuvent être délimités par des doubles cotes, et les chaînes par des cotes simples. Les identifiants sont des identifiants d'objets. Ces identifiants ne suivent pas les règles standard de Transact-SQL et peuvent inclure des caractères non autorisés ou des mots clés réservés. Par défaut, cette option vaut FALSE.
read only Utilisez cette option pour empêcher les opérations d'insertion, de modification ou de suppression de données, de création ou de suppression d'objets ou de changement de configuration. Les données ne peuvent pas être modifiées mais elle peuvent être lues.
recursive triggers Positionnée à TRUE, cette option permet aux déclencheurs d'être déclenchés de manière récursive. Les récursions indirectes se produisent quand un trigger est déclenché et provoque un opération qui, à son tour, déclenche un trigger sur une autre table, et e nouveau trigger déclenche une opération r la table originale qui fait que le trigger original est de nouveau déclenché. Par exemple, une application met à jour la table T1, qui provoque le trigger Trig1. Trig1 met à jour la table T2, qui déclenche le trigger Trig2. Trig2 à son tour met à jour T1, qui provoque à nouveau le trigger Trig1. La récursion directe intervient quand un trigger fait une action qui déclenche le même trigger. Par exemple, une application met à jour la table T3, qui déclenche le trigger Trig3. Trig3 met à jour la table T3, se qui provoque de nouveau le déclenchement de Trig3. Positionnée à FALSE, cette option ne permet pas l'appel récursif des triggers.
select into/bulkcopy Cette option permet certaines opérations non enregistrées au journal—comme les commandes UPDATETEXT ou WRITETEXT, SELECT INTO dans une table permanente, une copie rapide par blocs (BCP) ou un chargement de table. L'utilisation de ces opérations empêche la phase de restauration depuis un journal. En effet, l'utilisation des commandes BACKUP LOG est interdite. A la place, pouvez utiliser BACKUP DATABASE pour restaurer une base entière. (Positionner cette option à TRUE n'empêche pas les phases de restauration depuis un journal. Il faut opérer une opération non enregistrée au journal pour rendre la commande BACKUP LOG interdite.)
single user Cette option ne permet qu'une seule connexion active à SQL Server..
subscribed Cette option permet à une base de données de s'abonner à une base de données publiée (répliquée).
torn page detection Positionnée à TRUE, cette option provoquer le changement d'état d'un octet pour chaque secteur de 512 octets dans une page de données (8 KB) écrit sur disque. Cette option permet à SQL Server de détecter des I/Os incomplètes provoquées par des coupures de courant ou d'autres défaillances système. Si un bit est dans le mauvais état lorsque la page est lue plus tard par SQL Server, cela veut dire que la page a été mal écrite; une page torn a été détectée. Bien que les pages de données de SQL Server sont de 8 KB, les opérations I/Os disques sont faites par secteurs de 512 octets. 16 secteurs sont écrits pour chaque page. Une page torn survient si une coupure se produit entre le moment ou le système d'exploitation écrit le premier secteur de 512 octets sur disque et la fin de l'opération de 8 KB. Si le premier secteur de la page de données est écrite correctement sur disque avant le crash, il apparaît que la page sur disque a été correctement mise à jour et pourtant elle ne l'ai pas. L'utilisation de batteries de cache disque permet d'éviter ces cas de problème. Si une page torn est détectée, la base a besoin d'être restaurée car elle est physiquement inconsistante.
trunc. log on chkpt. Lorsque cette option est utilisée, à chaque fois qu'un checkpoint survient (lorsque les pages de données dans le cache qui ont été modifiés depuis le dernier checkpoint sont écrites sur disque), les transactions qui ont déjà été validées —et les enregistrements du journal mis sur disque—sont purgées du journal. Après la purge du journal, les opérations de BACKUP/RESTORE ne peuvent être faites qu'au niveau base de données, pas au niveau du journal de transactions. En positionnant cette option, vous n'avez pas besoin de vous souciez de la réduction du fichier journal à cause de son remplissage intensif. Vous ne pouvez pas empêcher l'enregistrement des opérations au journal, car elle ne pourraient pas être restaurées. La plupart du temps, quand quelqu'un veut empêcher la journalisation, la véritable question est, "Comment puis-je rendre la journalisation invisible et ne pas avoir à faire d'administration de base de données?" L'option trunc. log on chkpt. résout le problème: elle ne nécessite aucune intervention manuelle. Notez cependant que le journal doit être assez large pour contenir au moins une transaction. Cette option est souvent utilisée en mode développement des applications; vous pouvez aussi utiliser une stratégie de sauvegarde qui s'appuie sur les sauvegardes de base de données, non pas de journal.
L'option trunc. log on chkpt. provoque la réduction du journal (les transactions validées sont supprimées) à chaque processus CHECKPOINT. Lorsque l'option trunc. log on chkpt. est positionnée à TRUE, un processus checkpoint intervient pour la base chaque fois que la base devient pleine à 70 pour-cent. SQL Server ne peut pas provoquer un checkpoint cependant, si le journal ne peut être réduit à cause d'une transaction en cours. Lorsque 'option trunc. log on chkpt est positionnée, SQL Server provoque un checkpoint quand la log est complètement pleine. Cette option est très intéressante en mode de développement. Pendant que l'option trunc. log on chkpt est activée, la journal des transactions ne peut pas être sauvegardé. Utiliser la commander BACKUP LOG produit un message d'erreur qui vous indique d'utiliser la commande BACKUP DATABASE. La base tempdb est toujours réduite par le processus checkpoint, même si l'option trunc. log on chkpt est positionnée à FALSE.
NOTE
Les seules options qui peuvent être appliquées à la base master sont autoclose, torn page detection, et trunc. log on chkpt. La base tempdb ne peut avoir les options read only, single user, et dbo use only appliquées.
Seule une personne avec les rôles sysadmin ou dbowner peut changer une option. Pour changer une option, vous devez spécifier le nom de la base, l'option et TRUE ou FALSE. Vous n'avez pas besoin de fournir le nom complet de l'option pour quelle soit reconnue (seules quelques lettres suffisent). Par exemple, pour activer l'option published, select into/bulkcopy, et ANSI null default, vous pouvez taper:
> EXEC sp_dboption 'testdb', 'pub', TRUE > EXEC sp_dboption 'testdb', 'select into', TRUE > EXEC sp_dboption 'testdb', 'null default', TRUE |
Pour vérifier que les options sont activées, tapez
> EXEC sp_dboption 'testdb' |
et le résultat est le suivant:
The following options are set: ----------------------------------- select into/bulkcopy ANSI null default published |
L'exécution de la procédure stockée sp_helpdb sur une base donne la liste de certaines options positionnées à TRUE, mais pas toutes les options. (Cette procédure montre seulement les options présentes dans le masque de bits de sysdatabase.status et non présent dans sysdatabases.status2). Cependant, sp_helpdb fournit d'autres informations, comme la taille de la base, la date de création, et le propriétaire de la base. Exécutez sp_helpdb sans paramètre donne des informations sur toutes les bases du site. Les bases suivantes existent par défaut, et sp_helpdb fournit le résultat suivant:
> EXEC sp_helpdb name db_size owner dbid created status -------- ------- ----- ---- ----------- ---------------------- master 8.25 MB sa 1 Jun 19 1998 trunc. log on chkpt. model 1.50 MB sa 3 Jul 7 1998 no options set msdb 9.75 MB sa 4 Jul 7 1998 trunc. log on chkpt. Northwind 3.94 MB sa 6 Jul 7 1998 select into/bulkcopy, trunc. log on chkpt. pubs 2.00 MB sa 5 Jul 7 1998 trunc. log on chkpt. tempdb 8.50 MB sa 2 Jun 19 1998 select into/bulkcopy |