Vous êtes sur la page 1sur 50

10

Gérer les objets de schéma


Objectifs

A la fin de ce chapitre, vous pourrez :


• définir des objets de schéma et des types
de données
• créer et modifier des tables
• définir des contraintes
• afficher les colonnes et le contenu d'une table
• créer des index
• créer des vues
• créer des séquences
• expliquer l'utilisation des tables temporaires
• utiliser le dictionnaire de données

7-2 Copyright © 2005, Oracle. Tous droits réservés.

Oracle Database 10g : Administration Workshop I 7-2


> Schéma
Qu'est-ce qu'un schéma ? Contraintes
Index
Vues
Séquences
Tables temp.
Dict. de données

possède

Schéma HR
Utilisateur HR

7-3 Copyright © 2005, Oracle. Tous droits réservés.

Qu'est-ce qu'un schéma ?


Un schéma est un ensemble d'objets de base de données appartenant à un utilisateur particulier.
Généralement, dans le cadre d'une base de données de production, le terme "utilisateur" ne
désigne pas une personne mais une application. Un schéma porte le même nom que l'utilisateur
auquel il appartient. Les objets de schéma sont les structures logiques qui font directement
référence aux données de la base. Ils incluent des structures telles que les tables, les vues et les
index.
Vous pouvez créer et manipuler les objets de schéma à l'aide de code SQL ou d'Enterprise
Manager. Lorsque vous utilisez Enterprise Manager, le code SQL sous-jacent est généré
automatiquement.
Remarque : Il n'est pas nécessaire qu'un schéma soit directement lié à un tablespace unique.
Vous pouvez définir des configurations dans lesquelles les objets d'un même schéma se trouvent
dans des tablespaces différents, ou dans lesquelles un tablespace contient des objets issus de
différents schémas.

Oracle Database 10g : Administration Workshop I 7-3


Qu'est-ce qu'un schéma ? (suite)
Lorsque vous créez la base de données, plusieurs schémas sont créés automatiquement. Deux
d'entre eux sont particulièrement importants :
• Schéma SYS : Il contient le dictionnaire de données, comme indiqué dans le chapitre
intitulé "Administrer la sécurité utilisateur".
• Schéma SYSTEM : Il contient des tables et des vues supplémentaires dans lesquelles
sont stockées des informations d'administration. Il est décrit dans le chapitre
"Administrer la sécurité utilisateur".
Lors de l'installation complète d'une base de données Oracle, différents exemples de schémas
liés entre eux sont installés automatiquement. Les exemples présentés dans la documentation
et dans les supports de formation Oracle utilisent ainsi une plate-forme commune. Ces
exemples peuvent avoir différents niveaux de complexité. Les schémas fournis sont les
suivants :
• HR : Le schéma Human Resources est un schéma simple utilisé pour présenter les
notions de base de ce cours. Une extension de ce schéma permet les démonstrations
relatives à Oracle Internet Directory (OID).
• OE : Le schéma Order Entry permet de traiter de sujets présentant une complexité
moyenne. Une multitude de types de données y sont disponibles. Le sous-schéma OC
(Online Catalog) est un ensemble d'objets de base de données relationnelle objet créé
dans le schéma OE.
• PM : Le schéma Product Media est dédié aux types de données multimédias.
• QS : Le schéma Queued Shipping contient un ensemble de schémas utilisés pour
illustrer les fonctionnalités d'Oracle Advanced Queuing.
• SH : Le schéma Sales History permet les démonstrations impliquant des quantités
importantes de données. Une extension de ce schéma fournit la prise en charge du
traitement analytique avancé.

Oracle Database 10g : Administration Workshop I 7-4


Accéder aux objets de schéma

7-5 Copyright © 2005, Oracle. Tous droits réservés.

Accéder aux objets de schéma


Vous pouvez accéder rapidement à de nombreux types d'objet de schéma à partir de la région
Schema de la page Database Administration.
Lorsque vous cliquez sur l'un des liens, la page Results apparaît. Dans la région Search de la
page, vous pouvez entrer un nom de schéma et un nom d'objet afin de rechercher un objet
spécifique. En outre, vous pouvez rechercher d'autres types d'objet via la région Search, en
effectuant des sélections dans la liste déroulante. Cette liste inclut des types d'objet
supplémentaires qui ne sont pas présentés sous forme de liens dans la page Database
Administration.

Oracle Database 10g : Administration Workshop I 7-5


Nommer les objets de base de données

• La longueur des noms doit être comprise entre 1


et 30 octets, à deux exceptions près :
– Les noms de base de données sont limités à 8 octets.
– Les noms de lien de base de données peuvent
comporter jusqu'à 128 octets.
• Les noms qui ne sont pas inclus entre guillemets
ne peuvent pas être des mots réservés Oracle.
• Les noms qui ne sont pas inclus entre guillemets
doivent commencer par un caractère alphabétique
du jeu de caractères de la base de données.
• Il est déconseillé d'utiliser des noms entre
guillemets.

7-6 Copyright © 2005, Oracle. Tous droits réservés.

Nommer les objets de base de données


Lorsque vous indiquez le nom d'un objet de base de données, vous pouvez l'inclure entre des
guillemets (""). En procédant ainsi, vous pouvez contourner plusieurs des règles d'appellation
indiquées dans la diapositive ci-dessus. Toutefois, cette pratique est déconseillée car si vous
nommez un objet de cette manière, vous devez toujours y faire référence en faisant figurer le nom
entre guillemets. Par exemple, si vous nommez une table "Local Temp", vous devez procéder de
la façon suivante :
SQL> select * from "Local Temp";
TEMP_DATE LO_TEMP HI_TEMP
--------- ---------- ----------
01-DEC-03 30 41
Si vous entrez le nom en ne respectant pas les majuscules et les minuscules, vous obtenez une
erreur :
SQL> select * from "local temp";
select * from "local temp"
*
ERROR at line 1:
ORA-00942: table or view does not exist
Les noms qui ne sont pas inclus entre guillemets sont stockés en majuscules et ne sont pas
sensibles à la casse. Lorsqu'une instruction SQL est traitée, les noms qui ne sont pas inclus entre
guillemets sont convertis en majuscules.

Oracle Database 10g : Administration Workshop I 7-6


