---
title: "PLSQL : Cours 2 : Objets Oracle"
...

\newpage{}

# PLSQL : Cours 2 : Objets Oracle

## Outils d'administration Oracle

- IOR : démarrage et l'arrêt d'un système Oracle
- SGI : suivi d'un système Oracle
- DOS : suivi de l'utilisation d'une système Oracle
- AIJ : journalisation
- CRT : définition des caractéristiques des terminaux
- OEM (Oracle Enterprise Manager) : Outil graphique d'Oracle

Deux utilisateurs particuliers existent : SYS et SYSTEM. Ils ont les privilèges du DBA (Database Administrator).

- SYS possède toutes les tables du dictionnaire de données
- SYSTEM possède toutes les vues du dictionnaire de données

## Dictionnaire de données

Le dictionnaire de données est une base de donnée qui contient toutes les structures et objets de la base Oracle : 

- Les utilisateurs et leurs privilèges
- Les tables, colonnes et leurs types
- Statistiques sur les tables et les index
- Structures de stockage de la base

Il est divisé en deux niveaux : 

- Niveau interne : contient toutes les tables
- Niveau externe : fournit de multiple vues sur ces tables pour offrir de l'info sur les objets et structures

La vue `DICT` ou `DICTIONNARY` contient toutes les vues du dictionnaire de données, qui se divisent en quatre catégories : 

- `USER_` : vues relatives aux objets appartenant à l'utilisateur
- `ALL_` : vues relatives aux objets accessibles par l'utilisateur
- `DBA_` : vues relatives à l'administration. Accessible uniquement par SYSTEM
- `V$` : vues dynamiques relatives au suivi des performances

Les vues du dictionnaire les plus notables sont : 

- `ALL_CATALOG` : tous les objets accessibles à l'utilisateur
- `USER_CATALOG` : tous les objets dont l'utilisateur à la propriété
- `ALL_COL_COMMENTS` : commentaires sur les attributs des objets
- `ALL_CONSTRAINTS`: Toutes les contraintes d'intégrité, y compris référentielles
- `ALL_TAB_PRIV`: droits sur les objets accessibles
- `ALL_USERS` : informations sur les utilisateurs de la base
- `USER_USERS` : informations sur l'utilisateur

## Les index

Un objet qui contient un entrée pour chaque valeur apparaissant dans une colonne indexée, pour un accès plus rapide.

Permet : 

- D'améliorer les performances de lecture
- Ne modifie pas les tables
- Ne modifie pas les requêtes

Pour créer un index explicitement : 

```sql
CREATE INDEX ...nom...
ON ...table...(...colonne...[,...colonne2...,];
```

> Les contraintes `PRIMARY KEY` et `UNIQUE` vont créer des index implicites

Créer un index ralenti la mise à jours mais accélère la lecture.

Les index sont utiles sur : 

- Les attributs utilisés comme critère de jointure
- Les attributs utilisés comme critère de sélection
- Les tables avec beaucoup d'enregistrements, quand la majorité des requêtes sélectionnent moins de 5% des lignes

Les index sont inutiles sur :

- Les attributs avec peu de valeurs différentes
- Les attributs souvent modifiés
- Les attributs souvent utilisés dans des expression
- Les petites tables

Index Bitmap : un type spécial d'index pour les colonnes qui n'ont pas beaucoup de valeurs différentes.

```sql
CREATE BITMAP ...nom...
ON ...table...(...colonne...[,...colonne2...,];
```

Les vues Oracle qui concernent les index sont : 

- `USER_INDEXES`
- `USER_IND_COLUMNS`
- `ALL_INDEXES`

## Les synonymes

Permet de créer un alias public d'un objet privé : 

```plsql
CREATE [PUBLIC] SYNONYM ...nom... FOR ...objet...;
```

## Les séquences

Objet qui permet de générer des entiers sans conflit / deadlocks. Utile pour faire des identifiant à auto incrément.

```plsql
CREATE SEQUENCE ...nom... [INCREMENT BY ...incrément...] [MAX VALUE ...max...] [MIN VALUE ...min...] CYCLE | NOCYCLE;
```

On peut autoriser une séquence à se répéter si elle atteint sa valeur max avec `CYCLE`;

On peut ensuite accèder dans un code PLSQL aux valeurs : 

- `NEXTVAL` : première ou suivante valeur
- `CURVAL` : valeur courante de la séquence 

## Les clusters

Les clusters sont des regroupements physiques de plusieurs tables autours d'attributs de jointures pour accélérer les performance. A utiliser seulement pour les jointures très fréquentes.

On utilise ces attributs comme clé de cluster.

Types : 

- Cluster à Index : indexation sur la clé du cluster
- Cluster à hachage : organisation suivante une fonction de hachage. Les enregistrement avec la même clé sont regroupés.

```plsql
CREATE CLUSTER ...nom... (...attribut... [,...attribut2...,])
INDEX | HASH IS ...nom cle hash...
```

## Comptes utilisateur

Créer un utilisateur : 

```plsql
CREATE USER JohnShepard
IDENTIFIED BY tali<3
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA 2M ON USERS
```

Modifier le mot de passe : 

```plsql
ALTER USER JohnShepard
IDENTIFIED BY normandy
```