Le dictionnaire de données : premiers pas

Dans un certains nombres des scripts (index dans tablespace, lob dans tablespace, export de la structure Oracle, ...) touchant à l'ensemble d'un schéma ou de la base, le code boucle sur des vues du dictionnaire de données. Voici plus en détail le fonctionnement de celui-ci.

Oracle distingue parmis le dictionnaire de données les vues statiques des vues dynamiques.

Vues statiques


Vues des segments :
all_[objet] : Tous les objets accessibles par l'utilisateur
user_[objet] : Tous les objets du schema de l'utilisateur
dba_[objet] : Tous les objets de la base (accessible par sys)

Parmi les objets les plus courants :
tables
indexes
db_links
tablespaces
tab_columns
tab_cols
PART_TABLES
TAB_PARTITIONS
OBJECTS

Pour connaître plus en détail le contenu de ces vues, il existe la commande DESC (pas SQL mais implémentée sous sqlplus, toad, ...)

SQL> DESC all_tables;

De cette manière, nous pouvons interroger le dictionnaire pour obtenir :

- la liste de toutes les tables d'un schema :
Connecté en sysdba :
select table_name from dba_tables where owner='USEREX';

Connecté en USEREX :
select table_name from user_tables;

- la liste de toutes les tables accessibles par un utilisateur (utilisation de decode):
select decode(OWNER, 'USEREX', '', owner||'.') || table_name from all_tables order by decode(OWNER, 'USEREX', '', owner||'.'), table_name;

De la même manière, on listera tous les objets (ou tous les objets accessibles par un utilisateur précis) en interrogeant la vue statique adéquate.


Vues dynamiques


Il s'agit de vues communément appelées "v-dollar" (v$) car Oracle interroge différentes composantes (controlfile, dbf, ...) lui permettant d'afficher à un instant t des informations de la base de données.

Ainsi la vue v$instance comporte les informations sur l'instance (démarrée, montée, ... ; nom ; ...). De la même manière, il est parfois utile de connaître la version qui sera disponible par la vue v$version.
De la même manière que pour des vues classiques, il est possible de faire des jointures pour obtenir les informations voulues.

La particularité de certaines vues dynamique est qu'elle peuvent être disponible sans même avoir montée la base de données (v$version, v$instance) ou sans être ouverte (v$datafile). La disponibilité des v-dollars est directement liées à l'état de la base : v$datafile utilise le fichier de controle, la base doit donc être mount (elle monte les fichier de contrôle) :

SQL> shutdown
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> select * from v$instance;
select * from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available


SQL> startup nomount
ORACLE instance started.

Total System Global Area 146800640 bytes
Fixed Size 1257668 bytes
Variable Size 62918460 bytes
Database Buffers 79691776 bytes
Redo Buffers 2932736 bytes
SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION STARTUP_T STATUS PAR THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- --------- ------------ --- ---------- ------- ---------------
LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO EDITION
---------- --- ----------------- ------------------ --------- --- -------
1 XE
chmachine64
10.2.0.1.0 08-JUL-10 STARTED NO 0 STOPPED
ALLOWED NO ACTIVE UNKNOWN NORMAL NO XE


SQL> select * from v$datafile;
select * from v$datafile
*
ERROR at line 1:
ORA-01507: database not mounted


SQL> alter database mount;

Database altered.

SQL> select * from v$datafile;

FILE# CREATION_CHANGE# CREATION_ TS# RFILE# STATUS ENABLED
---------- ---------------- --------- ---------- ---------- ------- ----------
CHECKPOINT_CHANGE# CHECKPOIN UNRECOVERABLE_CHANGE# UNRECOVER LAST_CHANGE#

[ ... ]

SQL>




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories