La théorie

Le fichier init.ora

BACK_GROUND_DUMP_DEST Emplacement où les fichiers traces des processus en arrière plan sont enregistrés.
USER_DUMP_DEST Emplacement où les fichiers traces sont créés.
COMPATIBLE Version du serveur avec lequel l'instance est compatible.
CONTROL_FILES Noms des fichiers de contrôle.
DB_BLOCK_BUFFERS Nombre de blocs mis en cache dans la SGA. La valeur par défaut et minimum est de 50 buffers.
DB_NAME Identifiant de la base de données de 5 caractères ou moins. (seul paramètre nécessaire à la création d'une base).
SHARED_POOL_SIZE Taille en octets de la zone de partage. (Default : 3 500 000).
IFILE Permet de référencer un autre fichier de paramètre à imbriquer dans la définition.
LOG_BUFFER Nombre d'octets alloués au buffer redolog dans la SGA.
MAX_DUMP_FILE_SIZE Taille maximum des fichiers trace, spécifiée en nombre de blocs de l'OS.
PROCESSES Nombre de processus de l'OS pouvant se connecter simultanément à cette instance.
SQL_TRACE Active on non l'outil de suivi SQL pour chaque session utilisateur (cf TKPROF pour exploiter les sorties).
TMED_STATISTICS Active ou non le minutage dans les fichiers trace et sur les écrans.

Démarrage de la base

     STARTUP <paramètre>;

NOMOUNT Créé la SGA et démarre les processus en arrière plan mais ne permet pas l'accès à la base (reste un OPEN à faire).
MOUNT Monte la base pour certaines activités DBA mais ne permet aucun accès à la base.
OPEN Permet aux utilisateurs d'accéder à la base.
EXCLUSIVE Autorise l'instance courant seulement à accéder à la base.
PFILE Spécifie le fichier d'initialisation à prendre en compte.
FORCE Annule l'instance courante avant d'effectuer un démarrage normal.
RESTRICT Autorise seulement l'accès aux utilisateurs avec le privilège RESTRICTED SESSION.
PARALLEL Serveur parallèle Oracle.
SHARED Autre terme pour parallèle.
RECOVER Démarre la restauration media quand la base démarre.

Sous NT, la base de données ORACLE s'exécute comme étant un service. Pour modifier le mode démarrage d'une base, il suffit de modifier le script strt<SID>.cmd dans %ORACLE_HOME%\DATABASE


Arrêt de la base

     SHUTDOWN <paramètre>;

NORMAL Les nouvelles connexions ne sont pas permises, le serveur oracle attend la fin de toutes les connexion.
IMMEDIATE Les utilisateurs sont déconnectés, les opérations en cours annulées (rollback).
ABORT L'instance se termine sans fermer les fichiers, une restauration d'instance est souvent nécessaire (recover) au prochain démarrage.
TRANSACTIONNAL Plus de connexion possible, les ordres SQL en cours s'exécute jusqu'à leur terme et aucun nouveau n'est accepté.

Vues dynamiques à connaitre

Il existe toute une série de vue dynamique dont v$fixed_table qui contient le nom de toutes les vues disponibles.

Les principales sont :

v$parameter Contient des informations sur les paramètres d'initialisation.
N.B. : la commande SHOW PARAMETER CONTROL
équivaut à : SELECT name,type,value FROM v$parameter WHERE name LIKE
'%control%';

v$system_parameter Contient des informations sur les paramètres d'initialisation et leurs modifications éventuelles.
v$sga Contient des infos sur la SGA.
v$option Contient la liste des options installées sur le serveur Oracle.
v$process Contient des informations sur les process actifs courant.
v$session Liste des information sur la session courante.
v$version Liste le numéro de version et les composants.
v$instance Affiche l'état de l'instance courante.
v$thread Contient des informations thread , par exemple sur les groupes redo log.
v$controlfile Liste le nom des fichiers de contrôle (Ne renvoie aucune valeur à l'état NOMOUNT).
v$database Contient des informations sur la base.
v$databafile Contient des informations sur les fichiers de données et de contrôle.
v$datafile_header Affiche des informations fichiers de données des fichiers de contrôle.
v$logfile Contient des informations sur les fichiers redo_log.

Certains paramètres sont modifiables grâce aux commandes ALTER SESSION ou ALTER SYSTEM.

Par exemple :
ALTER SESSION SET SQL_TRACE=true; (Session courante)
ALTER SYSTEM SET TIMED_STATISTICS=true; (jusqu'à l'arrêt de la base)
ALTER SYSTEM SET SORT_AREA_SIZE=131072 DEFERRED; (modifie la valeur de toutes les nouvelles connexions)

Pour trouver les paramètres modifiés:

SELECT name, isses_modifiable, issys_modifiable, ismodified
     FROM v$system_parameter
     WHERE ismodified!='false';

La vue dynamique v$system_parameter a les spécifications suivantes :

NAME Nom du paramètre.
TYPE Type de données de la valeur :
     1: Booléen
     2: Chaîne de caractères
     3: Entier
     4: Fichier
     5: Reservé
     6: Entier long
VALUE Valeur du paramètre.
ISDEFAULT Indique si la valeur du paramètre est celle par défaut ou non.
ISSES_MODIFIABLE Indique si le paramètre est modifiable ou non avec un ALTER SESSION.
ISSYS_MODIFIABLE Indique si le paramètre est modifiable ou non avec un ALTER SYSTEM.
DEFERRED Indique que le paramètre ne sera modifié qu'à partir de la prochaine session.
ISMODIFIED Indique comment le paramètre a été modifié. Si c'est par un ALTER SYSTEM, la valeur sera MODIFIED.
ISADJUSTED Indique si la valeur a été ajusté (par exemple, la valeur doit être un entier et on a saisi 9.6, alors Oracle ajuste la valeur à 10).
UPDATE_COMMENT Commentaire associé à la modification la plus récente.

Vues systèmes à connaître

Il y a 3 niveaux de vues préfixées par DBA_, ALL_ ou USER_ :
     DBA_XXX  : Permet de voir tous les résultats
     ALL_XXX  : Permet de voir tous les résultats accessible depuis le USER de l'instance
     USER_XXX : Permet de voir tous les résultats appartenant au USER de l'instance

Voici quelques exemples de vues intéressantes (leur nom est suffisamment parlant ):

     dba_data_files
     dba_extents
     dba_free_space
     dba_indexes
     dba_lobs
     dba_objects
     dba_roles
     dba_rollback_segs
     dba_segments
     dba_sys_privs
     dba_tab_columns
     dba_tables
     dba_tablespaces
     dba_users

Pour créer toutes ces vues, il suffit de se connecter en SYS et de lancer les scripts catalog.sql et catproc.sql du répertoire $ORACLE_HOME\admin.

Les Redo logs

Les fichiers redo logs permettent à la base de garder une trace de toutes les altérations de données, ainsi en cas de crash de la base, ils permettent de rejouer les modifications apportées à la base. Ces fichiers doivent être au moins au nombre de deux et nécessitent une attention toute particulière tant au niveau de la sauvegarde que de l'optimisation des accè;s.
En mode ARCHIVELOG, les redo logs sont archivés afin de garder une trace de toutes les modifications apportées et non pas seulement dans la limite de la taille des fichiers de redo log.
Les fichiers de redo log écrivent sur le disque le contenu de la mémoire lorsque le redo log buffer est plein. Il parait alors évident que la taille des fichiers de redo log doivent être au moins égale à celle du redo log buffer (paramètre log_buffer).
Il n'y a pas vraiment de règles pour déterminer la taille adéquate des fichiers de redo. Néanmoins il convient de garder en tête que plus le fichier est gros, moins vite il sera archivé et que plus il est petit plus vite il sera archivé. Le nombre d'archives généré doit être environ de deux par heure (du moins, c'est cette règle que j'applique ).
De plus, les fichiers doivent être, dans la mesure du possible, partagés entre plusieurs disques afin d'améliorer les temps d'accès et augmenter la sécurité, et surtout, sur un disque différent de la base de données. Effectivement, si les disques de la base de données sont altérés et que les redo logs sont dessus, ils seront eux aussi altérés, rendant impossible la restauration de la base.

Voici quelques requêtes relatives aux redo logs:

Pour voir l'état des archives logs :
ARCHIVE LOG LIST;
SELECT name, log_mode FROM v$database;
SELECT archiver FROM v$instance;

Pour voir les informations sur les groupes de redo log :
SELECT groups, current_group#, sequence# FROM v$thread;

Pour voir des informations sur les groupes et les membres :
SELECT group#, sequence#, bytes, members, status FROM v$log;
Le status redo logs peut-être :
     UNUSED   : jamais écrit
     CURRENT  : en ligne et en cours d'écriture
     ACTIVE   : en ligne et en cours d'archivage
     INACTIVE : en ligne, archivé et non utilisé

Pour voir des informations sur les fichiers de redo :
SELECT * FROM v$logfile;

Pour forcer le switch de groupe de redo log :
ALTER SYSTEM SWITCH LOGFILE;
Cette commande permet de changer de redo log courrant.

Pour forcer un point de synchronisation :
ALTER SYSTEM CHECKPOINT;
Cette commande permet d'archiver le redo log courant.

Pour ajouter un groupe de fichier de redo log :
ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\REDO03.LOG' size 10M;
ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\REDO04.LOG' size 10M;

Pour supprimer un groupe de fichier de redo log :
ALTER DATABASE DROP LOGFILE GROUP 2;

Pour supprimer un membre d'un fichier redo log ONLINE :
ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO02.LOG';

Pour déplacer le fichier de redo log ONLINE :
Ici nous allons illustrer comment utiliser les commandes précédentes. Imaginons le scénario suivant : nous avons deux groupes de fichiers (le groupe 1 et le 2) avec chacun deux fichiers de redo logs.
SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 ACTIVE
         2 CURRENT
         2 INACTIVE

1°) Créer un fichier de redo temporaire de la taille des redo logs :
ALTER DATABASE ADD LOGFILE GROUP 3 'g:\oracle\oradata\orafrance\REDO05.LOG' size 10M;

2°) Positionner le redo courrant sur ce nouveau fichier :
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;

SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 INACTIVE
         2 INACTIVE
         2 ACTIVE
         3 CURRENT

3°) Supprimer les fichiers de redo logs et les recréer dans le nouveau répertoire :
ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO01.LOG';
ALTER DATABASE ADD LOGFILE GROUP 1 'g:\oracle\oradata\orafrance\redo\REDO01.LOG' size 10M;
ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO02.LOG';
ALTER DATABASE ADD LOGFILE GROUP 1 'g:\oracle\oradata\orafrance\redo\REDO02.LOG' size 10M;
ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO01.LOG';
ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\redo\REDO03.LOG' size 10M;
ALTER DATABASE DROP LOGFILE MEMBER 'g:\oracle\oradata\orafrance\REDO02.LOG';
ALTER DATABASE ADD LOGFILE GROUP 2 'g:\oracle\oradata\orafrance\redo\REDO04.LOG' size 10M;

SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 UNUSED
         1 UNUSED
         2 UNUSED
         2 UNUSED
         3 CURRENT

Penser à supprimer les fichiers g:\oracle\oradata\orafrance\REDOxx.LOG rendus inutiles.

4°) Activer tous les groupes et supprimer le redo log temporaire :
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;

SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 INACTIVE
         2 INACTIVE
         2 CURRENT
         3 INACTIVE