Nommer les objets de base de données (suite)
Les identificateurs qui ne sont pas inclus entre guillemets peuvent uniquement contenir des
caractères alphanumériques issus du jeu de caractères de la base de données, ainsi que le
caractère de soulignement (_), le symbole dollar ($) et le symbole dièse (#). Les liens de base
de données peuvent en outre contenir des points (.) et le symbole "arobas" (@). Il est
vivement déconseillé d'utiliser les symboles $ et # dans les identificateurs qui ne sont pas
inclus entre guillemets.
Les identificateurs inclus entre guillemets peuvent contenir n'importe quel caractère ou signe
de ponctuation, ainsi que des espaces. Toutefois, ni les identificateurs qui sont inclus entre
guillemets, ni ceux qui ne le sont pas ne peuvent contenir de guillemets.

Oracle Database 10g : Administration Workshop I 7-7


Définir des types de données pour les tables
Types de données courants :
• CHAR(size [BYTE|CHAR]) : chaîne de caractères
de longueur fixe, dont la taille est de size octets
ou caractères
• VARCHAR2(size [BYTE|CHAR]) : chaîne de
caractères de longueur variable, dont la taille
maximale est de size octets ou caractères
• DATE : date valide comprise entre le 1er janvier 4712
avant J.C. et le 31 décembre 9999 après J.C.
• NUMBER(p,s) : nombre dont la précision est p
et l'échelle s

7-8 Copyright © 2005, Oracle. Tous droits réservés.

Définir des types de données pour les tables


Lorsque vous créez une table, vous devez indiquer un type de données pour chacune de ses
colonnes. Lorsque vous créez une procédure ou une fonction, vous devez indiquer un type de
données pour chacun de ses arguments. Ces types de données définissent le domaine des valeurs
que chaque colonne peut contenir ou que chaque argument peut comporter.
La base Oracle peut notamment contenir les types de données intégrés suivants :
• CHAR(size) : chaîne de caractères de longueur fixe, dont la taille est de size octets ou
caractères. La taille maximale est de 2 000 octets ou caractères, tandis que la taille
minimale est de 1 octet (valeur par défaut).
- BYTE indique que la longueur de la chaîne est exprimée en octets.
- CHAR indique que la longueur de la chaîne est exprimée en nombre de caractères.
• VARCHAR2(size) : chaîne de caractères de longueur variable, dont la taille maximale est
de size octets ou caractères. La taille maximale est de 4 000 octets. Vous devez
impérativement indiquer la taille du type de données VARCHAR2.
• DATE : date valide comprise entre le 1er janvier 4712 avant JC et le 31 décembre 9999
après JC. Ce type de données contient également l'heure (en heures, minutes et secondes).
• NUMBER : nombre dont la précision est p et l'échelle s. La précision peut être comprise
entre 1 et 38, et l'échelle entre -84 et 127.

Oracle Database 10g : Administration Workshop I 7-8


Définir des types de données pour les tables (suite)
• BINARY_FLOAT : nombre en virgule flottante sur 32 bits. Ce type de données requiert
5 octets, en comptant l'octet de longueur.
• BINARY_DOUBLE : nombre en virgule flottante sur 64 bits. Ce type de données
requiert 9 octets.
• FLOAT(p) : type de données ANSI (American National Standards Institute). Le type
de données FLOAT est un nombre en virgule flottante dont la précision binaire est p. La
précision par défaut de ce type de données est de 126 en binaire, soit 38 en décimal.
• INTEGER : type de données équivalent au type NUMBER(p,0).
• NCHAR(length) : type de données Unicode exclusivement. Lorsque vous créez une
table comportant une colonne NCHAR, vous définissez la longueur de la colonne en
nombre de caractères. Vous définissez le jeu de caractères nationaux lors de la création
de la base de données. La longueur maximale d'une colonne est déterminée par la
définition du jeu de caractères nationaux. Les spécifications de largeur du type de
données NCHAR font référence au nombre de caractères. La taille maximale autorisée
pour une colonne est de 2000 octets. Si vous insérez une valeur dont la longueur est
inférieure à celle de la colonne, la base de données Oracle lui ajoute des espaces pour
qu'elle atteigne la longueur totale de la colonne. Vous ne pouvez pas insérer une valeur
CHAR dans une colonne NCHAR, ni insérer une valeur NCHAR dans une colonne CHAR.
• NVARCHAR2(size [BYTE|CHAR]) : type de données Unicode exclusivement. Il
est semblable au type de données NCHAR, à ceci près que sa longueur maximale est de
4 000 octets et que le serveur Oracle n'ajoute pas d'espaces pour compléter la longueur.
• LONG : données alphanumériques de longueur variable (longueur maximale de
2 gigaoctets ou 231 –1 octets). Le type de données LONG est obsolète. Utilisez à sa
place le type LOB (Large Object).
• LONG RAW : données binaires raw de longueur variable (longueur maximale de
2 gigaoctets).
• RAW(size) : données binaires raw, dont la longueur est de size octets. La taille
maximale est de 2 000 octets. Vous devez obligatoirement définir la taille d'une valeur
RAW.
• ROWID : chaîne en base 64, représentant l'adresse unique d'une ligne dans la table. Ce
type de données est destiné essentiellement aux valeurs renvoyées par la pseudo-colonne
ROWID.
• UROWID : chaîne en base 64, représentant l'adresse logique d'une ligne d'une table
organisée en index. La taille (facultative) est celle d'une colonne de type UROWID. La
taille maximale (valeur par défaut) est de 4000 octets.
• BLOB : objet binaire de grande taille.
• CLOB : objet de type caractère de grande taille, contenant des caractères mono-octets ou
multi-octets. Les jeux de caractères de longueur fixe et de longueur variable sont pris en
charge. Ils utilisent tous le jeu de caractères CHAR de la base de données.

Oracle Database 10g : Administration Workshop I 7-9


Définir des types de données pour les tables (suite)
• NCLOB : objet de type caractère de grande taille, contenant des caractères Unicode. Les jeux de
caractères de longueur fixe et de longueur variable sont pris en charge. Ils utilisent tous le jeu
de caractères NCHAR de la base de données. Ce type d'objet contient des données utilisant le jeu
de caractères nationaux.
Remarque : La taille maximale de tous les types de données LOB (BLOB, CLOB et NCLOB) est
la suivante : (4 gigaoctets – 1) * (valeur de CHUNK).
CHUNK est un attribut facultatif que vous pouvez définir en même temps qu'un objet LOB
(Large Object). Il indique le nombre d'octets à allouer pour la manipulation des objets LOB. Si
la taille n'est pas un multiple de la taille de bloc de la base de données, la base arrondit la taille
en octets au multiple suivant. Par exemple, si la taille de bloc de la base de données est de 2048
et que la taille de CHUNK est de 2050, la base de données alloue 4 096 octets (2 blocs). La
valeur maximale est de 32768 (32 ko), c'est-à-dire la taille de bloc maximale autorisée par la
base de données Oracle. La taille de CHUNK par défaut correspond à un bloc de base de données
Oracle.
• BFILE : type de données contenant un pointeur vers un fichier binaire de grande taille stocké
en-dehors de la base. Il permet un accès d'E/S de type flux d'octets aux objets LOB externes
résidant sur le serveur de base de données. La taille maximale est de 4 gigaoctets.
• TIMESTAMP(fractional_seconds_precision) : type de données permettant
d'indiquer les valeurs année/mois/jour de la date, ainsi que les valeurs heure/minute/seconde de
l'heure, où fractional_seconds_precision correspond au nombre de chiffres avec
lesquels sont exprimées les fractions de seconde. Les valeurs acceptées sont comprises entre 0
et 9 (la valeur par défaut étant 6).
Pour obtenir la liste complète des types de données intégrés et des types définis par l'utilisateur,
reportez-vous au manuel Oracle Database SQL Reference.

Oracle Database 10g : Administration Workshop I 7-10


Créer et modifier des tables

Indiquez le nom
de la table et le
schéma.

Indiquez le nom, le type


de données et la longueur
des colonnes.

7-11 Copyright © 2005, Oracle. Tous droits réservés.

Créer et modifier des tables


Les tables sont les unités de base utilisées pour le stockage des données dans une base Oracle.
Elles contiennent toutes les données accessibles par les utilisateurs. Chaque table est constituée
de colonnes et de lignes.
Créer une table
Pour créer une table à l'aide d'Enterprise Manager, effectuez les opérations suivantes :
1. Cliquez sur Tables dans la région Schema de la page Administration. La page Tables
apparaît.
2. Si vous connaissez le nom du schéma, entrez tout ou partie de ce nom dans le champ
Schema de la région Search. Si vous ne connaissez pas le nom du schéma, cliquez sur
l'icône représentant une torche, en regard du champ Schema. La fenêtre Search and Select:
Schema apparaît. Vous pouvez parcourir les noms des schémas et sélectionner celui que
vous recherchez.
3. Cliquez sur Create. La page Create Table: Table Organization apparaît.
4. Acceptez la valeur par défaut (Standard, Heap Organized) et cliquez sur Continue. La page
Create Table apparaît.
5. Entrez le nom de la table dans le champ Name.
6. Entrez le nom du schéma dans le champ Schema, ou cliquez sur l'icône représentant une
torche afin d'appeler la fonction de recherche.

Oracle Database 10g : Administration Workshop I 7-11


Créer et modifier des tables (suite)
7. Entrez le nom du tablespace dans le champ Tablespace, ou cliquez sur l'icône
représentant une torche afin d'appeler la fonction de recherche.
8. Dans la région Columns, entrez le nom et le type de données des colonnes.
9. Cliquez sur OK. Un message de mise à jour apparaît, indiquant que la table a été créée
avec succès.
Modifier une table
Vous pouvez modifier une table avec Enterprise Manager, en suivant la procédure ci-dessous.
Dans l'exemple considéré, une colonne est ajoutée à une table.
1. Dans la page Tables, sélectionnez la table dans la liste des résultats, puis cliquez sur
Edit.
2. Dans la page Edit Table, cliquez sur le bouton Add 5 Table Columns. Une liste
modifiable de colonnes apparaît.
3. Entrez le nom, le type de données et la taille de la nouvelle colonne.
4. Cliquez sur Apply. Un message de mise à jour apparaît, indiquant que la table a été
modifiée avec succès.

Oracle Database 10g : Administration Workshop I 7-12


Schéma
Comprendre l'intégrité des données > Contraintes
Index
Vues
Séquences
Tables temp.
Dict. de données

JOB_HISTORY DEPARTMENTS LOCATIONS


EMPLOYEE_ID DEPARTMENT_ID (PK) LOCATION_ID (PK)
(PK,FK) EMPLOYEES DEPARTMENT_NAME STREET_ADDRESS
START_DATE (PK) EMPLOYEE_ID (PK) MANAGER_ID POSTAL_CODE
END_DATE FIRST_NAME LOCATION_ID (FK) CITY
JOB_ID (FK) LAST_NAME STATE_PROVINCE
DEPARTMENT_ID (FK) EMAIL COUNTRY_ID (FK)
PHONE_NUMBER
HIRE_DATE
JOB_ID (FK)
SALARY
COMMISION_PCT
MANAGER_ID (FK)
DEPARTMENT_ID (FK) COUNTRIES
COUNTRY_ID (PK)
JOBS COUNTRY_NAME
JOB_ID (PK) REGION_ID (FK)
JOB_TITLE
MIN_SALARY
MAX_SALARY

REGIONS
REGION_ID (PK)
REGION_NAME

7-13 Copyright © 2005, Oracle. Tous droits réservés.

Comprendre l'intégrité des données


Vous pouvez utiliser les contraintes d'intégrité suivantes pour imposer des restrictions concernant
la saisie des valeurs dans les colonnes :
• NOT NULL : Par défaut, toutes les colonnes d'une table autorisent les valeurs NULL. La
valeur NULL signifie l'absence de valeur. Une contrainte NOT NULL impose qu'une colonne
d'une table ne contienne aucune valeur NULL. Par exemple, vous pouvez définir une
contrainte NOT NULL afin d'imposer la saisie d'une valeur dans la colonne LAST_NAME
pour chaque ligne de la table EMPLOYEES.
• Clé UNIQUE : Une contrainte d'intégrité de clé UNIQUE impose que chaque valeur d'une
colonne ou d'un ensemble de colonnes (clé) soit unique. Autrement dit, deux lignes d'une
table ne doivent pas comporter de valeurs en double dans une colonne ou un ensemble de
colonnes donné. Par exemple, une contrainte UNIQUE est définie sur la colonne
DEPARTMENT_NAME de la table DEPARTMENTS afin d'interdire que plusieurs lignes
comportent le même nom de département. Sauf cas particulier, cette contrainte est
appliquée par le biais d'un index unique.
• PRIMARY KEY : Une table de la base de données ne peut pas comporter plus d'une
contrainte PRIMARY KEY. Les valeurs du groupe de colonnes soumis à cette contrainte
constituent l'identificateur unique de la ligne. En effet, chaque ligne est nommée par ses
valeurs de clé primaire.

Oracle Database 10g : Administration Workshop I 7-13


Comprendre l'intégrité des données (suite)
L'implémentation de la contrainte d'intégrité PRIMARY KEY par le serveur Oracle
garantit que les deux conditions suivantes sont vraies :
- Deux lignes d'une table ne comportent pas de valeurs en double dans la colonne ou
l'ensemble de colonnes désigné.
- Les colonnes de clé primaire n'autorisent pas les valeurs NULL. Autrement dit, une
valeur doit être présente dans les colonnes de clé primaire de chaque ligne.
En règle générale, la base de données applique les contraintes PRIMARY KEY par le
biais d'index. La contrainte de clé primaire créée pour la colonne DEPARTMENT_ID de
la table DEPARTMENTS est mise en oeuvre par la création implicite des éléments
suivants :
- un index unique sur cette colonne,
- une contrainte NOT NULL pour cette colonne.
• Contraintes d'intégrité référentielle : Différentes tables d'une base de données
relationnelle peuvent être liées par l'intermédiaire de colonnes communes. Les règles
qui régissent les relations entre les colonnes doivent être respectées. Les règles
d'intégrité référentielle garantissent que ces relations sont préservées.
Une contrainte d'intégrité référentielle impose que pour chaque ligne d'une table, la
valeur de la clé étrangère corresponde à une valeur d'une clé parent.
Par exemple, une clé étrangère est définie sur la colonne DEPARTMENT_ID de la table
EMPLOYEES. Elle permet de s'assurer que chaque valeur de cette colonne correspond à
une valeur de la clé primaire de la table DEPARTMENTS. Par conséquent, il ne peut
exister aucun numéro de département erroné dans la colonne DEPARTMENT_ID de la
table DEPARTMENTS.
Il existe un autre type de contrainte d'intégrité référentielle, appelé contrainte d'intégrité
auto-référentielle. Ce type de clé étrangère fait référence à une clé parent qui se trouve
dans la même table.
• Contraintes CHECK : Une contrainte d'intégrité CHECK appliquée sur une colonne ou
un ensemble de colonnes impose qu'une condition particulière soit vraie ou inconnue
pour chaque ligne de la table. Si une instruction LMD (Langage de manipulation de
données) entraîne une valeur false pour l'évaluation de la contrainte CHECK,
l'instruction est annulée (rollback).

Oracle Database 10g : Administration Workshop I 7-14


Définir des contraintes

7-15 Copyright © 2005, Oracle. Tous droits réservés.

Définir des contraintes


Pour ajouter une contrainte à une table à l'aide d'Enterprise Manager, effectuez les opérations
suivantes :
1. Sélectionnez la table dans la page Tables, puis cliquez sur Edit.
2. Cliquez sur Constraints. Vous accédez à la page Constraints, qui indique toutes les
contraintes définies sur la table.
3. Dans la liste déroulante, sélectionnez le type de contrainte à ajouter, puis cliquez sur Add.
4. Entrez les informations appropriées concernant le type de contrainte que vous définissez.
Cliquez sur OK.

Oracle Database 10g : Administration Workshop I 7-15


Violations de contrainte

Voici quelques exemples de violations de contrainte :


• Insertion d'une valeur de clé primaire en double
• Suppression du parent d'une ligne enfant dans
une contrainte d'intégrité référentielle
• Mise à jour d'une colonne en lui affectant une valeur
qui se trouve en-dehors des limites d'une contrainte
CHECK
ID AGE
101 … X …

22
49
–30
102 …
101
103 … … 16
… 5

7-16 Copyright © 2005, Oracle. Tous droits réservés.

Violations de contrainte
Une violation de contrainte se produit lors de l'exécution d'une instruction LMD (Langage de
manipulation de données) qui ne respecte pas la contrainte. Les violations de contrainte peuvent
revêtir diverses formes. Elles concernent notamment les points suivants :
• Unicité : Un utilisateur tente d'inclure des valeurs en double dans une colonne à laquelle est
appliquée une contrainte UNIQUE (lorsqu'une colonne constitue la clé primaire ou
lorsqu'elle est associée à u index unique).
• Intégrité référentielle : La règle imposant que toutes les lignes enfant aient une ligne
parent est enfreinte.
• CHECK : Un utilisateur tente de stocker dans une colonne une valeur qui n'est pas
conforme aux règles appliquées à cette colonne. Par exemple, une contrainte CHECK
imposant un nombre positif est appliquée à une colonne AGE.

Oracle Database 10g : Administration Workshop I 7-16


Etats possibles d'une contrainte

DISABLE DISABLE ENABLE ENABLE


NOVALIDATE VALIDATE NOVALIDATE VALIDATE

Pas
d'instruction
LMD

Nouvelles données

Données existantes

7-17 Copyright © 2005, Oracle. Tous droits réservés.

Etats possibles d'une contrainte


Pour pouvoir gérer les situations dans lesquelles des données doivent enfreindre temporairement
une contrainte, vous pouvez appliquer différents états à une contrainte. Une contrainte d'intégrité
peut être activée (ENABLE) ou désactivée (DISABLE). Lorsqu'elle est activée, les données sont
vérifiées au fur et à mesure de leur saisie ou de leur mise à jour dans la base. Les données qui ne
respectent pas la règle de la contrainte ne sont pas acceptées. Lorsqu'une contrainte est
désactivée, il est possible d'entrer dans la base des données non conformes à cette contrainte.
Vous pouvez appliquer les états suivants à une contrainte d'intégrité :
• DISABLE NOVALIDATE
• DISABLE VALIDATE
• ENABLE NOVALIDATE
• ENABLE VALIDATE

Oracle Database 10g : Administration Workshop I 7-17


Etats possibles d'une contrainte (suite)
DISABLE NOVALIDATE : Les données ne sont pas vérifiées, qu'elles soient nouvelles ou
existantes. Elles peuvent ne pas être conformes à la contrainte. Cet état est souvent utilisé
lorsque les données proviennent d'une source déjà validée et que la table est en lecture seule
(aucune nouvelle donnée n'est entrée dans la table).
DISABLE VALIDATE : Lorsqu'une contrainte se trouve dans cet état, il n'est pas possible de
modifier les colonnes auxquelles elle s'applique. En effet, il serait illogique d'avoir validé les
données existantes, puis d'autoriser la saisie de données non vérifiées dans la table. Cet état
est souvent utilisé lorsque les données existantes doivent faire l'objet d'une validation mais ne
seront pas modifiées ultérieurement, et que le recours à l'index n'est pas nécessaire pour
assurer de bonnes performances.
ENABLE NOVALIDATE : Les nouvelles données doivent être conformes à la contrainte mais
les données existantes se trouvent dans un état inconnu. Cet état est fréquemment utilisé pour
permettre la correction des violations de contrainte existantes tout en empêchant de nouvelles
violations de se produire dans le système.
ENABLE VALIDATE : Toutes les données doivent être conformes à la contrainte, qu'elles
soient nouvelles ou existantes. Il s'agit de l'état standard d'une contrainte (état par défaut).

Oracle Database 10g : Administration Workshop I 7-18


Vérification des contraintes
La vérification des contraintes s'effectue :
• lors de l'exécution de l'instruction pour les contraintes
immédiates
• lors de l'exécution de la commande COMMIT pour les
contraintes différées
Instruction LMD, suivie par la commande COMMIT

1 Vérification des contraintes immédiates

2 Exécution de la commande COMMIT

3 Vérification des contraintes différées

4 Fin de la commande COMMIT

7-19 Copyright © 2005, Oracle. Tous droits réservés.

Vérification des contraintes


Vous pouvez reporter la vérification de la validité par rapport aux contraintes à la fin de la
transaction.
Les contraintes immédiates, ou contraintes non différées, sont appliquées à la fin de chaque
instruction LMD (Langage de manipulation de données). Une violation de contrainte entraîne
l'annulation (rollback) de l'instruction. Si une contrainte produit une action telle que delete
cascade, l'action est considérée comme faisant partie de l'instruction qui l'a provoquée. Vous
ne pouvez pas transformer une contrainte immédiate en contrainte pouvant être différée.
Les contraintes différées ne sont vérifiées que lorsqu'une transaction est validée (commit). Si
une violation de contrainte est détectée lors de la phase de validation, l'intégralité de la
transaction est annulée (rollback). Ce type de contrainte s'avère particulièrement utile lors de la
saisie simultanée de lignes parent et de lignes enfant liées par une relation de clé étrangère. C'est
le cas, par exemple, d'un système de gestion des commandes client, dans lequel la commande et
les articles concernés sont entrés en même temps.
Vous pouvez appliquer l'un des paramètres suivants à une contrainte pouvant être différée :
• Initially immediate indique que, par défaut, la contrainte doit être traitée comme
une contrainte immédiate, sauf indication contraire explicite.
• Initially deferred stipule que, par défaut, la contrainte ne doit être appliquée qu'à la
fin de la transaction.

Oracle Database 10g : Administration Workshop I 7-19


Créer des contraintes via des
instructions SQL : Exemples
ALTER TABLE countries
a
ADD (UNIQUE(country_name) ENABLE NOVALIDATE);

ALTER TABLE employees ADD CONSTRAINT pk PRIMARY KEY


b
(employee_id)

CREATE TABLE t1 (pk NUMBER PRIMARY KEY, fk NUMBER, c1 NUMBER,


c2 NUMBER,
c
CONSTRAINT ri FOREIGN KEY (fk) REFERENCES t1, CONSTRAINT ck1
CHECK (pk > 0 and c1 > 0));

7-20 Copyright © 2005, Oracle. Tous droits réservés.

Créer des contraintes via des instructions SQL : Exemples


La diapositive ci-dessus présente trois exemples de création de contrainte :
a. Après l'exécution de cette instruction, toute insertion ou mise à jour effectuée dans la table
COUNTRIES doit comporter une valeur COUNTRY_NAME unique. Toutefois, il se peut que
la table contienne déjà des valeurs COUNTRY_NAME non uniques. Le mot-clé
NOVALIDATE ordonne d'ignorer ces valeurs en double. La contrainte ne s'applique qu'aux
nouvelles lignes.
b. Cette instruction ajoute une clé primaire à la table EMPLOYEE. Le nom de la contrainte est
PK et la clé primaire correspond à la colonne EMPLOYEE_ID.
c Cette instruction définit les contraintes au moment de la création de la table, plutôt que
d'utiliser ultérieurement une instruction ALTER TABLE. La contrainte RI impose aux
valeurs de la colonne FK d'être présentes dans la colonne de clé primaire de la table T1. La
contrainte CK1 stipule que les colonnes PK et C1 doivent contenir une valeur supérieure à
zéro.
Remarque : Chaque contrainte est dotée d'un nom. Si vous ne l'indiquez pas dans
l'instruction LDD (Langage de définition de données), un nom fourni pas le système et
commençant par SYS_ est affecté.

Oracle Database 10g : Administration Workshop I 7-20


Afficher les colonnes d'une table

7-21 Copyright © 2005, Oracle. Tous droits réservés.

Afficher les colonnes d'une table


Pour afficher les attributs d'une table à l'aide d'Enterprise Manager, effectuez les opérations
suivantes :
1. Cliquez sur le lien Tables dans la région Schema de la page Database Administration.
2. Sélectionnez une table dans la liste Results et cliquez sur le bouton View afin d'afficher les
attributs de cette table.

Oracle Database 10g : Administration Workshop I 7-21


Afficher le contenu d'une table

7-22 Copyright © 2005, Oracle. Tous droits réservés.

Afficher le contenu d'une table


Pour afficher les lignes d'une table à l'aide d'Enterprise Manager, effectuez les opérations
suivantes :
1. Sélectionnez la table dans la page Tables.
2. Sélectionnez View Data dans le menu Actions, puis cliquez sur Go.
La page View Data for Table apparaît. Les données des lignes de la table s'affichent dans la
région Result. La zone Query affiche l'interrogation SQL qui est exécutée pour générer les
résultats. Dans cette page, vous pouvez cliquer sur le nom de n'importe quelle colonne et trier les
données de cette colonne par ordre croissant ou décroissant. Si vous souhaitez modifier
l'interrogation, cliquez sur le bouton Refine Query. Dans la page Refine Query for Table, vous
pouvez sélectionner les colonnes que vous souhaitez afficher et indiquer une clause WHERE dans
l'instruction SQL afin de limiter les résultats.
Pour plus d'informations sur les clauses WHERE incluses dans les instructions SQL, reportez-vous
au manuel Oracle Database SQL Reference.

Oracle Database 10g : Administration Workshop I 7-22


Actions sur les tables

7-23 Copyright © 2005, Oracle. Tous droits réservés.

Actions sur les tables


Vous pouvez sélectionner une table, puis effectuer des actions sur cette table. Vous pouvez
notamment effectuer les actions suivantes :
• Create Like : Cette action permet de créer une table présentant la même structure que la
table sélectionnée. Vous devez modifier le nom des contraintes. Vous pouvez ajouter ou
supprimer des colonnes, et apporter d'autres modifications à la structure de la table avant de
créer cette dernière.
• Create Index : Utilisez cette option pour créer des index sur une table.
• Generate DDL : Cette action génère l'instruction LDD (Langage de définition de données)
qui représente la table telle qu'elle existe. Cette instruction peut ensuite être copiée dans un
fichier texte afin d'être utilisée en tant que script ou à des fins de documentation.
• Grant Privileges : Par défaut, lorsqu'une table est créée, seul son propriétaire peut l'utiliser.
Le propriétaire doit octroyer des privilèges aux autres utilisateurs pour qu'ils puissent
exécuter des instructions LMD ou LDD sur la table.
• Show Dependencies : Cette opération affiche les objets dont dépend la table, ou les objets
qui dépendent de la table.
• View Data : Cette action permet de sélectionner et d'afficher les données de la table en
mode lecture seule.

Oracle Database 10g : Administration Workshop I 7-23


Supprimer une table

La suppression d'une table entraîne la suppression


des éléments suivants :
• Données DROP TABLE hr.employees PURGE;
• Structure de la table
• Déclencheurs de base de données
• Index correspondants
• Privilèges objet associés
Clauses facultatives pouvant être intégrées
à l'instruction DROP TABLE :
• CASCADE CONSTRAINTS : contraintes d'intégrité
référentielle dépendantes
• PURGE : aucun flashback possible

7-24 Copyright © 2005, Oracle. Tous droits réservés.

Supprimer une table


Syntaxe :
DROP TABLE [schema.] table [CASCADE CONSTRAINTS] [PURGE]
La commande DROP TABLE supprime les données, la structure de la table, et les privilèges objet
associés. Voici quelques points à prendre en compte concernant la commande DROP TABLE :
• En l'absence de la clause PURGE, la définition de la table, les index associés et les
déclencheurs (triggers) sont placés dans la corbeille. Les données de la table sont
conservées, mais elles sont inaccessibles sans la définition de la table. Lorsque vous
supprimez une table via Enterprise Manager, la clause PURGE n'est pas utilisée.
• Utilisez la commande FLASHBACK TABLE pour récupérer les objets de schéma dans la
corbeille. La commande PURGE RECYCLEBIN vide la corbeille.
• L'option CASCADE CONSTRAINTS permet de supprimer toutes les contraintes d'intégrité
référentielle dépendantes.
Remarque : Si vous n'utilisez pas l'option PURGE, l'espace occupé par la table et ses index entre
toujours en compte dans le calcul du quota autorisé pour l'utilisateur dans les tablespaces
concernés. En d'autres termes, l'espace reste considéré comme étant utilisé.

Oracle Database 10g : Administration Workshop I 7-24


Vider une table

TRUNCATE TABLE hr.employees;

• Lorsque vous videz une table, vous rendez les


données des lignes indisponibles et libérez
éventuellement l'espace utilisé.
• Les index correspondants sont vidés.

7-25 Copyright © 2005, Oracle. Tous droits réservés.

Vider une table


Syntaxe :
TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]
L'utilisation de cette commande produit les effets suivants :
• La table est marquée comme étant vide. En effet, le repère high-water mark (HWM) est
placé au début de la table, de sorte que les lignes de celle-ci ne sont plus disponibles.
• Aucune donnée d'annulation (undo) n'est générée et la commande procède implicitement à
une validation (commit) car TRUNCATE TABLE est une commande LDD (Langage de
définition de données).
• Les index correspondants sont également vidés.
• Une table à laquelle une clé étrangère fait actuellement référence ne peut pas être vidée.
• Les déclencheurs (triggers) de suppression ne sont pas exécutés lors de l'utilisation de cette
commande.
La commande TRUNCATE s'avère généralement beaucoup plus rapide qu'une instruction
DELETE pour supprimer toutes les lignes de la table, pour les raisons suivantes :
• La base de données Oracle réinitialise le repère high-water mark de la table au lieu
d'appliquer l'opération DELETE à chaque ligne.
• Aucune donnée d'annulation n'est générée.

Oracle Database 10g : Administration Workshop I 7-25


Schéma
Index Contraintes
> Index
Vues
Séquences
Tables temp.
Dict. de données
… WHERE key = 22

Pointeur
Clé de ligne

22

22

Index Table

7-26 Copyright © 2005, Oracle. Tous droits réservés.

Index
Les index sont des structures facultatives associées aux tables. Ils peuvent être créés afin
d'améliorer les performances de mise à jour et d'extraction des données. Un index Oracle fournit
un chemin d'accès direct vers une ligne de données.
Les index peuvent être créés sur une ou plusieurs colonnes d'une table. Dès lors qu'un index créé,
il est automatiquement tenu à jour et utilisé par le serveur Oracle. Les mises à jour des données
d'une table, telles que l'ajout, la mise à jour ou la suppression de lignes, sont automatiquement
propagées vers tous les index concernés, de manière totalement transparente pour l'utilisateur.

Oracle Database 10g : Administration Workshop I 7-26


Types d'index

Vous disposez de plusieurs types de structure d'index,


adaptés à différents besoins :
• Un index B-tree se présente sous la forme d'une
arborescence binaire. Il s'agit du type d'index
par défaut.
• Un index bitmap comporte un bitmap pour chaque
valeur indexée. Chaque bit du bitmap représente
une ligne et indique si celle-ci contient ou non
la valeur indexée. Ce type d'index est recommandé
pour les colonnes de faible cardinalité.

7-27 Copyright © 2005, Oracle. Tous droits réservés.

Types d'index
Les types d'index les plus courants sont les suivants :
• B-tree
• Bitmap
Les valeurs de clé d'un index B-tree sont stockées dans une arborescence équilibrée (Balanced
tree - B-tree), ce qui permet d'effectuer des recherches binaires rapides.
Un index bitmap inclut un bitmap pour chaque valeur de clé indexée. Chaque bit du bitmap
correspond à une ligne de la table indexée. Cela permet d'effectuer des recherches rapides
lorsqu'il existe un nombre restreint de valeurs distinctes (on dit que la colonne indexée présente
une faible cardinalité). Prenons comme exemple l'indicateur du sexe d'une personne. Cet
indicateur ne peut comporter que les valeurs "M" et "F". La recherche ne porte donc que sur deux
bitmaps. En revanche, supposons qu'un index bitmap soit utilisé pour une colonne
phone_number. Il faudrait gérer et explorer un si grand nombre de bitmaps que l'opération
deviendrait totalement inefficace. Par conséquent, n'utilisez les index bitmap que pour les
colonnes de faible cardinalité.

