IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Notes pour OCP 9i DBA1

Date de publication : 01/09/2004 , Date de mise a jour : 01/09/2004




6. Structures logiques et physiques


6. Structures logiques et physiques

En 9i, les tablespaces peuvent être gérés soit localement, soit par le dictionnaire de données. Cela signifie que les informations sur les extensions libres ou occupées sont stockés soit directement dans l'en-tête du tablespace, soit dans les tables du dictionnaire de données. Le mode local est le mode par défaut en 9i.

Les fichiers de données et les fichiers temporaires peuvent être gérés en mode OMF.
Il suffit de définir le paramètre d'initialisation DB_CREATE_FILE_DEST. Sa valeur doit être le nom d'un répertoire existant. Les fichiers y seront placés avec un nom généré automatiquement.
Quand on crée en mode OMF un tablespace par la simple commande CREATE TABLESPACE; un fichier physique de 100 Mo est automatiquement créé. Il sera géré localement et sera autoextensible.

Tablespaces gérés par le dictionnaire
La gestion des tablespaces par le dictionnaire n'est possible que si le tablespace SYSTEM a été créé lui-même avec une gestion par le dictionnaire.
En revanche, si on a spécifié EXTENT MANAGEMENT LOCAL lors de la création du tablespace SYSTEM (c'est à dire à la création de la base), aucun tablespace ne pourra être géré par le dictionnaire.


CREATE TABLESPACE TEST DATAFILE 'H:\oracle\oradata\ora9\test.dbf' SIZE 100M EXTENT MANAGEMENT DICTIONARY;
C'est la clause EXTENT MANAGEMENT DICTIONARY qui détermine le mode de gestion par le dictionnaire.
On peut spécifier plusieurs fichiers d'un coup dans la clause DATAFILE, il suffit de les séparer par une virgule.

En Oracle 9i, chaque tablespace peut avoir sa propre taille de bloc.
Si la clause DEFAULT STORAGE est omise, INITIAL et NEXT ont respectivement une valeur de 5 blocs.
La clause LOGGING/NOLOGGING indique si les modifications DDL seront ou non tracées dans le fichier de reprise. Il s'agit principalement de CREATE TABLE AS SELECT, CREATE/ALTER INDEX, chargement par SQL*Loader. Les opérations DML ordinaires ne sont pas concernées par cette option.

Tablespaces gérés localement
La gestion locale se spécifie par la clause EXTENT MANAGEMENT LOCAL du CREATE TABLESPACE. Ce mode est un peu plus performant.
La clause DEFAULT STORAGE n'est pas utilisable dans ce mode.


EXTENT MANAGEMENT LOCAL signifie simplement que les informations de gestion des extensions sont stockées dans l'en-tête du fichier.
De manière complémentaire, on doit préciser si la taille des extensions est gérée automatiquement (AUTOALLOCATE), ou bien fixer une taille pour les extensions (UNIFORM SIZE n). LOCAL AUTOALLOCATE est l'option par défaut.

La clause SEGMENT SPACE MANAGEMENT AUTO/MANUAL indique si la gestion de l'espace libre (PCTFREE, FREELISTS, etc) est gérée automatiquement par Oracle, ou peut être prise en charge par le DBA. MANUAL est la valeur par défaut.
Un tablespace en mode AUTO ne peut pas contenir de LOB !

Tablespace UNDO
En 9i, il n'est plus nécessaire de se préoccuper des segments d'annulation. Il suffit de créer un seul tablespace de type UNDO, et Oracle gère de manière transparente tout ce qui concerne l'annulation.

CREATE UNDO TABLESPACE DATAFILE 'h:\oracle\oradata\ora9\undo.dbf' SIZE 200M;
Les tablespaces UNDO ne supportent que le mode de gestion local.

Tablespaces temporaires
Suivant qu'on crée un tablespace géré localement ou par le dictionnaire, la position du mot TEMPORARY varie, et on utilise soit TEMPFILE soit DATAFILE.

CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'h:\oracle\oradata\ora9\temp.dbf' SIZE 200M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 5M;
Crée un tablespace en mode local. A défaut de spécification explicite, la taille des extensions sera de 1 Mo.

CREATE TABLESPACE TEMP DATAFILE 'h:\oracle\oradata\ora9\temp.dbf' SIZE 200M TEMPORARY;
Crée un tablespace en mode dictionnaire.

Dans un tablespace temporaire, il n'y a qu'un seul segment, qui est partagé entre toutes les transactions, et grandit autant que nécessaire.
Les tablespaces temporaires sont toujours en mode NOLOGGING, et ne peuvent pas être mis en lecture seule.
Le segment temporaire n'est libéré qu'à l'arrêt de l'instance (mais l'espace n'est pas libéré pour autant).

Modification des tablespaces
Il n'est pas possible de modifier le mode de gestion d'un tablespace (LOCAL ou DICTIONARY) après sa création.

La transformation d'un tablespace temporaire en permanent, ou vice-versa, est soumise à diverses conditions, différentes selon qu'on est en mode de gestion local ou par le dictionnaire.

Un tablespace peut être mis en ligne / hors ligne par ALTER TABLESPACE nom_tbs ONLINE / OFFLINE.
OFFLINE autorise 3 variantes : NORMAL, TEMPORARY et IMMEDIATE. IMMEDIATE est un mode brutal, et requiert une phase de récupération quand le tablespace est remis en ligne.
Le tablespace SYSTEM ne peut pas être mis hors ligne.

ALTER TABLESPACE nom_tbs COALESCE permet de fusionner les espace libres contigus dans chaque segment du tablespace.
SMON s'en charge automatiquement si PCTINCREASE a une valeur différente de 0.
Le fusionnement des espaces libres est inutile si on est en SEGMENT SPACE MANAGEMENT UNIFORM.

On peut mettre un tablespace en lecture seule par ALTER TABLESPACE nom_tbs READ ONLY.
Après redémarrage de la base, le tablespace demeure en lecture seule, car son état a été enregistré dans le fichier de contrôle.
Les modifications deviennent impossibles, mais on peut cependant supprimer les objets.
Le rétablissement en mode écriture s'opère par ALTER TABLESPACE nom_tbs READ WRITE.
Un tablespace en lecture seule peut être stocké sur un CDROM.
Si on veut qu'Oracle se dispense de vérifier l'existence des fichiers en lecture seule au démarrage de la base, et repousse cette vérification à la première tentative d'accès, il faut fixer le paramètre d'initialisation READ_ONLY_OPEN_DELAYED à TRUE.

L'ajout d'espace à un tablespace peut se faire de deux manières :
Par extension d'un fichier existant, ou par ajout d'un nouveau fichier.
On utilise le mot DATAFILE ou TEMPFILE selon qu'il s'agit d'un fichier de données ou temporaire.
ALTER TABLESPACE ADD DATAFILE nom_fichier SIZE 500M; crée un nouveau fichier jusqu'à une taille de 500 Mo.

L'extension d'un fichier existant ne se fait pas par ALTER TABLESPACE, mais par ALTER DATABASE RESIZE.

Suppression d'un tablespace

Si le tablespace n'est pas vide, il faut spécifier INCLUDING CONTENTS. Cela a pour effet de supprimer les objets existants.
Si des contraintes pointent depuis un autre schém, il faut spécifier CASCADE CONSTRAINTS.
Si le fichier est en mode OMF, le DROP TABLESPACE supprime les fichiers physiques. Sinon, il faut spécifier AND DATAFILES après INCLUDING CONTENTS.

Vues relatives aux tablespaces
DBA_TABLESPACES fournit la liste des tablespaces avec leurs clause de stockage par défaut, leur mode de gestion, etc.
V$TABLESPACE indique uniquement si les tablespace sont inclus ou non dans la sauvegarde.
DBA_FREE_SPACE indique le nombre et la taille des extensions libres dans le tablespace. La colonne FILE_ID indique le numéro du fichier où se trouve l'extension en question.

Gestion des fichiers
Un fichier peut s'agrandir automatiquement grâce à la clause AUTOEXTEND ON.
Facultativement, on peut préciser par NEXT de quelle taille il s'agrandira à chaque fois, et on peut fixer une taille limite au fichier par MAXSIZE.

Un tablespace peut comporter jusqu'à 1022 fichiers, et une base peut comporter jusqu'à 65533 fichiers.

CREATE TABLESPACE appli DATAFILE 'h:\oracle\oradata\ora9\data.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 1000M;
Cette commande crée un tablespace avec un fichier autoextensible, qui s'agrandira par 100 Mo et ne pourra pas dépasser 1 Go au total.

A noter que les manipulations de fichiers se font via ALTER DATABASE.
Pour redimensionner un fichier :

ALTER DATABASE DATAFILE 'h:\oracle\oradata\ora9\data.dbf' RESIZE 1000M;
Un fichier ne peut être réduit que si sa taille cible est supérieure au plus haut niveau jamais occupé dans le fichier.

Renommer ou déplacer un fichier
Le renommage ou le déplacement du fichier physique doivent être faits manuellement, avec le tablespace hors ligne.
Deux options sont disponibles pour le changement logique de nom :

ALTER DATABASE RENAME FILE ancien_nom TO nouveau_nom; ALTER DATAFILE nom_fichier RENAME DATAFILE /TEMPFILE ancien_nom TO nouveau_nom;
Informations sur les fichiers
Suivant la nature des fichiers (données, temporaires, reprise, contrôle), la vue à consulter n'est pas la même.
On peut avoir une liste globale par la commande suivante :

SELECT 'T', NAME FROM V$TEMPFILE UNION SELECT 'D', NAME FROM V$DATAFILE UNION SELECT 'L', MEMBER FROM V$LOGFILE UNION SELECT 'C', NAME FROM V$CONTROLFILE ORDER BY 2;
Ces vues fournissent une simple liste des fichiers.

La vue DBA_DATA_FILES met en correspondance les tablespaces et leurs fichiers constitutifs, pour les tablespaces de données et d'annulation.
La vue DBA_TEMP_FILES fournit un résultat de même nature, mais pour les fichiers temporaires.

OMF
OMF utilise différentes variables qui permettent de générer les noms de fichiers.
%t représente le nom du tablespaxe
%u représente un nom unique de 8 caractères, généré par Oracle
%g représente le numéro de groupe de fichiers de reprise

Le paramètre DB_CREATE_FILE_DEST est utilisé pour générer le nom des fichiers de données et des fichiers temporaires
Les paramètres DB_CREATE_ONLINE_LOG_DEST_n sont utilisés pour générer le nom des fichiers de contrôle et de reprise.

OMF ne sert pas pour la gestion des fichiers de reprises archivés, ni pour la gestion des fichiers d'annulation.