2 - Administration d'Oracle (DBA)

2.1 - Qu’est ce qu’un DBA ?

D.B.A. = Data Base Administrator = Administrateur de bases de données.
Il est responsable du bon fonctionnement de toutes les bases de données de l‘entreprise (bases de développement, test, qualification, préproduction, infocentre et production).

dbman_head1

Les taches du DBA

  • Installer le logiciel, faire les mises à jour (patchs, changement de version du noyau mais aussi des autres produits)
  • Créer les bases de données physiques et gérer l’espace physique,
  • Gérer les utilisateurs et leurs droits d’accès,
  • Valider les schémas de données (cohérence, non redondance, optimisation),
  • crééer les objets du schéma : table, index, viues, …
  • Assurer la sécurité de la base (sauvegarde, restauration, confidentialité d’accès),
  • surveiller le système, gérer les ressources et optimiser les performances,
  • Faire les transferts de données de et vers d’autres systèmes,
  • contacter le support technique…ou Google

Son travail peut être assimilé à celui d’un responsable système, Oracle pouvant être perçu comme un ’sous’ système d’exploitation.

Les utilisateurs d’une base Oracle :

  • le dba lui même
  • le déve loppeur d’application
  • l’administrateur d’application
  • l’utilisateur final (normal ou infocentre / web)

Les interlocuteurs du DBA :

  • les développeurs
  • les administrateurs système (unix/linux, windows, etc.)
  • le support tecnique Oracle
  • le support technique interne
  • l’admlinistrateur sécurité (s’il existe)
  • et plus rarement …les utilisateurs

Les ‘privilèges’ DBA

Un DBA pour pouvoir travailler doit posséder un certain niveau de privilèges

  • au niveau OS
  • au niveau de la base de données

Sous Unix / Linux
le DBA doit avoir un compte Unix particulier, généralement baptisé Oracle, qui appartient à un groupe prédéfini Unix baptisé DBA. Les fichiers composant le logiciel et les process d’Oracle, appartiendront à cet utilisateur. Pour certaine étapes de l’installation (notamment création du user, et mise à jour des fichiers de démarrage, et des paramètres système) le DBA devra les privilèges ‘root’.
Sous Windows
le DBA devra appartenir au groupe administrateur, notamment pour démarrer les services Oracle sur le serveur.
‘Sous’ Oracle
le DBA devra avoir reçu l’ensemble de droit (prédéfini) Oracle baptisé rôle ‘DBA’. Ceci lui permettra notamment d’avoir une vision complète du référentiel de la base de données et d’accéder sans restrictions à toutes les données utilisateurs.
remarque : les utilisateurs standards SYS et SYSTEM de la base de données ont les droits DBA.

2.2 - Logiciels et outils d’administration

oralogo_small

En premier lieu il conviendra bien sûr d’installer le logiciel serveur Oracle.

Avant d’installer un de ces logiciels sur votre poste, lisez très attentivement le début de la doc d’installation (Quick Installation Guide principalement) et notamment les prérequis matériels et logiciels. Oracle est compatible avec beaucoup de métériels et d’OS mais pas avec toutes les versions…
Toute la doc au format PDF est disponible sur http://tahiti.oracle.com

Il vous faudra suivant le cas quelques GO sur disque et de 1 à quelques GO de mémoire pour que le logiciel s’installe et fonctionne.
Pour plus d’informations voir notre chapitre Installation…

Quelques versions de serveur intéressantes :

Oracle Database 10g Express

Une version light ET GRATUITE d’Oracle pour Linux et Windows. Totalement fonctionnelle et assez peu gourmande en ressources. Données limitées à 4GO! S’installe facilement, Idéale pour démarrer.
Toutes les infos sur Oracle Database 10g Express et le logiciel à télécharger, sont disponibles ici :
http://www.oracle.com/technology/products/database/xe/index.html

Oracle Database 10gR2 Enterprise Edition

La précédente version professionnelle standard du serveur de données version 10gR2. Stable et facile à installer sur Windows.
Toutes les infos (et le téléchargement) sont ici :
http://www.oracle.com/technology/products/database/oracle10g/index.html

Oracle 11g

La dernière version majeure d’Oracle stable. La 11gR1 s’installe relativement facilement  sur Linux Ubuntu (voir mon article).
La 11gR2 s’est sensiblement compliqué en terme d’architecture et est la dernière version de production disponible (au printemps 2011).

La console d’administration graphique : Oracle enterprise manager

Oracle est livré avec une console d’administration graphique : Oracle Enterprise Manager (OEM ou EM), accessible depuis un client léger, PC ou poste avec navigateur et TCP/IP.

Le port d’écoute par défaut est 5500, ou 1158 suivant les version
On peut vérifier cette information dans ORACLE_HOME/install/portlist.ini
exemple d’URL :

https://localhost:1158/em
http://localhost:5500/em

note : La base et le serveur Oracle Net (même en local!) doivent être démarrés, avant de lancer la console.

note : lorsque la base ou le serveur Oracle Net n’est pas démarrée on obtient un écran général d’information d’OEM, qui indique la non disponibilité de la base, mais pas de fenêtre de login…
OEM est attaché à une base particulière. On dit qu’elle fonctionne en STANDALONE, à la différence de consoles centralisées multi-bases comme Oracle Server Manager ou la GRID console.

OEM utilise cependant un référentiel dans la base, à travers 2 schémas SYSMAN et DBSNMP.

grid2exemple de page d’accueil de la console GRID

Gestion en mode commande (Unix ou Windows)

La commande emctl permet de gérer la console. Elle est de la forme
emctl dbconsole
option = start …démarre la console
= stop … l’arrête
= status… donne son statut

exemple sous Windows
C:ORACLE10GBIN> emctl status dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.1.0.2.0
Copyright (c) 1996, 2004 Oracle Corporation. All rights reserved.
http://DAREDEVIL:5500/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
——————————————————————
Logs are generated in directory C:oracleproduct10.1.0Db_1DAREDEVIL_ORCLsysman/log

Gestion via les services Windows

Sous Windows le service s’appelle OracleDBConsole et correspond à l’exécutable nmssvc.exe.
On peut gérer ce service avec l’icône service du groupe ‘Outils d’administration’ ou bien avec la commande NET :

c:> net start OracleOraDb10g_home1TNSListener
c:> net start OracleServiceORCL
c:> net start OracleDBConsoleorcl

service_instance

apercu des services sous Windows

note : sous XP notamment la gestion via les services peut s’avérer plus délicate. On préfera plutôt le mode commande…

Apercu de la console

Voir le document PDF Apercu de la console em10g

SQL et  PLSQL

Oracle 10g propose deux langages (plus ou moins) standards pour manipuler les données de la base : SQL et PLSQL

SQL (structured Query Language)
est LE langage standard et donc normalisé d’interrogation et de mise à jour de tous les SGBDRs.
Plus précisément il permet de créer / modifier des structures de données (LDD), mais aussi de consulter / interroger, modifier, supprimer les données contenues dans ces structures (LMD).

PL/SQL (Procedural language)
PL/SQL est un langage qui intègre SQL et permet de programmer de manière procédurale. Il est spécifique à Oracle. Pour SQL Server il existe par exemple un équivallent : TRANSAC SQL
Globalement, avec PL/SQL on aura à notre disposition un vrai langage de programmation structuré :
- gestion de variables, et typage avancé,
- structures conditionnelles (IF / THEN / ELSE),
- structures itératives (WHILE, FOR, LOOP),
- gestion d’erreurs sophitiquée (EXCEPTION),

Les interpréteurs (PL)SQL d’Oracle
Pour pouvoir utiliser ces langages, les DBAs mais aussi les développeurs ont besoin d’un outil client spécial : l’interpréteur.
Cet interpréteur permet :
- d’exécuter intéractivement des ordres SQL et PL/SQL,
- d’exécuter des scripts SQL et PL/SQL
- de personnaliser l’environnement et formater les résultats

Le DBA et le développeur ont à leur disposition toute une bibliothèque de procédures et fonctions PLSQL stockées prédéfinies.

Il en existe plusieurs centaines qui permettent par exemple de lire/écrire dans des fichiers, fairede l’HTML, envoyer des mails, faire des transferts de données, calculer des statistiques de performance, etc..

Vous pouvez voir ci-après : Un descriptif succint de tous les packages PLSQL disponibles pour la 11GR2

SQL*Plus

sqlplusest l’interpréteur le plus simple. Il existe en mode commande sous Unix/Linus ou MSDOS, et en mode semi-graphique sous Windows.

exemples de commandes :

$> sqlplus SYSTEM/XYZ
$> sqlplus SYSTEM/XYZ@ma_base_distante
$> sqlplus /nolog
$QL> connect SYS/XYZ AS SYSDBA

sous Windows : Menu Démarrer , Programmes , Orahome10g_db1/ Développement d’application / SQLPlus

iSQL*Plus
est le (grand) frère de SQL*Plus. Il est utilisable par un client léger, avec donc un simple navigateur sans besoin d’aucun environnement Oracle client.
Outre le formatage automatique des sorties au format HTML, iSQL*Plus présente le gros avantage de proposer un historique des commandes…

Il est démarré sur un serveur local ou distant, et accessible en http. Le port TCP/IP standard d’écoute est le 5560.

exemples de commande de contrôle

lancement Windows :
$ORACLE_HOME/bin/> isqlplussvc.exe -start
arrêt Windows :
$ORACLE_HOME/bin/> isqlplussvc.exe -stop
utilitaire Windows (appelle le précédent…) :
$ORACLE_HOME/bin/> isqlplusctl.bat
URL d’accès : http://mon_serveur:5560/isqlplus

Rappel des ports utilisés par les outils

voir ORACLE_HOME/install/portlist.ini

Par défaut :
Numéro de port HTTP iSQL*Plus =5560
Port HTTP de la console Enterprise Manager (orcl) = 1158
Port du Listenet TCP/IP : 1521

Attention !!! i*SqlPlus est OBSOLETE à partir de la V11 d’Oracle

SQL pour le DBA

Sans parler vraiment d’outils, le langage SQL (et la connaissance des meta données) sont très précieux pour le DBA.
Un certain nombre de commandes SQLPlus, voire quelques SELECT sont très pratiques pour le travail quotidien du DBA.
Ils peuvent être lancés sous SQLPlus, ISQLPLus , ou pour les SELECT sous n’importe quel Outil client et ce quelle que soit la plate forme.

SQL> — consulter les tables du DBA
SQL> SELECT * FROM DBA_%…
SQL> — rechercher des informations dans le dictionnaire
SQL> SELECT * FROM DICT WHERE TABLE_NAME LIKE ‘%…’

SQL> — connaître les colonnes d’une table
SQL> DESCRIBE nom_table
SQL> — envoyer les resultats d’un SELECT dans un fichier
SQL> SPOOL nom_fic | OFF

SQL> –formater l’affichage des champs LONG (DBA_VIEWS par exemple)
SQL> SET LONGWIDTH n
SQL> — formater l’affichage d’une colonne tronquée
SQL> COL nom_col FOR An

SQL> — executer un script SQL ou PLSQL
SQL> @nom_script_sql

SQL> — modifier les paramètres de la session courante
SQL> ALTER SESSION SET
SQL> — et notamment…prendre l’identité d’un utilisateur
SQL> ALTER SESSION SET CURRENT_SCHEMA = nom_schema
SQL> — verifier les erreurs d’un script ou d’une procédure stockée
SQL> SHOW ERRORS
ou
SQL> SELECT * FROM USER_ERRORS

