---
title: "PLSQL : Cours 3 : Structure Oracle"
...

\newpage{}

# PLSQL : Cours 3 : Structure Oracle

## Architecture d'une base de donnée

Le standard ANSI définit la structure suivante pour une base de donnée relationnelle : 

- Niveau conceptuel (logique)
- Niveau physique
- Niveau externe

Permet le séparation de la sémantique et de leur implémentation et montrer à chaque utilisateur que ce qu'il a le droit/besoin de voir.

La description de ces niveaux est faite à travers le dictionnaire de données.

## Structure logique 

### Tablespaces

Les *tablespaces*, *segments* et *extensions* permettent de définir comment la base est organisée physiquement. Ils sont le lien entre le niveau logique et le niveau physique de la base.

**Tablespace** : Unité logique qui compose la base. Regroupe un ensemble d'objets logique. Un objet logique est associé à un seul tablespace.

La base de donnée Oracle contient au moins un tablespace nommé `SYSTEM` qui contient le dictionnaire de données.

Créer un tablespace : 

```sql
CREATE TABLESPACE ...nom...
DATAFILE ...fichier..., [ ...fichier..., ]
[DEFAULT STORAGE (...spec storage...)]
[ONLINE | OFFLINE]
```

- `fichier` : emplacement du fichier sur le disque et taille
- `spec storage` : paramètre par défaut du storage pour les objets de ce tablespace
- `ONLINE` : actif dès sa création
- `OFFLINE` : inactif après la création

Exemple :

```sql
CREATE TABLESPACE ts_logistique
DATAFILE '/usr/base/fichier1.dbf' SIZE 1M, '/usr/base/fichier2' SIZE 1M
DEFAULT STORAGE (INITIAL 100K NEXT 100K MINEXTENT 1 MAXEXTENT 5 PCTINCREASE 50);
```

### Segment, Extension et Bloc

Quand un fichier est créé, Oracle prend tout l'espace mais le gère dynamiquement en fonction de l'utilisation de la base.

Trois niveaux de granularité.

#### Bloc

Niveau le plus fin, correspond à un nombre d'octets définit à la création de la base. Notion différents des blocs physiques utilisés par l'OS.

#### Extension

Suite de blocs continus alloués en même temps et stockant un type spécifique de donnée. Le comportement des extensions est défini par la clause `STORAGE` : 

- `INTIAL` : Taille de la première extension allouées quand un segment est créé
- `EXTENT` : Taille de la deuxième extension allouée au segment
- `MINEXTENT` : Nombre d'extensions allouées à la création du segment
- `MAXEXTENT` : Nombre total d'extensions pouvant être allouées à un segment
- `PCTINCREASE` : Pourcentage d'accroissement de la taille de l'extension suivante après la 2e.

La clause `STORAGE` pour être utilisée quand on crée des objets (tables, index, etc ...). Les paramètre de storage sur les objets remplacent ceux du tablespace.

En cas de changement des paramètres de storage, les changements sont appliqués aux extensions allouées dans le futur.

#### Segment

Ensemble d'extensions allouées à une structure logique. Il en existe cinq types : 

- DATA SEGMENT : données des tables / clusters. Chaque table à automatiquement un segment alloué à sa création.
- INDEX SEGMENT : index sur les colonnes. Chaque index à automatiquement un segment alloué à se création.
- ROLLBACK SEGMENT : Enregistre les actions effectuées par les transaction pour pouvoir les annuler.
- TEMPORARY SEGMENT : Utilisé pour les commandes qui ont besoin de stockage temporaire (ORDER BY, GROUP BY, SELECT DISTINCT, UNION, MINUS...)
- BOOTSTRAP SEGMENT : créé à la création de la base, définitions initiales du dictionnaire de données
	
## Structure Physique

Ensemble de fichiers gérés dynamiquement par Oracle : 

- Fichiers de données
- Fichiers de reprise
- Fichier de contrôle