Oracle Database 10g : Administration Workshop I 7-27


Index B-Tree

Entrée d'index

Racine

Branche

En-tête de l'entrée d'index


Feuille Longueur de la colonne de clé
Valeur de la colonne de clé
ROWID

7-28 Copyright © 2005, Oracle. Tous droits réservés.

Index B-Tree
Structure d'un index B-tree
Au sommet de l'index se trouve la racine, qui contient les entrées pointant vers le niveau suivant
de l'index. Le niveau suivant comprend les blocs branche, qui pointent vers les blocs du niveau
suivant de l'index. Au plus bas niveau se trouvent les noeuds feuille, qui contiennent les entrées
d'index pointant vers les lignes de la table. Les blocs feuille font l'objet d'une liaison double, afin
de faciliter le balayage de l'index dans l'ordre croissant ou décroissant des valeurs de clé.
Format des entrées d'index
Une entrée d'index est composée des éléments suivants :
• Un en-tête, dans lequel sont stockés le nombre de colonnes et les informations de
verrouillage.
• Des paires longueur-valeur qui définissent la taille d'une colonne de clé suivie de la valeur
de la colonne (le nombre de paires de ce type ne doit pas excéder le nombre de colonnes
présentes dans l'index).
• Le ROWID d'une ligne qui contient les valeurs de clé.

Oracle Database 10g : Administration Workshop I 7-28


Index B-Tree (suite)
Caractéristiques des entrées d'index
Dans un index B-tree généré sur une table non partitionnée :
• Les valeurs de clé sont répétées si plusieurs lignes comportent la même valeur de clé, à
moins que l'index ne soit compressé.
• Aucune entrée d'index ne correspond à une ligne dont les colonnes de clé comportent
toutes la valeur NULL. Par conséquent, une clause WHERE stipulant la valeur NULL
entraîne toujours un balayage complet de table (full table scan).
• Le ROWID restreint est utilisé pour pointer vers les lignes de la table car toutes les lignes
appartiennent au même segment.
Effet des opérations LMD sur un index
Le serveur Oracle tient à jour l'ensemble des index lorsque des opérations LMD (Langage de
manipulation de données) sont effectuées sur la table. Les commandes LMD agissent de la
façon suivante sur un index :
• Les opérations d'insertion entraînent l'insertion d'une entrée d'index dans le bloc
approprié.
• La suppression d'une ligne ne cause que la suppression logique de l'entrée d'index.
L'espace utilisé par la ligne supprimée n'est pas disponible pour les nouvelles entrées
tant que toutes les entrées du bloc n'ont pas été supprimées.
• Les mises à jour effectuées dans les colonnes de clé provoquent une suppression logique
et une insertion dans l'index. Le paramètre PCTFREE n'a aucune incidence sur l'index,
sauf lors de la phase de création. Il est possible d'ajouter une nouvelle entrée à un bloc
d'index, et ce même si ce dernier dispose d'une quantité d'espace inférieure à celle
indiquée par PCTFREE.

