6 -architecture physique

6.1 - Instance et processus

Instance ?
Rappel : Une instance est caractérisée par son identificateur : SID, généralement une variable ORACLE_SID positionnée dans l’environnement.

Une instance active en mémoire ce sont :
- des programmes de fond, services ou processus, qui assurent la maintenance du serveur de données et les entrées / sorties fichiers
- des process server (dédiés ou non à un utilisateur)
- une zone globale partagée : la SGA, qui contient essentiellement du cache de buffers
- des zones mémoires dédiées aux utilisateurs : les PGAs (Private Global Area)

instance

Schéma de l’architecture générale en mémoire

instance Oracle

La SGA

La SGA est essentiellement un cache mémoire qui contient des infos partagées de la base.

Voir l’article concernant ‘les zones mémoires


Les process de fond

Ils permettent de paralléliser et désynchroniser les accès multi-utilisateur à la base.
Nous allons lister les principaux :

DBWn Database Writer
Ecrit les données modifiées, du cache de données de la SGA vers les fichiers de données. On peut en avoir plusieurs (max 20) suivant la valeur du parametre DB_WRITER_PROCESSES

LGWR Log Writer
Ecrit les mises à jour, du cache de LOG de la SGA vers les ou le fichiers REDOLOG, suivant qu’on utilise des LOGs multiplexés ou non.

CKPT Checkpoint
Signale l’occurence d’un point de reprise (flush de tous les buffers de données), à DBWR

PMON Process Monitor
Libère les ressources et nettoie le cache en cas d’échec d’un process utilisateur

SMON System Monitor
Surveille les process de l’instance et assure les restaurations d’instance

RECO Recoverer
Gère les transactions distribuées (commit à 2 phases)

et optionnellement :

ARCn Archiver
sauvegarde le REDOLOG qui vient d’être terminé

Dnnn Dispatcher
Distribue les accès utilisateurs, vers les serveurs partagés, en architecture multiplexée (Shared Server)

Snnn Shared Server
Process utilisateurs partagé, en architecture multiplexée

CJQn Coordinateur de jobs batch
Jnnn Process fils dédiés aux Jobs

QMNn - Queue monitor
gestionnaire de file d’attente, pour l’option Oracle Advanced QUeuing

Pnnn Esclave d’execution Parallele
Exécution des requêtes parallèles. Le nb max de process est donné par : PARALLEL_MAX_SERVERS

LCKn Lock monitor
verrouillage des ressources utilisées par plusieurs instances
LMS Global cache service
Gestion des ressources inter-instances en architecture cluster (RAC)

note : sous Unix/Linux ces process correspondent à des process Unix, qui appartiennent à l’utilisateur Oracle et s’exécutent de manière ‘déconnectée’ (background).
On peut facilement en avoir la liste avec la commande suivante :
$> ps -ef |grep oracle

proc_ux

Sous Windows ils correspondent à des services

service_instance

service_instance.jpg

6.2 - Zones mémoire

La SGA

(System Global Area) est une zone mémoire partagée par tous les utilisateurs de la base, et utilisée comme cache par le code Oracle pour stocker des infos partagées.
Elle est allouée au démarrage de l’instance et libérée à l’arrêt de la base.

Sa taille et ses modalités d’utilisation, sont pilotées par des paramètres d’initialisation de la base.

Elle contient :

  • des données (lues ou écrites dans le fichier de données)
  • des données modifiées à journaliser
  • des instructions SQL
  • des meta-données (contenu du dictionnaire)
  • des programmes stockés (PLSQL ou java)

La SGA est allouée (sa taille dépend des paramètres d’inititialisation) au démarrage de l’instance. On voit ci-après les infos affichées lors du démarrage :

SQL> startup
ORACLE instance started.
Total System Global Area  790941696 bytes
Fixed Size            1302820 bytes
Variable Size          398462684 bytes
Database Buffers      385875968 bytes
Redo Buffers            5300224 bytes
Database mounted.
Database opened.

