Académique Documents
Professionnel Documents
Culture Documents
Concepts et
structures de base
Rosaire Amore
Table des matières
I Les concepts
Architecture système.....................................................................4
Une instance Oracle.............................................................................................4
Structure des process...........................................................................................4
Variantes dans les configurations...........................................................................8
Structures de la base....................................................................10
Segments, Extents et Blocs.................................................................................10
Data blocks.......................................................................................................11
Extents.............................................................................................................14
Segments.........................................................................................................16
Tablespaces et Data files.....................................................................................22
Les objets d'un schéma.......................................................................................26
Intégrité des données.........................................................................................29
Dictionnaire de données......................................................................................31
Préambule
Process utilisateurs
Ce sont les process qui s'exécutent lorque un utilisateur se connecte au moyen d'outils
ou d'applications tels que SQL*DBA, SQL*PLUS, …
Dans ce cas un process est créé pour chaque application.
DBWR
Ecrit les blocs modifiés du buffer base de donnée dans la base. Cette écriture a lieu
aussi quand Oracle a besoin d'un buffer.
Il n'y a pas forcément écriture dans la base de donnée lors d'un commit. Cette
écriture, garantissant l'intégrité des données, se fait dans le redo log file en ligne.
LGWR
Ce process écrit les entrées redo log sur disque. Si un buffer doit être libéré, il peut y
avoir écriture sur disque dans le redo en ligne, sans que certaines transactions ne
soient committées, mais celles ci ne deviennent permanentes que lors de leur commit.
SMON
Son rôle est de procéder à la restauration "instance". Il est utilisé au startup pour
effectuer les restaurations automatiques au démarrage d'une instance, suite à un
incident CPU. SMON est également responsable du nettoyage des segments
temporaires inutilisés. Il finalise aussi les transactions avortées ou non finalisées à
cause d'un crash ou du non montage d'un tablespace. Ces transactions sont terminées
par SMON dès que le montage du tablespace ou du fichier est réalisé.
PMON
Procède aux "process recovery" quand un process utilisateur échoue (p.ex. un process
SQL*Plus client est perdu). PMON est responsable du nettoyage des caches et de la
Oracle - Concepts P .6 R. Amore
libération des ressources utilisées par ce process échoué. Par exemple, il réinitialise le
statut de la table des transactions actives, débloque les verrous, supprime le PID de la
liste des process Oracle actifs.
PMON et SMON se comportent comme des daemons Unix.
ARCH
Le process d'archivage, écrit les redo log files online vers la bande, lorsqu'ils sont
pleins et qu'un switch log survient. ARCH n'est actif que lorsque Oracle est utilisé en
mode ARCHIVELOG.
Data blocks
Au niveau de granularité le plus fin, les données d'une base de données Oracle sont
stockées dans des data blocks (appelées aussi blocs logiques, Oracle blocks ou pages).
Un bloc correspond à un nombre spécifique d'octets. La taille d'un bloc est spécifié
pour chaque bloc de données lors de la création de la base. Cette taille est un multiple
de la taille d'un bloc de l'OS. Il est important de se souvenir qu'une base de données à
son plus fin de granularité, utilise et alloue de l'espace libre dans des blocs de données
(par opposition, toutes les données au niveau du système d'exploitation sont stockées
en octets).
Extents
Le niveau logique supérieur d'allocation d'espace dans une database est appelé un
extents. Un extent est un nombre spécifique de data blocks contigus qui est alloué
pour stocker un type spécifique d'informations.
Data blocks
Format
Le format d'un bloc Oracle est le même que le bloc contienne des données de tables,
d'index ou de clusters. La figure ci-dessous illustre le format d'un bloc.
En-tête (header)
Contient des informations générales telles l'adresse du bloc, type de segment. Sa taille
varie de 84 à 107 octets
Table directory
Contient des informations sur la table dont les données se trouvent dans ce bloc.
Row data
Contient les données de la table ou de l'index.
Espace libre
Est utilisé pour l'INSERTion de lignes ou pour les UPDATE qui requièrent de l'espace
supplémentaire. Bien que l'INSERTion de données dans un bloc soit fonction des
paramètres PCTFREE et PCTUSED.
Le paramètre PCTFREE
Permet de spécifier le poucentage du bloc devant rester libre pour les éventuels
UPDATE de lignes se trouvant déjà stockées dans ce bloc. Par exemple, en supposant
que l'on a spécifié la valeur suivante pour ce paramètre à la création de la table :
PCTFREE 20
Cette clause spécifie que 20% de chaque bloc de données pour cette table sera gardé
libre pour de possibles mises à jour des lignes déjà stockées dans chaque bloc.
Il est à noter qu'avant que le PCTFREE ne soit atteint, l'espace est rempli par les
INSERTions et la croissance du header.
d'éventuels UPDATE. Par exemple, en supposant que l'on a spécifié la valeur suivante
pour ce paramètre à la création de la table : PCTUSED 40, Dans ce cas, un bloc de
données utilisé pour les données d'une table de ce segment n'est pas considéré
comme étant libre à l'INSERTion d'aucune ligne tant que l'espace utilisé dans le bloc
ne descend pas à 39% ou moins (en supposant que l'espace utilisé dans le bloc ait
auparavent atteint le PCTFREE). La figure ci-dessous illustre ce fait.
Désallocation
En général, les extents ne sont libérés que lorsque des commandes telles que DROP
TABLE sont exécutées. Mais il existe des exceptions où Oracle désalloue
automatiquement un extent, en particulier dans le cas des Rollback Segment.
Data segments
Chaque table non clustérisée dans une base de données Oracle a un seul data
segment qui contient toutes ses données. Ce data segment pour la table est
indirectement créé via la commande CREATE TABLE.
Chaque cluster dans une base de données Oracle a aussi un seul data segment
contenant ses données.
Les paramètres de stockage contrôlent la façon dont les extents sont alloués.
Index segments
Chaque index dans une base de données Oracle a un segment d'index pour contenir
ses données. Le segment d'index pour l'index est indirectement créé via la commande
CREATE INDEX.
Rollback Segment
Chaque base de données contient un ou plusieurs Rollback Segment, un Rollback
Segment est une portion de la data base qui enregistre les actions d'une transaction
susceptible de subir un ROLLBACK dans certaines circonstances. Les Rollback Segment
sont utilisés pour fournir la cohérence en lecture, pour annuler des transactions
(ROLLBACK) et pour restaurer la data base.
Il est à noter qu'à partir de la version 9, sont apparus les undo tablespaces qui
gèrent le rollbacking de façon différente (voir le tiré à part sur ce point).
T1 et T2, qui continuent à écrire du troisième extent jusqu'au quatrième d'un Rollback
Segment.
Pendant que la transaction continue à écrire et à remplir l'extent courant, la
disponibilité du prochain extent alloué au Rollback Segment est vérifiée. Dans cette
figure E1 est cet extent. Cette figure montre la nature cyclique de l'utilisation des
extents dans les Rollback Segment.
Bien que les databases, tablespaces, datafiles, et segments sont intimement liés, ils
comportent d'importantes différences :
Databases et Une database Oracle est constituée de une ou plusieurs unités
tablespaces logiques de stockage appelées tablespace. Les données de la
database est globalement stockées dans les tablespaces de la
database.
Tablespaces et Chaque tablespace dans une base de données Oracle est
datafiles composée de un ou plusieurs fichiers sytème appelés datafiles. Un
datafile d'un tablespace contient physiquement les données
associées de la database sur disque.
Databases et Les données d'une database sont collectivement stockées dans les
datafiles datafiles qui constituent chaque tablespace de la database. Par
exemple, la database Oracle la plus simple aurait un tablespace
avec un datafiles, une database plus complexe pourrait avoir trois
tablespaces, chacune étant composée de deux datafiles (pour un
total de six datafiles).
Schema objects, Quand un objet d'un schéma tel qu'une table ou un index est
segments et créé, son segment est créé dans un tablespace donné de la
tablespaces database. Par exemple, supposons qu'une table soit créée dans
un tablespace spécifique en utilisant la commande CREATE TABLE
avec l'option TABLESPACE. L'espace pour le segment de données
de cette table est alloué dans un ou plusieurs des datafiles qui
constituent le tablespace spécifié. Un segment d'un objet réserve
de la place dans seulement un tablespace d'une database.
Le tablespace SYSTEM
Chaque base de données Oracle contient un tablespace nommé SYSTEM qui est
automatiquement créé lors de la création de la base de données. Le tablespace
SYSTEM contient toujours les tables du dictionnaire de données pour la base de
données entière.
Une petite base de données pourrait ne nécessiter que le tablespace SYSTEM.
Cependant il est recommandé qu'au moins un tablespace supplémentaire soit créé
pour stocker les données utilisateur séparément des informations du dictionnaire de
données, ce qui vous donne plus de flexibilité dans de nombreuses opérations
d'administration de la database, et qui peut réduire les "embouteillages" entre les
objets du dictionnaire et les objets des schémas dans le même datafile.
Le tablespace SYSTEM doit toujours être maintenu online (il ne peut pas être mis
offline).
Toutes les données stockées pour les unités de programmes PL/SQL stockées
(procédures, fonctions, packages et triggers) le sont dans le tablespace SYSTEM. Si le
nombre de ces objets PL/SQL est important l'administrateur de la base de données
doit tenir compte avec attention de l'espace qu'ils occupent.
La taille d'un tablespace est la taille du datafile ou la taille cumulée des multiples
datafiles qui constituent le tablespace, et la taille de la base de données est la taille
collective des tablespaces qui constituent la base de données.
A noter que dans les versions récentes d'Oracle il est possible de gérer la
!
Datafiles
Un tablespace dans une base de données Oracle est composé d'un ou plusieurs
datafiles. Un datafile peut être associé à un tablespace et un seul et seulement une
database.
Datafiles Offline
Les tablespaces peuvent être mis offline ou ramenés online à tout moment. De même
un datafile individuel peut aussi être mis offline. Cependant cela n'est fait que durant
certaines procédures de restauration de la base de données.
Il n'y a pas de relation entre schéma et tablespace : un tablespace peut contenir des
objets de différents schémas et les objets d'un schéma peuvent être contenus dans
différents tablespace.
Tables
Les tables sont l'unité basique de stockage des données dans une base de données
Oracle. Les données sont stockées en lignes et colonnes.
Voir cours SQL.
Voir annexe sur la commande CREATE TABLE et les commentaires qui suivent.
Vues
Voir cours SQL.
Séquences
Voir annexe sur la commande CREATE SEQUENCE et les commentaires qui suivent.
Index
Oracle - Concepts P .28 R. Amore
Voir support Administration.
Clusters
Généralités
Les clusters sont une méthode optionnelle de stockage des données des tables. Un
cluster est un groupe de tables qui partagent les mêmes blocs de données parce qu'ils
partagent des colonnes communes et sont souvent utilisées ensemble.Par exemple, les
tables EMP et DEPT partagent la colonne deptno. Si elles sont clusterisées, toutes les
lignes de chaque département des deux tables sont stockées physiquement dans les
mêmes blocs de données. Il en découle deux bénéfices principaux :
Les E/S disque sont réduites, améliorant ainsi les temps d'accès
Il peut y avoir une économie au niveau de l'espace requis pour le stockage des
données
Hash Clusters
Le hashing est une option de stockage de données améliorant les performances sur
l'accès aux données. Pour l'utiliser il faut créer un hash cluster et charger ensuite les
tables dans ce cluster. Les lignes d'une table dans un hash cluster sont physiquement
Dictionnaire de données
Introduction
L'une des plus importantes parties d'une base Oracle est son dictionnaire de données.
Ce dictionnaire est un ensemble de tables à utiliser comme une référence en read-
only, qui fournit des informations sur la database associée, par exemple, le
dictionnaire de données peut fournir les informations suivantes :
Les noms des utilisateurs Oracle
Les privilèges et les rôles de chaque utilisateur
Les noms des objets d'un schéma (table, vue, index, etc)
Les informations sur les contraintes d'intégrité
Les valeurs par défaut des colonnes
Combien d'espace a été attribué, ou est actuellement utilisé par les objets de la
base de données
Procéder à des audits, tels qui a eu accès ou mis à jour divers objets
D'autres informations générales sur la database
Le dictionnaire de données est structuré en tables et en vues, comme toutes les
données de la base. Pour accèder au dictionnaire de données, on utilise SQL. Etant
donné que le dictionnaire de données est en lecture seule, les utilisateurs peuvent
seulement exécuter des requêtes (commande SELECT).
La table DUAL
La table nommée DUAL est une petite table référencée par Oracle et les programmes
écrits par les utilisateurs pour garantir un résultat connu. Cette table a une colonne et
une ligne. Elle permet par exemple, de prendre connaissance de la valeur des pseudos
colonnes :
SELECT sysdate
FROM dual;
Mécanismes de verrouillage
Oracle utilise automatiquement différents types de verrous pour contrôler l'accès
concurrent aux données et prévenir des intéractions destructives entre utilisateurs.
Oracle verrouille automatiquement une ressource en faveur d'une transaction pour
empêcher d'autres transactions de faire quelque chose qui nécessiterait un accès
exclusif à la même ressource. Le verrou est automatiquement levé quand certains
évènements se produisent et que la transaction n'utilise plus la ressource.
Il faut bien garder présent à l'esprit que les verrouillages posés par Oracle le sont de
façon totalement automatique et ne demandent aucune intervention. Des verrous
implicites se produisent pour toutes les commandes SQL, de sorte que les utilisateurs
n'ont jamais besoin de verrouiller explicitement une ressource. Tout ce qui suit
suppose que deux paramètres d'initialisation ont leurs valeurs par défaut :
SERIALIZABLE = FALSE
ROW_LOCKING = ALWAYS
Verrouillage de lignes
SELECT ... FOR UPDATE OF Colonne;
Autres verrouillages
Généralement, il faut savoir que les tables sont totalement vérrouillées par toutes les
commandes modifiant le contenu des tables (y compris les commandes du L.M.D).
SHARE
LOCK TABLE table IN SHARE MODE;
Les verrouillages de table en mode SHARE sont des verrouillages de données plutôt
restrictifs. Les conditions qui peuvent justifier l'acquisition explicite d'un verrouillage
de table en mode SHARE sont :
votre transaction fait seulement des requêtes sur la table et requiert un ensemble
cohérent des données de la table pour toute la durée de la transaction.
On peut accepter, si d'autres transactions tentent de mettre à jour la table
verrouillée concurremment, qu'elles aient à attendre que toutes les transactions
avec le verrouillage en mode SHARE se terminent.
Il est acceptable d'autoriser d'autres transactions à acquérir des verrouillages
concurrents en mode SHARE sur la même table leur permettant ainsi la
possibilité d'une cohérence de lecture au niveau de leur transaction.
Votre transaction peut ou non mettre à jour la table plus tard dans la même
! transaction. Toutefois, si plusieurs transactions détiennent concurremment un
verrouillage de type SHARE sur la même table aucune d'entre elles ne peut
mettre à jour la table. Donc, si ces types de verrouillages concurrents sur la
même table sont fréquents les mises à jour ne peuvent se faire et les
EXCLUSIVE
LOCK TABLE table IN EXCLUSIVE MODE;
Les conditions qui justifient l'acquisition explicite d'un verrouillage exclusif d'une table
sont :
votre transaction demande un accès en mise à jour immédiat à la table verrouillée.
Donc si votre transaction détient un verrouillage exclusif de la table, les autres
transactions ne peuvent bloquer des lignes spécifiques.
Votre transaction respecte aussi la cohérence de lecture au niveau de la transaction
pour la table verrouillée jusqu'à ce qu'il y ait COMMIT ou ROLLBACK.
Quelques commandes
schema
est le nom du schéma qui contient la table. Si non spécifié, la table est créé dans le
schéma courant
table
Nom de la table à créer
column
Nom d'une colonne de la table (max.: 254 colonnes).
Peut être omis si la clause AS est utilisée.
datatype
est le type de données de la colonne
Peut être omis si la commande désigne aussi la colonne comme faisant partie d'une clé
étrangère (foreign key) d'une contrainte d'intégrité référentielle. Dans ce cas elle
prend automatiquement le type de la clé étrangère référencée.
PCTFREE
Spécifie le pourcentage d'espace devant être laissé libre dans chaque bloc contenant
des données de cette table réservé pour de futurs UPDATE).
Doit être compris entre 0 et 99.
Valeur par défaut: 10.
PCTUSED
Spécifie le pourcentage minimum d'espace utilisé dans les blocs de cette table, en
deçà duquel, le bloc redeviendra candidat lors de prochaines INSERTions.
Valeur par défaut: 40.
La somme de PCTFREE et PCTUSED doit être inférieure à 100.
Pour la détermination optimal des deux valeurs conjointement se reporter au Oracle7
Server Tuning.
INITRANS
Ce paramètre garantit qu'un nombre minimum de transactions pourront s'effectuer
concuremment sur cette table. Il ne devrait pas être modifié de sa valeur par défaut,
mais il agit surtout sur la réservation de place dans l'en-tête du bloc réservé à la
gestion des transactions.
MAXTRANS
Mêmes remarques que pour INITRANS.
TABLESPACE
Spécifie le nom du Tablespace dans lequel devra être gérée la table. Sinon, Oracle crée
la table dans le tablespace par défaut pour l'utilisateur.
STORAGE
Spécifie les caractéristiques de stockage des données de la table.
Voir la clause STORAGE
RECOVERABLE
UNRECOVERABLE
Même rôle (inversé) que l'option précédente. Dans ce cas une restauration ne recréera
pas la table, mais par contre la création de la table sera plus rapide (bof!).
CLUSTER
Spécifie que la table sera stockée dans un cluster, avec comme noms de colonnes, les
colonnes servant de clés dans le cluster.
Les noms de colonnes doivent être spécifiées dans le même ordre que lors de la
déclaration des clés pour le cluster.
Si cette option est utilisée, ne pas utiliser les paramètres PCTFREE, PCTUSED,
INITRANS, ou MAXTRANS , l'option TABLESPACE, STORAGE, car le stockage dans les
clusters se fait de façon indépendante de ces paramètres.
PARALLEL
Option réservée au fonctionnement de la database en mode Parallel Server.
ENABLE
Active une contrainte d'intégrité
DISABLE
Désactive une contrainte d'intégrité
Si non précisé, c'est l'option enable qui est utilisée par défaut lors de la définition
d'une contrainte à la création d'une table.
AS subquery
Permet de créer une table au moyen d'une sous requête qui la définit et la remplit en
une seule opération.
Une commande CREATE TABLE ne peut contenir à la fois une clause AS et une
déinition de contrainte d'intégrité référentielle.
CACHE
Spécifie que les blocs lus pour cette table sont placés à la plus récente extrémité de la
liste LRU dans le buffer cache. Permet un séjour plus long de la table en SGA.
Intéressant pour des petites tables utilisées en consultation fréquemment.
NOCACHE
Idem, inversé. C'est la valeur par défaut.
Prerequis
Syntaxe
INITIAL
Spécifie la taile en octets du premier extent de l'objet. On peut spécifier la taille en K
ou M, la taille par défaut étant 5 blocs.
NEXT
Spécifie la taille en octets du prochain extent alloué pour cet objet.
MINEXTENTS
Spécifie le nombre total d'extents alloués à la création du segment. Ce paramètre
permet d'allouer un large espace lorsque l'on crée un objet, même si l'espace
disponible n'est pas contigu. La valeur minima et par défaut est 1, ce qui signifie
qu'Oracle n'alloue que le initial extent, sauf pour les Rollback Segment (2 extents).
Si la valeur de MINEXTENT est supérieure à 1, alors Oracle calcule les tailles des
extents subséquents, en se basant sur les valeurs de INITIAL, NEXT et PCTINCREASE.
MAXEXTENTS
Spécifie le nombre total d'extents, le premier compris.
FREELIST GROUPS
Pour les objets autres que les tablespace, spécifie le nombre de groupes de freelist
pour une table, un cluster ou index.
N'utiliser ce paramètre que pour le fonctionnement en Parallel Server.
FREELISTS
Pour les objets autres que les tablespace, spécifie le nombre de free list pour chaque
groupe de free list pour la table, cluster ou index
La valeur par défaut est 1, ce qui signifie que chaque groupe de free list contient une
free list.
On peut spécifier ce paramètre uniquement dans les commandes CREATE TABLE,
CREATE CLUSTER, et CREATE INDEX.
Notes d'utilisation
Le paramètre STORAGE affecte à la fois les temps d'accès aux données stockées dans
la base et l'efficacité avec laquelle l'espace dans la base de données est utilisé. Pour
une discussion plus approfondie sur les effets de ces paramètres, voir la section
"Tuning I/O" de la documentation Oracle7 Server Tuning.
Lorsque l'on crée un Tablespace, on peut spécifier cette clause de STORAGE. Elle
s'appliquera aux segments alloués dans le Tablespace. Lorsque l'on créera un objet
sujet à ce paramètre, Oracle lui appliquera automatiquement ces paramètres de
stockage; sauf si l'on spécifie pour l'objet des valeurs autres qui prévaudront sur les
valeurs par défaut appliquées à tout le Tablespace. Quelques exemples tirés de la
documentation d'Oracle :
Exemple II
La commande suivante crée un rollback segment et fournit des valeurs pour le
paramètre STORAGE
CREATE ROLLBACK SEGMENT rsone
STORAGE ( INITIAL 10K NEXT 10K
MINEXTENTS 2 MAXEXTENTS 25
OPTIMAL 50K )
Oracle7 alloue de l'espace pour le rollback segment en se basant sur les valeurs des
paramètres STORAGE :
La valeur de MINEXTENTS est à 2, Oracle7 alloue 2 extents pour le rollback segment à
la création.
Dans la mesureoù la valeur de INITIAL est 10K, la taille du premier extent est 10
kilobytes.
La valeur de NEXT est 10K, donc la valeur du second extent est de 10 kilobytes.
Si les données du rollback segment excèdent les deux premiers extents, Oracle7 alloue
un troisième extent.
Puisque la valeur de PCTINCREASE pour les rollback segments est toujours 0, le
troisième extent a la même taille que le second extent, 10 kilobytes.
Si les données dans le rollback segment continuent à croitre, Oracle7 alloue des
extents suppléméntaires, tous de la même taille que le précédent, 10 kilobytes.
La valeur de MAXEXTENTS étant à 25, Oracle7 peut allouer 25 extents pour le rollback
segment.
Voir aussi
Les commandes CREATE CLUSTER, CREATE INDEX, CREATE ROLLBACK SEGMENT,
CREATE TABLE, CREATE TABLESPACE
Pré requis
La clause CONSTRAINT peut apparaître aussi bien dans la commande CREATE TABLE
que dans la commande ALTER TABLE
Syntaxe
Cette clause supporte deux syntaxes :
Contrainte posée sur la table : nécessaire uniquement si la contrainte concerne
plusieurs colonne (p.ex., définir une clé primaire sur deux colonnes).
Contrainte sur une colonne : utilisée pour poser une contrainte sur une colonne
particulière.
Syntaxe Table_constraint
CONSTRAINT
Permet d'identifier la contrainte par un nom, faute de quoi, Oracle7 enregistre la
contrainte sous un nom de la forme :
SYS_Cn
Où n est un entier attribué par Oracle assurant l'unicité du nom de la contrainte dans
la base.
NULL
Spécifie que la colonne peut contenir une valeur NULLe. C'est la valeur par défaut.
NOT NULL
Spécifie que la colonne ne peut pas contenir une valeur NULLe.
UNIQUE
Désigne une ou plusieurs colonnes comme clé unique.
PRIMARY KEY
Désigne une ou plusieurs colonnes comme étant la clé primaire de la table.
FOREIGN KEY
Désigne une colonne ou plusieurs colonnes comme étant la clé étrangère dans une
contrainte d'intégrité référentielle.
REFERENCES
ON DELETE CASCADE
Spécifie que Oracle7 maintiendra l'intégrité référentielle en supprimant
automatiquement les valeurs de clés étrangères dépendantes si l'on supprime une
valeur de clé primaire ou unique référencée.
CHECK
Spécifie une condition que chaque ligne de la table doit remplir.
USING INDEX
Permet de spécifier des caractéristiques particulières pour l'index qui sera créé
automatiquement par Oracle pour mettre en application les contraintes UNIQUE ou
PRIMARY KEY. Le nom de l'ndex est le même que celui de la contrainte. On peut choisir
les valeurs des paramètres : INITRANS, MAXTRANS, TABLESPACE, STORAGE,
PCTFREE, RECOVERABLE, et UNRECOVERABLE
NOSORT
Indique que les lignes sont stockées en ordre ascendant et donc qu'Oracle n'aura pas à
les trier lors de la création de l'index.
DISABLE
Désactive la contrainte. Par défaut, une contrainte est activée dès sa définition.
On activer/désactiver une contrainte en utilisant les clauses ENABLE et DISABLE des
commandes CREATE TABLE et ALTER TABLE.
La contrainte UNQ_DNAME identifie la colonne DNAME comme étant une clé unique.
On peut définir la même contrainte en utilisant la syntaxe table_constraint :
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(9),
loc VARCHAR2(10),
CONSTRAINT unq_dname UNIQUE (dname)
USING INDEX
PCTFREE 20 TABLESPACE user_x STORAGE (INITIAL 8K NEXT 6K) )
On en profite pour découvrir l'usage de l'option USING INDEX
But
Créer une séquence. Une sequence est un objet de la database à partir duquel de
multiples utilisateurs peuvent generer un unique nombre entier.
On peut utiliser une séquence pour générer automatiquement des valeurs de clé
primaires.
Pre requis
Pour céer une séquence dans votre propre schéma, vous devez avoir le privilège
CREATE SEQUENCE.
Dans une autre schéma, vous devez avoir le privilège CREATE ANY SEQUENCE.
Syntaxe
schema
est le schéma contenant la séquence.
séquence
est le nom de la séquence à créer.
INCREMENT BY
Spécifies l'intervalle de croissance des nombres de la séquence. Cet entier peut avoir
n'importe quelle valeur positive ou negative. Cette valeur peut avoir 28 chiffre ou
moins. La valeur par défaut est 1.
CYCLE
spécifie que la séquence continue à générer des valeur après qu'elle ait atteint son
maximum. Après qu'une séquence ait atteint son maximum, une séquence génèrera
sa valeur minimale.
NOCYCLE
spécifies que la séquence ne peut générer de valeur après avoir atteint sa valeur
maximum ou minimum (si décroissante).
CACHE
spécifie combien de valeurs de la séquence Oracle7 pré-alloue et garde en mémoire
pour un accès plus rapide. Le minimum est 2. La valeur par défaut est 20.
CURRVAL
retourne la valeur courante de la séquence.
NEXTVAL
incrémente la séquence et retourne une nouvelle valeur.
Exemple 1
La commande suivante crée la séquence ESEQ:
CREATE SEQUENCE eseq
INCREMENT BY 10
La première référence à ESEQ.NEXTVAL retourne 1. La seconde 11…
Exemple 2
La commande suivante utilise dans une procédure PL/SQL la séquence ESEQ:
SELECT esep.nextval INTO var
FROM dual ;
On peut faire référence à la séquence également directement dans une commande
telle que insert : INSERT INTO table
VALUES (eseq.nextval, …..);