Oracle Database 10g : Administration Workshop I 7-29


Index bitmap

Table Fichier 3
Bloc 10

Bloc 11

Index Bloc 12

ROWID ROWID
Clé de début de fin Bitmap
<Blue, 10.0.3, 12.8.3, 1000100100010010100>
<Green, 10.0.3, 12.8.3, 0001010000100100000>
<Red, 10.0.3, 12.8.3, 0100000011000001001>
<Yellow, 10.0.3, 12.8.3, 0010001000001000010>

7-30 Copyright © 2005, Oracle. Tous droits réservés.

Index bitmap
Il est plus judicieux d'utiliser des index bitmap que des index B-tree dans les cas suivants :
• Lorsqu'une table contient des millions de lignes et que les colonnes de clé présentent une
faible cardinalité (c'est-à-dire que chaque colonne de clé contient un nombre très restreint de
valeurs distinctes). Par exemple, les index bitmap peuvent être préférables aux index B-tree
pour les colonnes concernant le sexe des personnes et leur situation familiale dans une table
qui contient des enregistrements de passeports.
• Lorsque les interrogations utilisent souvent une combinaison de plusieurs conditions
WHERE incluant l'opérateur OR.
• Lorsque les colonnes de clé ne sont utilisées qu'en lecture ou font rarement l'objet de mises
à jour.
Structure d'un index bitmap
Un index bitmap est organisé comme un index B-tree, à ceci près que les noeuds feuille stockent
un bitmap pour chaque valeur de clé et non une liste de ROWID. Chaque bit du bitmap correspond
à un ROWID possible. Le bit a la valeur 1 lorsque la ligne correspondante contient la valeur de
clé.
Comme l'illustre le diagramme de la diapositive, un noeud feuille d'un index bitmap contient les
éléments suivants :
• Un en-tête, qui contient le nombre de colonnes et les informations de verrouillage.