SQL> — vérifier le USER courant
SQL> SHOW USER
SQL> — voir les paramètres de la base
SQL> SHOW PARAMETER nom_parametre
SQL> –modifier les paramètres dynamiques de la base
SQL> ALTER SYSTEM SET param = valeur
SQL> — ou l’état de la base…
SQL> ALTER DATABASE…

Lorsque le DBA veut automatiser des scripts, et les rendre dynamiques par rapport au référentiel il peut utiliser du SQL qui génère du SQL (META SQL)

Autres outils clients graphiques

Les outils suivants sont très pratiques pour le DBA et aussi pour les développeurs :

logo_sqldevOracle SQL developper, un outil de développement graphique, gratuit. Il vous permet de faire du SQL, du PL/SQL, de naviguer dans la base de données et de produire des rapports personnalisés.
Toutes les infos concernant ce produit, et le logiciel à télécharger, sont disponibles ici :
http://www.oracle.com/technology/products/database/sql_developer/index.html

toad-ext-50x50

TOAD (le crapaud) de chez QUEST Software, un outil très puissant aussi bien pour les développeurs que pour les administraters.
http://www.quest.com/toad/

2.3 - Typologie des utilisateurs et des bases

Les différentes catégories d’utilisateurs

db

En pratique il existe 5 catégories d’utilisateurs, qui utilisent différents outils en fonction de leur profil et du SGBD ciblé. Ceci est résumé dans le tableau suivant :

Type d’utilisateur profil outil ex Oracle exemple MySQL
Utilisateur final non informaticien application client serveur ou web, ou progiciel, ou appli bureautique, outil d’aide à la décision Excel, appli maison, Oarcle application, B.O appli web
utilisateur final évolué non infrmaticien éclairé client QBE (Query by Example) MS QUery PHPMyAdmin
Développeur Technicien ou ingénieur Bloc note, environnement de developpement, Atelier de développement TOAD, designer, webdb textpad
Administrateur application Utilisateur final hiérarchiquement privilégié l’application elle même, via un accès privilégié NA NA
DBA Technicien ou ingénieur langage SQL, console d’admin texte, console graphique, console web sqlplus, OEM CS ou web, TOAD, PhpMyAdmin

outre le moteur du SGBD lui même, les différents fournisseurs proposent toute une suite de logiciels connexes permettant ces intéractions, qui représente une part non négligeable de leur activité.


Les différentes catégories de base de données

La base de données, à l’instar d’un programme classique s’inscrit dans un cycle de vie, et diiférentes occurences de la base permettent de ‘coller’ aux différentes phases du projet.

On distingue principalement :

  • la phase de conception, qui produira le modèle conceptuel et le modèle logique de la base
  • la phase de développement, qui verra la création et l’évolution de la base de développement (Base n°1)
  • les tests, avec une base de test ou de préproduction (Base n°2) qui permettra outre de tester les programmes de manière approfondie, de tester la montée en charge et les performances en terme de volume de données, et de concurrence d’accès
  • la phase de production / exploitation et de maintenance, avec une base de production (Base n°3), initialisée avec des données réelles et dimensionnée de manière adéquate

Le DBA sera fréquemment amené à transférer des données d’une base à une autre :

  • de la base de developpement à la base de Test, pour effectuer les dits tests. Un ensemble de données cohérentes (jeu d’essai) est alors nécessaire, ce qui n’est pas toujours facile à obtenir vu la complexité croissante des applications et peut nécessiter des outils spécifiques d’extraction de données
  • de la base de test à la base de production, pour la mise en explotation réelle
  • de la base de production vers la base de test ou de développement, pour être sûr d’avoir des données cohérentes et pertinentes (puisque réelles).

Ce dernier tranfert de données est VIVEMENT déconseillé, d’abord parce qu’il manipule des volumes de données inutiles (la totalité des données réelles) et ensuite car il offre d’importantes failles de sécurité, les systèmes de test et de développement étant par définition moins protégés que les systèmes en production…

