(draft)dba - module 4 (2003-08-07)2_0

Upload: abderrahim-belrhalia

Post on 07-Apr-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    1/68

    Auteur : Erwan LANCIENVersion 1.3 7 aot 2003

    Nombre de pages : 68

    Ecole Suprieure dInformatique de Paris23. rue Chteau Landon 75010 PARISwww.supinfo.com

    Module n4 GESTION DE DONNEES

    1Z0-023

    http://www.supinfo.com/http://www.supinfo.com/http://www.labo-oracle.com/
  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    2/68

    Gestion de donnes 2 / 68

    Table des matires1. GERER LES TABLES.................................................................... ........................................................... ....... 5

    1.1. STOCKER LES DONNEES UTILISATEURS ............................................................ .............................................. 5 1.1.1. Utiliser diffrentes mthodes de stockage des donnes utilisateur ....................................................... 5 1.1.2. Tables normales ........................................................ ........................................................... ................. 5 1.1.3. Table partitionne ..................................................... ........................................................... ................. 5 1.1.4. Tables organises en index ................................................................................................................... 5 1.1.5. Table incluse dans un cluster ........................................................ ........................................................ 6

    1.2. STRUCTURE D UNE LIGNE ........................................................... ........................................................... ....... 6 1.2.1. Format et longueur de ligne.................................................................................................................. 6

    TYPES DE DONNEES ORACLE ...................................................... ........................................................... ................. 7 1.2.2. Types de donnes internes Oracle......................................................................................................... 7 1.2.3. Types de donnes scalaires ........................................................... ........................................................ 7 1.2.4. Types de donnes Ensemble.......................................................... ...................................................... 10

    1.3. CREER UNE TABLE ................................................... ........................................................... ......................... 11 1.3.1. Rappel : Syntaxe.................................................................................................................................. 11 1.3.2. Copier une table existante................................................................................................................... 12 1.3.3. Utiliser Schema Manager pour crer une table ......................................................... ......................... 13 1.3.4. Tables temporaires.............................................................................................................................. 13 1.3.5. Instructions de cration d'une table ........................................................ ............................................ 14 1.3.6. Dfinir le paramtre PCTFREE.......................................................................................................... 14 1.3.7. Dfinir le paramtre PCTUSED ................................................... ...................................................... 14 1.3.8. Migrer des lignes................................................................................................................................. 15 1.3.9. Chaner des lignes............................................................................................................................... 15

    1.4. CONTROLER L ESPACE UTILISE PAR LES TABLES ...................................................... ................................... 15 1.4.1. Modifier les paramtres d'utilisation de blocs et de stockage............................................................. 15 1.4.2. Syntaxe .................................................. ........................................................... ................................... 15 1.4.3. Impact de la modification des paramtres de stockage....................................................................... 15 1.4.4. Paramtres d'utilisation de blocs........................................................................................................ 16 1.4.5. Utiliser Oracle Enterprise Manager pour modifier les paramtres de stockage ............................. 17 1.4.6. Allouer manuellement des extents........................................................... ............................................ 17 1.4.7. Rorganiser les tables non partitionnes ......................................................... ................................... 18 1.4.8. Repre high-water mark...................................................................................................................... 18 1.4.9. Rechercher le repre high-water mark : DBMS_SPACE.UNUSED_SPACE ..................................... 19 1.4.10. Librer l'espace inutilis ..................................................... ........................................................... ..... 20 1.4.11. Tronquer une table.............................................................................................................................. 21 1.4.12. Supprimer une table .................................................. ........................................................... ............... 22 1.4.13. Supprimer une colonne dune table..................................................................................................... 22 1.4.14. Utiliser l'option UNUSED................................................................................................................... 23 1.4.15. Extraire les informations relatives une table .......................................................... ......................... 24 1.4.16. Extraire les informations sur les extents .......................................................... ................................... 25 1.4.17. Package DBMS_ROWID..................................................................................................................... 25

    1.5. SYNTHESE ..................................................... ........................................................... ................................... 26 2. GERER L'INTEGRITE DES DONNEES.................................................................. ................................... 27 2.1. INTEGRITE DES DONNEES .................................................. ........................................................... ............... 27

    2.1.1. Mthodes garantissant l'intgrit des donnes.................................................................................... 27 Contraintes d'intgrit....................................................................................................................................... 27

    2.2. METTRE EN UVRE DES CONTRAINTES ........................................................... ............................................ 31 2.2.1. Dfinir les contraintes lors de la cration d'une table ......................................................... ............... 31 2.2.2. Dfinir des contraintes lors de la cration d'une table ........................................................ ............... 31 2.2.3. Syntaxe : contrainte de colonne .................................................... ...................................................... 32 2.2.4. Syntaxe : contrainte de table............................................................................................................... 32 2.2.5. Dfinir des contraintes aprs la cration d'une table : ........................................................ ............... 33 2.2.6. Instructions de dfinition des contraintes ........................................................................................... 33

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    2.3. GERER LES CONTRAINTES ........................................................... ........................................................... ..... 33

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    3/68

    Gestion de donnes 3 / 68

    2.3.1. Activer les Contraintes........................................................................................................................ 33 2.3.2. Utiliser la table EXCEPTIONS... ............................................................ ............................................ 35 Obtenir des informations sur les contraintes..................................................................................................... 36

    3. CHARGER LES DONNEES........ ............................................................ ...................................................... 39 3.1. CHARGER DES DONNEES A L 'AIDE DE LA METHODE D 'INSERTION PAR CHARGEMENT DIRECT ...................... 39

    3.1.1. Syntaxe .................................................. ........................................................... ................................... 39 3.1.2. Mode LOGGING................................................................................................................................. 40 3.1.3. Autres considrations.......................................................................................................................... 40 3.1.4. Insertions par chargement direct en parallle ........................................................... ......................... 40

    3.2. CHARGER LES DONNEES A L 'AIDE DE L 'UTILITAIRE SQL*L OADER ......................................................... ..... 41 3.2.1. Fonctions de l'utilitaire SQL*Loader.................................................................................................. 41 3.2.2. Fichiers utiliss par l'utilitaire SQL*Loader ................................................... ................................... 41 3.2.3. Mthodes de chargement des donnes ................................................................................................ 42 3.2.4. Mthode d'enregistrement des donnes............................................................................................... 43 3.2.5. Journaliser les modifications ........................................................ ...................................................... 43 3.2.6. Appliquer les contraintes .................................................................................................................... 43 3.2.7. Activer les dclencheurs INSERT........................................................................................................ 43 3.2.8. Charger les donnes dans une table incluse dans un cluster......................................................... ..... 44 3.2.9. Verrouiller........................................................................................................................................... 44 3.2.10. Chargement des donnes par chemin direct en parallle ................................................................... 44 3.2.11. Squence des oprations ..................................................... ........................................................... ..... 44 3.2.12. Restrictions.......................................................................................................................................... 45 3.2.13. Utiliser SQL*Loader........................................................................................................................... 45 3.2.14. Utiliser Oracle Enterprise Manager pour charger les donnes.......................................................... 45 3.2.15. Fichier de paramtres ......................................................... ........................................................... ..... 47 3.2.16. Fichier de contrle.............................................................................................................................. 47 3.2.17. Fichier de donnes .................................................... ........................................................... ............... 48 3.2.18. Fichiers journaux................................................................................................................................ 48 3.2.19. SQL*Loader : Autres fichiers de sortie............................................................................................... 49 3.2.20. Instructions d'utilisation de l'utilitaire SQL*Loader........................................................................... 49 3.2.21. Dpannage de l'utilitaire SQL*Loader ................................................... ............................................ 50 3.2.22. Rsolution des problmes.................................................................................................................... 50 3.3. CHARGER LES DONNEES PAR CHEMIN DIRECT .......................................................... ................................... 51 3.3.1. Charger les donnes par chemin direct avec l'interface OCI (Oracle Call Interface)........................ 51

    4. REORGANISER LES DONNEES........................................................... ...................................................... 52 4.1. DEPLACER LES DONNEES A L 'AIDE DES UTILITAIRES EXPORT ET IMPORT .................................................... 52

    4.1.1. Utilitaires Export et Import................................................................................................................. 52 4.1.2. Utilitaire Export ........................................................ ........................................................... ............... 52 4.1.3. Utilitaire Import.................................................................................................................................. 52

    4.2. UTILISER LES UTILITAIRES EXPORT ET IMPORT ........................................................ ................................... 52 4.3. MODES D EXPORTS ........................................................... ........................................................... ............... 53

    4.3.1. Trois modes d'export ........................................................... ........................................................... ..... 53 4.3.2. Mode Table ......................................................................................................................................... 53 4.3.3. Mode User........................................................................................................................................... 54 4.3.4. Mode Full Database............................................................................................................................ 54

    4.4. EXPORT PAR CHEMIN CONVENTIONNEL ET PAR CHEMIN DIRECT ................................................... ............... 54 4.4.1. Chemin conventionnel......................................................................................................................... 54 4.4.2. Chemin direct...................................................................................................................................... 55

    4.5. UTILISER L 'UTILITAIRE EXPORT ............................................................ ...................................................... 55 4.5.1. Ligne de commande............................................................................................................................. 55 4.5.2. Windows NT : ligne de commande...................................................................................................... 55 4.5.3. Utiliser Oracle Enterprise Manager pour exporter des donn es....................................................... 56 4.5.4. Paramtres de ligne de commande ..................................................................................................... 56

    4.6. UTILISER L 'UTILITAIRE IMPORT ................................................... ........................................................... ..... 58 4.6.1. Ligne de commande............................................................................................................................. 58 4.6.2. Windows NT : Ligne de commande..................................................................................................... 59 4.6.3. Utiliser Oracle Enterprise Manager pour importer des donnes ....................................................... 59

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    4.6.4. Paramtres de ligne de commande ..................................................................................................... 59

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    4/68

    Gestion de donnes 4 / 68

    4.6.5. Fonctionnement de l'import ................................................................................................................ 62 4.6.6. Considrations relatives l'import dans des tables existantes ...................................................... ..... 62 4.6.7. Tablespace utilis pour un objet ......................................................................................................... 62

    4.7. INSTRUCTIONS D 'EXPORT ET D 'IMPORT ............................................................ ............................................ 63 4.8. CONSIDERATIONS RELATIVES AU SUPPORT NLS LORS DE L 'EXPORT ET DE L 'IMPORT .................................. 63

    4.8.1. Exporter et convertir les jeux de caract res....................................................................................... 63 4.8.2. Importer et convertir les jeux de caractres........................................................................................ 64 4.9. TABLESPACES TRANSPORTABLES .......................................................... ...................................................... 64

    4.10. SYSTEMES INFORMATIQUES D 'ENTREPRISE ...................................................... ............................................ 64 4.11. DISTRIBUER LES INFORMATIONS ........................................................... ...................................................... 65 4.12. TRANSPORTER UN TABLESPACE ............................................................ ...................................................... 65

    4.12.1. Etapes du transport d'un tablespace ....................................................... ............................................ 65 4.13. EXPORTER ET IMPORTER DES METADONNEES ........................................................... ................................... 65 4.14. EXPORTER DES METADONNEES ................................................... ........................................................... ..... 65 4.15. IMPORTER DES METADONNEES .................................................... ........................................................... ..... 66 4.16. TRANSPORTER UN TABLESPACE ............................................................ ...................................................... 66 4.17. UTILISATION DES TABLESPACES TRANSPORTABLES ........................................................... ......................... 67

    4.17.1. Utilisation............................................................................................................................................ 67 4.18. TABLESPACES TRANSPORTABLES ET OBJETS DE SCHEMA ................................................... ......................... 67 4.19. JEUX DE DONNEES AUTONOMES ............................................................ ...................................................... 67 4.20. VERIFIER LE JEU DE TABLESPACES A TRANSPORTER ........................................................... ......................... 68

    4.20.1. DBMS_TTS.TRANSPORT_SET_CHECK ........................................................ ................................... 68 4.20.2. DBMS_TTS.ISSELFCONTAINED .......................................................... ............................................ 68

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    5/68

    Gestion de donnes 5 / 68

    1. Grer les tablesNotions abordes dans ce chapitre

    crer des tables en utilisant les paramtres de stockage appropris, grer l'espace utilis par les tables, analyser les tables pour vrifier l'intgrit et la migration, extraire des informations sur les tables du dictionnaire de donnes, convertir un identificateur ROWID dans le format d'un autre identificateur ROWID.

    1.1. Stocker les donnes utilisateurs

    1.1.1. Utiliser diffrentes mthodes de stockage des donnes utilisateurDans une base de donnes Oracle, vous pouvez stocker les donnes utilisateur de diffrentesmanires. Les donnes peuvent tre stockes dans l'une des tables suivantes :

    tables normales, tables partitionnes, tables organises en index, tables incluses dans un cluster.

    1.1.2. Tables normalesUne table normale (appele en gnral "table") est l'lment le plus communment utilis pour stockerles donnes utilisateur. Il s'agit du type de table par dfaut qui constitue le sujet principal de chapitre.Les prrogatives de l'administrateur sur la distribution des lignes d'une table incluse dans un clustersont trs limites. Les lignes peuvent tre stockes dans n'importe quel ordre selon l'activit de latable.

    1.1.3. Table partitionneUne table partitionne permet de crer des applications volutives.Elle prsente les caractristiques suivantes :

    Une table partitionne contient une ou plusieurs partitions qui stockent chacune les lignespartitionnes l'aide du partitionnement par plage, par hachage ou composite.

    Chaque partition d'une table partitionne constitue un segment qui peut se trouver dans untablespace diffrent.

    Les partitions trouvent une utilit particulire pour les tables volumineuses qui peuvent treinterroges ou manipules par plusieurs processus simultans.

    Des commandes spciales permettent de grer les partitions d'une table.

    1.1.4. Tables organises en indexUne table organise en index est une table normale contenant un index de cl primaire dans une ouplusieurs de ses colonnes. Toutefois, au lieu de grer deux espaces de stockage distincts pour la tableet un index B-Tree, une table organise en index ne gre qu'un seul B-Tree contenant la cl primairede la table et d'autres valeurs de colonnes.Les tables organises en index acclrent l 'accs par cl aux donnes des tables dans les interrogationsimpliquant des recherches de correspondance exacte ou des recherches sur des plages de donnes.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    En outre, les besoins en stockage sont moindres dans la mesure o les colonnes de cl ne sont pasdupliques dans la table, ni dans l'index. Les colonnes restantes ne contenant pas de cl sont stockesdans l'index si la taille de l'entre d'index n'augmente pas considrablement. Si tel n'est pas le cas, leserveur Oracle fournit la clause OVERFLOW qui permet de rsoudre le problme.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    6/68

    Gestion de donnes 6 / 68

    1.1.5. Table incluse dans un clusterUne table incluse dans un cluster permet galement de stocker les donnes dans des tables. Un clusterest constitu de plusieurs tables qui partagent les mmes blocs de donnes, regroups du fait qu'ilspartagent des colonnes et souvent utiliss conjointement.Un cluster prsente les caractristiques suivantes :

    Il dispose d'une cl de cluster qui permet d'identifier les lignes devant tre enregistresensembles. La cl de cluster peut tre constitue d'une ou de plusieurs colonnes. Les tables d'un cluster contiennent des colonnes correspondant la cl de cluster. La cration de cluster est un mcanisme qui est transparent aux applications qui utilisent les

    tables. Les donnes d'une table incluse dans un cluster peuvent tre manipules de la mmemanire que celles d'une table normale.

    La mise jour de l'une des colonnes de la cl de cluster peut provoquer le dplacementphysique de la ligne.

    La cl de cluster est indpendante de la cl primaire. Les tables d'un cluster peuvent avoir unecl primaire qui peut correspondre la cl de cluster ou un ensemble de colonnes diffrent.

    Les clusters sont gnralement utiliss pour amliorer les performances. L'accs direct auxdonnes d'un cluster peut tre plus rapide, mais le balayage complet de tables est gnralementplus long.

    1.2. Structure dune ligne

    1.2.1. Format et longueur de ligneLes donnes des lignes sont stockes dans des blocs de base de donnes sous forme d'enregistrementsde longueur variable. Les colonnes d'une ligne sont gnralement enregistres selon l'ordre dans lequelelles sont dfinies, et toutes les colonnes de fin NULL ne sont pas enregistres. Chaque ligne d'unetable peut comporter un nombre de colonnes diffrent. Chaque ligne d'une table a :

    un en-tte : cet en-tte permet de stocker le nombre de colonnes de la ligne, les informationsde chanage et le statut de verrouillage de la ligne,

    des donnes de ligne : le serveur Oracle stocke la longueur et la valeur de chaque colonne (unoctet est ncessaire pour enregistrer la longueur de colonne si celle-ci ne peut dpasser 250octets. Une colonne plus longue ncessite 3 octets. La valeur de la colonne est stockeimmdiatement aprs les octets de longueur de colonne).

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Aucun espace n'est ncessaire entre les lignes adjacentes. Chaque ligne du bloc est associe unpointeur dans le rpertoire des lignes. Le pointeur pointe vers le dbut de la ligne.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    7/68

    Gestion de donnes 7 / 68

    Types de donnes Oracle

    1.2.2. Types de donnes internes OracleLe serveur Oracle fournit plusieurs types de donnes internes pour stocker les donnes scalaires, lesensembles et les relations.

    1.2.3. Types de donnes scalaires

    Donnes de type caractre

    Les donnes de type caractre sont stockes sous forme de chanes de longueur fixe ou de longueurvariable dans la base de donnes.Les donnes de longueur fixe de type caractre, tel que CHAR et NCHAR, sont stockes avec desespaces. NCHAR est un type de donnes NLS (National Language-Supported) qui permet de stockerdes jeux de caractres de longueur fixe ou de longueur variable. La taille maximale est dtermine parle nombre d'octets ncessaires au stockage d'un caractre, avec une limite maximale de 2 000 octetspar ligne. La valeur par dfaut est de 1 caractre, soit 1 octet, selon le jeu de caractres.Les donnes de longueur variable de type caractre utilisent uniquement le nombre d'octets ncessairesau stockage de la valeur de colonne relle et leur taille peut varier pour chaque ligne et tre gale 4000 octets au maximum. Les donnes de type VARCHAR2 et NVARCHAR2, par exemple, sont desdonnes de type caractre de longueur variable.

    Donnes numriquesDans les bases de donnes Oracle, les nombres sont toujours stocks sous forme de donnes delongueur variable. Ils peuvent comporter jusqu' 38 chiffres significatifs. Les donnes numriquesncessitent :

    un octet pour l'exposant, un octet tous les deux chiffres significatifs dans la mantisse, un octet pour les nombres ngatifs si le nombre de chiffres significatifs est infrieur 38

    octets.

    Donnes de type DATE

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Le serveur Oracle enregistre les dates dans des champs de longueur fixe de sept octets. Une dateOracle contient toujours l'heure.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    8/68

    Gestion de donnes 8 / 68

    Donnes de type RAWCe type de donnes permet de stocker de petites donnes binaires. Le serveur Oracle ne convertit pasle jeu de caractres lorsque des donnes de type RAW sont transmises entre les machines d'un rseauou lorsqu'elles sont transfr es d'une base de donnes vers une autre l'aide d'utilitaires Oracle. Lenombre d'octets ncessaires au stockage de la valeur de colonne relle varie pour chaque ligne et peut

    tre gal 2 000 octets au maximum.

    Types de donnes scalaires de stockage des objets LOBOracle fournit six types de donnes pour stocker les objets LOB :

    CLOB et LONG pour les grands caractres de longueur fixe, NCLOB pour les jeux de grands caractres nationaux de longueur fixe, BLOB et LONG RAW pour stocker les donnes non structures, BFILE pour stocker les donnes non structures dans des fichiers de systme d'exploitation.

    Les types de donnes LONG et LONG RAW taient utiliss auparavant pour les donnes nonstructures, telles que les images binaires, les documents ou les informations gographiques, et sontprincipalement fournis des fins de compatibilit descendante. Ces types de donnes sont remplacs

    par les types de donnes LOB. Les donnes de type LOB sont diffrentes des donnes de type LONGet LONG RAW et ne sont pas interchangeables. Les donnes de type LOB ne prennent pas en chargel'interface API LONG (Application Programming Interface), et vice versa.

    Comparer les donnes de type LONG et LOBLa comparaison entre la fonctionnalit LOB et les anciens types de donnes peut s'avrer utile. Ci-dessous, LONG fait rfrence LONG et LONG RAW, et LOB toutes les donnes de type LOB.Les donnes de type LOB permettent d'utiliser plusieurs colonnes LOB par table ou plusieurs attributsdans un type d'objet, alors que le type LONG n'en accepte qu'une seule ou qu'un seul.La taille maximale des donnes de type LONG est de 2 gigaoctets alors que celle des donnes de typeLOB peut tre gale 4 gigaoctets maximum.

    Lors de leur extraction, les types de donnes LOB renvoient le pointeur alors que les types de donnesLONG renvoient les donnes.Les types de donnes LOB stockent un pointeur dans la table et les donnes dans un autreemplacement, sauf si la taille des donnes de type VARCHAR2 est infrieure la taille maximale de 4000 octets. Les types de donnes LONG stockent toutes les donnes dans le segment. En outre, lestypes de donnes LOB permettent de stocker les donnes dans un segment et un tablespace distincts oudans un fichier hte.Les donnes de type LOB prennent en charge les attributs de type d'objet (sauf le type de donnesNCLOB), contrairement aux donnes de type LONG.Les donnes de type LONG sont stockes sous forme de morceaux de lignes chans, un morceau deligne d'un bloc pointant vers le morceau de ligne suivant d'un autre bloc. En consquence, l'accs auxsegments s'effectue squentiellement. En revanche, les donnes de type LOB permettent d'accder

    directement aux segments de donnes via une interface de type fichier.

    Type de donnes ROWID et UROWID

    ROWID est une pseudo colonne qui peut tre interroge en mme temps que les autres colonnes d'unetable. Ce type de donnes prsente les caractristiques suivantes :

    Il identifie de manire unique chaque ligne dans une base de donnes.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Il n'est pas enregistr explicitement sous la forme d'une valeur de colonne.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    9/68

    Gestion de donnes 9 / 68

    Bien que le type ROWID ne fournisse pas directement l'adresse physique d'une ligne, ilpermet de rechercher la ligne.

    Il constitue la mthode la plus rapide pour accder une ligne d'une table. Les donnes de type ROWID sont stockes dans des index dfinissant des lignes ayant des

    valeurs de cl spcifiques.

    La version 8.1 du serveur Oracle fournit un nouveau type de donnes unique appel "universalerowid" ou UROWID. Il prend en charge les donnes de type ROWID des tables trangres (tables nonOracle) et peut stocker n'importe quelle donne de ce type. Pour pouvoir utiliser le type de donnesUROWID, vous devez affecter la valeur 8.1 ou suprieure au paramtre COMPATIBLE.

    Format des donnes de type ROWIDLes donnes de type ROWID ncessitent 10 octets de stockage sur disque et s'affichent sur 18caractres. Ces donnes sont constitues des lments suivants :

    numro d'objet de donnes : affect chaque objet de donnes cr, tel qu'une table ou unindex, et unique dans la base de donnes,

    numro de fichier relatif : unique pour chaque fichier d'un tablespace, numro de bloc : indique l'emplacement du bloc contenant la ligne dans le fichier, numro de ligne : indique la position du pointeur du rpertoire des lignes dans l'entte de bloc.

    En interne, le numro d'objet de donnes ncessite 32 bits, le numro de fichier relatif, 10 bits, lenumro de bloc, 22 bits, et le numro de ligne, 16 bits, soit un total de 80 bits, ou 10 octets.Les donnes de type ROWID s'affichent en utilisant un schma d'encodage en base 64 qui utilise sixpositions pour le numro d'objet, trois positions pour le numro de fichier relatif, six positions pour lenumro de bloc et trois positions pour le numro de ligne. Ce schma utilise les caractres "A-Z", "a-z", "0-9", "+" et "/", soit un total de 64 caractres, comme dans l'exemple ci-dessous :+

    SQL> SELECT id, ROWID FROM summit.department;ID ROWID--------- ------------------10 AAADC4AACAAAAMAAAA

    31 AAADC4AACAAAAMAAAB32 AAADC4AACAAAAMAAAC33 AAADC4AACAAAAMAAAD34 AAADC4AACAAAAMAAAE35 AAADC4AACAAAAMAAAF41 AAADC4AACAAAAMAAAG42 AAADC4AACAAAAMAAAH43 AAADC4AACAAAAMAAAI44 AAADC4AACAAAAMAAAJ45 AAADC4AACAAAAMAAAK50 AAADC4AACAAAAMAAAL

    Dans cet exemple : AAADC4 correspond au numro d'objet de donnes. AAC reprsente le numro de fichier relatif. AAAAMA indique le numro de bloc. AAA d finit le numro de ligne du dpartement dont l'ID=10.

    Rechercher une ligne l'aide du type de donnes ROWIDEtant donn qu'un segment ne peut rsider que dans un seul tablespace, le serveur Oracle peutidentifier le tablespace contenant la ligne en utilisant le numro d'objet de donnes.Le numro de fichier relatif figurant dans le tablespace identifie le fichier, le numro de bloc identifiele bloc contenant la ligne, et le numro de ligne identifie la ligne dans le rpertoire des lignes.L'entre du rpertoire des lignes peut permettre de rechercher le dbut de la ligne. Ainsi, le type dedonnes ROWID permet de rechercher n'importe quelle ligne dans une base de donnes.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    10/68

    Gestion de donnes 10 / 68

    Utiliser un ROWID restreint dans Oracle7 et les versionsantrieures

    Les versions antrieures du serveur Oracle8 utilisaient le format ROWID restreint. Un ROWIDrestreint utilisait seulement six octets en interne et ne contenait pas de numro d'objet de donnes. Ceformat tait acceptable dans Oracle7 ou les versions antrieures, car les numros de fichier taientuniques dans une base de donnes.Ainsi, les versions prcdentes taient limites 1 022 fichiers de donnes. Bien qu'Oracle8 aitsupprim cette limitation en utilisant des numros de fichier relatifs des tablespaces, un ROWIDrestreint est toujours utilis dans des objets, tels que les index non partitionns ou les tables nonpartitionnes, dans lesquels toutes les entres d'index font rfrence aux lignes d'un mme segment.

    1.2.4. Types de donnes EnsembleDeux types de donnes Ensemble permettent de stocker les donnes rptitives d'une ligne d'une table.Dans les versions antrieures du serveur Oracle8i, l'option Objects tait ncessaire pour dfinir etutiliser les ensembles.

    Tableaux de taille variable (VARRAY)Ces tableaux permettent de stocker des listes contenant un petit nombre d'lments, tels que desnumros de tlphone de clients.Les tableaux VARRAY prsentent les caractristiques suivantes :

    Un tableau contient des donnes ordonnes.

    Les donnes d'un tableau ont toutes le mme type. Chaque lment comporte un index qui correspond un numro indiquant la position del'lment dans le tableau.

    Le nombre d'lments d'un tableau correspond la taille du tableau. Le serveur Oracle permet d'utiliser des tableaux de taille variable, et c'est la raison pour

    laquelle ils s'appellent VARRAY, mais la taille maximale du tableau doit tre dfinie lors desa dclaration.

    Tables imbriquesLes tables imbriques permettent de dfinir une table sous forme de colonne dans une table. Ces tablespeuvent tre utilises pour stocker des ensembles pouvant contenir un grand nombre

    d'enregistrements, tels que le nombre d'articles d'une commande.Gnralement, les tables imbriques prsentent les caractristiques suivantes : Une table imbrique est un ensemble non ordonn d'enregistrements ou de lignes. Les lignes d'une table imbrique prsentent la mme structure. Les lignes d'une table imbrique sont stockes dans une table distincte de la table mre, avec unpointeur vers la ligne correspondante dans la table mre. Les caractristiques de stockage d'une table imbrique peuvent tre dfinies par l'administrateur debase de donnes. Il n'existe pas de taille maximale prdfinie pour une table imbrique.

    Types de donnes Relation (REF)

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Les types de donnes Relation servent de pointeurs dans la base de donnes. L'utilisation de ces typesde donnes fait appel l'option Objects. Par exemple, chaque lment ordonn peut pointer vers uneligne de la table PRODUCTS ou y faire rfrence sans avoir stocker la rfrence du produit.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    11/68

    Gestion de donnes 11 / 68

    Types de donnes dfinis par l'utilisateurLe serveur Oracle permet l'utilisateur de dfinir des types de donnes abstraits et de les utiliser dansl'application. L'utilisation de ces types de donnes fait appel l'option Objects.

    1.3. Crer une table

    1.3.1. Rappel : SyntaxeUtilisez la commande suivante pour crer une table :

    CREATE TABLE [schema.] table(column datatype [ , column datatype ] ...)[TABLESPACE tablespace ][ PCTFREE integer ][ PCTUSED integer ][ INITRANS integer ][ MAXTRANS integer ][ STORAGE storage-clause ][LOGGING | NOLOGGING]

    [CACHE | NOCACHE] ]

    Exemple :CREATE TABLE employee(

    id NUMBER(7),last_name VARCHAR2(25),dept_id NUMBER(7))

    PCTFREE 20 PCTUSED 50STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE data;

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    o : schema est le propritaire de la table,table est le nom de la table,column est le nom de la colonne,data type est le type de donnes de la colonne,TABLESPACE indique le tablespace de destination de la table crer,PCTFREE correspond l'espace rserv dans chaque bloc (sous la forme d'un

    pourcentage de l'espace total moins l'en-tte de bloc) l'augmentation de la longueur des lignes,

    PCTUSED dfinit la limite infrieure de l'espace utilis dans un bloc (aprsutilisation de l'espace dfini par le paramtre PCTFREE) partir delaquelle d'autres lignes peuvent tre insres,

    INITRANS dfinit le nombre d'entres de transaction pr alloues dans chaque

    bloc (la valeur par dfaut est 1),MAXTRANS limite le nombre d'entres de transaction pouvant tre alloues chaque bloc (la valeur par d faut est 255),

    STORAGE identifie la clause de stockage qui dtermine l'allocation des extents(ensemble de blocs contigus) la table,

    LOGGING indique que la cration de la table sera consigne dans le fichier de journalisation (redo log), (indique galement que toutes lesoprations suivantes effectues sur la table sont enregistres; ils'agit de la valeur par dfaut),

    NOLOGGING indique que la cration de la table et de certains types dechargement de donnes ne sera pas consigne dans le fichier de

    journalisation,CACHE indique que les blocs extraits pour cette table sont placs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    12/68

    Gestion de donnes 12 / 68

    l'extrmit la plus rcemment utilise de la liste LRU du cache detampons (buffer cache), mme lorsque la table est balaye entotalit,

    NOCACHE indique que les blocs extraits de cette table sont placs la fin de laliste LRU du cache des tampons, lorsque la table est balaye entotalit.

    Remarque : En gnral, les tables doivent tre cres avec une cl primaire. Si vous avez dfini le paramtre MINIMUM EXTENT du tablespace, la taille des extents de

    la table est arrondie au multiple suivant le plus proche. Si vous omettez la clause [NO]LOGGING, l'attribut de journalisation de la table correspond

    par dfaut celui du tablespace dans lequel elle rside. Si vous affectez au paramtre MINEXTENTS une valeur suprieure 1 et que le tablespace

    contient plusieurs fichiers de donnes, les extents sont rpartis dans les diffrents fichiers dutablespace.

    1.3.2. Copier une table existanteUtilisez la commande CREATE TABLE avec une sous-interrogation pour copier une table en totalitou partiellement.La syntaxe simplifie est :

    CREATE TABLE [schema.]table[ LOGGING | NOLOGGING ]...ASsubquery

    Les autres clauses, telles que TABLESPACE, STORAGE et les paramtres d'utilisation des blocspeuvent tre dfinis lors de la cration d'une table partir d'une autre table. Utilisez la clause

    NOLOGGING pour interdire la gnration d'entres de journalisation (redo log entries) et acclrer lacration de la table.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Lorsque vous crez une table en copiant une table, les contraintes, les dclencheurs et les privilges detable ne sont pas copis. Si la table d'origine contient une colonne NOT NULL, cette colonne existegalement dans la nouvelle table.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    13/68

    Gestion de donnes 13 / 68

    1.3.3. Utiliser Schema Manager pour crer une table

    1. Dmarrez Schema Manager :Start>Programs>Oracle - EMV2 Home>DBA Management Pack >Schema Manager

    2. Slectionnez l'option permettant de vous connecter directement une base de donnes. Entrezl'administrateur system, le mot de passe manager, le nom de service de votre base, puis cliquez

    sur OK.3. Slectionnez Object>Create dans la barre de menus.4. Slectionnez Table dans la liste des objets, slectionnez l'option Use Wizard, puis cliquez sur

    Create.5. Entrez les informations relatives la table dans l'assistant Table Wizard, telles que le nom, le

    tablespace, le propritaire, les colonnes, les types de donnes et les tailles. Cliquez sur Finish.6. Dveloppez le dossier Tables pour vrifier si la table a t cre.

    Vous pouvez galement slectionner une table existante dans le navigateur et utiliser Object>CreateLike pour crer une table ayant les mmes caractristiques de colonne et de stockage que la tableslectionne.Autres options Oracle Schema Manager permet galement de dfinir automatiquement les paramtres

    de stockage et d'utilisation des blocs partir d'une estimation du volume initial, de la frquenced'augmentation de la taille de la table et de son activit DML.

    1.3.4. Tables temporairesOutre les tables permanentes, vous pouvez crer des tables temporaires qui contiennent les donnesprives des sessions qui n'existent que le temps d'une transaction ou d'une session.La commande CREATE GLOBAL TEMPORARY TABLE permet de crer une table temporairespcifique une transaction ou une session. Les donnes d'une table temporaire de transaction etcelles d'une table temporaire de session existent respectivement pendant la dure de la transaction etpendant la dure de la session.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Les donnes d'une session sont prives. Chaque session ne peut voir et modifier que ses propresdonnes. Aucun verrou DML n'est plac sur les donnes d'une table temporaire. Les clauses quicontrlent la dure de stockage des lignes sont :

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    14/68

    Gestion de donnes 14 / 68

    ON COMMIT DELETE ROWS : indique que les lignes sont uniquement visibles dans latransaction,

    ON COMMIT PRESERVE ROWS : indique que les lignes sont visibles pour toute la session.Vous pouvez crer des index, des vues et des dclencheurs dans les tables temporaires et utilisergalement les utilitaires Export et Import pour exporter et importer la dfinition d'une tabletemporaire. Toutefois, aucune donne n'est exporte, mme si vous utilisez l'option ROWS. Ladfinition d'une table temporaire est visible dans toutes les sessions.

    Exemple :

    CREATE GLOBAL TEMPORARY TABLE employee_tempAS SELECT * FROM employee;

    1.3.5. Instructions de cration d'une table Placez les tables dans des tablespaces distincts et non dans des tablespaces contenant des

    segments d'annulation, des segments temporaires et des index. Placez les tables dans des tablespaces grs localement pour viter la fragmentation. Utilisez quelques tailles d'extent standard multiples de 5 DB_BLOCK_SIZE afin de limiter

    la fragmentation. Pour amliorer les performances du balayage complet de tables, alignez les tailles d'extent

    l'aide du paramtre d'initialisationDB_FILE_MULTIBLOCK_READ_COUNT qui dfinit le nombre de blocs demands par lesprocessus serveur dans chaque appel de lecture du systme d'exploitation lors de la lecture del'ensemble de la table.

    Utilisez la clause CACHE pour les petites tables de rfrence pouvant tre frquemmentutilises.

    1.3.6. Dfinir le paramtre PCTFREE

    Plus la valeur du paramtre PCTFREE est leve, plus l'espace disponible pour la mise jour d'unbloc d'une base de donnes est lev. Dfinissez une valeur leve lorsque la table contient :

    des colonnes initialement NULL, puis mises jour l'aide d'une valeur, des colonnes dont la taille risque d'augmenter la suite d'une mise jour.

    En affectant une valeur plus leve au paramtre PCTFREE, vous rduisez la densit de bloc, c'est--dire que chaque bloc contiendra moins de lignes.La formule dfinie ci-dessus permet au bloc de disposer d'un espace suffisant permettant la taille dela ligne d'augmenter.

    1.3.7. Dfinir le paramtre PCTUSED

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Dfinissez le paramtre PCTUSED pour permettre de renvoyer le bloc dans la liste d'espaces libresuniquement lorsqu'il existe un espace suffisant pour accepter une ligne moyenne. Si un bloc de la listedes espaces libres ne dispose pas de l'espace suffisant pour insrer une ligne, le serveur Oracleconsulte le bloc suivant de la liste. Ce balayage linaire continue jusqu' ce qu'un bloc disposant de

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    15/68

    Gestion de donnes 15 / 68

    l'espace suffisant soit trouv ou que la fin de la liste soit atteinte. Cette formule permet de rduire letemps de balayage de la liste d'espaces libres en augmentant la probabilit de trouver un bloc ayantl'espace libre ncessaire.

    1.3.8. Migrer des lignes

    Si vous affectez une valeur faible au paramtre PCTFREE, le bloc risque de ne pas contenir l'espacesuffisant permettant la longueur de la ligne d'augmenter la suite d'une mise jour. Dans ce cas, leserveur Oracle transfre la totalit de la ligne vers un nouveau bloc et conserve le pointeur du blocd'origine vers le nouveau bloc. Cette opration s'appelle une migration de ligne. Lors de la migrationd'une ligne, les performances des E/S sur la ligne diminuent, car le serveur Oracle doit balayer deuxblocs de donnes pour extraire la ligne.

    1.3.9. Chaner des lignesUn chanage de ligne se produit lorsqu'une ligne ne peut pas tenir dans un bloc. Cette situation peut seproduire lorsque la ligne contient des colonnes de trs grande taille.Dans ce cas, le serveur Oracle divise la ligne en morceaux de ligne plus petits. Chaque morceau deligne est stock dans un bloc avec les pointeurs associs pour extraire et assembler la totalit de laligne. Le chanage de lignes peut tre limit en dfinissant une plus grande taille de bloc ou endivisant, si possible, la table en plusieurs tables contenant moins de colonnes.

    1.4. Contrler lespace utilis par les tables

    1.4.1. Modifier les paramtres d'utilisation de blocs et de stockageVous pouvez modifier certains paramtres de stockage et tous les paramtres d'utilisation des blocs l'aide de la commande ALTER TABLE.

    1.4.2. SyntaxeALTER TABLE [schema.]table{[ storage-clause ][ PCTFREE integer ][ PCTUSED integer ][ INITRANS integer ][ MAXTRANS integer]}

    Exemple :

    ALTER TABLE summit.employeePCTFREE 30PCTUSED 50STORAGE(NEXT 500K

    MINEXTENTS 2MAXEXTENTS 100);

    1.4.3. Impact de la modification des paramtres de stockageLes paramtres que vous pouvez modifier et l'effet de leur modification sont les suivants :

    NEXT : lorsque le serveur Oracle alloue un autre extent la table, la nouvelle valeur estutilise. La taille des extents suivants augmente de la valeur dfinie par le paramtrePCTINCREASE.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    PCTINCREASE : la modification de la valeur du paramtre PCTINCREASE est enregistredans le dictionnaire de donnes. La nouvelle valeur est utilise pour recalculer la valeur duparamtre NEXT lorsque l'extent suivant est allou par le serveur Oracle. Supposons qu'unetable deux extents comporte les paramtres NEXT=10K et PCTINCREASE=0. Si vousaffectez la valeur 100 au paramtre PCTINCREASE, le troisime extent allou sera de 10 ko,le quatrime de 20 ko, et ainsi de suite.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    16/68

    Gestion de donnes 16 / 68

    MINEXTENTS : vous pouvez affecter au paramtre MINEXTENTS une valeur infrieure ougale au nombre actuel d'extents de la table. La nouvelle valeur n'entre pas immdiatement envigueur, mais elle est prise en compte si la table est tronque.

    MAXEXTENTS : vous pouvez affecter au paramtre MAXEXTENTS une valeur gale ousuprieure au nombre actuel d'extents de la table.

    Restrictions Vous ne pouvez pas modifier la valeur du paramtre INITIAL d'une table.La valeur du paramtre NEXT est arrondie une valeur multiple de la taille du bloc, gale ousuprieure la valeur dfinie.

    1.4.4. Paramtres d'utilisation de blocsVous pouvez modifier la valeur des paramtres d'utilisation de blocs pour :

    amliorer l'utilisation de l'espace, rduire les possibilits de migration.

    La modification des paramtres d'utilisation de blocs a les effets suivants : PCTFREE : la modification du paramtre PCTFREE affecte les insertions suivantes. Les blocs

    dj remplis et donc inutiliss pour les insertions (100/PCTFREE) ne sont pas affects jusqu'ce qu'ils soient renvoys dans la liste d'espaces libres. Ils ne peuvent tre placs dans la listed'espaces libres que si leur taux d'utilisation tombe sous la valeur du paramtre PCTUSED.

    PCTUSED : la modification du paramtre PCTUSED affecte tous les blocs de la table. Si uneligne est mise jour ou supprime, l'utilisation du bloc contenant la ligne est vrifie et le blocest rutilis pour y insrer des donnes si son taux d'utilisation est infrieur la valeur duparamtre PCTUSED.

    INITRANS : la modification du paramtre INITRANS n'affecte que les nouveaux blocs.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    MAXTRANS : la modification du paramtre MAXTRANS affecte tous les blocs de la table.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    17/68

    Gestion de donnes 17 / 68

    1.4.5. Utiliser Oracle Enterprise Manager pour modifier les paramtresde stockage

    1. Dmarrez Schema Manager et connectez-vous directement la base de donnes : Dmarrer >Programmes > Oracle Home >DBA Management Pack > Schema Manager

    2. Entrez les informations de connexion, puis cliquez sur OK.3. Dveloppez le dossier Tables.4. Dveloppez le nom d'utilisateur (ou schma).5. Slectionnez la table.6. Modifiez les valeurs de l'onglet Storage de la fentre de proprits. Notez que cette mthode

    ne permet pas de modifier le nombre minimum d'extents, ni le nombre initial de transactions.7. Cliquez sur Apply.

    1.4.6. Allouer manuellement des extentsVous pouvez tre amen allouer des extents manuellement :

    pour contrler la distribution des extents d'une table dans les fichiers, avant de charger les donnes en masse pour empcher l'augmentation dynamique de la taille

    des tables.

    SyntaxeUtilisez la commande suivante pour allouer un extent une table :

    ALTER TABLE [schema.]tableALLOCATE EXTENT [ ([SIZE integer [K|M]]

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    [ DATAFILE 'filename' ]) ]

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    18/68

    Gestion de donnes 18 / 68

    Si vous ne dfinissez pas le paramtre SIZE, le serveur Oracle utilise la taille d'extentNEXT_EXTENT de DBA_TABLES pour allouer l'extent.Le fichier dfini dans la clause DATAFILE doit appartenir au tablespace contenant la table. Sinon,l'instruction gnre une erreur. Si vous n'utilisez pas la clause DATAFILE, le serveur Oracle allouel'extent dans l'un des fichiers du tablespace contenant la table.Remarque : la valeur NEXT_EXTENT de DBA_TABLES n'est pas affecte par l'allocation manuelled'extents. Le serveur Oracle ne recalcule pas la taille de l'extent suivant lorsque cette commande estexcute.Exemples :

    ALTER TABLE summit.employeeALLOCATE EXTENT(SIZE 500KDATAFILE '/DISK3/DATA01.DBF');

    1.4.7. Rorganiser les tables non partitionnesALTER TABLE employeeMOVE TABLESPACE data1;ALTER TABLE employeeMOVE TABLESPACE data1;

    Transfre les donnes dans un nouveau segment, tout en conservant les index, les contraintes,les privilges, etc. dans la table.

    Utilis pour transfrer une table vers un tablespace diffrent ou pour rorganiser les extents.

    Transfrer ou rorganiser une tableOracle8 i permet de dplacer une table non partitionne sans recourir l'utilitaire Export ou Import.Cela s'avre utile pour :

    transfrer une table d'un tablespace vers un autre, rorganiser la table pour supprimer la migration de lignes.

    Aprs avoir transfr une table, vous devez reconstituer les index pour viter l'erreur suivante :

    SQL> select * from employee where id=23;select * from employee where id=23*ERROR at line 1:ORA-01502: index 'SUMMIT.EMPLOYEE_ID_PK' or partition of suchindex is in unusable state

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    1.4.8. Repre high-water mark

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    19/68

    Gestion de donnes 19 / 68

    Le repre high-water mark d'une table indique le dernier bloc utilis de la table. Lorsque des donnes sont insres dans la table, le repre high-water mark se dplace pour

    indiquer le dernier bloc utilis. Le repre high-water mark n'est pas rinitialis lorsque des lignes sont supprimes de la table. Le repre high-water mark est stock dans l'en-tte de segment de la table. Lorsque le serveur Oracle effectue des balayages complets de tables, il lit tous les blocs

    jusqu'au repre high-water mark.

    1.4.9. Rechercher le repre high-water mark :DBMS_SPACE.UNUSED_SPACE

    Le package DBMS_SPACE contient une procdure permettant de rechercher le repre high-watermark et le nombre de blocs situs au-dessus du repre. Bien que ces informations puissent treobtenues partir du dictionnaire de donnes aprs l'analyse de la table, le package DBMS_SPACEpermet d'accder plus rapidement aux informations sans affecter les performances.

    SyntaxeVous pouvez utiliser le bloc PL/SQL suivant pour rechercher et afficher le nombre de blocs allous

    une table et le nombre de blocs non utiliss :

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    20/68

    Gestion de donnes 20 / 68

    SQL> DECLARE2 v_owner VARCHAR2(30) := 'SUMMIT' ;3 v_segment_name VARCHAR2(30) := 'EMPLOYEE';4 v_segment_type VARCHAR2(30) := 'TABLE';5 v_total_blocks NUMBER;6 v_total_bytes NUMBER;7 v_unused_blocks NUMBER;

    8 v_unused_bytes NUMBER;9 v_last_used_extent_file_id NUMBER;10 v_last_used_extent_block_id NUMBER;11 v_last_used_block NUMBER;12 BEGIN13 dbms_space.unused_space(v_owner,14 v_segment_name,15 v_segment_type,16 v_total_blocks,17 v_total_bytes,18 v_unused_blocks,19 v_unused_bytes,20 v_last_used_extent_file_id,21 v_last_used_extent_block_id,22 v_last_used_block23 );24 dbms_output.put_line(INITCAP(v_segment_type)||' :'||v_owner||'.'||v_segment_name);25 dbms_output.put_line('Total Blocks :'||TO_CHAR(v_total_blocks));26 dbms_output.put_line('Blocks above HWM :'||TO_CHAR(v_unused_blocks));27 END;28 /Statement processed.Table : SUMMIT.EMPLOYEETotal Blocks : 25Blocks above HWM : 23

    Remarque : le package DBMS_SPACE est cr lorsque les scripts dbmsutil.sql et prvtutil.plb sontappels par le script catproc.sql.

    1.4.10. Librer l'espace inutilis

    Si vous allouez des extents de grande taille une table et que les extents ne sont pas utiliss en totalit,

    vous pouvez librer manuellement de l'espace dans la table.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    L'espace libr devient alors disponible pour les autres segments du tablespace.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    21/68

    Gestion de donnes 21 / 68

    SyntaxeUtilisez la commande suivante pour librer de l'espace dans une table :

    ALTER TABLE [schema.]tableDEALLOCATE UNUSED [KEEP integer [ K|M ] ]

    KEEP dfinit le nombre d'octets conserver au-dessus du repre high-water mark.Si vous ne dfinissez pas la clause KEEP dans la commande, le serveur Oracle libre tout l'espaceinutilis au-dessus du repre high-water mark. Si le repre high-water mark se trouve un extent endessous de la valeur MINEXTENTS, le serveur Oracle libre des extents au-dessus de INEXTENTS.Examinons l'exemple de la diapositive. Si la valeur du paramtre MINEXTENTS de la table est galeou infrieure quatre, le serveur Oracle libre tous les blocs inutiliss au-dessus du repre high-watermark. Notez que le cinquime extent (avec ID=4) ne contient maintenant que cinq blocs. Si la valeurdu paramtre MINEXTENTS de table est gale cinq, le serveur Oracle ne libre pas d'espace dans lecinquime extent.Remarque :

    Etant donn que la libration d'espace l'aide de cette commande libre l'espace inutilis dansun extent, son utilisation frquente risque de fragmenter l'espace des fichiers de donnes. Pourviter ce problme, dfinissez le paramtre MINIMUM EXTENT du tablespace.

    Pour librer tout l'espace en dessous du repre high-water mark, mme si l'extent que dsignele repre correspond un nombre d'extents infrieur la valeur du paramtre MINEXTENTS,utilisez le paramtre KEEP 0.

    1.4.11. Tronquer une table

    La troncature d'une table supprime toutes les lignes d'une table et libre l'espace inutilis. Dansl'exemple de la diapositive, la valeur du paramtre MINEXTENTS de la table est gale 2.

    SyntaxeTRUNCATE TABLE [schema.] table[{DROP | REUSE} STORAGE]

    Cette commande a les effets suivants : Elle supprime toutes les lignes de la table. Aucune donne d'annulation n'est gnre et la commande valide implicitement les donnes,

    car la commande TRUNCATE TABLE est une commande LDD. Elle tronque les index correspondants. Une table rfrence par une cl trangre ne peut tre tronque.

    Les dclencheurs de suppression ne sont pas activs.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Si vous utilisez la clause DROP (clause par d faut) :

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    22/68

    Gestion de donnes 22 / 68

    o tous les extents, l'exception de ceux dfinis par le paramtre MINEXTENTS, sontlibrs,

    o le repre high-water mark est rinitialis et pointe vers le premier bloc de la table,o le paramtre NEXT_EXTENT de la table a pour valeur la taille de l'extent libr

    ayant l'ID le plus bas. Par exemple, si la valeur du paramtre MINEXTENTS est gale 2, la valeur du paramtre NEXT_EXTENT est gale la taille du troisime extentde la table.

    Vous devez dfinir la clause REUSE pour conserver tout l'espace inutilis de la table. Les index sont affects par la clause REUSE ou DROP.

    1.4.12. Supprimer une tableDROP TABLE summit.departmentCASCADE CONSTRAINTS;

    Vous pouvez supprimer une table devenue inutile ou une table que vous souhaitez rorganiser.

    SyntaxeUtilisez la commande suivante pour supprimer une table :

    DROP TABLE [schema.] table[CASCADE CONSTRAINTS]

    Lorsque vous supprimez une table, vous librez les extents qu'elle utilise. Si les extents sont contigus,vous pouvez les fusionner automatiquement ou manuellement plus tard.Remarque : vous devez utiliser l'option CASCADE CONSTRAINTS s'il s'agit de la table mre d'unerelation de cl trangre. Cette option est dcrite en dtail dans le chapitre "Grer l'intgrit desdonnes".

    Utiliser Oracle Enterprise Manager pour supprimer unetable1 Dmarrez Schema Manager.2 Dveloppez le dossier Tables.3 Dveloppez le nom d'utilisateur (ou schma).4 Slectionnez la table.5 Slectionnez Object >Remove.6 Slectionnez Yes dans la bote de dialogue.

    1.4.13. Supprimer une colonne dune tableALTER TABLE employeeDROP COLUMN commentsCASCADE CONSTRAINTS CHECKPOINT 1000;

    Cette commande supprime la longueur et les donnes de colonne de chaque ligne pour librerde l'espace dans le bloc de donnes.

    La suppression d'une colonne d'une table volumineuse prend un temps considrable.

    Les versions antrieures d'Oracle8 i ne permettaient pas de supprimer une colonne d'une table. Leserveur 8 i d'Oracle permet dsormais de supprimer des colonnes partir des lignes d'une table. Lasuppression de colonnes permet de nettoyer les colonnes inutilises et les colonnes ayant besoind'espace, sans avoir exporter ou importer des donnes ni recrer les index et les contraintes.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    La suppression d'une colonne peut prendre un certain temps, car toutes les donnes de la colonne sont

    supprimes de la table.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    23/68

    Gestion de donnes 23 / 68

    Utiliser un point de reprise lors de la suppression d'unecolonne

    La suppression d'une colonne peut prendre un certain temps et ncessiter un espace d'annulationconsquent. Lorsque vous supprimez des colonnes dans des tables volumineuses, vous pouvez d finirdes points de reprise pour rduire l'espace d'annulation utilis. Dans l'exemple suivant, un point dereprise se constitue toutes les 1 000 lignes. La table a l'attribut INVALID tant que l'annulation est encours.Si l'instance connat un incident pendant l'annulation, la table conserve l'attribut INVALID audmarrage, et l'opration doit tre poursuivie.Utilisez l'instruction suivante pour reprendre une annulation interrompue :

    SQL> ALTER TABLE ordersDROP COLUMNS CONTINUE;

    Cette commande gnre une erreur lorsque la table a l'attribut VALID.

    1.4.14. Utiliser l'option UNUSED Marquer une colonne comme n'tant pas utilise

    ALTER TABLE ordersSET UNUSED COLUMN commentsCASCADE CONSTRAINTS;

    Supprimer les colonnes inutilisesALTER TABLE ordersDROP UNUSED COLUMNS CHECKPOINT 1000;

    Poursuivre l'opration de suppression de colonneALTER TABLE ordersDROP COLUMNS CONTINUE CHECKPOINT 1000;

    Au lieu de supprimer une colonne d'une table, vous pouvez marquer la colonne pour indiquer qu'ellen'est pas utilise, puis la supprimer ultrieurement. Ce marquage a l'avantage d'tre relativement rapidedans la mesure o aucun espace disque n'est rcupr du fait qu'aucune donne n'est supprime. Vouspouvez supprimer ultrieurement les colonnes inutilises de la table lorsque l'activit du systme estfaible.Les colonnes inutilis es sont considres comme n'appartenant pas la table. Les interrogations nepeuvent pas voir les donnes des colonnes inutilises. En outre, les noms et les types de donnes deces colonnes n'apparaissent pas lorsque la commande DESCRIBE est excute. L'utilisateur peutajouter une colonne en utilisant le nom d'une colonne inutilise.Vous pouvez, par exemple, marquer des colonnes comme tant inutilises pour supprimer deuxcolonnes d'une mme table. Lorsque vous supprimez deux colonnes d'une table, toutes les lignes de latable sont mises jour deux fois. Si vous marquez des colonnes comme tant inutilises et les

    supprimez, les lignes ne sont mises jour qu'une seule fois.

    Identifier les tables contenant des colonnes inutilisesPour identifier les tables contenant des colonnes inutilises, interrogez la vueDBA_UNUSED_COL_TABS. Cette vue obtient le nom des tables contenant des colonnes inutiliseset le nombre de colonnes inutilises qu'elles contiennent.L'interrogation suivante indique que la table ORDERS appartenant l'utilisateur SUMMIT contientune colonne inutilise :

    SQL> select * from dba_unused_col_tabs;OWNER TABLE_NAME COUNT--------------------------- ------------------------ ---------

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    SUMMIT ORDERS 1

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    24/68

    Gestion de donnes 24 / 68

    Restrictions relatives la suppression d'une colonneVous ne pouvez pas :

    supprimer une colonne d'une table de type objet, supprimer des colonnes dans des tables imbriques, supprimer toutes les colonnes d'une table, supprimer une colonne de cl de partitionnement, supprimer une colonne des tables dont SYS est propritaire, supprimer une colonne de cl parent, supprimer une colonne d'une table organise en index si la colonne est une cl primaire.

    1.4.15. Extraire les informations relatives une table

    Obtenir des informations du dictionnaire de donnesVous pouvez obtenir des informations sur les tables partir du dictionnaire de donnes. Pour obtenir

    le numro d'objet de donnes et l'emplacement de l'en-tte de table de toutes les tables appartenant l'utilisateur SUMMIT, lancez l'interrogation suivante :

    SQL> SELECT t.table_name, o.data_object_id,2 s.header_file, s.header_block3 FROM dba_tables t, dba_objects o, dba_segments s4 WHERE t.owner=o.owner5 AND t.table_name=o.object_name6 AND t.owner=s.owner7 AND t.table_name=s.segment_name8 AND t.owner='SUMMIT';

    Obtenir des informations du dictionnaire de donnes(suite)

    TABLE_NAME DATA_OBJECT_ID HEADER_FILE HEADER_BLOCK---------- -------------- ----------- ------------CUSTOMER 12743 2 902DEPARTMENT 12745 2 912EMPLOYEE 12748 2 927IMAGE 12751 2 942INVENTORY 12753 2 952ITEM 12755 2 962LONG_TEXT 12758 2 977ORDERS 12760 2 987PRODUCT 12762 2 997REGION 12765 2 1012TITLE 12768 2 1027WAREHOUSE 12770 2 1037

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    12 rows selected.

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    25/68

    Gestion de donnes 25 / 68

    1.4.16. Extraire les informations sur les extentsDBA_EXTENTS OWNER SEGMENT_NAME EXTENT_ID

    FILE_ID BLOCK_ID BLOCKS

    Distribuer l'espace allouVous pouvez obtenir le nombre d'extents, leur emplacement et leur taille en interrogeant la vueDBA_EXTENTS. L'exemple ci-dessous indique le nombre d'extents et le nombre total de blocsutiliss par une table dans chacun des fichiers de la base de donnes :

    SQL> SELECT file_id, COUNT(*) AS Extents, SUM(blocks) AS Blocks2 FROM dba_extents3 WHERE owner='SUMMIT'4 AND segment_name='EMPLOYEE'5 GROUP BY file_id;FILE_ID EXTENTS BLOCKS------- ------- ------3 1 251 row selected.

    1.4.17. Package DBMS_ROWIDFonctions couramment utilises :

    Obtenir des informations sur le type de donnes ROWIDLe serveur Oracle fournit le package DBMS_ROWID, cr partir du script dbmsutil.sql, lui-mmeappel par le script catproc.sql.Le package contient de nombreuses fonctions permettant d'effectuer des conversions de formatsROWID et de convertir le ROWID en composants individuels. La prsente section contient desexemples d'utilisation de ce package.

    Obtenir les composants ROWIDLancez l'interrogation suivante pour obtenir l'emplacement physique des lignes dansune table :

    SQL> SELECT id, ROWID,2 DBMS_ROWID.ROWID_OBJECT(ROWID) AS OBJECT,3 DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) AS "RELATIVE FILE",4 DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) AS BLOCK

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    5 FROM summit.department;

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    26/68

    Gestion de donnes 26 / 68

    Obtenir les composants ROWID (suite)ID ROWID OBJECT RELATIVE FILE BLOCK-- ------------------ --------- ------------- ---------10 AAADHJAACAAAAORAAA 12745 2 91331 AAADHJAACAAAAORAAB 12745 2 91332 AAADHJAACAAAAORAAC 12745 2 913

    33 AAADHJAACAAAAORAAD 12745 2 91334 AAADHJAACAAAAORAAE 12745 2 91335 AAADHJAACAAAAORAAF 12745 2 91341 AAADHJAACAAAAORAAG 12745 2 91342 AAADHJAACAAAAORAAH 12745 2 91343 AAADHJAACAAAAORAAI 12745 2 91344 AAADHJAACAAAAORAAJ 12745 2 91345 AAADHJAACAAAAORAAK 12745 2 91350 AAADHJAACAAAAORAAL 12745 2 91312 rows selected.

    Rechercher le numro de fichier absoluLancez l'interrogation suivante pour obtenir les numros de fichier absolus des lignes dans

    SUMMIT.DEPARTMENT :SQL> SELECT id, ROWID,2 DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'SUMMIT','DEPARTMENT')AS "FILE"3 FROM summit.department;

    ID ROWID FILE--------- ------------------ ---------10 AAADHJAACAAAAORAAA 231 AAADHJAACAAAAORAAB 232 AAADHJAACAAAAORAAC 233 AAADHJAACAAAAORAAD 234 AAADHJAACAAAAORAAE 235 AAADHJAACAAAAORAAF 2

    41 AAADHJAACAAAAORAAG 242 AAADHJAACAAAAORAAH 243 AAADHJAACAAAAORAAI 244 AAADHJAACAAAAORAAJ 245 AAADHJAACAAAAORAAK 250 AAADHJAACAAAAORAAL 212 rows selected.

    1.5. Synthse

    Ce chapitre vous a permis d'apprendre : crer une table avec les paramtres de stockage et d'utilisation de blocs appropris, contrler le stockage d'une table, utiliser le package DBMS_ROWID.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    27/68

    Gestion de donnes 27 / 68

    2. Grer l'Intgrit des donnesNotions abordes dans ce chapitre

    Mise en uvre des contraintes d'intgrit sur les donnes, Gestion des contraintes d'intgrit, Comment obtenir des informations sur les contraintes partir du dictionnaire de donnes ?

    2.1. Intgrit des donnesImage

    2.1.1. Mthodes garantissant l'intgrit des donnesL'intgrit des donnes garantit que les donnes d'une base de donnes respectent certaines rgles.Vous disposez de trois mthodes principales pour garantir l'intgrit des donnes :

    le code applicatif les triggers de base de donnes, contraintes d'intgrit dclaratives.

    Le choix de la mthode utiliser pour appliquer ces rgles relve de la conception de la base dedonnes et incombe son concepteur. L'administrateur de base de donnes est le premier concern parla mise en uvre de la mthode choisie par le concepteur et par l'quilibrage entre le besoin deperformances et l'intgrit des donnes. Le code applicatif peut tre mis en uvre sous forme deprocdures stockes dans la base de donnes ou sous forme d'applications excutes sur le client.Le prsent chapitre porte sur l'utilisation des triggers de base de donnes et sur les contraintesd'intgrit.

    Triggers de base de donnesLes dclencheurs de base de donnes sont des programmes PL/SQL qui s'excutent lorsqu'unvnement donn, tel que l'insertion ou la mise jour d'une colonne, se produit sur une table.Vous pouvez activer ou dsactiver les dclencheurs, c'est--dire que vous pouvez les dfinir pour qu'ilss'excutent lorsque l'vnement se produit, ou pour qu'ils ne s'excutent pas, mme s'ils sont dfinis.Les dclencheurs de base de donnes ne sont gnralement crs que pour appliquer une rglecomplexe ne pouvant tre dfinie sous la forme d'une contrainte d'intgrit.

    Contraintes d'intgritLes contraintes d'intgrit constituent le mcanisme par excellence pour appliquer des rgles, car :

    elles amliorent les performances, elles sont simples dclarer et modifier, dans la mesure o elles ncessitent peu de code, elles centralisent les rgles, elles sont souples (actives ou dsactives), elles sont entirement documentes dans le dictionnaire des donnes.

    Contraintes d'intgrit

    Types de contrainteIl existe cinq types de contrainte d'intgrit dclarative. Bien que les contraintes NOT NULL etCHECK ne ncessitent aucune attention particulire de la part de l'administrateur de base de donnes,les contraintes de cl primaire, de cl unique et de cl trangre doivent tre gres pour garantir une

    disponibilit optimale et des performances acceptables.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    28/68

    Gestion de donnes 28 / 68

    Contrainte DescriptionNOT NULL Indique quune colonne ne peut contenir

    aucune valeur nulleUNIQUE Dfinit comme tant unique une colonne ou un

    groupe de colonnes.PRIMARY KEY Dfinit une colonne ou un groupe de colonnes

    comme cl primaire de la table.FOREIGN KEY Dfinit une colonne ou un groupe de colonne

    comme cl trangre dans une contraintedintgrit rfrentielle.

    CHECK Dfinit une condition que chaque ligne de latable doit satisfaire.

    Etats des contraintesImage

    Une contrainte d'intgrit peut avoir l'un des tats suivants : Disabled Novalidate, Disabled Validate, Enabled Novalidate ou Enforced, Enabled Validate.

    Disabled NovalidateUne contrainte ayant l'tat Disabled Novalidate n'est pas vrifie, bien que la dfinition de lacontrainte existe toujours dans le dictionnaire de donnes. Les donnes de la table et les nouvellesdonnes entres ou mises jour peuvent ne pas tre conformes aux rgles dfinies par la contrainte. Ils'agit de l'tat normal d'une contrainte de traitement de transaction "online".

    Disabled ValidateLorsqu'une contrainte a cet tat, la modification des colonnes auxquelles s'applique la contrainte n'estpas autorise. En outre, l'index de la contrainte est supprim et la contrainte est dsactive.Pour une contrainte unique, cet tat permet de charger efficacement les donnes d'une table nonpartitionne dans une table partitionne en utilisant l'option EXCHANGE PARTITION de lacommande ALTER TABLE.

    Enabled Novalidate (Enforced)Cet tat de contrainte interdit l'entre des donnes qui violent les rgles de la contrainte. Toutefois, latable peut contenir des donnes non valides, c'est--dire qui violent la contrainte. En gnral, il s'agitd'un tat intermdiaire qui garantit que toutes les nouvelles donnes ont t vrifies avant d'treacceptes dans la table.

    Enabled ValidateLorsqu'une contrainte a cet tat, cela implique que toutes les donnes de la table sont conformes lacontrainte. En outre, cet tat empche d'entrer des donnes non valides dans la table. Il s'agit de l'tatnormal d'une contrainte de traitement de transaction "online".Lorsqu'une contrainte passe de l'tatDisabled l'tat Enabled Validate, la table est verrouille et la conformit de toutes les donnes de latable est vrifie. Cette situation peut provoquer le report de l'excution d'oprations LMD, telles quele chargement de donnes. Il est donc conseill de faire d'abord passer la contrainte de l'tatDisabled l'tat Enable Novalidate, puis l'tat Enable Validate .

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    29/68

    Gestion de donnes 29 / 68

    Contraintes diffresVous pouvez dfinir le point d'une transaction partir duquel une contrainte sera vrifie endfinissant la contrainte de manire approprie.

    Contraintes non diffres ou immdiatesLes contraintes non diffres, galement appeles contraintes immdiates, sont appliques la fin dechaque instruction LMD. Une violation de contrainte annule la transaction. Si une contrainte provoqueune action, telle qu'une suppression en cascade, on considre que l'action fait partie de l'instruction quil'a dclenche. Une contrainte dfinie comme ne pouvant tre diffre ne peut pas tre modifie pourtre applique la fin d'une transaction.

    Contraintes diffresLes contraintes diffres ne sont vrifies que lorsqu'une transaction est valide. Si une violation decontrainte est dtecte lors de la validation, l'ensemble de la transaction est annul. Ces contraintess'avrent trs utiles lorsque les lignes parent et les lignes enfant d'une relation de cl trangre sontentres simultanment, comme dans le cas d'un systme de traitement des commandes o les articles etla commande sont entrs simultanment.

    Pour qu'une contrainte puisse tre diffre, elle doit tre dfinie lors de sa cration comme pouvanttre diffre. Une contrainte dfinie comme pouvant tre diffre peut tre indique comme suit :

    Initially immediate : indique qu'il s'agit par dfaut d'une contrainte immdiate, sauf indicationcontraire explicite.

    Initially deferred : indique que, par dfaut, la contrainte ne doit tre applique qu' la fin de latransaction.

    Modifier l'application des contraintesBien que le mode d'application par dfaut d'une contrainte pouvant tre diffre soit dfini et stockdans le dictionnaire de donnes, les applications peuvent modifier la contrainte pour qu'elle fonctionne

    en diffr ou en immdiat. Pour cela, il faut utiliser la commande ALTER SESSION ou SETCONSTRAINT :

    ALTER SESSIONSET CONSTRAINT[S] ={IMMEDIATE|DEFERRED|DEFAULT}SET CONSTRAINT[S]{constraint [, constraint ]...|ALL }{IMMEDIATE|DEFERRED}

    Appliquer des contraintes de cl primaire et de cl unique

    Instruction DML Validation

    Vrification descontraintes nondiffres

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    Vrification descontraintesdiffres

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    30/68

    Gestion de donnes 30 / 68

    Les contraintes de cl primaire et de cl unique sont appliques en utilisant des index. Vous pouvezcontrler l'emplacement et le type de l'index utilis pour appliquer ces contraintes.Le serveur Oracle utilise la procdure suivante pour mettre en uvre les contraintes de cl primaire etde cl unique :

    Si la contrainte est dsactive, aucun index n'est ncessaire. Si la contrainte est active et que les colonnes de la contrainte forment la premire partie d'un

    index, l'index est utilis pour appliquer la contrainte. Si la contrainte est active et que les colonnes de la contrainte ne correspondent pas au dbut

    d'un index, un index portant le nom de la contrainte est cr selon les rgles suivantes : S'il s'agit d'une cl pouvant tre diffre, un index non unique est cr dans la colonne de la

    cl. S'il s'agit d'une cl ne pouvant pas tre diffre, un index unique est cr.

    Considration sur les cls trangres

    Action souhaite SolutionSupprimer la table mre Contraintes en cascadeTronquer la table mre Dsactiver ou supprimer la clef trangreSupprimer un tablespace contenant la table mre Utiliser la clause CASCADE CONSTRAINTSEviter de verrouiller la table enfant lorsdoprations DML dans la table mre

    Crer un index index sur la clef trangre

    Excuter des oprations DML dans la table enfant Mettre en ligne le tablespace contenant lindex dela clef parent

    Remarques sur l'utilisation des contraintes de clstrangres

    Vous devez tenir compte de plusieurs lments pour grer des tables dans une relation de cltrangre.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    31/68

    Gestion de donnes 31 / 68

    DDL impliquant la table mreLa cl trangre doit tre supprime avant la table mre. Utilisez la commande suivante pour excuterles deux actions l'aide d'une seule instruction :

    DROP TABLE table CASCADE CONSTRAINTS

    Vous ne pouvez pas tronquer la table mre sans supprimer ou dsactiver la cl trangre.

    Vous devez supprimer la cl trangre pour pouvoir supprimer le tablespace contenant la table mre.Pour ce faire, utilisez la commande suivante :

    DROP TABLESPACE tablespace INCLUDING CONTENTSCASCADE CONSTRAINTS

    Oprations DML sur les tables dans une relation de cltrangre

    Si l'option DELETE CASCADE n'est pas utilise lors de la suppression des lignes de la table mre, leserveur Oracle doit vrifier dans la table enfant qu'il n'y a pas de ligne contenant la cl trangrecorrespondante.De mme, la cl parent ne peut tre mise jour que si l'ancienne cl ne figure dans aucune ligneenfant . Si la cl trangre de la table enfant ne contient pas d'index, le serveur Oracle verrouillela table enfant et interdit les modifications pour garantir l'intgrit rfrentielle. Si la table contient unindex, l'intgrit rfrentielle est conserve en verrouillant les entres d'index et en vitant d'utiliserdes verrous plus restrictifs sur la table enfant. Si les deux tables doivent tre mises joursimultanment par des transactions diffrentes, crez un index dans les colonnes de la cl trangre.Lorsque les donnes sont insres ou que la colonne de la cl trangre de la table enfant est mise

    jour, le serveur Oracle vrifie l'index de la table mre utilise pour appliquer la cl rfrence. Par

    consquent, l'opration n'aboutit que si le tablespace contenant l'index est "online". Notez que letablespace contenant la table mre ne doit pas ncessairement tre "online" pour excuter desoprations DML sur la table enfant.Remarque : il est recommand de crer des index dans les colonnes de la cl trangre, car celaapporte d'autres avantages en matire de performances.

    2.2. Mettre en uvre des contraintes

    2.2.1. Dfinir les contraintes lors de la cration d'une table

    CREATE TABLE summit.employee(

    id NUMBER(7)CONSTRAINT employee_id_pk PRIMARY KEYDEFERRABLEUSING INDEX

    STORAGE(INITIAL 100K NEXT 100K)TABLESPACE indx,

    last_name VARCHAR2(25)CONSTRAINT employee_last_name_nn NOT NULL,

    dept_id NUMBER(7))TABLESPACE data;

    2.2.2. Dfinir des contraintes lors de la cration d'une table

    Vous pouvez dfinir une contrainte lorsque vous crez une table ou lorsque vous la modifiez.

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    32/68

    Gestion de donnes 32 / 68

    2.2.3. Syntaxe : contrainte de colonneLors de la cration de la table, vous pouvez crer la contrainte en utilisant la syntaxe suivante pourdfinir la colonne :

    column datatype [CONSTRAINT constraint]in_line_constraint[defer_spec]in_line_constraint :=={[NOT] NULL|PRIMARY KEY [USING INDEX index_clause]|UNIQUE [USING INDEX index_clause]|REFERENCES [schema.]table [(column)][ON DELETE CASCADE]|CHECK (condition)}defer_spec :==[NOT DEFERRABLE|DEFERRABLE [INITIALLY {IMMEDIATE|DEFERRED}]][DISABLE|ENABLE [VALIDATE|NOVALIDATE]]

    o CONSTRAINT identifie la contrainte d'intgrit par le nom constraint stock dans ledictionnaire de donnes,

    USING INDEX indique que les paramtres dfinis dans index-clause doivent treutiliss pour l'index auquel fait appel le serveur Oracle afin d'appliquerune contrainte de cl unique ou primaire (l'index porte le mme nomque la contrainte),

    DEFERRABLE indique que la vrification de la contrainte peut tre reporte la fin dela transaction l'aide de la commande SET CONSTRAINT(S),

    NOT DEFERRABLE indique que la contrainte est vrifie la fin de chaque instructionLMD (une contrainte NOT DEFERRABLEne peut pas tre diffre par les sessions ou par les transactions. NOT

    DEFERRABLE est utilis par dfaut).INITIALLYIMMEDIATE

    indique qu'au dbut de chaque transaction, la contrainte doit, pardfaut, tre vrifie la fin de chaque instruction LMD (si aucuneclause INITIALLY n'est dfinie, INITIALLY IMMEDIATE est utilispar dfaut),

    INITIALLYDEFERRED

    indique qu'il s'agit d'une contrainte DEFERRABLE et que, par dfaut,elle n'est vrifie qu' la fin de chaque transaction,

    DISABLE dsactive la contrainte d'intgrit (lorsqu'une contrainte d'intgrit estdsactive, le serveur Oracle ne l'applique pas).

    2.2.4. Syntaxe : contrainte de tableVous pouvez galement crer la contrainte de table l'aide de la syntaxe suivante :

    [CONSTRAINT constraint]out_of_line_constraintout_of_line_constraint :=={PRIMARY KEY (column [, column ]... )[USING INDEX index_clause]|UNIQUE (column [, column ]... )[USING INDEX index_clause]|FOREIGN KEY (column [, column ]... )REFERENCES [schema.]table [(column [, column ]... )][ON DELETE CASCADE]

    |CHECK (condition)}

    http://www.labo-oracle.com Ce document est la proprit de Supinfo et est soumis aux rgles de droits dauteurs

    [defer_spec]

  • 8/6/2019 (DRAFT)DBA - MODULE 4 (2003-08-07)2_0

    33/68

    Gestion de donnes 33 / 68

    Remarque :Il est recommand d'adopter une convention d'appellation standard pour les contraintes, notammentavec les contraintes CHECK, puisque vous pouvez crer plusieurs fois la mme avec des nomsdiffrents.Dans les cas suivants, vous devez utiliser des contraintes de table :

    lorsqu'une contrainte s'applique plusieurs colonnes, lorsqu'une table est modifie pour ajouter des contraintes autres que NOT NULL.

    2.2.5. Dfinir des contraintes aprs la cration d'une table :Exemple :

    ALTER TABLE summit.employeeADD(CONSTRAINT employee_dept_id_fk FOREIGN KEY(dept_id)REFERENCES summit.department(id)DEFERRABLE INITIALLY DEFERRED);

    Remarque : la clause EXCEPTIONS, dcrite dans la section "Activer les contraintes" de ce chapitre,peut tre utilise pour identifier les lignes qui violent une contrainte ajoute l'aide de la commandeALTER TABLE.

    2.2.6. Instructions de dfinition des contraintesTenez compte des points suivants pour dfinir des contraintes :

    Placez les index utiliss pour appliquer les contraintes de cl primaire et de cl unique dans untablespace diffrent de celui de la table. Pour ce faire, vous pouvez soit dfinir la clauseUSING INDEX, soit crer la table et l'index, puis modifier la table pour ajouter ou activer lacontrainte.

    Si les donnes sont souvent charges en masse dans une table, il est prfrable de dsactiverles contraintes, de charger les donnes, puis de ractiver les contraintes. Si vous utilisez unindex unique pour appliquer une contrainte de cl primaire ou de cl unique, cet index doittre supprim lorsque vous dsactivez la contrainte. Dans une telle situation, vous pouvezamliorer les performances en utilisant un index non unique pour appliquer des contraintes decl primaire ou de cl unique. Pour ce faire, crez une cl pouvant tre diffre, ou crezl'index avant de dfinir ou d'activer la cl.

    Si une table contient une cl trangre d'auto rfrencement, utilisez l'une des mthodessuivantes pour charger les donnes :

    o Dfinissez ou activez la cl trangre aprs le premier chargement de donnes.o Dfinissez la contrainte comme pouvant tre diffre. La seconde mthode s'avre trs

    utile lorsque des donnes sont charges frquemment.

    2.3. Grer les contraintes

    2.3.1. Activer les Contraintes

    Enable NOVALIDATE

    EnableNOVALIDATE

    Ne verrouille pas la table Les cls primaires doivent utiliser des index non uniques

    http://www.labo-oracle.com Ce documen