Oracle Database 10g : Administration Workshop I 7-30


Index bitmap (suite)
Structure d'un index bitmap (suite)
• Des valeurs de clé consistant en des paires longueur-valeur pour chaque colonne de clé.
Dans l'exemple de la diapositive, la clé est une colonne unique, et la première entrée
comporte la valeur de clé Blue.
• Un ROWID de début. Dans l'exemple considéré, il correspond au numéro de bloc dix, au
numéro de ligne zéro et au numéro de fichier trois.
• Un ROWID de fin. Dans l'exemple, il correspond au numéro de bloc douze, au numéro
de ligne huit et au numéro de fichier trois.
• Un segment bitmap composé d'une chaîne de bits. (Un bit est égal à 1 lorsque la ligne
correspondante contient la valeur de clé. Sinon, il est égal à 0. Le serveur Oracle utilise
une technique de compression brevetée pour le stockage des segments bitmap.)
Le ROWID de début est le ROWID de la première ligne vers laquelle pointe le segment bitmap.
Autrement dit, le premier bit du bitmap correspond à ce ROWID, le deuxième bit correspond à
la ligne suivante du bloc et le ROWID de fin pointe vers la dernière ligne de la table incluse
dans le segment bitmap. Les index bitmap utilisent des ROWID restreints.
Utilisation d'un index bitmap
La structure B-tree est utilisée pour repérer les noeuds feuille qui contiennent les segments
bitmap pour une valeur donnée de la clé. Le ROWID de début et les segments bitmap
permettent de repérer les lignes qui contiennent la valeur de clé.
Lorsque la colonne de clé de la table est modifiée, les bitmaps doivent également être
modifiés. Cette opération entraîne le verrouillage des segments bitmap concernés. Les verrous
externes (locks) sont appliqués à l'ensemble du segment bitmap. Par conséquent, une ligne
comprise dans le bitmap ne peut pas être mise à jour par d'autres transactions tant que la
première transaction n'est pas terminée.