note : le passage de la base de test à la base de production, nécesite de réinitialiser la base, avec les scripts SQL originaux (création et chargement initial). Le passage au serveur réel peut s’avérer délicat et contraignant (environnement matériel et logiciel différent)

2.4 - DBA s et privilèges

DBA et privilèges système

La fonction de DBA, nécessite des privilèges au niveau Système d’exploitation :
- pour l’installation,
- la maintenance,
- la gestion et l’exécution de batchs, de scripts (SQL ou shell),
- les sauvegardes / restauration

Sur Unix / Linux :
Il existe un user Unix nommé ‘oracle’ et un groupe associé nommé ‘dba’.
Tous les fichiers Oracle, appartiennent à l’utilisateur Oracle.

On peut (doit ?) crééer autant d’utilisateur Unix que de DBAs dans l’entreprise ; dba1, dba2, appartenant au groupe ‘dba’.Ceci permet d’éviter les recouvrements et d’avoir une meilleure tracabilité.
On évitera de travailler connecté en tant qu’utilisateur ‘oracle’ pour éviter toute erreur de manipulation des fichiers Oracle.

Note : les programmes et processus, qui constituent le coeur d’Oracle, s’executent en tant qu’oracle, et ont conséquemment les droits nécessaires pour écrire dans les fichiers de données, journaux, archives, etc.

Le DBA et le super utilisateur ‘root’ :
lors de l’installation, il est nécessaire d’écrire dans certains répertoires protégés du système (/etc par exemple) ou d’exécuter certaines taches privilégiées.
Cependant l’installation se fait bien en tant qu’Oracle, et l’installeur demande simplement le privilège root pendant la période nécessaire à ces opérations.
Il execute 2 scripts autonomes root.sh et rootpre.sh, en tant que root.
Il retourne ensuite en mode ‘normal’.
En production les no de ports TCP/IP utilisés par Oracle 10g sont tous > 1024, et ne nécessitent donc pas de privilèges particuliers.

Sur Windows :

Le principe est plus simple. L’install se fait en général en tant qu’administrateur système.

DBAs et privilèges d’exploitation / production

Certains ‘administrateurs’ : les opérateurs et techniciens d’exploitation, ou ‘exploitants’ pour faire court, n’ont pas forcément besoin d’un niveau de privilège DBA.

Les opérations concernés sont par exemple :

  • les démarrage / arrêts,
  • les sauvegardes / restaurations,
  • la planification et l’exécution de batch

Oracle fournit 2 niveaux de privilèges, qui peuvent être assimilés à des niveaux de connexion, qui satisfont ces besoins : les privilèges d’exploitation ‘SYSDBA’ et ‘SYSOPER’.
Comme tout accès privilégié il s’acquiert via un processus d’identification / authentification.

Authentification locale au niveau du système d’exploitation

C’est une forme d’authentification externe, en ce sens que ce n’est pas Oracle qui contrôle la connexion grace à son référentiel interne. On se connecte directement (via telnet ou ssh par exemple) au système qui héberge le serveur de données, puis à la base locale, sans plus faire intervenir le réseau.
Ce type de connexion originale ne nécessite pas d’identifiant ni de mot de passe Oracle, mais d’être un utilisateur privilégié au niveau O.S.

note : un utilisateur quelconque, non privilégié de la base, peut aussi être défini avec une authentificatin externe, et se connecter localement avec une commande du type : sqlplus /

On peut dire que dans ce cas la sécrité est déportée au niveau O.S. et qu’Oracle accorde sa ‘confiance’ aux mécanismes d’identification / authentification de ce dernier.

exemples de connexion avec le client SQL standard :

# connexion 'normale'
$> sqlplus scott/tiger
# connexion avec authentification externe
$> sqlplus / as sysdba
$> sqlplus / as sysoper

Pour obtenir un ‘privilège’ d’exploitation il suffit d’appartenir au groupe utilisateur correspondant au niveau système :