ALTER DATABASE DROP LOGFILE GROUP 3;

SELECT group#, status FROM v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         1 INACTIVE
         2 INACTIVE
         2 CURRENT

Penser à supprimer le fichier g:\oracle\oradata\orafrance\REDO05.LOG rendu inutile.

Les Tablespaces

Les tablespaces sont des espaces disques réservés au stockage des données. Chaque tablespace est constitué d'au moins un datafile : fichier de données, créé sur un disque.

Pour créer un tablespace :
CREATE TABLESPACE ora_data
DATAFILE 'g:\oracle\oradata\orafrance\ORA_DATA01.dbf' size 100M,
         'g:\oracle\oradata\orafrance\ORA_DATA02.dbf' size 100M
MINIMUM EXTENT 500K (uniquement V8)
DEFAULT STORAGE (initial 500K next 500K MAXEXTENTS 500 PCTINCREASE 0);

Paramétres de création :
DATAFILE Liste des fichiers de données.
MINIMUM EXTENT Permet de 'assurer que chaque taille d'extent utilisé dans le tablespace est un multiple de l'entier.
ONLINE Rend le tablespace disponible à l'utilisation immédiatement après sa création.
OFFLINE Crée le tablespace mais le laisse indisponible.
PERMANENT Spécifie que le tablespace contient des objets permanents.
TEMPORARY Permet de spécifier que les objets sont de types temporaire.
DEFAULT STORAGE Paramètres de stockage de tous les objets dans le tablespace.

