ORACLE

I- INTRODUCTION
Introduction au SGBD Oracle
Oracle est un SGBD (système de gestion de bases de données) édité par la société du même nom (Oracle Corporation - http://www.oracle.com), leader mondial des bases de données. La société Oracle Corporation a été créée en 1977 par Lawrence Ellison, Bob Miner, et Ed Oates. Elle s'appelle alors Relational Software Incorporated (RSI) et commercialise un Système de Gestion de Bases de données relationnelles (SGBDR ou RDBMS pour Relational Database Management System) nommé Oracle. En 1979, le premier prototype (RDBMS - RSI1) intégrant la séparation des espaces d'adressage entre les programmes utilisateurs et le noyau Oracle est commercialisé. Cette version est entièrement développée en langage assembleur. La seconde version (RDBMS - RSI2) est un portage de l'application sur d'autres plates-formes. En 1983 la troisième version apporte des améliorations au niveau des performances et une meilleure prise en charge du SQL. Cette version est entièrement codée en langage C. A la même époque RSI change de raison sociale et devient Oracle. En 1984 la première version d'Oracle (Oracle 4) est commercialisée sur les machines IBM. En 1985 Oracle 5 permet une utilisation client-serveur grâce au middleware SQL*Net. En 1986 Oracle a été porté sur la plateforme 8086. En 1988 Oracle 6 est disponible sur un grand nombre de plates-formes et apporte de nombreuses nouvelles fonctionnalités ainsi qu'une amélioration notable des performances. En 1991, Oracle 6.1 propose une option Parallel Server (dans un premier temps sur la DEC VAX, puis rapidement sur de nombreuses autres plates-formes). En 1992, Oracle 7 sort sur les plates-formes UNIX (elle ne sortira sur les plates-formes Windows qu'à partir de 1995). Cette version permet une meilleure gestion de la mémoire, du CPU et des entréessorties. La base de données est accompagnée d'outils d'administration (SQL*DBA) permettant une exploitation plus aisée de la base. En 1997, la version Oracle 7.3 (baptisée Oracle Universal Server) apparaît, suivie de la version 8 offrant des capacités objet à la base de données Oracle est écrit en langage C et est disponible sur de nombreuses plates-formes matérielles (plus d'une centaine) dont :

• • • •

AIX (IBM) Solaris (Sun) HP/UX (Hewlett Packard) Windows NT (Microsoft)

Oracle depuis la version 8.0.5 est disponible sous Linux

Les versions d'Oracle
Oracle se décline en plusieurs versions

• •

Oracle Server Standard, une version comprenant les outils les plus courants de la solution Oracle. Il ne s'agit pas pour autant d'une version bridée... Oracle Server Enterprise Edition

1

les plus connus sont : • • • • Oracle Manager (SQL*DBA) NetWork Manager Oracle Enterprise Manager Import/Export : un outil permettant d'échanger des données entre deux bases Oracle Outils de développement d'Oracle Oracle propose également de nombreux outils de développement permettant d'automatiser la création d'applications s'interfaçant avec la base de données. des fonctions et des packages Outils de programmation 2 . de s'interfacer avec des produits divers et d'assistants de création de bases de données et de configuration de celles-ci. la solution Oracle est un véritable environnement de travail constitué de nombreux logiciels permettant notamment une administration graphique d'Oracle. Parmi ces outils. . formulaires. longueur d'une ligne. SQL*Plus permet notamment de paramétrer l'environnement de travail (formatage des résultats. Il est composé de 4 applications : o Oracle Forms (anciennement SQL*Forms) : un outil permettant d'interroger la base de données de façon graphique sans connaissances préalables du langage SQL.. SQL*Forms permet ainsi de développer des applications graphiques (fenêtres..) Oracle Developper : il s'agit d'une suite de produits destinés à la conception et à la création d'applications client-serveur.. On peut classer les outils d'Oracle selon diverses catégories : • • • • • Les Les Les Les Les outils outils outils outils outils d'administration de développement de communication de génie logiciel d'aide à la décision Les outils d'administration d'Oracle Oracle est fourni avec de nombreux outils permettant de simplifier l'administration de la base de données.Les fonctionnalités d'Oracle Oracle est un SGBD permettant d'assurer : • • • • • • La définition et la manipulation des données La cohérence des données La confidentialité des données L'intégrité des données La sauvegarde et la restauration des données La gestion des accès concurrents Les composants d'Oracle Outre la base de données. . modifier et supprimer des données dans la base. o Oracle Reports (SQL*ReportWriter) : un outil permettant de réaliser des états o Oracle Graphics : un outil de génération automatique de graphiques dynamiques pour présenter graphiquement des statistiques réalisées à partir des données de la base o Procedure Builder : un outil permettant de développer des procédures.) permettant de sélectionner.. nombre de lignes par page. Ces outils de développement sont : • • • • Oracle Designer Oracle Developer SQL*Plus : une interface interactive permettant d'envoyer des requêtes SQL et PL/SQL à la base de données.

. ce qui signifie qu'ils sont inexploitables avec un éditeur de texte. II. Tous ces fichiers sont des fichiers binaires.ARCHITECTURE Architecture du SGBD Oracle Une base de données Oracle est constituée de plusieurs éléments : • • • Des processus chargés en mémoire sur le serveur Des fichiers physiques stockés sur le serveur D'un espace mémoire sur le serveur appelé SGA (System Global Area) On appelle instance Oracle les processus et la SGA d'une base de données Oracle. Les fichiers destinés à la configuration et au fonctionnement de la base Oracle Oracle a défini une architecture permettant de définir une méthode d'organisation standard des fichiers de la base Oracle.Oracle dispose d'un grand nombre d'interfaces (API) permettant à des programmes écrits dans divers langages de s'interfacer avec la base de données en envoyant des requêtes SQL. III. tandis que la mémoire sert à optimiser la vitesse de fonctionnement de la base de donné. On distingue généralement deux types de fichiers : • • Les fichiers servant à stocker les informations de la base.FICHIERS PHYSIQUES Les fichiers physiques d'une base Oracle Les fichiers physiques d'une base Oracle permettent de stocker de manière persistante les données manipulées par Oracle.. Les fichiers d'une base de données Oracle sont les suivants : 3 . Cette architecture est nommée OFA (Optimal Flexible Architecture). Ces interfaces (appelées précompilateurs) forment une famille dont le nom commence par PRO* : • • • • • • Pro*C Pro*Cobol Pro*Fortran Pro*Pascal Pro*PLI .

. Ils sont créés lors de la création de la base. . Ces fichiers contiennent l'ensemble des données de la base (les tables. Enfin ces fichiers peuvent être multiplexés (comprenez dupliqués dans des répertoires de groupe) afin de fournir un maximum de sécurité. les fichiers Redo-log sont dans un format propriétaire Oracle et l'écriture dans ces fichiers est assurée par le processus LGWR (Log Writer). Si ce mode n'a pas été activé.• • • Les fichiers de données (dont l'extension est . Ces fichiers permettent de stocker les informations sur l'état de la base de données (emplacement des fichiers. où SID représente le nom donné à l'instance). Les fichiers de contrôle Les fichiers de contrôle permettent de stocker l'état de la base de données. Les fichiers de données contiennent des informations de deux types : • • Le dictionnaire de données et de travail Les données des utilisateurs La lecture de ces fichiers de données est faire à l'aide des processus utilisateurs tandis que l'écriture est assuré par le processus DBWR (Database Writer) Les fichiers Redo-log Les fichiers Redo-log contiennent l'historique des modifications apportées à la base de données Oracle. Les fichiers de données Les fichiers de données sont les fichiers occupant la majeure partie de la base de données.. de savoir si la base de données a été arrêtée correctement. seul un nombre limité d'entre-eux est réellement utile. Celui-ci est largement documenté et des exemples de valeurs sont donnés pour chaque paramètre. la bonne procédure à adopter consiste à modifier le contenu de la base de données par l'intermédiaire d'ordres SQL. Ainsi le cas échéant.). dates de création.rdo ou . Le fichier de contrôle contient les informations suivantes : • • • • Nom de la base de données Date et heure de création de la base L'emplacement des fichiers journaux (Redo-Log) Des informations de synchronisation Le fichier d'initialisation Ce fichier est un fichier au format texte contenant l'ensemble des paramètres de démarrage de la base (il est généralement nommé initSID. Ces fichiers contiennent l'historique des modifications effectuées sur la base de données Les fichiers de contrôle (dont l'extension est . Son existence n'est toutefois pas majeure car il peut être facilement reconstruit. Les fichiers Redo Log (dont l'extension est .ctl). 4 . leur taille peut osciller entre quelques Mégaoctets et plusieurs gigaoctets. Ceux-ci contiennent en effet toutes les données relatives à la base Oracle dans un format propriétaire. Ces fichiers de journalisation enregistrent les modifications successives de la base de données afin de pouvoir restaurer la base de données en cas de défaillance d'un disque dur. Au même titre que les fichiers de données.ora. .) Une base de données Oracle nécessite au minimum un fichier de données. les vues.. ainsi que de connaître l'emplacement des fichiers de données et des fichiers Redo Log. Ces fichiers permettent. deux fichiers redo Log et un fichier de contrôle. Ainsi pour modifier les informations contenues dans la base de données il est impossible d'intervenir directement sur ces fichiers. Les fichiers de contrôle sont eux-même repérés par le fichier d'initialisation.dbf). la base de données Oracle est à même de simuler l'ensemble des commandes n'ayant pas été sauvegardées pour rétablir le contenu de la base de données. le contenu du fichier Redo Log est supprimé après utilisation.. lors de l'initialisation de la base. Toutefois parmi ces paramètres. Oracle propose également un mode archivage permettant la sauvegarde du fichier Redo-log avant sa réutilisation pour restaurer la base.log). les procédures stockées. Un fichier d'initialisation par défaut est créé lors de la création d'une base.