Oracle Database 10g : Administration Workshop I 7-31


Options relatives aux index

• Un index unique permet de garantir que chaque


valeur indexée est unique.
• Les valeurs de clé d'un index peuvent être
stockées dans l'ordre croissant ou décroissant.
• Dans un index à clé inversée, les octets
constituant les valeurs de clé sont stockés
dans l'ordre inverse.
• Un index composé est basé sur plusieurs
colonnes.
• Un index basé sur une fonction repose sur
la valeur renvoyée par une fonction.
• Un index compressé supprime les valeurs
de clé en double.

7-32 Copyright © 2005, Oracle. Tous droits réservés.

Options relatives aux index


Pour faciliter les opérations d'extraction, il peut être intéressant d'utiliser un index qui stocke les
clés dans l'ordre décroissant. Le choix de cette option dépend du mode d'accès aux données le
plus fréquemment utilisé.
Dans un index à clé inversée, les octets de la valeur indexée sont stockés dans l'ordre inverse.
Cela peut entraîner une réduction de l'activité au niveau d'un point sensible de l'index. Si de
nombreux utilisateurs traitent les données dans le même ordre, les préfixes des valeurs de clé (qui
sont en cours de traitement) présentent des valeurs proches à un instant donné. Par conséquent,
une activité importante a lieu dans cette zone de la structure d'index. Un index à clé inversée
répartit l'activité sur l'ensemble de la structure d'index en indexant une version à octets inversés
des valeurs de clé.
Un index créé par la combinaison de plusieurs colonnes est appelé index composé. Vous pouvez,
par exemple, créer un index basé sur le nom et le prénom d'une personne :
CREATE INDEX name_ix ON employees
(last_name, first_name);

Oracle Database 10g : Administration Workshop I 7-32


Options relatives aux index (suite)
Un index basé sur une fonction procède à l'indexation de la valeur renvoyée par une
fonction. Il peut s'agir d'une fonction SQL intégrée, d'une fonction PL/SQL fournie ou
d'une fonction définie par l'utilisateur. Ainsi, le serveur n'a pas besoin d'appeler la fonction
pour chaque valeur de clé lorsqu'il effectue une recherche sur l'expression indexée.
L'exemple suivant permet de baser l'index sur le volume renvoyé par la fonction pour
chaque arbre selon le type (species), la hauteur (height) et la circonférence
(circumference), qui correspondent à des colonnes de la table TREES :
CREATE INDEX tree_vol_ix ON
TREES(volume(species,height,circumference));
Par conséquent, toute interrogation dont la clause WHERE contient l'expression
volume(species,height,circumference) peut utiliser cet index. Cela réduit
considérablement son temps d'exécution puisque le calcul de volume est déjà effectué pour
chaque arbre. Les index basés sur une fonction sont tenus à jour automatiquement, comme
tout autre index standard.
Vous pouvez utiliser un index compressé pour réduire la consommation d'espace disque
lors de la phase d'exécution. Les valeurs de clé répétées étant supprimées, une même
quantité d'espace disque peut contenir davantage d'entrées d'index. Le système peut ainsi
lire un plus grand nombre d'entrées sur le disque dans un même laps de temps. Une
compression et une décompression doivent être effectuées respectivement pour les
opérations d'écriture et de lecture de l'index.

Oracle Database 10g : Administration Workshop I 7-33


Créer des index

CREATE INDEX my_index ON


employees(last_name, first_name);

7-34 Copyright © 2005, Oracle. Tous droits réservés.

Créer des index


Vous pouvez cliquer sur le lien Indexes sous l'en-tête Schema de la page Administration afin
d'afficher la page Indexes. Vous pouvez afficher les attributs des index ou utiliser le menu
Actions pour visualiser les dépendances d'un index.
Les index peuvent être créés explicitement, ou implicitement par l'intermédiaire de contraintes
placées sur une table. Un index créé implicitement peut résulter, par exemple, de la définition
d'une clé primaire. Un index unique est alors créé automatiquement pour la mise en oeuvre de
l'unicité des valeurs de la colonne.

Oracle Database 10g : Administration Workshop I 7-34


Schéma
Qu'est-ce qu'une vue ? Contraintes
Index
> Vues
Table LOCATION …

Table COUNTRY
Vue

CREATE VIEW v AS SELECT location_id, country_name FROM


locations l, countries c
WHERE l.country_id = c.country_id AND c.country_id in
('AU','BR');

7-35 Copyright © 2005, Oracle. Tous droits réservés.

Qu'est-ce qu'une vue ?


Les vues sont des représentations personnalisées de données provenant d'une ou de plusieurs
tables, ou d'autres vues. Elles peuvent être considérées comme des interrogations stockées car
elles peuvent masquer des conditions et des jointures très complexes, ainsi que d'autres
expressions et structures SQL complexes. Une vue ne contient pas de données à proprement
parler. Ses données sont issues des tables sur lesquelles elle est basée. Ces tables sont appelées
tables de base de la vue.

Oracle Database 10g : Administration Workshop I 7-35


Créer des vues

7-36 Copyright © 2005, Oracle. Tous droits réservés.

Créer des vues


A l'instar des tables, les vues peuvent faire l'objet d'interrogations, de mises à jour, d'insertions et
de suppressions, avec cependant quelques restrictions. Toutes les opérations effectuées sur une
vue affectent les tables de base de cette vue. Les vues fournissent un niveau de sécurité
supplémentaire en limitant l'accès à un ensemble prédéterminé de lignes et de colonnes d'une
table. Elles masquent également la complexité des données et permettent le stockage
d'interrogations complexes.
Pour afficher les vues définies dans la base de données, cliquez sur le lien Views sous l'en-tête
Schema de la page Administration.

Oracle Database 10g : Administration Workshop I 7-36


Schéma
Séquences Contraintes
Index
Vues
> Séquences
Une séquence est un mécanisme de génération Tables temp.
automatique de nombres entiers selon Dict. de données
un modèle spécifique.
• Une séquence comporte un nom, 1
2
qui est utilisé pour la demande de 3
4
la valeur suivante. 5
• Une séquence n'est associée à
aucune table ou colonne particulière.
• La progression peut s'effectuer de manière
croissante ou décroissante.
• L'intervalle entre les numéros peut être de n'importe
quelle taille.
• Une séquence peut effectuer une boucle lorsqu'une
limite est atteinte.
7-37 Copyright © 2005, Oracle. Tous droits réservés.

