- L'introduction qui dit tout !

l'intro de l'intro
le client serveur
la partie cliente
le serveur de données
ma première connexion et les problèmes éventuels !!!
le schéma de données
les droits élémentaires
les transactions

méta intro

Dans oracle il faut distinguer :

- la partie logicielle proprement dite : Le système de gestion de base de données (relationnel) ou SGBDR, qui permet d'accéder à ...
- la partie donnée (la ou les bases de données physiques qui contiennent les données effectives).
Ces 2 parties sont installées sur le même serveur et peuvent être accédées à travers le réseau par un grand nombre de poste clients simultanés.

Le répertoire d'install est référencé par la variable ORACLE_HOME et la base de données est identifiée par son nom ORACLE_SID. Ces 2 variables d'environnement (ou entrée de la base de registre sur NT) sont obligatoires pour utiliser Oracle, et qu'il retrouve ses petits (fichiers de config réseau, fichier de messages, exécutables, etc.)
L'installation du logiciel Oracle, se termine souvent par la création d'une base de données de test créé dans la foulée ou générée sous forme de script à lancer de manière différée.

Client-serveur

Outre un protocole réseau (en général TCP/IP), Oracle requiert SQL*Net entre le client et le serveur. Plus exactement SQL*Net (pour TCP/IP) installé sur le client et un serveur SQL*Net qui tourne (démon Unix ou Service NT) sur le serveur.

remarque ; pour le développement et les test on aura souvent client et serveur Oracle sur la même machine, mais les accès se feront quand même en client-serveur en réentrant (LOOPBACK) sur la machine.

La partie cliente

Oracle est en général installé sur C:\ORANT sur un poste Windows.

la partie cliente d'Oracle comprend essentiellement :
- l'outil SQL*Plus : inetrface simple permettant de faire du SQL et du PL/SQL,
- SQL*Net client et les outils et fichiers de configuration associés (essentiellement tnsnames.ora),
- des librairies standards (OCI) (qui peuvent être requise par des programmes tiers),
- de la documentation,
- des fichiers de support ou Required Support Files (fichiers de messages, de config, utilitaires, etc),
- éventuellement des outils d'administration (DBA Studio, Oracle Enterprise Manager)

Le serveur de données

Le serveur de données est constitué :
- d'une instance en mémoire (des programmes actifs d'accès à la base et une zone de données partagée : la SGA)
- et de la base de données physique (un ensemble de fichiers contenant les données et les structures internes d'Oracle) accédée par l'instance

>> détail de l'architecture Oracle sur le serveur


Ma première connexion

Pour se connecter à une base Oracle, il faut :
- du courage ;-)
- le logiciel serveur Oracle installé, (voir exemples d'install sur différents OS)
- un client Oracle (qui peut faire partie du logiciel installé sur le serveur ou être sur être sur une machine distincte),
- un serveur de donnée disponible dont on connait le nom (ALIAS SQL*Net),
- un compte utilisateur (et son mot de passe) avec lequel on va se connecter à la base de données
- un outil pour se connecter et faire une requête (en général SQL*Plus, dans ORACLE_HOME/bin ou dans le menu programme/oracle/outils de développement du menu démarrer de Windows)

en cas de problème

0) vérifier l'environnement Oracle (base de registre windows et/ou variables d'environnement)
- ORACLE_SID -> le nom LOCAL de la base (souvent le même que l'ALias SQL*Net)
- ORACLE_HOME -> le répertoire d'install Oracle
- PATH -> qui doit contenir ORACLE_HOME/bin

1) vérifier que le serveur de données est actif et accessible : on va vérifier que l'instance est active et qu'une base de donnée physique est ouverte)
si ce n'est pas le cas essayer de lancer l'instance seule sur le serveur sans ouvrir la base
- positionner si nécessaire les variables ORACLE_SID et ORACLE_HOME
- lancer le server manager (SVRMGRxxx)
puis taper
> CONNECT INTERNAL
> STARTUP NOMOUNT PFILE=...) et
si ca passe , résoudre le problème au niveau des fichiers / répertoires de la base, sinon c'est un problème de démarrage de service ou de process