Le processus serveur est chargé de la communication entre la SGA et le processus utilisateur. Le processus utilisateur ainsi créé communique avec les processus systèmes à travers le programme interface. le processus chargé de vérifier la cohérence de la base de données et éventuellement sa restauration lors du démarrage si besoin Il existe également d'autres processus d'importance secondaire : • • • CKPT (CheckPoint). Les 4 principaux processus systèmes sont : • • • • DBWR (DataBase Writer ou Dirty Buffer Writer). Les processus Oracle (processus système) se classent en deux catégories : o Les processus serveurs (process server) gérant les requêtes des utilisateurs provenant des connections à la base de données générées par des outils tels que SQL*Plus. On distingue généralement deux types de processus : • • les processus utilisateurs (appelés aussi user process ou noyau oracle) On distingue deux types de processus utilisateurs : o Oracle Server Code. Il permet ainsi d'analyser et d'exécuter les requêtes SQL des utilisateurs.IV. les processus systèmes (oracle process). aussi appelé noyau d'Oracle. Il permet de dupliquer les fichiers Redo-Log dans un espace d'archivage. est chargé d'interpréter et d'exécuter les requêtes SQL. le processus chargé d'écrire le contenu des buffers dans les fichiers Redo Log PMON (Process Monitor).). Ce processus est optionnel et n'existe qu'en mode ARCHIVELOG. ainsi que de gérer la mémoire et les fichiers de données o Code spécifique de l'outil. 5 . le processus chargé de nettoyer les ressources.. les verrous et les processus utilisateurs non utilisés SMON (System Monitor). l'implémentation qui exécute réellement les commandes SQL.. écriture dans les fichiers. Chaque processus a pour nom ora_nomduprocessus_SID où SID représente le nom de l'instance à laquelle le processus est associé. le processus chargé d'écrire le contenu des buffers dans les fichiers de données LGWR (Log Writer). le processus chargé d'écrire le contenu des buffers dans les fichiers de données RECO (Recoverer). de lire les fichiers de données et de placer les blocs de données correspondants dans la SGA. Un processus utilisateur est créé pour chaque programme exécuté par un utilisateur (par exemple Oracle Forms ou Server Manager) afin de fournir l'environnement nécessaire à l'exécution de celui-ci. o Les processus d'arrière-plan (background process) chargés d'assurer le fonctionnement interne du SGBD Oracle (gestion de la mémoire.LES PROCESSUS Les processus Le fonctionnement de la base Oracle est régi par un certain nombre de processus chargés en mémoire permettant d'assurer la gestion de la base de données. il s'agit d'un processus optionnel permettant de résoudre les transactions interrompues brutalement dans un système de bases de données distribuées (par exemple un système de réplication de bases de données) ARCH (Archiver). .

il libère les verrous. Il permet de router les requêtes des potes clients-serveur distant vers les autres serveurs.LA GESTION DE LA MEMOIRE L'utilisation de la mémoire par Oracle. LCKn (Lock) est un processus de verrouillage utilisé lorsque Oracle Parallel Server est installé. INSERT ou UPDATE est reçue). Il existe au moins un processus Dnnnn pour chaque protocole de communication Snnnn (Server. Ainsi SMON a un rôle de libération des ressources utilisées inutilement par le système. Ainsi. D'autre part SMON surveille les espaces libres des fichiers de la base de données et les réorganise si nécessaire afin de de les défragmenter Le processus PMON Le processus PMON (Process Monitor) a pour but de récupérer les ressources associées à des défaillances de processus utilisateurs. afin de sauvegarder de manière permanente les données de la base. Il permet de recevoir les demandes de connexions distantes envoyées par le processus Dnnnn d'un serveur distant. Dans une base de données Oracle on distingue généralement deux zones mémoire : • La zone SGA (System Global Area) assurant le partage des données des différents utilisateurs. c'est-à-dire qu'il s'agit de la zone contenant les structures de données accessibles par tous les processus 6 . ce qui provoque des ralentissements notables dans le fonctionnement de la base de données Oracle. Ainsi. nnnn représente une suite de nombre entiers) : Ce processus est n'est également présent que dans les configurations MTS.• • • Dnnnn (Dispatcher. et libère les ressources utilisées inutilement dans la SGA. le processus analyse les informations stockées dans les rollback segments (les rollback segments sont les zones de stockage des opérations n'ayant pas encore été validées) puis annule toutes les informations en attente mais pour lesquelles aucune validation n'a été enregistrées (appelées deadlocks). Le processus LGWR Le rôle du processus LGWR (Log Writer) est de mettre à jour les fichiers journaux (Redo Log) dans la SGA et sur le disque. Le processus DBWR Le processus Database Writer (DBWR) a pour but de transférer les blocs de données modifiés (appelés dirty blocks) de la System Global Area vers les fichiers de la base de données. Ainsi il supprime les processus en erreur. lorsqu'il n'y a plus de mémoire physique disponible. V. nnnn représente une suite de nombre entiers) : Ce processus est optionnel et n'est présent que dans les configurations MTS (multi-threaded server). Le processus SMON Le processus SMON (System Monitor) est chargé de vérifier la cohérence du système et de la rétablir suite à un incident au démarrage de la base suivant. Or l'accès au disque dur est extrêmement plus long que l'accès à la mémoire physique. Ainsi Oracle utilise la mémoire physique du serveur pour : • • • accélérer l'accès aux données de la base régulièrement accédées mettre les processus en mémoire optimiser la communication entre les processus et la base de données Ainsi la taille de la mémoire vive du serveur est primordial pour la performance de la base de données. Random Access Memory) du serveur afin de fournir les meilleures performances possibles. Ainsi ce processus est chargé d'écrire le contenu du cache Redo Log de la SGA dans le fichier Redo Log à chaque fois qu'un ordre COMMIT est réceptionné. le système d'exploitation met à disposition de l'application une mémoire dite "virtuelle" composée de fichiers d'échange (fichiers swap) sur le disque du serveur. Oracle fait un usage poussé de la mémoire physique (RAM. En effet. si la base n'a pas été stoppée correctement. les blocs de données affectés sont modifiés dans le fichier de données associé. il annule les transactions n'ayant pas été validées (par exemple si un client est déconnecté brutalement lors de la transaction). lorsqu'un ordre SQL modifie la base de données (c'est-à-dire lorsqu'une requête SQL DELETE.

mais l'utilisateur SYSTEM.. D'une manière générale. analyser et traiter les requêtes SQL provenant des divers utilisateurs. .. vues. c'est-à-dire l'administrateur de la base. possède des droits de lecture sur des vues du dictionnaire. Voici la liste de ces familles de vues : • Les vues USER (dont le nom commence par USER_) donnent des informations sur tous les objets logiques dont l'utilisateur connecté est propriétaire (tables. Le dictionnaire est créé au moment de la création de la base et est mis à jour. Enfin le dictionnaire de données est conservé dans le tablespace SYSTEM. procédures. . Les vues du dictionnaire de données sont classées par famille et nommées en fonction de l'appartenance à une de ces familles.ora). clusters. Le dictionnaire de données sert principalement dans deux situations : • • afin de vérifier la syntaxe et les privilèges sur une requête SQL (pour le DDL. Il s'agit d'un ensemble de tables systèmes contenant les informations relatives à la structure de la base de données : • • • • • Utilisateurs de la base (ainsi que leurs privilèges et leur rôle Noms et caractéristiques des objets contenus dans la base (tables. vues.) 7 . La SGA (appelée aussi mémoire réservée) est composée de plusieurs constituants : • • • La Shared Pool (ou zone partagée) contenant des informations pouvant être réutilisées par les différents utilisateurs. L'ensemble des tailles des caches peut être modifiée (augmentée ou diminuée) grâce aux paramètres du fichier d'initialisation (initSID. A chaque démarrage d'une instance. et est restituée lors de sa fermeture.LE DICTIONNAIRE DES DONNEES Présentation du dictionnaire de données Oracle Le dictionnaire de données Oracle représente le coeur de la base de données.. cette zone sert à mémoriser. blocs d'index et blocs contenant les ROLLBACK SEGMENTS.. packages. index. les curseurs. avant que l'ensemble de ces mises à jour de la base ne soient archivées dans les fichiers Redo-log La SGA et les processus d'arrière plan constituent ce que l'on appelle une instance. Les vues fournissent à l'administrateur de la base le meilleur moyen pour obtenir les caractéristiques techniques de celle-ci. Il s'agit donc d'un cache permettant d'accélérer l'accès à certaines données de la base. Le Redo Log buffer (ou cache Redo-log) contient les blocs de données (appelés Redo Entries) à modifier et les modifications à effectuer sur ces données.) Contraintes d'intégrité Ressources physiques allouées à la base . Le Db block buffer (Database Buffer Cache ou cache des blocs de données) est un espace mémoire contenant toutes les données transitant de ou vers la base de données : blocs de données.. l'espace mémoire nécessaire à son bon fonctionnement lui est allouée. VI.. ... index.• La zone PGA (Program Global Area) permettant le fonctionnement des divers processus (afin de stocker toutes les données ne nécessitant pas d'être partagées). c'està-dire les requêtes SQL et programmes PL/SQL pouvant être partagés. triggers. Data Definition Language) Afin d'obtenir des informations sur la structure de la base de données Les différentes vues De nombreuses vues permettent à des utilisateurs d'accéder à certaines parties du dictionnaire de données. le dictionnaire de données. Il appartient à l'utilisateur SYS.

Ceci peut permettre de : • • • générer des clés uniques dans des tables avoir un compteur à titre informatif. Une séquence est un objet de base de données Oracle. Les vues V$ (dont le nom commence par V$_) sont des vues dynamiques permettent d'avoir des informations sur l'état courant de l'instance de la base de données de son démarrage à son arrêt.. Définition d'une séquence Définir une séquence équivaut à définir une suite de nombre entiers. Oracle vous répondra bien gentiment "Séquence créée. il n'est pas nécessaire de tous les spécifier lorsqu'on souhaite créer une nouvelle séquence. Mais comment voir ce qu'il y a dans cette séquence ? Comment l'exploiter ? L'interrogation d'une séquence se fait par l'utilisation des "pseudo-colonnes" CURRVAL et NEXTVAL. select ztblseq.1. et de présenter les possibilités que cet objet offre.currval from dual...• • • Les vues ALL (dont le nom commence par ALL_) fournissent des informations sur les objets pour lesquels l'utilisateur a un droit d'accès. mais ce n'est pas une colonne de table. . Cet article a pour but de définir ce qu'est une séquence. DataBase Administrator) afin de lui fournir des informations sensibles sur tous les objets de la base de données. une vue.6 d'Oracle. La pseudo-colonne NEXTVAL incrémente la séquence et retourne la nouvelle valeur.). c'est-à-dire les objets de la base créés par l'utilisateur ainsi que tous les objets accessibles par cet utilisateur... VII.. ou que tout autre objet dans Oracle.LES SEQUENCES Cet article s'appuie sur la version 8. etc. On parle de pseudo-colonne car cela se manipule un peu comme une colonne de table.CURRVAL pas encore définie dans cette session 8 . Dans cet ordre. Ces vues sont réservées à l'administrateur de la base (DBA. Autrement dit. Voici donc l'ordre SQL minimal de création d'une séquence : CREATE SEQUENCE ma_sequence. Ma première séquence Etant donné que la plupart des paramètres ont une valeur par défaut. • • La pseudo-colonne CURRVAL retourne la valeur courante de la séquence. que nous allons voir ensemble un peu plus loin. que l'on incrémente quand on veut etc. on peut le manipuler. Les vues DBA (dont le nom commence par DBA_). à condition d'avoir les droits nécessaires. le modifier. il appartient à un utilisateur.. L'utilisation d'une séquence permet donc d'avoir à disposition une suite de valeurs. Cela permet de la manipuler..". au même titre qu'une table.currval from dual * ERREUR à la ligne 1 : ORA-08002: séquence ZTBLSEQ. Elles permettent par exemple de connaître les fichiers physiques actuellement utilisés par la base (logs. au même titre qu'une table. une séquence porte un nom. Exemples : === SQL> select ztblseq. "ma_sequence" correspond bien évidemment au nom de la séquence que vous souhaitez créer . rollback segments. Si vous exécutez cet ordre SQL et si vous disposez des privilèges nécessaires (à savoir CREATE SEQUENCE). L'évolution de cette suite est régie par un certains nombre de paramètres.

9 . Valeur initiale et incrément Par défaut. puis de -10 à 10. il suffit d'indiquer une valeur négative au paramètre INCREMENT BY : CREATE SEQUENCE ma_sequence INCREMENT BY -10. ou de reprendre à sa valeur mini (resp. 14. CURRVAL --------1 === Maintenant que l'on sait comment récupérer la valeur d'une séquence. on peut lui demander de s'arrêter (Oracle retournera une erreur lors de la prochaine tentative d'utilisation de NEXTVAL). 20. maxi) et reprendre son compte.. : CREATE SEQUENCE ma_sequence START WITH 1 MINVALUE -10 MAXVALUE 10 CYCLE. il est possible de spécifier dans quel schéma on souhaite créer la séquence : CREATE SEQUENCE schema_toto. === SQL> select ztblseq. NEXTVAL --------1 === CURRVAL retourne maintenant 1..currval from dual. Mais on peut tout à fait spécifier ses propres paramètres : CREATE SEQUENCE ma_sequence START WITH 5 INCREMENT BY 3. 17. Les paramètres START WITH et INCREMENT BY peuvent s'utiliser indépendamment. Valeur maxi et valeur mini Implicitement (par défaut). on a défini la suite 5. Si on le souhaite. Oracle a créé notre première séquence avec les paramètres suivants (entre autres) : CREATE SEQUENCE ma_sequence NOMAXVALUE NOMINVALUE.nextval from dual. Cette séquence comptera jusqu'à 10 puis retournera une erreur au NEXTVAL suivant : CREATE SEQUENCE ma_sequence START WITH 1 MINVALUE -10 MAXVALUE 10 NOCYCLE. mini). === SQL> select ztblseq. on peut fixer un plafond (pour une séquence ascendante) ou un plancher (pour une suite descendante) : CREATE SEQUENCE ma_sequence START WITH 1 INCREMENT BY 1 MAXVALUE 9999. Pour faire une suite descendante. Cette séquence comptera de 1 à 10. à condition qu'ils soient chacun dans un schéma différent. voyons quels sont les différents paramètres qui permettent de définir une séquence : Identifiant de la séquence Au sein d'une même base de données. Dans cet exemple. Reboucler la séquence Lorsque la séquence atteint sa valeur maxi (resp.. essayez. une séquence commence avec la valeur 1. CREATE SEQUENCE ma_sequence START WITH -1 INCREMENT BY -1 MINVALUE -9999... Aussi. et s'incrémente de 1 en 1 lors de chaque appel de NEXTVAL. Si si. il faut utiliser NEXTVAL pour l'initialiser. puis de -10 à 10. 8. plusieurs objets peuvent porter le même nom.sequence_de_toto. Lors de la première utilisation d'une séquence. et que l'on essaye d'en récupérer la valeur courante.=== Cette erreur est due au fait que l'on n'a jamais encore initialisé notre séquence.. 11. et que l'on sait l'incrémenter.

elle peut avoir un effet significatif sur les performances.nextval from dual. il faut activer l'option ORDER de la façon suivante : CREATE SEQUENCE ma_sequence ORDER. Pour vérifier ceci.currval from dual. on peut demander à Oracle de placer en mémoire cache un certain nombre de valeurs de la séquence : CREATE SEQUENCE ma_sequence CACHE 100. exécuter l'ordre SQL suivant : SELECT name.CURRVAL --------------------------------------------------------------La valeur courante est 1 SQL> alter sequence ma_sequence increment by 20. Si vous êtes en mode parallèle (TRUE). Séquence créée. Modifier une séquence Dans les exemples précédent.nextval + ma_sequence. une séquence ne reboucle pas (cas n°1) Mettre les valeurs en mémoire cache Afin d'optimiser l'utilisation des séquences. Voici un exemple d'enchaînement d'ordres SQL : === SQL> create sequence ma_sequence start with 1 minvalue 0. 'LAVALEURCOURANTEEST'||MA_SEQUENCE.nextval from dual. lorsque plusieurs NEXTVAL sont exécutés simultanément. SQL> select ma_sequence. Il suffit d'utiliser l'ordre SQL ALTER SEQUENCE. Par défaut.NEXTVAL+MA_SEQUENCE. La mise en cache est-elle importante ? Oui. NEXTVAL --------21 SQL> select ma_sequence.nextval from dual. Séquence modifiée. Ces attributs sont modifiables après création de la séquence. NEXTVAL --------1 SQL> select 'La valeur courante est ' || ma_sequence.NEXTVAL --------------------------------------82 SQL> alter sequence ma_sequence increment by -41 maxvalue 100 cycle nocache. Oracle maintient 20 valeurs en mémoire cache. value FROM v$parameter WHERE name = 'parallel_server'. 10 . On peut mettre un nombre de valeurs élevé en mémoire cache. Forcer le respect de l'ordre de création Ce paramètre ne concerne que les serveurs fonctionnant en mode parallèle. ils ne sont pas toujours traités dans le bon ordre. MA_SEQUENCE.Par défaut. SQL> select ma_sequence. Aussi. nous avons vu comment créer une séquence en spécifiant des attributs qui définissent son comportement.

et lors de l'insertion suivante.nextval + ma_sequence. En effet. Bibliographie • • Documentation Oracle : http://www. et si cette séquence n'est pas paramétrée pour reboucler.816/a76989/ch4g23. mais pas forcément continues. une seule et même valeur de la séquence est utilisée ? Oracle considère NEXTVAL comme une pseudo-colonne. alors la séquence ne revient pas en arrière. et par conséquent dans cet ordre SQL. Donc : une séquence fournit un moyen d'obtenir des valeurs uniques.Séquence modifiée. Oracle ne dispose pas de l'option auto_increment que l'on rencontre dans certains SGBD (dont MySQL).nextval from dual. IL NE FAUT PAS considérer les séquences comme un moyen de générer une suite de nombre sans "trous". Modifier une séquence Une question qui revient souvent sur les forums Oracle est la suivante : "Comment faire pour créer une colonne de table auto-incrémentée. mais si le champ n'est alimenté QUE par l'utilisation de la séquence qui lui est dédiée. === . pour alimenter le champ voulu avec une valeur unique.nextval into :new.oradoc. SQL> select ma_sequence.gif 11 .x from dual. Cet exemple ne gère pas le contrôle d'unicité de la valeur que l'on va insérer. Exemple : dans le cas de l'alimentation d'une clé primaire. où "x" est le nom du champ à auto incrémenter. puis si la transaction a subi un "rollback".. dans le but d'en faire une clé primaire ?".. Voici un exemple de trigger : === create trigger t_matable_pk before insert on matable for each row begin select seq_matable_pk. la deuxième fois il reprend la valeur chargée en mémoire. Une séquence sans trou ? Etant donné qu'une séquence peut être interrogée à tout moment par tout utilisateur Oracle ayant les droits suffisants.".nextval from dual.nextval from dual. NEXTVAL --------59 === Avez-vous remarqué que lors de l'exécution de "select ma_sequence.com Schéma de la syntaxe de CREATE SEQUENCE : http://www. NEXTVAL --------100 SQL> select ma_sequence. NEXTVAL --------0 SQL> select ma_sequence. si un enregistrement a été inséré.nextval from dual. end..com/ora816/server.. Le principe est le suivant : • • créer une séquence qui permettra de générer des valeurs entières uniques créer un TRIGGER qui se déclenchera à chaque INSERT.oradoc. il ne la "prend" qu'une seule fois au niveau de la base. il n'y a pas de raison qu'une erreur de clé en double surgisse. on aura l'impression que la séquence a sauté un ou plusieurs nombres.

12 .

Sign up to vote on this title
UsefulNot useful