Paramètres de stockage (DEFAULT STORAGE) :
INITIAL Définit la taille du premier extent (Par défaut : 5*DB_BLOCK_SIZE).
NEXT Se rapporte à la taille de l'extent suivant.
MINEXTENTS Est le nombre d'extents alloués lors de la création du segment (Par défault 1).
PCTINCREASE Pourcentage de croissance de la taille de l'extent, le n-iéme next est alors égale à next*(1+(pctincrease/100))e(n-2).
Par exemple : si le initial est à 16k et le pctincrease à 10, le deuxiéme extent sera à 16k, le suivant de 18k (=16+10%),le suivant à 20k (=18+10%), etc...

Pour ajouter un fichier à un tablespace :
ALTER TABLESPACE ora_data ADD DATAFILE 'g:\oracle\oradata\orafrance\ORA_DATA03.dbf' SIZE 200M;

Pour activer l'extension automatique de fichiers de données :
ALTER TABLESPACE ora_data ADD FILE 'g:\oracle\oradata\orafrance\ORA_DATA04.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAX SIZE 500M;

Pour modifier la taille d'un fichier de données :
ALTER DATABASE DATAFILE 'g:\oracle\oradata\orafrance\ORA_DATA02.dbf' RESIZE 50M;
Avertissement : lorsqu'un tablespace a alloué de nouveaux extents ceux-ci même si des lignes ont été supprimées, restent alloués. Ainsi, si le tablespace a été rempli à hauteur de 80%, sa taille ne pourra pas être réduite de plus de 20%. Seul un TRUNCATE TABLE ou un ALTER INDEX REBUILD libère les extents. Ainsi, pour retailler un tablespace il peut être nécessaire de le vider complétement en déplaçant les objets dans un autre tablespace (cf. réorganisation de la base).

Pour déplacer un tablespace :
1°) Mettre le tablespace OFFLINE :
ALTER TABLESPACE ora_data OFFLINE;

2°) Copier le fichier dans le nouveau répertoire

3°) Renommer le fichier :
ALTER DATABASE RENAME FILE 'g:\oracle\oradata\orafrance\ORA_DATA01.dbf' TO 'g:\oracle\oradata\orafrance\data\ORA_DATA1.dbf;

4°) Mettre le tablespace ONLINE :
ALTER TABLESPACE ora_data ONLINE;

5°) Supprimer le fichier g:\oracle\oradata\orafrance\ORA_DATA01.dbf.

Pour mettre un tablespace en lecture seule :
ALTER TABLESPACE app_data READ ONLY;

Pour mettre un tablespace en lecture/écriture :
ALTER TABLESPACE app_data READ WRITE;

Pour supprimer un tablespace :
DROP TABLESPACE app_data INCLUDING CONTENTS;
Attention : Cette commande ne supprime pas le datafile, il convient donc de supprimer le fichier haddock si nécessaire.