Nota Bene :
Ne pensez pas que ce problème n'est pas pour vous, parce que vous n'utilisez pas RAC ; les tests qui suivent sont réalisés avec 11.1.0.6 sous Linux et SANS RAC ; il est toujours possible que ce que je dis dépende de la version utilisée.
Prenons un paramètre qui n'est pas positionné par défaut dans le SPFILE de votre instance (Par exemple query_rewrite_enabled) et affichons la valeur courante pour commencer, dans le SPFILE, avec SQL*Plus :
SQL> show spparameters query_rewrite_enabledAffichez ensuite la valeur en cours d'utilisation
SID NAME TYPE VALUE
-------- ----------------------------- ----------- -----
* query_rewrite_enabled string
SQL> show parameter query_rewrite_enabledVous pourriez interroger les "fixed views" gv$spparameter, gv$parameter et gv$parameter2 pour obtenir le même résultat, mais la commande show de SQL*Plus est bien assez précise pour cette démonstration.
NAME TYPE VALUE
------------------------------------ ----------- -----
query_rewrite_enabled string TRUE
Vous pouvez positionnez une valeur différente pour l'instance comme ci-dessous (On supposera que votre instance s'appelle REDX :
SQL> alter systemVous remarquez que le paramètre est en fait positionné 2 fois et comme vous pouvez vous en douter, si vous arrêtez, redémarrez votre instance, le paramètre est TRUE en mémoire (C'est à dire celui avec le nom d'instance comme préfixe) :
set query_rewrite_enabled=TRUE
scope=spfile
sid='REDX';
System altered.
SQL> show spparameters query_rewrite_enabled
SID NAME TYPE VALUE
-------- ----------------------------- ----------- -----
REDX query_rewrite_enabled string TRUE
* query_rewrite_enabled string TRUE
SQL> shutdown abortSi maintenant vous positionnez le paramètre à FALSE pour '*' comme ci-dessous, en fait, ce que vous faites, c'est changez la valeur pour toutes les instances sauf celles pour lesquelles le paramètre a été explicitement positionné auparavant :
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1300324 bytes
Variable Size 310380700 bytes
Database Buffers 100663296 bytes
Redo Buffers 6139904 bytes
Database mounted.
Database opened.
SQL> show parameter query_rewrite_enabled
NAME TYPE VALUE
------------------------------------ ----------- -----
query_rewrite_enabled string TRUE
SQL> alter systemPour vous en persuader, arrêtez, redémarrez l'instance et vous verrez que la valeur du paramètre courant n'a pas changée, bien que vous l'ayez modifiée dans le SPFILE :
set query_rewrite_enabled=FALSE
scope=spfile
sid='*';
SQL> show spparameters query_rewrite_enabled
SID NAME TYPE VALUE
-------- ----------------------------- ----------- -----
* query_rewrite_enabled string FALSE
REDX query_rewrite_enabled string TRUE
SQL> shutdown abort;1er piège.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1300324 bytes
Variable Size 310380700 bytes
Database Buffers 100663296 bytes
Redo Buffers 6139904 bytes
Database mounted.
Database opened.
SQL> show parameter query_rewrite_enabled
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
query_rewrite_enabled string TRUE
Imaginons que pour une raison quelconque, vous ayez une telle configuration et soyons grand seigneur avec la même valeur et que vous ne vous souciez pas de la clause 'sid='
SQL> alter systemSi vous exécutez la commande ALTER SYSTEM SET sans la clause sid=, voici ce qu'il va ce passer :
set query_rewrite_enabled=TRUE
scope=spfile
sid='*';
SQL> alter system
set query_rewrite_enabled=TRUE
scope=spfile
sid='REDX';
SQL> show spparameters query_rewrite_enabled;
SID NAME TYPE VALUE
-------- ----------------------------- ----------- -----
* query_rewrite_enabled string TRUE
REDX query_rewrite_enabled string TRUE
SQL> alter systemVotre DBA a redémarré l'instance pour rien... Mais il y a pire !
set query_rewrite_enabled=FALSE
scope=spfile;
SQL> show spparameters query_rewrite_enabled;
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ------
* query_rewrite_enabled string FALSE
REDX query_rewrite_enabled string TRUE
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1300324 bytes
Variable Size 310380700 bytes
Database Buffers 100663296 bytes
Redo Buffers 6139904 bytes
Database mounted.
Database opened.
SQL> show parameter query_rewrite_enabled
NAME TYPE VALUE
------------------------------------ ----------- -----
query_rewrite_enabled string TRUE
2eme piège.
Poussons maintenant le vice avec un paramètre modifiable dynamiquement. Par exemple log_archive_dest_state_2. Modifions une première fois ce paramètre en précisant sid='REDX' comme ci-dessous :
SQL> alter systemSi la deuxième fois, on modifie le paramètre en omettant la clause sid= , comme ci-dessous :
set log_archive_dest_state_2=defer
sid='REDX';
System altered.
SQL> show parameter log_archive_dest_state_2;
NAME TYPE VALUE
------------------------------------ ----------- -----
log_archive_dest_state_2 string DEFER
SQL> alter systemmais si vous arrêtez et redémarrez l'instance, le paramètre reprend la valeur DEFER
set log_archive_dest_state_2=enable;
System altered.
SQL> show parameter log_archive_dest_state_2;
NAME TYPE VALUE
------------------------------------ ----------- ------
log_archive_dest_state_2 string ENABLE
SQL> shutdown abort;La raison est évidemment que le SPFILE a été modifie mais pour '*" et pas 'REDX', comme vous pouvez le voir ci-dessous :
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1300324 bytes
Variable Size 318769308 bytes
Database Buffers 92274688 bytes
Redo Buffers 6139904 bytes
Database mounted.
Database opened.
SQL> show parameter log_archive_dest_state_2;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2 string DEFER
SQL> show spparameters log_archive_dest_state_2;Conclusion...
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ------
REDX log_archive_dest_state_2 string DEFER
* log_archive_dest_state_2 string ENABLE
En ce début d'année, nous retiendrons ce qu'il y a de positif dans cet exemple ; évitez de laisser traîner des préfixes dans le fichier SPFILE, sauf si vous le faites exprès. Voici les 2 commandes qui seront vos amies désormais (RAC ou pas, vous l'avez compris !) :
SQL> alter systemEt n'oubliez pas que, même si vous faites confiance à Oracle, le plus souvent, vérifier ce que vous venez de faire permet simplement d'éviter se frapper la tête contre les murs quelques jours ou semaines après ! Ça aurait pu être un proverbe chinois, non ?
reset query_rewrite_enabled
scope=spfile sid='REDX';
SQL> show spparameters query_rewrite_enabled
SID NAME TYPE VALUE
-------- ----------------------------- ----------- -----
* query_rewrite_enabled string TRUE
Aucun commentaire:
Enregistrer un commentaire