© Richard CHBEIR
Objets d'une BDD Objets d'une BDD
Oracle Oracle
Table Donnée
Vue Séquence
Index Synonyme
Cluster
BDD Distribuée MetaBase
Commandes Oracle: http://www.ss64.com/ora/
Tables Tables
Est une unité de stockage élémentaire, composée de lignes et de colonnes
Le nom d'une table dans une BDD Oracle
Doit commencer par une lettre
Ne doit pas dépasser les 30 caractères
Ne peut contenir que les caractères A à Z, a à z, 0 à 9, _, $, et #
Ne doit pas porter le nom d'un autre objet appartenant au même utilisateur
Ne doit pas être un mot réservé
Tables Tables
Pour créer une table, vous devez avoir le privilège CREATE TABLE
Syntaxe
SQL> CREATE TABLE [Schema.]nom_table
(colonne1 datatype [Default expr] [Contraintes_Colonne] [,
colonne2 datatype [Default expr] [Contraintes_Colonne],
… ]
[Contraintes_Table]
);
Tables Tables
Attention
Pour accéder à une table d'un autre utilisateur, il faut précéder le nom de la table par le nom du propriétaire
Ex: SCOTT.EMP
La création d'une table fait appel à un ordre du LDD
⇒ sa validation est automatique
L'option DEFAULT
Permet de définir la valeur par défaut Ex:
– hiredate DATE DEFAULT SYSDATE
– Ename VARCHAR2(25) DEFAULT 'IUT Dijon'
Les valeurs autorisées sont Littéraux
Expression Fonctions SQL
Tables Tables
Exemple
Tables Tables
Création d'une table à partir d'une requête Syntaxe
ATTENTION
Le nombre de colonnes spécifiées doit correspondre au nombre des colonnes de la requête
La définition d'une colonne ne peut contenir que son nom et sa valeur par défaut
Si aucune colonne n'est spécifiée, la table aura les mêmes colonnes que celles de la requête
Les contraintes ne sont pas prises en compte
SQL> CREATE TABLE [Schema.]nom_table [colonne1(, Colonne2…)]
AS (requête_SQL);
Tables Tables
L'ordre ALTER TABLE
Permet de modifier la structure d'une table (Ajout d'une colonne, modification, définition d'une valeur par défaut, supprimer une colonne, etc.)
La modification d'une valeur par défaut ne s'appliquer qu'aux insertions ultérieures dans la table
Tables Tables
L'ordre ALTER TABLE
Syntaxe
Ex:
SQL> ALTER TABLE nom_table
[ADD|MODIFY|DROP|RENAME COLUMN] (colonne1 datatype [DEFAULT expr] [TO nouvelle_colonne] [CASCADE]
[, colonne2 …);
Tables Tables
L'ordre DROP TABLE
Permet de supprimer la structure, les index, et toutes les données d'une table
Les vues et les synonymes ne sont pas supprimées mais …
La transaction en instance est validée
La suppression d'une table ne peut pas être annulée
Syntaxe
SQL> DROP TABLE nom_table [CASCADE CONSTRAINTS];
Tables Tables
L'ordre DROP TABLE
Pour supprimer une table, l'utilisateur
Doit être le créateur
Il possède le privilège DROP ANY TABLE
Tables Tables
L'ordre SET UNUSED
Permet de désactiver une colonne Syntaxe
Vous pouvez faire après
SQL> ALTER TABLE nom_table SET UNUSED nom_colonne;
SQL> ALTER TABLE nom_table DROP UNUSED COLUMNS ;
Tables Tables
L'ordre RENAME
Permet de modifier le nom d'une table, d'une vue, d'une séquence, et d'un synonyme
Syntaxe
Vous devez être propriétaire de l'objet
SQL> RENAME nom_objet TO nouveau_Nom ;
Tables Tables
L'ordre TRUNCATE TABLE
Permet de vider une table et libérer l'espace de stockage utilisé par la table
Syntaxe
Cet ordre est irréversible
Vous pouvez utiliser l'ordre DELETE pour supprimer les lignes d'une table
Mais il ne libère pas l'espace de stockage
Vous devez être
Propriétaire
Utilisateur avec le privilège DELETE TABLE
SQL> TRUNCATE TABLE nom_table;
Tables Tables
L'ordre COMMENT ON
Permet d'ajouter des commentaire à une table Syntaxe
SQL> COMMENT ON [TABLE nom_table | COLUMN nom_table.nom_colonne]
IS 'commentaire';
Tables Tables
L'ordre COMMENT ON
Pour afficher les commentaire, on peut utiliser ALL_COL_COMMENTS
USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS
Tables Tables
Les contraintes
Contrôlent les règles de gestion dans une table
Empêchent la suppression d'une table lorsqu'il existe des dépendances
Tables Tables
Les contraintes
Types de contraintes valides
NOT NULL Spécifie que cette colonne ne doit pas contenir une valeur Null
UNIQUE Spécifie une colonne (ou une combinaison de colonnes) dont les valeurs doivent être uniques
PRIMARY KEY Identifie la clé primaire FOREIGN KEY Identifie la clé étrangère
CHECK Spécifie une condition qui doit être vraie
Tables Tables
Les contraintes
Sont nommées sous Oracle
Automatiquement sous le format SYS_Cn Manuellement par l'utilisateur
– Lors de la création (CREATE TABLE) – Après la création (ALTER TABLE)
Sont stockées dans la table
USER_CONSTRAINTS du dictionnaire de
données
Tables Tables
Les contraintes
Syntaxe
Exemple
SQL> CREATE TABLE EMP ( empno NUMBER(4), ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_emmno_pk PRIMARY KEY (EMPNO) );
SQL> [CONSTRAINT nom_c ]
{ [NOT] NULL | UNIQUE | PRIMARY KEY | FOREIGN KEY | REFERENCES [Schéma].table(colonne) [ON DELETE CASCADE] | CHECK (condition)}]
Tables Tables
Les contraintes
NOT NULL
Définit au niveau colonne Ex:
SQL> …
deptno NUMBER(7,2) NOT NULL );
SQL> …
deptno NUMBER(7,2) CONSTRAINT CT_deptno NOT NULL );
Tables Tables
Les contraintes
PRIMARY KEY
Définit :
SQL> CREATE TABLE EMP ( empno NUMBER(4), ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_emmno_pk PRIMARY KEY (EMPNO) );
Au niveau table
SQL> CREATE TABLE EMP (
empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL,
Au niveau colonne
Tables Tables
Les contraintes
FOREIGN KEY
Définit au niveau table ou colonne Associé à
– REFERENCES pour identifier la table et la colonne de la table maître
– ON DELETE CASCADE pour autoriser la suppression d'une ligne dans la table maître et des lignes
dépendantes dans la table détail
Tables Tables
Les contraintes
FOREIGN KEY
Exemple
SQL> CREATE TABLE EMP (
empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_deptno_KT FOREIGN KEY (deptno) REFERENCES DEPT (deptno));
Au niveau Table
Au niveau Colonne
SQL> CREATE TABLE EMP (
empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL REFERENCES DEPT (deptno));
Tables Tables
Les contraintes
CHECK
Définit au niveau table ou colonne Expression interdites
– CURRENTVAL, NEXTVAL
– SYSDATE, UID, USER, USERENV
SQL> CREATE TABLE EMP (
empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL,
Au niveau table
Tables Tables
Les contraintes
UNIQUE
Définit au niveau table ou colonne
SQL> CREATE TABLE EMP (
empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10),
…
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_nom_KT UNIQUE (ename) );
Au niveau table
SQL> CREATE TABLE EMP (
empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10) UNIQUE,
…
deptno NUMBER(7,2) NOT NULL,
Au niveau Colonne
Tables Tables
Les contraintes
Suppression d'une contrainte
Ex: Supprimer la contrainte PRIMARY KEY de la table DEPT, ainsi que la contrainte FOREIGN KEY définie sur la colonne DEPTNO de la table EMP
SQL> ALTER TABLE nom_table
DROP PRIMARY KEY | UNIQUE (colonne) |
CONSTRAINT nom_contrainte [CASCADE]
);
SQL> ALTER TABLE DEPT (
DROP PRIMARY KEY CASCADE );
Tables Tables
Les contraintes
Désactivation/Activation d'une contrainte
☺ On peut utiliser les clauses ENABLE et DISABLE dans CREATE TABLE et ALTER TABLE
SQL> ALTER TABLE nom_table
[DISABLE | ENABLE] CONSTRAINT nom_contrainte [CASCADE]
);
Tables Tables
Les contraintes
Comment afficher les contraintes sur une table
SQL> SELECT constraint_name, constraint_type, search_condition FROM user_constraints
WHERE table_name = 'EMP' );
Constraint_Name Constraint-type Search_Condition
SYS_C003042 C (Signifie CHECK) EMPNO is not Null SYS_C003044 U (Signifie Unique)
TEST_TT P (Signifie Primary Key)
Tables Tables
Les contraintes
Comment afficher les colonnes associées aux contraintes dans une table
SQL> SELECT constraint_name, column_name FROM user_cons_column
WHERE table_name = 'EMP' );
Constraint_Name Column Name
TEST_TT EMPNO
SYS_C003042 DEPTNO
Donn Donn é é es es
L'ordre INSERT
Permet d'ajouter de nouveaux enregistrements dans une table Syntaxe
Placez les valeurs de type caractère et date entre simples quotes
SQL> INSERT INTO nom_table [(colonne_1 [, colonne_2…)]
VALUES (Valeur_colonne_1 [, valeur_colonne_2…]
);
Donn Donn é é es es
L'ordre INSERT
Exemple
En précisant les colonnes concernées
Sans précision
SQL> INSERT INTO Emp (empno, ename, sal) VALUES (5555, 'BARTH', 2500);
SQL> INSERT INTO Emp
VALUES (5555, 'BARTH', NULL, NULL, SYSDATE, 2500, NULL, NULL);
Donn Donn é é es es
L'ordre INSERT
Exemple
Avec des variables saisies par l'utilisateur
SQL> INSERT INTO Emp (empno, ename, sal)
VALUES (&Num_Salarie, '&Nom_salarie', &salaire);
Donn Donn é é es es
L'ordre INSERT
Exemple
A partir d'une autre table
SQL> INSERT INTO Emp (empno, ename, sal)
SELECT empno, ename, sal FROM SCOTT.EMP WHERE job = 'manager';
Donn Donn é é es es
L'ordre UPDATE
Permet de modifier les enregistrements existants
A partir des valeurs
A partir d'une requête
SQL> UPDATE Nom_table
SET Colonne_1 = valeur_1 [, Colonne_2 = …]
[WHERE condition] ;
SQL> UPDATE Nom_table
SET (Colonne_1, Colonne_2, ) = (SELECT colonne_11, Colonne_22, …
FROM nom_table_2 WHERE condition)
Donn Donn é é es es
L'ordre UPDATE
Exemple
Modifier le poste et le n° de département de l'employé 7698 à l'identique de l'employé 7499
SQL> UPDATE Emp
SET (job, deptno) = (SELECT job, deptno
FROM Emp
WHERE empno = 7499) WHERE empno = 7698 ;
Donn Donn é é es es
L'ordre DELETE
Permet de supprimer les enregistrements d'une table
Attention, si vous omettez la clause WHERE, toutes les lignes sont supprimées
SQL> DELETE [FROM] nom_table [WHERE condition] ;
Transaction de BDD Transaction de BDD
Définition
Pourquoi ? Pourquoi ?
Problème de modification perdue
Pourquoi ? Pourquoi ?
Problème de modification temporaire
Pourquoi ? Pourquoi ?
Problème d’opération
Transaction de BDD Transaction de BDD
Définition
Une transaction est une unité indivisible de travail qui est soit :
Entièrement complétée Entièrement annulée
Pour l’intégrité de la BDD, le SGBD a besoin
de savoir quand une transaction commence,
se termine, est enregistrée ou annulée
Transaction de BDD Transaction de BDD
Définition
Est composée des éléments suivants
Ensemble d'ordres LMD effectuant une modification cohérente des données
Un ordre LDD Un ordre LCD
Commence à l'exécution du premier ordre SQL Se termine par l'un des événements suivants
COMMIT ou ROLLBACK
Exécution d'un ordre LDD ou LCD (Validation auto) Fin de session (Quit ou Exit dans SQL*Plus)
Panne de système ou de machine (RollBack automatique)
Transaction de BDD Transaction de BDD
Une transaction est lancée
SET TRANSACTION [ISOLATION LEVEL SERIALIZABLE]
[READ] [COMMITED] [ONLY]
Exécution SQL*Plus
Les ordres COMMIT et ROLLBACK
Garantissent la cohérence des données
Permettent d'afficher le résultat des modifications avant la validation
L'utilisateur voit uniquement le résultat de ses
modifications avant la validation mais pas les autres utilisateurs
Mais, on peut faire SELECT …. FOR UPDATE
Transaction de BDD Transaction de BDD
INSERT UPDATE INSERT DELETE
Commit SavePoint A SavePoint B
Transaction
ROLLBACK TO SavePoint B
ROLLBACK TO SavePoint A
ROLLBACK
Transaction de BDD Transaction de BDD
ETAT des données
Après COMMIT
Les modifications deviennent définitives L'état précédent des données est perdu
Tous les utilisateurs peuvent voir les modifications Les lignes verrouillées sont libérées
SQL> UPDATE Emp
SET (job, deptno) = (SELECT job, deptno
FROM Emp
WHERE empno = 7499) WHERE empno = 7698 ; 1 row modifié.
SQL> COMMIT;
Validation effectuée.
Transaction de BDD Transaction de BDD
ETAT des données
Après ROLLBACK
Les modifications sont annulées
L'état précédent des données est restauré Les lignes verrouillées sont libérées
Tous les savepoints sont effacés Exemples
SQL> DELETE Emp ;
17 ligne(s) supprimée(s).
SQL> SAVEPOINT suppression_Emp;
Savepoint Crée.
SQL> ROLLBACK TO Suppresion_Emp;
SQL> DELETE Emp ;
17 ligne(s) supprimée(s).
SQL> ROLLBACK;
Annulation (rollback) effectuée.
Transaction de BDD Transaction de BDD
ETAT des données
Si un ordre du LMD dans la transaction échoue, SEUL cet ordre sera annulé
Toutes les autres modifications sont conservées
L'utilisateur peut exécuter explicitement des
ordres COMMIT ou ROLLBACK
Vue Vue
Définition
Est une représentation logique de sous-
ensembles de données d'une ou de plusieurs tables
Permet de limiter l'accès à la BDD
Facilite la création de requêtes complexes Présente les mêmes données sous
différentes formes
Vue Vue
Deux types sont possibles :
Simple
Dérivée d'une seule table
Ne contient ni fonctions ni groupes de données Permet d'exécuter des opérations LMD
Complexe
Dérivée de plusieurs tables
Contient des fonctions et des groupes de données Ne permet pas toujours d'exécuter des opérations LMD
Vue Vue
Syntaxe
La requête
peut contenir une SELECT complexe Mais pas une clause ORDER BY
SQL> CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW Nom_Vue [(alias [, alias]…)]
AS requête
[WITH READ ONLY]
REPLACE Recrée la vue
FORCE Crée la vue même si les tables n'existent pas
WITH READ ONLY Garantit qu'aucune opération LMD ne peut être exécutée dans la vue
Vue Vue
Exemple
Sans alias
SQL> CREATE OR REPLACE VIEW EMP_DEPT_10
AS SELECT empno, ename, sal FROM Emp
WHERE deptno = 10;
Vue Vue
Exemple
Avec des alias
SQL> CREATE VIEW EMP_DEPT_10
AS SELECT empno Numero_Employe, ename Nom_Employe, sal Salaire FROM Emp
WHERE deptno = 10;
SQL> CREATE VIEW EMP_DEPT_10 (Numero_Employe, Nom_Employe, Salaire) AS SELECT empno, ename, sal
FROM Emp
WHERE deptno = 10;
Vue Vue
Règles d'exécution des ordres LMD
Vous ne pouvez pas
Supprimer un enregistrement si la vue contient
– Des fonctions de groupe – Une clause GROUP BY – Le mot-clé DISTINCT
Vue Vue
Règles d'exécution des ordres LMD
Vous ne pouvez pas
Modifier les données si la vue contient
– Des fonctions de groupe – Une clause GROUP BY – Le mot-clé DISTINCT
– Des colonnes définies par des expressions
Vue Vue
Règles d'exécution des ordres LMD
Vous ne pouvez pas
Ajouter de données si
– Des fonctions de groupe – Une clause GROUP BY – Le mot-clé DISTINCT
– Des colonnes définies par des expressions
– Les tables de base contiennent des colonnes NOT NULL non sélectionnées par la vue
Vue Vue
La table USER_VIEWS
Permet d'afficher le nom et la définition des vues de l'utilisateur
L'ordre SELECT est stocké dans une colonne de type LONG
Vue Vue
L'ordre DROP VIEW
Permet de supprimer une vue
N'entraîne pas la perte des données Exemple
SQL> DROP VIEW EMP_DEPT_10;
Vue supprimée.
S S é é quence quence
Définition
Permet de générer automatiquement des numéros uniques
Est un objet partageable entre plusieurs utilisateurs
Est utilisée en général pour créer une valeur de clé primaire
Remplace le code applicatif
Améliore les performances d'accès aux
valeurs (stockage en mémoire cache)
S S é é quence quence
Syntaxe
[CREATE | ALTER] SEQUENCE [schéma].Nom_séquence [INCREMENT BY entier]
[START WITH entier]
[MAXVALUE entier]
[MINVALUE entier]
[CYCLE | NOCYCLE]
[CACHE entier | NOCACHE]
définit l'intervalle d'incrémentation ou de - Première valeur de la séquence
Valeur minimale (par défaut 1 ou -1026) Valeur maximale (par défaut 1027 ou -1)
Revenir à la valeur initiale
allocation de séquences en mémoire (par défaut 20)
S S é é quence quence
Exemple
Créer un compteur DEPT_DEPTNO pour la clé primaire de la table DEPT
Créer un compteur pour la clé primaire de la table EMP
S S é é quence quence
La table USER_SEQUENCES
Contient les valeurs des séquences définies par l'utilisateur
S S é é quence quence
PseudoColonnes
NEXTVAL
Donne la prochaine valeur de la séquence.
Retourne une valeur unique même si elle est utilisée par plusieurs utilisateurs
CURRVAL
Renvoie la valeur courante de la séquence utilisée pour chacun des utilisateurs
S S é é quence quence
Utilisation
NEXTVAL
CURRVAL
SQL> INSERT INTO emp (empno, ename, sal)
VALUES (emp_empno.NEXTVAL, 'rich', 2000);
SQL> SELECT emp_empno.CURRVAL FROM dual;
S S é é quence quence
Utilisation
Pour utiliser la séquence d'un autre utilisateur, il faut préciser le nom du schéma
(schéma.nom_séquence)
Il faut avoir
les privilèges objet SELECT
Les privilèges Système SELECT ANY SEQUENCE
SQL> SELECT scott.emp_empno.CURRVAL FROM dual;
S S é é quence quence
Règles de modification
Etre propriétaires ou avoir le privilège Objet ALTER
ALTER SEQUENCE ne modifie que les numéros de séquence à venir
Vous devez supprimer la séquence puis la
recréer si vous voulez modifier le premier
numéro (START WITH)
S S é é quence quence
L'ordre DROP SEQUENCE
Permet de supprimer une séquence Syntaxe
SQL> DROP SEQUENCE Nom_séquence;
Index Index
Définition
Permet d'accélérer la recherche des données
par le biais d'un pointeur
Index Index
valeur de la clé ⇒ adresse de(s) l'enregistrement
Numéro de bloc
Numéro d'enregistrement
relatif
0
1
0 1 2 3 4
5 6 7 8 9
10 Cèdre en boule 10.99 40
90 60 50
Epinette bleue Pommier Erable argenté
Chêne
25.99 25.99 15.99 22.99
26.99 12.99 10.99 15.99
Poirier Sapin Herbe à puce
Génévrier
80 20 70 95
25.99 Catalpa
81
10 0 20 8 40 1 50 4 60 3 70 7 80 9 81 5 90 2 95 6
Index
Index Index
Problème
Je cherche l'employé numéro 21 dans une table
2 4 6 10 12 15 17 19 20 21 27 30 32 35 36 41 53
Coût de l'opération : 10 lectures
Index Index
Définition
A pour but de réduire les E/S sur disque grâce à un chemin d'accès calculé par :
B-tree (Arbre équilibré) Hachage
Bitmap
Est indépendant de la table qu'il indexe
Est crée automatiquement par Oracle ou
manuellement par l'utilisateur
Index Index
B-tree (2 valeurs max dans une cellule)
Avant
Après 1
Insertion de 1
Index Index
B-tree (2 valeurs max dans une cellule)
Avant
1
Après 1, 2
Insertion de 2
Index Index
B-tree (2 valeurs max dans une cellule)
Avant
1,2
2
1 3
Après
Insertion de 3
Index Index
B-tree (2 valeurs max dans une cellule)
2
1 3
Avant
2
1 3, 4
Après
Insertion de 4
Index Index
B-tree (2 valeurs max dans une cellule)
2
1 3, 4
Avant
2, 4
1 3 5
Après
Insertion de 5
Index Index
B-tree (5 valeurs max dans une cellule)
Je cherche la valeur 21
Coût de l'opération : 4 lectures ☺
Index Index
Hachage
f(x)
Valeur X
f(21)= 3
Numéro 21
Index Index
Bitmap
ROWID Nom Classe
4 AB G
5 AC G
6 BG V
7 JU G
8 KA S
Classe ROWID Valeur Bitmap
G S V
4-8 1 1 0 1 0 4-8 0 0 0 0 1 4-8 0 0 1 0 0
Cardinalité = 5
5
Index Index
Création
Automatique
Un index est crée par Oracle avec les contraintes
– PRIMARY KEY – UNIQUE
Manuelle
Vous pouvez créer des index dans des colonnes pour améliorer le temps d'accès
– Index sur l'âge ☺
Index Index
Création
Syntaxe
Exemple
Créer un index sur les salaires des employés
SQL> CREATE INDEX [UNIQUE | BITMAP] nom_index ON nom_table (colonne_1 [,colonne_2, …]);
Index Index
Conseils de création
La colonne doit être souvent utilisée dans WHERE ou une condition de jointure
La colonne contient un grand nombre de valeurs distinctes
La colonne contient un grand nombre de valeurs NULL
Deux ou plusieurs colonnes sont souvent utilisées conjointement dans WHERE (ou dans une jointure) La table est de grande taille
Index Index
Localisation dans le dictionnaire
USER_INDEXES
Contient les noms d'index et leur unicité
USER_IND_COLUMNS
Contient les noms d'index de tables et de colonne
Index Index
Suppression
Pour supprimer un index, il faut
Etre le propriétaire
Avoir le privilège DROP ANY INDEX
Syntaxe
SQL> DROP INDEX nom_index;
Synonymes Synonymes
Définition
Permet de renommer un objet dans le schéma (Table, Vue, séquence, etc.)
Elimine la contrainte de désigner l'objet avec son schéma
Syntaxe
Public donne l'accès à tous les utilisateurs
SQL> CREATE [PUBLIC] SYNONYM nom_synonyme FOR objet;
Synonymes Synonymes
Exemple
Suppression
SQL> CREATE PUBLIC SYNONYM ma_sequence FOR EMP_EMPNO;
SQL> DROP SYNONYM nom_synonyme;
Cluster Cluster
Définition
Est une organisation physique des données Consiste à regrouper physiquement (dans un même bloc disque) les lignes d'une ou
plusieurs tables ayant une caractéristique commune (une même valeur dans une ou plusieurs colonnes) constituant la clé du cluster
Est transparent à l'utilisateur
Cluster Cluster
Objectifs :
Accélérer la jointure selon la clé de cluster des tables regroupées
Accélérer la sélection des lignes d'une table ayant même valeur de clé (ces lignes sont regroupées physiquement)
Economiser de la place (chaque valeur de la
clé du cluster ne sera stockée qu'une seule
fois)
Cluster Cluster
Cluster Dept_Emp
Dept No EmpNo Ename Job … 7782 CLARK MANAGER
7839 KING PRESIDENT
7934 KING CLERK
20
… … …
bloc 10
Cluster Cluster
Création
Exemple
SQL> CREATE CLUSTER nom_cluster
(cle1 type1, cle2 type2, ...) [SIZE taille_du_bloc]
[COMPRESS | NOCOMPRESS] ;
SQL> CREATE CLUSTER personnel (DEPNO NUMBER)
SIZE 512
;
Cluster Cluster
Mise en place
Lors de la création d’une table
Exemple
SQL> CREATE TABLE nom_table
(nom_col1 TYPE1 NOT NULL , (nom_col2 TYPE2 NOT NULL ,
...)
CLUSTER NOM_CLUSTER (nom_coli, nom_colj...);
SQL> CREATE TABLE EMP
(ename VARCHAR2(6) NOT NULL , (...,
...)
CLUSTER personnel (DEPTNO);
SQL> CREATE TABLE DEPT (...,
...)
CLUSTER personnel (DEPTNO);
Cluster Cluster
Modification
Suppression
SQL> ALTER CLUSTER nom_cluster
(cle1 type1, cle2 type2, ...) [SIZE taille_du_bloc]
[COMPRESS | NOCOMPRESS] ;
SQL> DROP CLUSTER nom_cluster
[INCLUDING TABLES [CASCADE CONSTRAINTS]]
Cluster Cluster
Localisation dans le dictionnaire
USER_CLUSTERS
Contient les noms de cluster d’un utilisateur
ALL_CLUSTERS
Contient les noms de clusters accessible à l’utilisateur
BDD Distribu
BDD Distribu é é e e
Création d'un lien vers une autre BDD
Syntaxe
CREATE [SHARED][PUBLIC] DATABASE LINK Nom_Lien [CONNECT TO CURRENT_USER]
[USING 'Chaîne_de_connexion_ou_SID']
CREATE [SHARED][PUBLIC] DATABASE LINK Nom_Lien
[CONNECT TO Nom_utilisateur IDENTIFIED BY motpass]
[AUTHENTICATED BY Nom_utilisateur IDENTIFIED BY motpass]
[USING 'Chaîne_de_connexion_ou_SID']
Il faut avoir les droits
CREATE DATABASE LINK
CREATE PUBLIC DATABASE LINK
BDD Distribu
BDD Distribu é é e e
Création d'un lien vers une autre BDD
Exemple
SQL> CREATE DATABASE LINK lien_test
CONNECT TO scott IDENTIFIED BY "TIGER"
USING 'BDDIQ2_Dis'
BDD Distribu
BDD Distribu é é e e
Accès à une BDD
Une fois que la le lien est crée, vous pouvez accéder à la BDD en faisant suivre la table par @'nom du lien'
SQL> SELECT ename FROM emp@lien_test;
SQL> INSERT INTO emp@lien_test VALUES ….;
SQL> UPDATE emp@lien_test SET ename …;
SQL> SELECT ename FROM RC.emp@lien_test;
BDD Distribu
BDD Distribu é é e e
Suppression des liens vers d'autres BDD
Syntaxe
DROP [PUBLIC] DATABASE LINK link_name
BDD Distribu
BDD Distribu é é e e
Localisation dans le dictionnaire
DBA_DB_LINKS
Tous les liens
ALL_DB_LINKS
Liens accessibles par l'utilisateur
USER_DB_LINKS
Liens crées par l'utilisateur
Metabase Metabase
Est une BDD relationnelle contenant des informations sur :
La structure logique et physique
Les noms, définitions, allocation d'espace des objets des schémas
Les contraintes d'intégrité
Les utilisateurs et les privilèges d'accès
Metabase Metabase
Possède des vues
Accessibles à l'utilisateur 4 catégories
USER_xxx : contient des informations sur les objets de l'utilisateur courant
ALL_xxx : contient des informations sur les objets accessibles à tous les utilisateurs
DBA_xxx : contient des informations sur tous les objets. Elles sont accessibles aux DBA
V_$xxx : Suivi des performances
Metabase Metabase
Possède des vues
xxx_TABLES: informations sur les tables de l'utilisateur xxx Xxx_CATALOG : infos sur les tables, vues et synonymes Xxx_COL_COMMENTS : Commentaires sur colonnes Xxx_CONSTRAINTS : contraintes des Tables
Xxx_INDEXES : index des tables
Xxx_OBJECTS : tous les objets de l'utilisateur xxx Xxx_TAB_COLUMNS : colonnes appartenant à xxx
Xxx_TAB_COMMENTS : Commentaires sur tables et vues Xxx_TRIGGERS : infos sur les triggers
Xxx_USERS: infos sur les utilisateurs Xxx_VIEWS : Vues utilisateurs
Xxx_SEQUENCES : vues sur les séquences
xxx_TABLESPACES : listes des tablespaces accessibles par l’utilisateur
Metabase Metabase
Possède des vues
ALL_USERS : information sur tous les utilisateurs.
ALL_SEQUENCES : listes des séquences accessibles par l’utilisateur.
ALL_TABLES : liste des tables accessibles.
ALL_CONSTRAINTS : liste des contraintes définies sur les tables accessibles par l’utilisateur.
ALL_INDEXES : liste des index accessibles.
ALL_TAB_COLUMNS : liste des colonnes des tables accessibles.
ALL_VIEWS : vues accessibles par l’utilisateur.
ALL_SYNONYMS : liste des synonymes accessibles.
Metabase Metabase
Exemples d'interrogation
Le nom des tables d'un utilisateur
Le nom et le type de données des colonnes d'une table
La liste des vues accessibles à l'utilisateur
SQL> SELECT Table_Name FROM user_tables;
SQL> SELECT Column_Name, Data_Type FROM user_tab_columns
WHERE TABLE_NAME='EMP';
SQL> SELECT Table_Name FROM DICTIONARY
Metabase Metabase
Décrire les tables d'un utilisateur
SQL > SELECT * FROM user_tables;
Afficher les différents types d'objets appartenant à l'utilisateur
SQL> SELECT DISTINCT objet_type FROM user_objects
Afficher les table, les vues, les synonymes et les séquences d'un utilisateur
SQL> SELECT * FROM user_catalog;
SQL> SELECT * FROM cat;