Cartographie hiérarchie architecture d'une base Oracle - Hierarchy architecture mapping of an Oracle database
Introduction
Est-ce que vous vous êtes déjà demandé à quel point une base de données Oracle pouvait être complexe? A quel point il existait de niveaux entre le plus haut (le serveur Oracle) et le plus petit (la colonne)? On va voir justement comment est organisée hiérarchiquement une base Oracle; on ne traitera pas l'instance, ce sera l'objet d'un autre article.
Points d'attention
Aucun.
Base de tests
N/A.
Exemples
Le serveur Oracle
En premier, sur un serveur Linux, Unix ou Windows, se trouve un serveur Oracle, c'est à dire l'ensemble Instance/Base de données. Je ne représente pas le logiciel Oracle (le SGBDR/RDBMS) proprement dit.
L'architecture multi-tenants, container, CDB, pluggable database, PDB (ouf, pourquoi autant de dénominations Mr Oracle?)
Depuis la version 12 d'Oracle, une nouvelle architecture a été créée, celle dite Multi-tenants. A la base, il y a un container (CDB), celui-ci renferme une base socle appelée CDB$ROOT, sur laquelle vont venir se plugger (comme des clés USB) des bases de données dites PDB (Plugabbles Databases). Parmi ces PDBs, il y a la PDB$SEED, utilisée par Oracle pour créer par copie une nouvelle PDB, puis les bases de données applicatives.
Tablespaces, datafiles, segments, extents et data blocks
Si on détaille plus, on voit apparaître les notions de tablespaces, datafiles, segments, extents et data blocks. On ne parlera pas ici des blocs du système d'exploitation Linux/Unix/Windows, c'est hors périmètre de cet article mais sachez qu'un bloc Oracle de 8Ko est composé de plusieurs blocs de l'OS, de 512 octets par exemple.
Une autre vision des rapports, avec la cardinalité 1/N, entre les structures de la base.
Les tablespaces peuvent être composés de un ou plusieurs datafiles.
Les tablespaces contiennent les objets Oracle occupant de l'espace disque comme les tables, index, vues matérialisées (sauf SYSTEM qui lui renferme en plus le dictionnaire de données avec des objets ayant juste une définition, comme les DBLinks, les séquences...).
Segment, extents, data blocks
Un segment (table/index...) est composé de N extents qui eux-même sont composés de N data blocks consécutifs.
Data block
Si on descend maintenant au niveau du data block, on voit qu'il est composé de N structures : les données sont tout en bas, au dessus il y a de l'espace vide, et au dessus se trouvent plusieurs structures qu'on pourrait croire former le block header mais il n'en est rien.
En effet, voici un schéma récupéré sur le net mais pas sur le site officiel d'Oracle. On va partir du principe que ce schéma est OK sinon pourquoi l'avoir dessiné? Néanmoins soyons prudent :-) Que voit-on, que en haut du data block, il y a le "Data Block Header", le "Cache Layer" et le "Transaction Layer". Ces ensembles sont eux-même composés de N champs; je vous laisse analyser cela; bonne chance!
La ligne de données (row)
Nous descendons maintenant au dernier niveau, celui de la ligne de données Oracle, le fameux Row. Là encore, nous trouvons de multiples informations, chaque ligne comporte un "Row Header" avec notamment le nombre de colonnes stockées puis les données proprement dites pour chaque colonne avec en plus la longueur de la colonne.
Synthèse
Un schéma synthétique, trouvé sur Google Images.