Les fichiers de données, mais aussi les redo logs ont par exemple une zone d’antémémoire spécifique en SGA : le (DATA) BUFFER CACHE et le LOG BUFFER CACHE.
Des informations résumées sur la SGA courante sont disponibles dans la vue V$SGA.

Les composant de la SGA

Des informations sur la taille et l’utilisation des différents composants de la SGA sont disponibles dans la vue V$SGAINFO du dictionnaire.

sga_em

sga11

Modes de gestion de taille de la SGA
Il existe deux modes de gestion de taille de la SGA, la gestion manuelle et la gestion automatique.
* dans le mode manuel,
c’est le DBA qui analyse le fonctionnement de la base et détermine quelle valeur affecter à chacun des paramètres de taille des composants.

* dans le mode automatique,
c’est Oracle qui calcule et ajuste automatiquement, en fonction de règles et de résultats statistiques, les tailles des différrents composant de la SGA et conséquemment sa taille globale.
Pour passer en mode automatique le paramètre SGA_TARGET doit être positionné à une valeur différente de 0, et les autres paramètres ajustable automatiquement mis à 0 ou à une valeur minimale.
Il est possible la taille cible de la SGA, grace à la vue V$SGA_TARGET_SIZE
ou en calculant la taille réellement utilisé à l’instant T :
SQL SELECT SUM(value) FROM v$SGA
- SELECT current_size FROM V$SGA_DYNAMIC_FREE_MEMORY

Paramétrage des principaux composants de la SGA
Le tableau suivant montre les différentes zones de la SGA et les paramètres d’initialisation associés.

COMPOSANT SGA PARAMETRE AJUSTABLE BUT
Large pool LARGE_POOL_SIZE O
Shared pool SHARED_POOL_SIZE O
Java pool JAVA_POOL_SIZE O
Cache de données DB_CACHE-SIZE (1) O
Cache de redolog DB_LOG_BUFFER N
Cache personalisé DB_(n)K_CACHE_SIZE N

6.3 - Les fichiers physiques

Il y a essentiellement deux catégories de fichiers ‘oracle’ :

- ceux correspondants au logiciel lui même (le SGBDR)

- ceux correspondant à la (aux) bases de données

Oracle recommande une structure de répertoire et de fichiers standards pour l’une et l’autre catégorie. Cette organisation standard est baptisée O.F.A (Oracle Flexible Architecture)

OFA Unix :

Pour la racine d’installation du logiciel ($ORACLE_HOME ou %ORACLE_HOME% :

/u01/app/oracle/product/10.1.0/db_1et pour les fichiers et leurs ’sauvegardes’ :

/oradata//dbf Tablespace datafiles.
/oradata//recovery1 Archive, Control, Flashback et Redo files.
/oradata//recovery2 Multiplexed: Archive, Control and Redo files.
/oradata//rman RMAN backup files.
/oradata//exports ExportDataPump files.

OFA Windows

ORACLE_HOME directories

oradata directories (for the physical files of the database)
admin directories (for database administration files).
dbump background process trace files
cdump core dump files
create database creation files
exp database export files
pfile initialization parameter file

background process trace files core dump files database creation files database export files initialization parameter files

Les principaux fichiers physique d’une base de données

… apparaissent ci-après

fic_physiques

le fichier de contrôle

Le control file contient une ‘cartographie’ de la base de données physique, et principalement les emplacements, noms et statuts des fichiers de données et des fichiers journaux.
Ce fichier est indispensable au montage et à l’ouverture de la base. De ce fait il est vivement conseillé d’en utiliser plusieurs versions simutanées ‘en miroir’.
Cela est possible grace au paramètre d’initialisation CONTROL_FILES
exemple
# Fichier init.ora
#
CONTROL_FILES = (disque1:CTL1.DBF, disque2:CTL2.DBF, disque2:CTL3.DBF)

Les fichiers de données

Les fichiers de données contiennent … les données proprement dites (essentiellement les tables et leurs lignes),
mais aussi les autres objets Oracle connexes aux tables : index, vues, synonymes, database links, procédures stockées, etc.).

note : Il aurait été plus judicieux de les appeler autrement, mais je traduis le terme Oracle ‘data file’…

