A – Blocs de données Un bloc de données est le niveau le

publicité
A – Blocs de données
Un bloc de données est le niveau le plus fin de granularité dans lequel oracle stocke les
données pour le transfert d’E/S et l’utilisation d’espace.
La taille d’un bloc de données est donné au moment de la création de la base de données avec
DB_BLOCK_SIZE.
On laisse en général la valeur par défaut.
La taille d’un bloc de données est un multiple de celle du système d’exploitation et est
spécifiée en octets.
En-tête fixe et variable
Répertoire de la table
Répertoire de ligne
Espace libre
Données des lignes
Disposition des lignes
En-tête de ligne
Longueur colonne 1
Nombre de colonnes
dans cette ligne
Données colonne 1
Longueur colonne 3
Données colonne 3
Longueur colonne 6
Données colonne 6
Cluster key id
(si cluster)
Longueur
colonne 2
Longueur
colonne 4
Longueur
colonne 7
ROWID des lignes
chaînées
Données colonne 2
Données colonne 4
Données Nuls non
colonne 7 stockés
Chaque ligne de données est stockée en un ou plusieurs morceaux. Les lignes en plusieurs
parties sont dites chaînées. Ces parties peuvent exister sur plusieurs blocs de données.
B – Les extensions
Il sagit des unités logiques de stockage des bases de données. Elles sont composées de un ou
plusieurs blocs de données contigus.
Chaque objet de la base de données qui utilise de l’espace est composé d’au moins une
extension.
Une extension est créée dans un seul fichier de données.
La première extension d’un objet de la base de données est appelé INITIAL EXTENT. Sa
taille est déterminée par le paramètre INITIAL dans la clause STORAGE.
La taille de la seconde extension et des suivantes est déterminée par les paramètres NEXT et
PCTINCREASE dans la clause STORAGE.
Les vues associées sont :
USER_EXTENTS
DBA_EXTENTS
C – Les segments
C ‘est un ensemble d’extensions qui contiennent des données pour une unité de stockage
logique dans un tablespace. A noter que les extensions n’ont pas à être contiguës.
Les types de segments sont :
-
les segments de données (tables et clusters)
les segments d’index
les rollback segments
les segments temporaire
les vues asociées sont :
-
USER_SEGMENTS
ALL_SEGMENTS
DBA_SEGMENTS
D – Le tablespace
C’est l’unité de stockage logique utilisée pour stocker les objets de la base de données (tables,
index, etc…).
Il comprend un ou plusieurs fichiers du système d’exploitation, qui peuvent résider sur des
disques séparés.
Il est utilisé pour contrôler l’allocation d’espace disque pour les données de la base
Un minimum d’un tablespace est requis par instance.
Aucun objet ;ne peut exister dans la base de données sans un tablespace pour stocker ses
données ou sa définition.
Les vues associées sont :
DBA_TABLESPACE
DBA_DATA_FILES
Pour créer un tablespace il faut avoir au moins deux rollback segments dans la base. De même
le créateur doit avoir le rôle DBA ou le privilège CREATE TABLESPACE.
CREATE TABLESPACE nom_tablespace
DATAFILE ‘nom_fic’ SIZE nb [ K | M ] [REUSE]
AUTOEXTEND [ OFF | ON NEXT nb [K | M] MAXSIZE nb [K|M] | UNLIMITED]
[,’nom_fic’ SIZE nb [K|M] [REUSE]
DEFAULT STORAGE ([INITIAL nb [K|M]]
[NEXT nb [ K | M ]
[MINEXTENTS nb]
[MAXEXTENTS [nb | UNLIMITED]]
[PCTINCREASE nb]
[ FREELISTS nb]
[FREELIST GROUPS nb])
ONLINE | OFFLINE
PERMANENT | TEMPORARY;
DATAFILE peut contenir un ou plusieurs fichiers, permettant au tablespace d’utiliser
plusieurs fichiers physiques.
Si DEFAULT STORAGE est spécifi é, il sera le défaut pour chaque objet créé dans le
tablespace.
Par défaut le tablespace sera créé online, signifiant que tous les utilisateurs ayant les droits
dessus pourront y accéder.
Il y a de multiples raison de modifier un tablespace (pour ajouter un fichier en cas de manque
d’espace, rendre le tablespace disponible ou indisponible, faire des suavegardes online …,
mais aussi et surtout reconstituer l’espace disponible).
Par exemple ALTER TABLESPACE tabsp1
ADD DATAFILE ‘/u02/oradata/data/tabsp2.dbf’ size 10M
Ou
ALTER TABLESPACE tabsp1
RENAME DATAFILE ‘/u02/oradata/data/tabsp2.dbf’ TO
‘/u02/oradata/LUP/data/tabsp2b.dbf
Ou encore
ALTER TABLESPACE nom_tablespace
OFFLINE [ NORMAL|TEMPORARY|IMMEDIATE]
Ou
DROP TABLESPACE tabsp1 ;
DROP TABLESPACE tabsp2 INCLUDING CONTENTS si le tablespace contient encore des
objets.
UTILISATION DE L’ESPACE
Il y a deux paramètres qui déterminent l’utilisation de l’espace d’un bloc oracle :
-
PCTFREE
PCTUSED
La somme de PCTFREE et PCTUSED ne doit pas excéder 100.
PCTFREE est le pourcentage de chaque bloc qui sera laissé vide en prévision des mises à jour
des lignes de blocs. Par défaut cette valeur est fixée à 10%.
Faible PCTFREE si la table est relativement stable, avec peu ou pas de mises à jour.
PCTUSED est utilisé une fois que PCTFREE est atteint dans un bloc, aucune insertion n’est
faite dans le bloc, jusqu’à ce que le pourcentage utilisé dans le bloc descende en dessous du
oparamètre PCTUSED.. Par défaut cette valeur est fixée à 40%.
-
Le chaînage et la migration
Le chaînage et la migration apparaissent quand il n’y a pas assez d’espace libre disponible
dans le bloc pour effectuer une mise à jour ou l’insertion d’une longue ligne.
Le chaînage et la migration dégradent les performances à la fois pour les mises à jour et les
requêtes.
La migration apparaît quand une mise à jour fait qu’une ligne ne tient plus dans un bloc. Si un
bloc a assez d’espace pour la ligne, la ligne entière est déplacée sur le nouveau bloc. Un
pointeur existe dans le bloc de départ vers le nouveau bloc.
Le chaînage apparaît quand une mise à jour ou une insertion ne peut tenir dans le bloc. S’il
n’y a pas d’autres blocs suffisamment grands pour y contenir la ligne, la ligne est chaînée sur
deux ou plusieurs blocs.
Pour déterminer le chaînage et la migration on utilise la commande ANALYSE pour lister les
lignes chaînées. On doit d’abord utiliser le script utlchain. Sql avant de taper la commande :
ANALYSE TABLE nom_table LIST CHAINED ROWS.
Pour voir le résultat, on tape :
SELECT * FROM chained_rows WHERE table_name=’nom_table’;
-
le rowid
Chaque ligne dans chaque table est identifiée de façon unique par un rowid, c’est la
représentation hexadécimale de l’adresse de la ligne et elle peut comprendre trois parties :
0000186A.0003.0001
Numéro de bloc logique dans le fichier . numéro de ligne . numéro de fichier de base de
données.
C’est la façon la plus rapide d’accéder à une ligne.
Les cinq parmètres de stockage sont :
-
INITIAL et NEXT :taille en octet du premier objet créé et de l’extension suivante.
MINEXTENTS :nombre d’extensions qui seront alloués quand l’objet est créé.
MAXEXTENTS :nombre maximum d’extensions permises pour un objet
PCTINCREASE :pourcentage d’augmentation de taille que chaque extension
successive aura par rapport à l’extension précédente.
Téléchargement