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.