Séquences
Pour obtenir la valeur suivante d'une séquence, vous devez référencer celle-ci par son nom. En
effet, il n'existe aucune association entre une séquence et une table ou une colonne.
Un numéro fourni par une séquence n'est jamais émis de nouveau, sauf si la séquence est définie
comme étant cyclique. Une application demande parfois une valeur qu'elle n'utilise jamais ou
qu'elle ne stocke jamais dans la base de données. Il peut ainsi y avoir des décalages entre les
numéros figurant dans la table de stockage.
La mise en mémoire cache des numéros de séquence améliore les performances du système car
un ensemble de numéros est préalloué et conservé en mémoire afin de garantir un accès rapide.
En cas d'échec de l'instance, les numéros de séquence mis en mémoire cache ne sont pas utilisés,
ce qui génère des décalages.
Remarque : Si une application interdit les décalages, elle doit implémenter un générateur de
numéros personnalisé. Cette méthode risque toutefois de réduire considérablement les
performances du système. Si vous utilisez une table pour stocker une valeur, et que vous
incrémentez cette valeur et mettez à jour la table pour chaque demande, vous générez un goulet
d'étranglement au niveau du système tout entier. En effet, chaque session doit attendre que le
mécanisme soit disponible, et ce dernier ne peut traiter qu'une demande à la fois afin de garantir
qu'aucune valeur n'est en double ou manquante.

Oracle Database 10g : Administration Workshop I 7-37


Créer une séquence

7-38 Copyright © 2005, Oracle. Tous droits réservés.

Créer une séquence


Vous pouvez afficher et créer des séquences à l'aide d'Enterprise Manager, en cliquant sur le lien
Sequences sous l'en-tête Schema de la page Administration. Voici un récapitulatif des options de
création de séquence disponibles :
• Name : Nom de la séquence, utilisé pour faire référence à la séquence.
• Schema : Propriétaire de la séquence.
• Maximum Value : Indiquez la valeur maximale que la séquence peut générer. Cette valeur
entière peut comporter 28 chiffres au plus. Elle doit être supérieure aux valeurs Minimum
Value et Initial. L'option Unlimited indique une valeur maximale de 1027 pour une séquence
croissante et de –1 pour une séquence décroissante. La valeur par défaut est Unlimited.
• Minimum Value : Indiquez la valeur minimale de la séquence. Cette valeur entière peut
comporter 28 chiffres au plus. Elle doit être inférieure ou égale à Initial, et strictement
inférieure à Maximum Value. L'option Unlimited indique une valeur minimale de 1 pour
une séquence croissante et de –1026 pour une séquence décroissante. La valeur par défaut est
Unlimited.

Oracle Database 10g : Administration Workshop I 7-38


Créer une séquence (suite)
• Interval : Indiquez l'intervalle entre les numéros de séquence. Cette valeur entière peut
être un entier positif ou négatif quelconque, différent de zéro. Elle peut comporter
28 chiffres au plus. La valeur par défaut est de un.
• Initial : Indiquez le premier numéro de séquence à générer. Une séquence croissante
générera des numéros supérieurs à cette valeur, tandis qu'une séquence décroissante
générera des numéros inférieurs.
• Cycle Values : Lorsqu'une séquence croissante atteint sa valeur maximale, elle poursuit
en générant à nouveau sa valeur minimale. Lorsqu'une séquence décroissante atteint sa
valeur minimale, elle poursuit en générant à nouveau sa valeur maximale. Lorsque vous
ne choisissez pas l'option Cycle Values, une erreur est renvoyée si vous tentez d'obtenir
un numéro alors que toutes les valeurs possibles pour la séquence sont épuisées.
• Order Values : Cette option garantit que les numéros de séquence sont générés dans
l'ordre dans lequel ils sont demandés. Cette clause s'avère utile si vous utilisez les
numéros de séquence comme valeurs d'horodatage. Il n'est généralement pas essentiel
d'assurer l'ordre des numéros lorsqu'une séquence est utilisée pour générer des clés
primaires. Cette option n'est nécessaire que pour garantir l'ordre de génération si vous
utilisez la base de données Oracle avec Real Application Clusters.
• Cache Options : Indiquez le nombre de numéros de séquence que la base de données
Oracle préalloue et conserve en mémoire pour un accès plus rapide. Cette valeur entière
peut comporter 28 chiffres au plus. La valeur minimale de ce paramètre est 2. Pour les
séquences cycliques, cette valeur doit être inférieure au nombre de valeurs du cycle.
Vous ne pouvez pas mettre en cache plus de valeurs que n'en comporte un cycle donné
de numéros de séquence.

Oracle Database 10g : Administration Workshop I 7-39


Utiliser une séquence

7-40 Copyright © 2005, Oracle. Tous droits réservés.

Utiliser une séquence


Pour faire référence à des valeurs de séquence dans des instructions SQL, utilisez les pseudo-
colonnes suivantes :
• CURRVAL : renvoie la valeur actuelle d'une séquence.
• NEXTVAL : incrémente la séquence et renvoie la valeur suivante.
Vous devez qualifier CURRVAL et NEXTVAL avec le nom de la séquence :
sequence.CURRVAL
sequence.NEXTVAL
La première référence à NEXTVAL renvoie la valeur initiale de la séquence. Les références
suivantes à NEXTVAL incrémentent la valeur de la séquence du nombre indiqué et renvoient la
nouvelle valeur. Une référence à CURRVAL renvoie toujours la valeur actuelle de la séquence, qui
est la valeur renvoyée par la dernière référence à NEXTVAL.

Oracle Database 10g : Administration Workshop I 7-40


Schéma
Tables temporaires Contraintes
Index
Vues
Séquences
> Tables temp.
Une table temporaire : Dict. de données

• fournit un espace de stockage des données


qui est nettoyé automatiquement à la fin
de la session ou de la transaction
• fournit un espace de stockage privé des données
pour chaque session
• peut être utilisée par toutes les sessions,
sans risque d'affecter les données privées
des autres sessions

7-41 Copyright © 2005, Oracle. Tous droits réservés.

Tables temporaires
Vous pouvez utiliser des tables temporaires lorsque vous avez besoin de stocker des données de
manière privée pour la réalisation d'une tâche, et que vous souhaitez supprimer ces données une
fois la tâche terminée, à la fin d'une transaction ou d'une session. Les tables temporaires vous
évitent d'avoir à masquer vos données pour les autres sessions et à supprimer les données
générées lorsque vous avez terminé. Les seules données d'une table temporaire visibles par une
session sont celles que la session a insérées.
Une table temporaire peut être propre à une transaction ou à une session. Dans le cas des tables
temporaires propres à une transaction, les données sont présentes pendant toute la durée de la
transaction. Pour les tables temporaires propres à une session, elles sont présentes pendant toute
la durée de la session. Dans les deux cas, les données insérées par une session sont réservées à la
session. Une session ne peut afficher et modifier que les données qui lui sont propres. Par
conséquent, aucun verrou LMD n'est appliqué aux données d'une table temporaire. Les clauses
suivantes contrôlent la durée de vie des lignes :
• ON COMMIT DELETE ROWS : Indique que la durée de vie des lignes insérées correspond à
la durée de la transaction uniquement.
• ON COMMIT PRESERVE ROWS : Indique que la durée de vie des lignes insérées correspond
à la durée de la session.

Oracle Database 10g : Administration Workshop I 7-41


Tables temporaires (suite)
L'instruction CREATE GLOBAL TEMPORARY TABLE permet de créer une table temporaire.
Vous pouvez créer des index, des vues et des déclencheurs (triggers) sur des tables
temporaires. Vous pouvez également recourir aux utilitaires d'export et d'import ou à Data
Pump pour exporter et importer la définition d'une table temporaire. Toutefois, aucune donnée
n'est exportée, même si vous utilisez l'option ROWS.
Les données des tables temporaires sont supprimées suite aux événements mentionnés
précédemment. Il est aussi possible de forcer la suppression des données à l'aide de la
commande TRUNCATE TABLE. Cette opération supprime toutes les données que vous avez
insérées. Elle s'avère plus efficace que la commande DELETE.
Vous pouvez créer des index, des vues et des déclencheurs sur les tables temporaires.
Pour créer des tables temporaires à l'aide d'Enterprise Manager, cliquez sur l'option
Temporary, dans la page Create Table: Table Organization. Cliquez sur Continue. La page
qui apparaît vous permet de préciser si la table temporaire est propre à la session ou à une
transaction. Le champ Tablespace est désactivé car une table temporaire est toujours créée
dans le tablespace temporaire de l'utilisateur. Aucun autre tablespace ne peut être indiqué.
Remarque : Le mot-clé GLOBAL suit la terminologie définie par la norme ISO (International
Organization for Standardization) pour le code SQL.

