1- Architecture oracle
a- Version
Entreprise edition
o Oracle real application clusters(RAC)
o Oracle partitioning
o Oracle advanced Security
o Oracle Diagnostics Pack, Oracle Tuning Pack
o Oracle OLAP et Oracle Advanced Analytics
o Oracle Real Application testing
o Oracle advanced compression
o Oracle multitenant
Standard edition:
o Toutes les fonctionnalités de base
o Nombre de processeur limité à 4
Personal edition
o Pour les developpeurs
o Meme fonctionnalité que l’entreprise
o Mono license
b- Instance
o Mémoire partagée
o Ensemble de processus
o Numéro d’identification: ORACLE SID
c- Base de données
o Ensemble de fichier physique
o Si non multitenant, une base de donnée = ouverte par une seule instance
Contrairement à MySQL ou Postgres, on crée une seule base de données avec
multiples schémas
DBW0 : Database writer
LGWR : log writer
PMON
SMON ARC0
Installation:
variable d’env: ORACLE_BASE : Répertoire d’installation des produits Oracle. Top level directory des
installations
ORACLE_HOME : Répertoire d’installation d’un produit Oracle.
Base de données :
Un ou plusieurs fichiers de données
Au minimum un fichier de contrôle
Au minimum deux groupes de fichier de journalisation
A un nom(à définir à l’installation)
Fichier de contrôle :
En format binaire
Nom de la base de données
Information sur l’emplacement des autres fichiers (données ou journalisation)
Information sur les points de reprise
Timestamp of database creation
The current log sequence number
Mise à jour
Si fichier corrompu la base de données n’est pas accessible ou ouvert, open(NOMOUNT)=>
toujours avoir des fichiers de sauvegarde car c’est un élèment important de la base de données
Fichier de contrôle = inchangable, seul Oracle a le droit de modifier
Fichier de paramètre :
Créé avant l’instance, se trouvant dedans le fichier de contrôle
Redo log ou fichier de journalisation :
Information sur toutes les modifications effectués au niveau de la base de donnée(historique
des modifications) ~ les opérations
Ecrits en groupe de manière circulaire (périodiquement ecrasé)
Minimum deux groupes avec chaque groupe ayant un ou plusieurs membre
Créé lors de la création de la base de données
Necessaire pour la récupération
Il est nécessaire d’activer le mécanisme d’archivage à cause de la manière circulaire
Entre en scène durant les transactions
Fichier de données :
Contient les données(tables, index)
Regroupés logiquement en tablespaces
Tablespace :
Unité logique de stockage(n’est pas physique)
SYSTEM et SYSAUX réservés pour ORACLE => sans donnée personnelle, à ne pas toucher
Découpés en bloc d’une taille de données(4ko,8ko,…)
Segment :
Appartient à un tablespace
Est constitué d’extension
Segment de table
Segment d’index
Segment d’annulation : permet d’annuler une transaction
Segment temporaire : pour le tri
Schéma = ensemble des objets qui appartient à un utilisateur
Objets: Vues, table, synonyme, index, sequence, pl/sql,....
Datafile = sans limitation, un data file peu avoir plusieurs schémas
C’est le dba qui organise l’emplacement des tablespaces, schémas, tables
Instance:
Zone de mémoire partagée System Global Area
Ensemble des processus arrière plan
Ensemble des processus serveur
Zone de mémoire partagée System Global Area
Partagé par différent processus de l’instance
Alloué au demarrage et libéré à l’arrêt
Configuré dans le fichier de paramètre(dimensionné)
Version <= 9, SGA à configurer à 0
Depuis version 9, redimensionable à chaud
Depuis version 10, quelque structure de la SGA = automatique
Plus la SGA est grande plus performance >>>
Shared pool
Library cache
Informations sur les odres SQL et PL/SQL
Texte, plan d’éxécution
Dictionary cache(à rechercher)
-Description des tables
-Droits des utilisateurs
-Meta données
Result cache
-seulement en entreprise édition
-stocke le résultat de requête SQL ou PL/SQL
Dimensionné par le mapramètre SHARED_POOL_SIZE
Oracle s’occupe de LibraryCache, dictionaryCache et ResultCache
Database buffer cache
Contient les blocs de données les plus utilisés recemment
o Bloc de table
o Bloc d’index
o Bloc d’annulation
Les blocs sont lus en mémoire par les processus serveurs et écrits dans les fichiers de données
par le ou les processus d’arrière-plan DBWn
Toute modification(INSERT, UPDATE,DELETE) d’un bloc s’effectue en mémoire et l’écriture sur
disque est différée
DBC = cache de donnée jouant le même role que la shared Pool mais pour les données
Données inaccessible sauf si chargé en DBC(lecture ou MAJ)
DBC ayant une taille finie, Oracle utilise algorithme LRU pour gérer mise en cache : manque
de place, oracle supprime les caches les moins utilisés récemment
REDO LOG BUFFER
Cache des historiques de modification avant ecriture dans fichier de journalisation
Pour chaque modif, une entrée est ecrite en mémoire(REDO Entry)
Ancienne valeur et nouvelle valeur = enregistrée
Processus d’arrière plan
Relatif aux instances
DBWn
Chargé d’écrire les blocs en cache DBC dans les fichiers de données
Ecriture multiblocs, en différés par rapport aux modifications en mémoire
Declenchement :
o Un processus serveur ne trouve pas une place dans le cache
o Periodiquement => faire en sorte d’avoir un point de reprise recent
o A chaque 3s
Pas de synchronisation entre la modification en mémoire et les données en disque dur
Log Writer(LGWR) :
Ecriture des redo log dans le fichier de journalisation
Ecrit sequentiellement dans les fichiers de journalisation
Déclenchement :
o Une transaction est validée(COMMIT)
o Redo Log Buffer est au tiers plein ou 1Mo de données
o Database writer veut ecrire des blocs modifiés non validés
o Un basculement de fichier de journalisation se suivent
o Un delai de 3s
Lors de validation => SCN
SMON
o Récupération de l’instance après un arrêt anormal
o Seulement au démarrage si la base a été arrêtée de manière anormal
o Roll forward : appliquer aux fichiers de données les modifications non enregistrées des
transactions validées
o Roll back : enlever des fichiers de données les modifications enregistrées des transactions non
validées
o Processus grace au Redo Log
PS : Deux façons de se connecter à oracle :
o Sans réseau, directement via console SQLPLUS
o Avec réseau, grace au couche Oracle Net
PMON
o Chargé du nettoyage lors du plantage d’un processus utilisateur=> éviter que les blocs de
données soitent locked
ARCn
o Archivage des fichiers de journalisations pleins
Processus serveur
o Chargé de traiter les requêtes des utilisateurs de charger les données dans le DBC
o Communique avec un client(remote ou local)
o Un processus serveur par utilisateur
PGA Program global Area
o Mémoire privée des différentes requêtes
o Processus serveur:
o SQL Work Area
o Information sur la session
o Information sur le traitement des requêtes en session
o Variable de session
A Partir de oracle 11, PGA est géré automatique par l’instance cad la taille
Paramètre : PGA_AGGREGATE_TARGET, limite soft
A partir de 12, PGA_AGGREGATE_LIMIT, limite soft
SGA PGA
Oracle 9W SGA dynamique Gestion automatique de la
PGA
Oracle 10g Gestion automatique
Oracle 11g
Gestion automatique de la mémoire partagée(ASMM)
o Si activée dimensionnement automatique des process suivant selon les besoins :
o Database buffer cache(DB_CACHE_SIZE)
o Shared pool (SHARED_POOL_SIZE_
o Large Pool
o Java pool
o Streams pool
o SGA fixe
o Les autres sont à faire à la main: Redo Log Buffer cache
o Pour activer :
o Definir le parameter SGA_TARGET
o Taille totale allouée à la SAG, SGA_MAX_SIZE
o Si définies les valeurs des paramètres dynamiques = minimum valeur
o Si SGA_TARGET = 0 alors les variables relatifs doivent être spécifiés
o SGA Fixe + Redo Log buffer = 1 granule
o 4 mo si SGA < 1GB sinon 16 mo
Gestion manuelle SGA/PGA
o OLTP(base d’exploitation, plus de mise à jour que de select) :
o SGA: 80%
o PGA: 20%
o Datawarehouse
o SGA:30-50%
o PGA:50-70%
PS: il est toujours important de surveiller le fonctionnement.
MEMORY_TARGET si on veut tous laisser à oracle
Fichier de paramètre
o Lu au démarrage de l’instance
o Contient les paramètres d’initialisation :
o Mémoire souhaitée aux différentes structures de la SGA
o Nom et emplacement des fichiers de contrôle
o Depuis version 9, possible d’utiliser un fichier de paramètres binaire(SPFILE)
Role d’un DBA
o Installation des produits
o Création/démarrage/arrêt des bases de données
o Gestion des structures de stockage
o Gestion des utilisateurs et leurs droits
o Sauvegarde et restauration
Compte Oracle d’administration
o SYS: propriétaire du dictionnaire de données(administrateur d’oracle)
o SYSTEM :
o Gestion de structures de stockage(datafile,tablespace)
o Gestion des utilisateurs
o SYSDBA : opération lourdes d’administration
o Création d’une base de données
o Arret et démarrage
o Création d’un fichier de paramètre serveur
o Récupérations
o ….
o SYSOPER tous sauf création d’une base de données
o SYSBACKUP : sauvegardes et récupération
Dictionnaire de données
o Ensemble de tables et de vues qui donnent des informations sur le contenu d’une base de
données
o Structure de stockage
o Utilisateurs et droits
o Objects(tables, vues, index, PL/SQL,..)
o Appartient à SYS
o Stocké dans le tablespace system
o Pour les modifier => CREATE, ALTER, DROP
o Chargé en mémoire, Dictionary cache de shared pool
o Vue statiques
o USER_% : informations sur les objets qui appartiennent à l’’utilisateur
o ALL_% : tous les objets accessibles par les utilisateurs
o DBA-% : tous les objets de la base de données
o Vue dynamique (commençant par v$ accessible par SYSDBA)
o V$- INSTANCE, DATABASE, SGA, SGA INFOR, PARAMETER
Processus de démarrage
o Instance démarrée(NOMOUNT) startup NOMOUNT
o Fichier de paramètre est lu et en mémoire
o SGA allouée et processus d’arrière-plan démarrés
o Il n’y a pas de base données associé
o Vues disponibles (seulement les vues dynamiques)
o Principalement utilisé lors de la création d’une nouvelle base de données
o Base montée (MOUNT) startup MOUNT
o Ouvrir les fichiers de contrôle à partir du FP
o Nom des fichiers de données et redo log
o La base de données est associée à l’instance
o N’est pas ouverte par utilisation normale
o Renommer ou déplacer un fichier de données ou redo log, activer archivelog, effectuer
une récupération de la base de données
o Base Ouverte(OPEN)
o Ouverture des fichiers de données et redo log
o Cohérence des données, en cas d’incohérence => SMON
o Si fichier introuvable=> dead
o Si dernier arret non propre => SMON
Exercices
Select status from v$instance ;
shutdown immediate;
startup nomount;
alter database mount;
alter database open;
Processus d’arrêt(shutdown)
o Normal : Oracle attend que les clients se deconnectent avant de fermer la base de
données
o Immediate : Oracle déconnecte tous les utilisateurs en annulant tous les transactions et
ferment la base de données
o Transactional : attend les transactions en cours => deconnection des utilisateurs et
fermeture de la base de données
o Abort : deconnection des utilisateurs sans rollback et ferme brutalement , sans effectuer
de point de synchronisation. Une récupération de l’instance sera nécessaire du prochain
démarrage
Création manuelle d’une base de données
o Installation instance
o Création d’un fichier de paramètre texte
o Création d’un service windows associé à l’instance
o Création de fichier de paramètre serveur à partir d’un fichier de paramètre texte
o Creation de répertoires différent
o Fichier de paramètre
o Db_name : nom de la base de données (128 caractères)
o DB_BLOCK_SIZE : taille de bloc standard
Transactionnel : petite requêtes de lecture et de mise à jour 5ko ou 8ko
Decisionnel : grosses requêtes de lecture => 16Ko ou 32Ko
o MEMORY_MAX_TARGET et MEMORY_TARGET
o OPEN_CURSORS:
Nombre maximum de curseurs qui peuvvent être ouverts
simultanément par une session
Valeur par défaut : 50
ORA-01000 : nombre maximum de curseurs ouverts dépassés
o PROCESSES
Nombre maximum de processus qui peuvent se connecter
simultanément à l’instance
Un pour chaque session utilisateur simultanée
o CONTROL_FILES :
Minimum 2, situé sur 2 disques différents
Règle de nommage(OFA) : [Link]
o REMOTE_LOGIN_PASSWORDFILE :
NONE : pas de mot de passe, seulement par les comptes systèmes
o Creation de service : oradim
o Création de fichier de paramètre serveur
o Positionner la variable ORACLE_SID(set ORACLE_SID=dbtest)
Oracle NET
Permet à des produits Oracle situés sur des machines différentes de communiquer
Rendre le réseau transaprent
Listener
o Processus d’écoute
o [Link] (%ORACLE_HOME%\network\admin)
o Par défaut protocol TCP, port 1521
Service de base de données
o Liste des services(SID) pour lesquels le Listener accepte la connextion
Résolution de nom
o [Link]
o [Link]
LSNTCL : gérer les processus
Gestion Instance
Paramètre d’initialisation
o Dynamique : modifiable par une session via SQL
o Statique : redemaragge necessaire
o V$PARAMETER :
ISSES_MODIFIABLE : true si modifiable au niveau session
ISSYS_ MODIFIABLE :
False si non modifiable au niveau système
Deferred : différé
Immediate : immédiatement
o Alter système / alter session
DEFERRED : futures sessions
SCOPE : MEMORY, SPFILE, BOTH
o Voir paramètre : show parameter
Fichier de paramètre serveur endommagé ou perdu
o Si instance démarée : CREATE SPFILE FROM MEMORY => créer les valeurs des
paramètres à partir de la mémoi
o SI un fichier de paramètre texte existe : CREATE SPFILE FROM PFILE
o Sinon le reastaurer à partir d’un point de sauvegarde
Valeur erronée empechant le démarrage
o Instance démarée avec errreur, modifier le paramètre via SQL ALTER SYSTEM(SET ou
RESET)
o Instance ne demarrant pas, créer un fichier de paramètre texte à partir du fichier de
paramètres serveur(CREATE PFILE FROM SPFILE)
Gestion fichiers de controles
Voir slide 81 pour les données dans le fichier de contrôle
Chaque base de données a son fichier de contrôle
Fichier binaire non modifiable
Multiplexage : 3 ou 4 sur disques différents
Tablespace
Informations sur les extensions libres et alloués = stockées dans des tables de dictionnaires de
données ou dans les entêtes du fichier de données
Big File = data file < 32 To
Small file = data file < 32 Go
SYSTEM = dictionnaire de données
SYSAUX = composant oracle
UNDO Tablespace = utilisé durant les transactions
TEMPORARY Tablespace
Voir les tablespaces : select tablespace_name from Dba_tablespaces ;
Voir toutes les tables dans un tablespace : select table_name from DBA_TABLES where
tablespace_name = $tablespace;
PS : col [colonne] from A[nombre de caractère] ;