Suivant les systèmes d’exploitation (ou la version d’Oracle) ils ont l’extension ‘.dbf’ ou ‘.ora’ ou ‘.dbs’
Ce qui n’est pas vraiment des données…dans les fichiers de données :

* Les Vues , synonymes, database links peuvent être considérés comme des données puisque “pointent” sur des données dans des tables.
* Les indexes et les clusters n’en sont évidemment pas, mais plutôt des “accélérateurs” de traitement
* Les procédures stockées (et fonctions et packages) non plus, mais des morceaux de programmes (PL.SQL) stockés dans la base.

et pire encore :

* les Images avant ou “rollback segments” qui sont des zones temporaires qui permettent de “revenir en arrière” sur des mises à jour, ou en d’autres termes d’annuler des transactions

Pourtant tout ce petit monde est stocké dans les data files !

Les fichiers journaux

Les fichiers journaux ou LOGFILES ou REDOLOG FILES ou REDOLOGS
servent à mémoriser toutes les modifications (validées ou non) faites sur la base, à des fins de reprise en cas de perte de données physiques.
Ils ont en général l’extension ‘.LOG’
La journalisation (assurée par le process LGWR) est un mécanisme permanent et obligatoire d’Oracle, pour assurer un minimum de sécurité des données.

Cycle des Logfiles

Les fichiers journaux appartiennent à des groupes, et sont remplis de manière séquentielle et circulaire (quand on a fini de remplir le log du groupe courant, on attaque le log du groupe suivant. Quand on arrive au dernier, on recommence à écrire dans le premier…).
C’est pour ça qu’il faut au minimum 2 (groupes de) redo log.
lorsqu’on boucle un cycle, on perd les premières journalisations qui ont été faites et l’on ne saura pas toujours restaurer la totalité des données en cas de problème. C’est pour ca qu’on peut “archiver” tout l’historique des redo logs, en utilisant l’archivage optionnel.
Par sécurité on peut multiplexer ou “mirrorer” l’écriture dans plusieurs redo log en même temps (sur des disques différents bien sur).
Dans ce cas on a plusieurs fichiers par groupe, et LGWR écrit tous les fichiers du groupe courant en même temps.

multiplexage des journaux (redo log files)

On a vu que l’écriture dans les redo logs files est circulaire.
Au minimum une base doit contenir 2 groupes de un fichier.

Pour permettre l’écriture simultanée de plusieurs redo logs et ainsi les sécuriser, on crée 2 fichiers ou plus par groupe.

exemple : le minimum, 2 groupes contenant chacun un fichier (pas de multiplexage donc…)

CREATE DATABASE test DATAFILE ‘d:dataoratest_system’ SIZE 10M
LOGFILE GROUP 1 (’d:dataoratest_log1a’) SIZE 500K,
GROUP 2 (’d:dataoratest_log2a’) SIZE 500K;

un peu mieux, LGWR va écrire simultanément dans les 2 fichiers du groupe courant

CREATE DATABASE test DATAFILE ‘d:dataoratest_system’ SIZE 10M
LOGFILE GROUP 1 (’d:dataoratest_log1a’, ‘e:dataoratest_log1b’) SIZE 500K,
GROUP 2 (’d:dataoratest_log2a’, ‘e:dataoratest_log2b’) SIZE 500K;

protection max : ceinture ET bretelles (on écrit dans 3 fichiers en même temps)

CREATE DATABASE test DATAFILE ‘d:dataoratest_system’ SIZE 10M
LOGFILE GROUP 1 (’d:dataoratest_log1a’, ‘e:dataoratest_log1b’ , ‘f:dataoratest_log1b’) SIZE 500K,
GROUP 2 (’d:dataoratest_log2a’, ‘e:dataoratest_log2b’ , ‘f:dataoratest_log1b’) SIZE 500K;

Si on veut augmenter le temps de rebouclage du cycle d’écriture, ou en d’autres termes augmenter le délai avant écrasement éventuel du contenu du 1er journal, on peut rajouter des groupes supplémentaires…