privilège  gpe unix    groupe windows
---------  --------    --------------
SYSDBA     dba         ORA_DBA
SYSOPER    oper        ORA_OPER

Ces groupes sont créés lors de l’installation, et un administrateur système en ‘hérite’ automatiquement

note : Le ‘CONNECT INTERNAL’ des versions précédentes est définitivement obsolète et a été remplacé par le ‘CONNECT SYS AS SYSDBA. Parallèlement il n’est plus possible de se connecter SYS ‘tout court’ sans préciser ‘AS SYSDBA’.

Authentification distante au niveau du système d’exploitation

Elle présente les mêmes caratéristiques que précédemment sauf que la base est située sur une machine distante de la connexion système courante.

La syntaxe de connexion devient donc :

$>  sqlplus /@nom_base_distante AS SYSDBA (ou SYSOPER)

Un paramètre d’initialisation de la base : REMOTE_OS_AUTJENTICATION=TRUE autorise cette fonctionnalité.

Note importante : il est vivement conseillé pour des raisons de sécurité d’invalider cette possibilité.

Authentification via fichier de mots de passe
Dans ce cas de figure, les privilèges seront controlés à partir d’un fichier de mot de passe cryptés local.
exemple de création du fichier :
$ ORAPWD FILE=monfic PASSWORD=monpasse ENTRIES=100
avec
PASSWORD : le mot de passe de SYS
ENTRIES : le nb mas d’utilisateurs référencables dans le fichier.

on peut ensuite créer un utilisateur TOTO avec mot de passe TUTU et que le DBA lui donne le privilège oracle (et non pas système cette fois) nécessaire : SYSDBA ou SYSOPER :

$> sqlplus / AS SYSDBA
SQL> CREATE USER TOTO IDENTIFIED BY TUTU;
SQL> GRANT CREATE SESSION TO TOTO; -- qu'il ait le droit de se connecter quand même...
$ GRANT SYSDBA TO TOTO ; --et lui donner le privilège d'exploitation qui va bien

note : le paramètre d’initialisation REMOTE_LOGIN_PASSWORDFILE doit être à EXCLUSIVE (c’est le défaut) pour pouvoir utiliser et modifier le password file

DBAs et privilèges Oracle

Un utilisateur Oracle (déclaré au sein de la base, à distinguer de l’utilisateur au niveau OS) peut être DBA.
Il a tous les ‘privilèges système’ AU SEIN DE LA BASE, et le droit de les transmettre (ADMIN OPTION)
Grace à quoi, il peut essentiellement :

  • consulter et mettre à jour (SELECT, UPDATE, INSERT, DELETE) toutes les données utilisateur de la base
  • créer, modifier des structures de données utilisateur (CREATE, ALTER, DROP) n’importe ou (ANY TABLESPACE)
  • gérer des utilisateurs et des droits (CREATE/DROP USER, GRANT, REVOKE)
  • consulter la totalité du dictionnaire
  • exécuter des ordres d’administration purs (CREATE DATABASE, DATAFILE, TABLESPACE)

Il y a 2 utilisateurs privilégiés prédéfinis, SYS et SYSTEM (dont les mots de passe sont définis à la création de la base ou par ‘ORAPWD’)
Ils sont tous les 2 DBA, mais SYS est plus privilégié en ce sens qu’il est propriétaire des tables et des vues du dictionnaire.

Il existe un ensemble de privilèges (ROLE) prédéfinis nommés ‘DBA’ qui donne les privilèges nécessaires à un DBA.
Après avoir créé un utilisateur ‘normal’ il suffit de lui donner ce rôle pour en faire un DBA :

SQL> GRANT DBA TO dupont;

note : Il existe un autre rôle prédéfini, parmi quelques dizaines, qui est également intéressant c’est le role ‘SELECT_CATALOG_ROLE’. Il est souvent utilisé par des progiciels ou applicatifs utilisant Oracle pour récupérer des méta-données.

Pour plus d’infos sur les droits, rôles et privilèges voir les chapitres correspondants.