Oracle Database 10g : Administration Workshop I 7-42


Tables temporaires : Utilisation

• Utilisez la clause GLOBAL TEMPORARY pour créer


une table temporaire :
CREATE GLOBAL TEMPORARY TABLE employees_temp
ON COMMIT PRESERVE ROWS
AS SELECT * FROM employees;

• Utilisez la commande TRUNCATE TABLE pour


supprimer le contenu de la table.
• Vous pouvez créer les éléments suivants
sur une table temporaire :
– Index
– Vues
– Déclencheurs

7-43 Copyright © 2005, Oracle. Tous droits réservés.

Tables temporaires : Utilisation


L'instruction CREATE GLOBAL TEMPORARY TABLE permet de créer une table temporaire.
Vous pouvez créer des index, des vues et des déclencheurs (triggers) sur des tables temporaires.
Vous pouvez également recourir aux utilitaires d'export et d'import ou à Data Pump pour exporter
et importer la définition d'une table temporaire. Toutefois, aucune donnée n'est exportée, même si
vous utilisez l'option ROWS.
Les données des tables temporaires sont supprimées suite aux événements mentionnés
précédemment. Il est aussi possible de forcer la suppression des données à l'aide de la commande
TRUNCATE TABLE. Cette opération supprime toutes les données que vous avez insérées. Elle
s'avère plus efficace que la commande DELETE.
Remarque : Le mot-clé GLOBAL suit la terminologie définie par la norme ISO (International
Organization for Standardization) pour le code SQL.

Oracle Database 10g : Administration Workshop I 7-43


Schéma
Dictionnaire de données : Contraintes
Index
Présentation Vues
Séquences
Tables temp.
> Dict. de données
Tables
Index
Vues
Utilisateurs
Schémas
Procédures
etc.

SELECT * FROM dictionary;

7-44 Copyright © 2005, Oracle. Tous droits réservés.

Dictionnaire de données : Présentation


Le dictionnaire de données d'Oracle constitue la description d'une base de données. Il contient le
nom et les attributs de tous les objets de la base. Lors de la création ou de la modification d'un
objet, il est mis à jour afin de refléter les changements opérés. Les informations du dictionnaire
sont stockées dans les tables de base gérées par la base de données Oracle. Vous ne lisez pas
directement ces tables mais vous y accédez par le biais de vues prédéfinies.
Le dictionnaire de données :
• est utilisé par le serveur de base de données Oracle pour la recherche d'informations sur les
utilisateurs, les objets, les contraintes et le stockage,
• est mis à jour par le serveur de base de données Oracle lorsque des définitions ou des
structures d'objet sont modifiées,
• peut être utilisé par n'importe quel utilisateur pour la recherche d'informations sur la base de
données,
• appartient à l'utilisateur SYS,
• ne doit jamais être modifié directement à l'aide d'une instruction SQL.
Remarque : La vue DICTIONARY du dictionnaire de données, ou le synonyme DICT
correspondant, contient le nom et la description de tous les éléments inclus dans le dictionnaire de
données. Utilisez la vue DICT_COLUMNS pour afficher les colonnes des vues et leur définition.
Pour obtenir la définition complète de chaque vue, reportez-vous au manuel Oracle Database
Reference.

Oracle Database 10g : Administration Workshop I 7-44


Vues du dictionnaire de données

Personnes Contenu Sous- Remarques


autorisées ensemble
à interroger de
DBA_ DBA Tout N/A Peut comporter des
colonnes supplémentaires
destinées au DBA
uniquement
ALL_ Tous Tous les Vues DBA_ Inclut les objets propres
éléments que à l'utilisateur
l'utilisateur
est autorisé
à voir
USER_ Tous Tous les Vues ALL_ Généralement identique
éléments dont à ALL_, hormis la colonne
l'utilisateur OWNER manquante.
est le Certaines vues sont dotées
propriétaire de noms abrégés comme
synonymes PUBLIC.

7-45 Copyright © 2005, Oracle. Tous droits réservés.

Vues du dictionnaire de données


Chaque nom de vue a un préfixe qui indique le type et la quantité de données qu'un utilisateur est
autorisé à voir. La vue globale, identifiée par le préfixe DBA_, n'est accessible qu'aux utilisateurs
disposant de privilèges DBA. Le niveau suivant de privilège est déterminé par le préfixe ALL_,
qui représente tous les objets que l'utilisateur exécutant l'interrogation est autorisé à voir, qu'il en
soit le propriétaire ou non. Par exemple, si l'utilisateur USER_A est autorisé à accéder à une table
dont USER_B est le propriétaire, USER_A voit cette table dans toutes les vues ALL_ concernant
les noms de table. Le préfixe USER_ est associé aux vues les plus restreintes. Ces vues affichent
seulement les objets dont l'utilisateur exécutant l'interrogation est le propriétaire, c'est-à-dire les
objets présents dans le schéma de l'utilisateur.

Oracle Database 10g : Administration Workshop I 7-45


Vues du dictionnaire de données (suite)
D'une manière générale, chaque ensemble de vues est un sous-ensemble de l'ensemble de
vues nécessitant des privilèges supérieurs, au niveau des lignes et des colonnes. Toutefois,
les vues d'un ensemble donné n'ont pas toutes leur pendant dans les autres ensembles de
vues. Cela dépend de la nature des informations contenues dans la vue. Par exemple, il
existe une vue DBA_LOCK mais pas de vue ALL_LOCK. En effet, seul un administrateur
de base de données (DBA) est intéressé par les données relatives aux verrous externes
(locks). Assurez-vous de choisir l'ensemble de vues adapté à vos besoins. Même si vous
êtes autorisé à accéder aux vues DBA, vous pouvez parfois interroger la version USER
d'une vue lorsque vous souhaitez visualiser les objets dont vous êtes le propriétaire sans
inclure d'autres objets dans l'ensemble de résultats.
Les vues DBA_ peuvent être interrogées par les utilisateurs disposant du privilège SYSDBA
ou SELECT ANY DICTIONARY.

Oracle Database 10g : Administration Workshop I 7-46


Dictionnaire de données :
Exemples d’utilisation

a
SELECT table_name, tablespace_name FROM
user_tables;

SELECT sequence_name, min_value, max_value,


b increment_by FROM all_sequences WHERE
sequence_owner IN ('MDSYS','XDB');

c SELECT USERNAME, ACCOUNT_STATUS FROM


dba_users WHERE ACCOUNT_STATUS = 'OPEN';

d DESCRIBE dba_indexes;

7-47 Copyright © 2005, Oracle. Tous droits réservés.

Dictionnaire de données : Exemples d'utilisation


Les interrogations présentées dans la diapositive ci-dessus permettent de répondre
aux questions suivantes :
a. Quel est le nom des tables qui ont été créées dans votre schéma (et quel est le nom du
tablespace dans lequel elles résident) ?
b. A quelles informations importantes relatives aux séquences de la base de données avez-vous
accès ?
c Quels utilisateurs de la base de données sont autorisés actuellement à se connecter ?
d. Quelles sont les colonnes de la vue DBA_INDEXES ? Cette interrogation permet de
connaître les informations que vous pouvez consulter au sujet de tous les index de la base de
données. Voici un exemple de sortie partielle résultant de l'exécution de cette commande :
SQL> DESCRIBE dba_indexes;
Name Null? Type
--------------- -------- -------------
OWNER NOT NULL VARCHAR2(30)
INDEX_NAME NOT NULL VARCHAR2(30)
INDEX_TYPE VARCHAR2(27)
TABLE_OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)

Oracle Database 10g : Administration Workshop I 7-47


Synthèse

Ce chapitre vous a permis d'apprendre à :


• définir des objets de schéma et des types
de données
• créer et modifier des tables
• définir des contraintes
• afficher les colonnes et le contenu d'une table
• créer des index
• créer des vues
• créer des séquences
• expliquer l'utilisation des tables temporaires
• utiliser le dictionnaire de données

7-48 Copyright © 2005, Oracle. Tous droits réservés.

Oracle Database 10g : Administration Workshop I 7-48


Présentation de l'exercice :
Administrer les objets de schéma

Cet exercice porte sur les points suivants :


• créer des tables contenant plusieurs colonnes
• créer des contraintes :
– clé primaire
– clé étrangère
– contrainte CHECK
• créer des index

7-49 Copyright © 2005, Oracle. Tous droits réservés.

Oracle Database 10g : Administration Workshop I 7-49

Vous aimerez peut-être aussi