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.