pour les version récentes d'Oracle. Le 'connect internal' est obsolète utiliser alors
$sqlplus 'system as sysdba'
et un mot de passe vide !

2) vérifier que le serveur SQL*Net (tnslistener) est actif (service NT ou process Unix)

3) vérifier que le nom réseau de la base donné lors de la connexion (Alias SQL*Net) est correct et traduisible par Oracle (par la méthode de résolution de nom Oracle en place, (en général le fichier TNSNAMES.ORA mais pas toujours...)

pour s'affranchir des questions de résolutions de noms on peut tester une connexion directe à Oracle en lui fournissant EXPLICITEMENT la chaine de connexion complète (c'est à dire en se passant d'un Alias)


Schéma de données

Les données sont stockées sous forme relationnelle, c'est à dire pour simplifier sous forme de tables, constituées de colonnes typées. Toutes les données qui appartiennent à un même utilisateur (table mais aussi vues, indexs, procédures, synonymes, etc.) s'appellent un schéma.

>> plus d'infos sur les différent types d'objets d'Oracle

On accède au schéma (ou au compte utilisateur) en donnant le nom d'utilisateur et un mot de passe, via SQL*Plus par exemple.

Ainsi si je veux consulter ma table 'clients' :

sqlplus ddeleglise/didier@base_de_test
SQL> select * from clients;

ou créer ma table 'fournisseur' :

sqlplus ddeleglise/didier@base_de_test
SQL> create table fournisseurs
( no_fournisseur number(2), nom_fournisseur varchar(30),
tel varchar(10) );

Toutes les données et structures annexes d'un schéma sont décrites dans le dictionnaire de données en partie accessible à l'utilisateur.

Les droits élémentaires

Ces droits sont par défaut très simples :
un utilisateur qui a le droit de créer des strucures de données sur la base (à qui le DBA a donné le rôle 'RESOURCE' par exemple) a tous les droits sur SES données (DROP, DELETE, INSERT, UPDATE, SELECT).
Un utilisateur autre (connecté avec un autre nom/password) n'a AUCUN DROIT.

Pour référencer la table d'un autre utilisateur (s'il n'existe pas de synonyme comme raccourci) on préfixe le nom de la table du nom de l'utilisateur séparé par un '.'

sqlplus martin/jean@base_de_test
SQL> select * from ddeleglise.clients;
SQL>

dans ce cas contraire (si on omet le préfixe) Oracle dit bizarrement que la table ou la vue n'existe pas...

sqlplus martin/jean@base_de_test
SQL> select * from clients;
SQL>ERREUR a la ligne 1 :
ORA-00942: table or view does not exist

On peut (en tant que propriétaire ou créateur d'une donnée) donner des droits sur cette donnée :

SQL> CONNECT scott/tiger@la_base
SQL> GRANT SELECT ON mes_clients TO martin;
SQL> GRANT UPDATE ON mes_fournisseurs TO dupont;
SQL> CONNECT martin/wxdvgrs@la_base
SQL> SELECT * FROM scott.mes_clients;

remarque : Le DBA a tous les droits sur tous les objets de la base (mais à la maison il est comme les autres !)

>> détail des droits, privilèges et rôles Oracle

Les transactions

Un transaction est un ensemble cohérent de modifications faites sur les données. Une transaction est soit entièrement annulée (ordre SQL ROLLBACK) , soit entièrement validée (ordre SQL COMMIT).

Tant qu'il n'y a pas eu COMMIT, seul l'utilisateur courant voit ses mises à jour.

Une transaction débute lorsque l'on se connecte à la base (en début de session donc) ou lorsque la transaction précédente se termine.

.

remarque : la structure permettant de faire des retours en arrière (ROLLBACK) s'appelle un ROLLBACK SEGMENT et est gérée par le DBA.

Les COMMIT et ROLLBACK peuvent être implicites.
COMMIT : Lorsqu'on envoie un ordre SQL de création ou modification de table par exemple, ou plus généralement tout ordre du langage de définition de données.
ROLLBACK : en cas d'interruption anormale du traitement ou d'erreur.

>> plus d'infos sur les transactions et les rollback segments