Académique Documents
Professionnel Documents
Culture Documents
bases de données
oracle
Prérequis et Objectifs
• Prérequis
• Modèle relationnel (structure, contraintes)
• Connaitre le langage SQL
• Commande de base sur linux
• Objectifs
• Connaître les tâches d’un DBA
• Connaître les concepts et points clés de l’architecture Oracle
• Savoir effectuer les principales tâches sous Oracle
2
Les métiers autour des bases de
données
• Administrateur System
• Responsable sécurité
• Administrateur réseaux
• Développeurs d’application
• Administrateurs d’application
• Data scientiste et analyste
• Utilisateurs : modifier les données, créer des rapports
• Cloud Manager et administrateur
3
Métier de DBA
• Installer les logiciels Oracle
• un serveur, des applications clientes,
• En fonction de l’OS et des paramètres systèmes
• Si fonctionnement en réseau : composants réseaux d’Oracle
• Planifier et créer des bases de données
• Gérer les utilisateurs et leurs droits
• Gérer l’espace et implanter les schémas des données
• Assurer la sécurité, l’intégrité et la pérennité des données
• Effectuer des réglages pour optimiser les performances
• Géré les disaster recovery (savegarde et restauration)
• Conseiller les équipes applicatives
4
Les differents types de licences
• Full use
• NUP Named User Plus
5
Les Différents produits et gammes
d’Oracle
Oracle commercialise 3 types d'Edition de produit SGBD.
6
Les Différents produits et gammes
d’Oracle
• Edition Entreprise (EE)
• Comporte toutes les fonctionnalités et destinée aux
applications critiques
• Elle est la seule édition qui comporte des options
• RAC
• Partitionnement
• Advanced Security
• Diagonstics / Tuning pack
• Multitenant (CDB/PDB) à plus de 4 PDB
• Etc ..
• Elle est relativement couteuse.
7
Architecture de Haute disponibilitée
• SEHA remplace RAC en sur la version 19C en SE2
• RAC disponible seulement en Entreprise Edition
8
Notion de Client / Serveur
• Un processus utilisateur est crée quand un utilisateur
lance une application cliente
• Une connexion va être créée avec l’instance Oracle,
l’utilisateur va ouvrir une session
• Un processus serveur va analyser et exécuter les
requetés, retourner les données
• Mode dédié : un processus serveur pour un processus client
• Mode partagé : les clients partagent un groupe de processus
serveurs évite les processus serveurs inactifs
9
Architecture OFA (Optimal Flexible
Architecture)
10
Architecture OFA (Optimal Flexible Architecture)
• OFA est un ensemble de recommandations sur l’arborescence et le nommage des
fichiers du serveur, destinées à faciliter l’administration des produits Oracle
• Un des points les plus intéressants du standard OFA est de clairement séparer le
produit Oracle, les fichiers relatifs à l’administration et les fichiers des bases de
données, en tenant compte de la possibilité d’avoir plusieurs versions d’Oracle et/ou
plusieurs bases sur le serveur.
11
Architecture OFA (Optimal Flexible Architecture)
En dehors du répertoire Oracle Home, le répertoire Oracle Base est
destiné à contenir sept autres répertoires
• admin pour les fichiers d’administration des bases de données ;
• audit pour les fichiers d’audit
• cfgtoollogs pour les fichiers journaux des assistants de
configuration
• checkpoints utilisé pendant l’installation pour enregistrer des
étapes intermédiaires (vidé une fois l’installation terminée) ;
• diag pour le Référentiel de diagnostic automatique (ADR
- Automatic Diagnostic Repository)
• fast_recovery_area pour la zone de récupération rapide (fast
recovery area)
• oradata pour les fichiers des bases de données.
• /u02/app/oradata/CAMPUS1
• /u02/app/oradata/CAMPUS2
12
13
Installation du serveur oracle
14
Vérification des prérequis logiciel
• Pour chaque distribution, un certain nombre de packages doivent être installés
(dans leur dernière version
• Installation des packages en fonction de l’OS
• Installer un environnement X
• Configuration du noyau
• Créer le compte oracle et les diffèrent groupe (oinstall/dba/sysoper/sysbackup)
• groupadd oinstall
• groupadd dba
• useradd -g oinstall -G dba oracle
•Rebooter le serveur pour valider les modifications ou (sysctl -p [fichier] )
15
Installation du serveur oracle
17
Vérification des prérequis matériels
Les exigences matérielles sont les suivantes :
• 1 Go de mémoire physique minimum (2 Go ou plus recommandé).
• Espace swap : 1,5 fois la mémoire physique si cette dernière fait moins de 2 Go
ou égal à la mémoire physique si cette dernière est comprise entre 2 Go et 16
Go, 16 Go au-delà.
• Environ 7,5 Go d’espace disque pour les produits Oracle, mais Oracle
recommande de prévoir de l’espace supplémentaire (jusqu’à 100 Go !) pour
l’application de futurs patches.
18
Installation des binaires oracle
L’installation des binaires se fait en mode graphique Oracle
Universal Installer (OUI)
19
Installation
• Lancer le runinstaller
20
• Dans notre exemple nous allons en premier installer les binaire
seul ensuite la base.
21
• Choix du type d’instance (Single/RAC)
22
• Choix du produit en fonction de la licence acheté
23
24
25
• Vérification des près requis. Si tous est OK on a la fenêtre ci-
dessous
• Dans le cas contraire il faut corriger et relancer la vérification
jusqu’à ce que tous soient OK
26
27
28
29
Fin d’installation des binaires
Une fois les 2 scripts exécuter un on valide le OK
31
Les différentes catégories de base de
données
• On distingue deux types de bases de données
• transactionnelles" (ou OLTP pour OnLine Transaction Processing)
• les bases de données "décisionnelles" (ou DSS pour Decision Support
Systems).
• Une base de données transactionnelle se caractérise par :
• une forte activité de mise à jour (INSERT/UPDATE), généralement sous la
forme de petites transactions ;
• un nombre plus ou moins important d’utilisateurs concurrents
• une exigence de temps de réponse court.
• Une base de données décisionnelle se caractérise par :
• une forte activité d’interrogation (SELECT) généralement sur des gros
volumes de données (cette activité peut être interactive et/ou batch)
• une mise à jour périodique sous forme de batch avec des gros traitements de
mise à jour
32
Architectures d’une base de
données
• Deux architectures possibles:
• client/serveur : des applications clientes envoient les requetés
SQL et PL/SQL à un serveur.
• Multiplexer : des serveurs d’application allègent la charge du
serveur en réalisant certains accès pour les clients.
• Un serveur de bases de données est compose :
• d’une instance = plusieurs processus et une zone de mémoire
• d’une base de données = ensemble de fichiers physiques
• de plusieurs schémas, assimilés à des utilisateurs
• Dans le cas de clusters de machines, Oracle peut
associer plusieurs instance à une même base de
données.
33
Architectures
Notions d’instance et de base de données
34
La base de données
• Une base de données est constituée de :
• un ou plusieurs fichiers de données contenant les données
proprement dites ;
• au minimum un fichier de contrôle contenant des informations
de contrôle sur la base de données ;
• au minimum deux groupes de fichiers de journalisation
enregistrant toutes les modifications apportées à la base.
35
•Chaque base de données porte un nom défini lors de sa création
• ce nom est défini par le paramètre d’initialisation DB_NAME du fichier de
paramètres (CAMPUS par exemple).
•l’emplacement de la base de données sur le réseau peut être défini grâce
au paramètre DB_DOMAIN (campus-lome.tg par exemple).
•La base de données peut alors être aussi identifiée par son nom global
défini par DB_NAME.DB_DOMAIN (CAMPUS.campus-lome.tg par exemple)
36
L’instance
• Une instance est constituée :
• d’une zone de mémoire partagée appelée System Global Area (SGA) ;
• d’un ensemble de processus d’arrière-plan (background process) ayant
chacun un rôle bien précis ;
• d’un ensemble de processus serveur (server process) chargés de traiter
les requêtes des utilisateurs.
37
Les Mémoires
• La SGA (Système Global Area)
• Zone partagée par tous les utilisateurs de la base de données
• Allouée au démarrage de l’instance en mémoire principale :
doit-être la plus grosse possible.
• Son but est d’´économiser les E/S. Elle contient :
• le cache de données (database buffer cache) :
• le cache de reprise (redo log buffer) : log des changements récents
• le cache d’exécution partagé (shared pool) pour les requetés SQL et
PL/SQl.
• Contient le dictionnaire de données en cache.
39
La PGA (Program Global Area)
La PGA est la mémoire privée des différents processus
• Pour un processus serveur, la PGA contient :
• une zone de travail SQL (SQL work area) allouée dynamiquement pour certaines
opérations (tri par exemple) ;
• des informations sur la session ;
• des informations sur le traitement des requêtes de la session ;
• les variables de session.
• La PGA totale, allouée à tous les processus serveur, est appelée PGA
agrégée (aggregated PGA) ou PGA de l’instance (instance PGA).
• Dans une configuration serveur partagé, une partie de la PGA est en
fait stockée dans la SGA, dans la Large Pool, ou, à défaut, dans
la Shared Pool.
40
Gestion automatique de la mémoire partagée
• Lorsque la gestion automatique de la mémoire partagée (ASMM
- Automatic Shared Memory Management) est activée, les
composantes suivantes de la SGA sont dimensionnées
automatiquement en:
• Fonction de leurs besoins respectifs
• Et adaptées dynamiquement en fonction de la charge du système
41
Gestion manuelle de la mémoire
• Pour une gestion manuelle et une répartition de la mémoire entre
la SGA et la PGA, Oracle donne les indications suivantes.
• Pour les systèmes transactionnels (OLTP) :
• SGA : environ 80% de la mémoire disponible pour l’instance
• PGA : environ 20% de la mémoire disponible pour l’instance
• Pour les systèmes décisionnels (DSS) :
• SGA : entre 30% et 50% de la mémoire disponible pour l’instance
• PGA : entre 50% et 70% de la mémoire disponible pour l’instance
• Pour un serveur qui a 4Go
• Réserver 20 % de la mémoire OS (soit 819M ~ 1Go)
• Attribuer 80 % pour SGA ( soit SGA_MAX_SIZE= 2464M)
• 20% pour PGA (PGA_AGGREGATE_TARGET = 608M)
42
Les Processus serveur de la base
• DBWn et BWnn
• chargés d’écrire les blocs modifiés du Database Buffer Cache dans les fichiers de données
• CKPT (Chekpoint)
• Pour assurer la synchronisation et la cohérence des données
• SMON (System Monitor)
• Effectue la restauration lors de reprise après panne
• Nettoie les segments temporaires
• Fusionne certains extents libres contiguë
• PMON (Process Monitor)
• Pour gérer les pannes des processus clients
• RECO (Recover)
• Pour les reprises après panne de transactions distribuées
• ARCn (Archiver)
• Pour l’archivage, lorsqu’il est active la base pourra être restauré dans le passée
• Il y a d’autre processus
• Non décrit
43
Organisation logique du stockage
44
Organisation logique du stockage
• Les fichiers de données sont découpés en blocs d’une taille
donnée (4 Ko, 8 Ko...).
• L’espace occupé par un objet dans un tablespace est désigné par
le terme générique de segment. Il y a quatre types principaux
de segments :
• les segments de table : espace occupé par les tables ;
• les segments d’index : espace occupé par les index ;
• les segments d’annulation : espace temporaire utilisé pour stocker les
informations permettant d’annuler une transaction ;
• les segments temporaires : espace temporaire utilisé notamment lors
d’un tri.
• Un segment appartient à un tablespace et est constitué
d’extensions (extents).
• Une extension est un ensemble de blocs contigus dans un
fichier de données
45
Organisation logique du stockage
• La notion de "bloc Oracle" est fondamentale
• Un bloc Oracle est la plus petite unité d’entrée/sortie utilisée par Oracle.
• Tous les fichiers de données sont organisés en blocs Oracle et ont donc une
taille multiple de la taille du bloc
46
Notion de Schema
• Le terme schéma désigne l’ensemble des objets qui
appartiennent à un utilisateur.
• Les principaux types d’objets sont les suivants :
• Table
• Vue
• Synonyme
• Index
• Séquence
• Programme PL/SQL (procédure, fonction, package, trigger)
47
Le dictionnaire de Données
• Ensemble de tables et de vues qui donnent des informations sur le
contenu d’une base de données
• les structures de stockage ;
• les utilisateurs et les droits ;
• les objets (tables, vues, index, procédures, fonctions, etc.).
• etc.
• Appartient à SYS et est stocké dans le tablespace SYSTEM
• Chargé en mémoire dans la partie Dictionary Cache de la Shared Pool et est
utilisé en interne
49
Création d’une base de donnée
• Deux possibilités
• Utiliser l’assistant Oracle : graphique (DBCA)
• Créer manuellement à l’aide de scripts
• Prérequis :
• Avoir installer le binaire d’oracle
• Avoir les droits suffisants au niveau du system d’exploitation
• La mémoire principale et espace disque doit être suffisante
50
Les Etapes de création
• Le processus complet de création d’une nouvelle base de
données pour une application comporte les grandes
étapes suivantes :
• Conception du modèle physique
• Définir tous les objets (Oracle) de l’application : tables, contraintes d’intégrité (clés
primaires/uniques/étrangères)
• Définir la volumétrie
• Création de la base proprement dite (Voir ce chapitre)
• Création des structures de stockage adaptées
• Création du compte
• Oracle qui va contenir les objets
• Des comptes utilisateurs ou applicatifs et leurs droits
51
• Création des utilisateurs finaux de l’application
• Leur donner des droits adaptés sur les objets de l’application
• Configurer l’accès à la base
• Création des objets de l’application dans ce compte
Oracle
• Les tables, indexes, package ….
• Sauvegarde de la base
• Mettre en place une politique de sauvegarde en fonction de la criticité
52
Les principaux paramètres
d’initialisation
Il y a plus de 400 paramètres documentés
• DB_NAME: Nom de la base (8 caractères). Généralement DB_NAME est
égal au nom de l’instance (ORACLE_SID)
• DB_DOMAIN: Localisation logique de la base sur le réseau (jusqu’à 128
caractères)
53
• DB_BLOCK_SIZE: Taille de bloc "standard" en octets, utilisée par défaut
pour les fichiers de données des tablespaces et pour l’organisation du
cache de données (buffer cache)
valeur par defaut 8K autres valeurs (2K,4K 16K,32K)
• MEMORY_MAX_TARGET: Taille maximum de la mémoire utilisable par
l’instance, il est égale MERORY_TARGET s’il n’est pas spécifié
• MEMORY_TARGET: Taille de la mémoire allouée à l’instance.
• Si ce paramètre a une valeur différente de zéro, la gestion automatique de la mémoire
(Automatic Memory Management - AMM) est activée.
• Dans ce cas, Oracle dimensionne automatiquement la SGA et la PGA en fonction de leurs
besoins respectifs et de la charge du système
• SGA_MAX_SIZE: Taille maximale de la SGA .
• Il a la valeur de MEMORY_MAX_TARGET s’il est défini ou la taille de la SGA au démarrage
de l’instance
• SGA_TARGET: Taille souhaitée pour la SGA
• Si la gestion automatique de la mémoire est activée (MEMORY_TARGET est différent de
zéro)
• s’il n’est pas spécifié, la valeur 0 lui est attribuée et la taille de la SGA est ajustée en
interne
• SHARED_POOL_SIZE: Taille en octets de la Shared Pool
• La taille de la Shared Pool est plutôt liée au nombre total de requêtes différé
54
• JAVA_POOL_SIZE: Taille en octets de la Java Pool
• Si le réglage automatique de la mémoire partagée est activé
(SGA_TARGET ou MEMORY_TARGET différent de zéro)
• LARGE_POOL_SIZE: Taille en octets de la Large Pool
• LOG_BUFFER:Taille en octets du Redo Log Buffer
• Valeur par défaut : 2 Mo par groupe de 16 CPU avec un maximum de 4 Mo. La valeur par
défaut est généralement suffisant
55
• OPEN_CURSORS: Détermine le nombre maximum de curseurs qui peuvent
être ouverts simultanément par une session. Valeur par défaut : 50
• PROCESSES: Nombre maximum de processus qui peuvent se connecter
simultanément à l’instance. Nombre de session= 1,5*nb_process + 22
• SHARED_SERVERS: Spécifie le nombre de processus serveur partagés qui
sont créés lorsque l’instance démarre
• NLS_LANGUAGE: Langage par défaut de l’instance
• utilisé pour les messages,
• les noms de jour et de mois et le tri.
• Détermine aussi la valeur des paramètres NLS_DATE_LANGUAGE et NLS_SORT.
• NLS_TERRITORY
• :NLS_TERRITORY:Territoire par défaut de l’instance
• utilisé pour la numérotation des jours et des semaines.
• Détermine aussi la valeur par défaut des formats de date
• Des séparateurs numériques et des symboles monétaires.
56
• UNDO_MANAGEMENT: Mode de gestion souhaité pour les segments
d’annulation
• UNDO_TABLESPACE: Nom du tablespace d’annulation à utiliser par défaut
lors du démarrage de l’instance
• DB_RECOVERY_FILE_DEST: Emplacement de la zone de récupération rapide
(fast recovery area)
• DB_RECOVERY_FILE_DEST_SIZE: Taille maximale autorisée pour l’ensemble
des fichiers stockés dans la zone de récupération rapide
• LOG_ARCHIVE_DEST: Spécifie une ou plusieurs destinations pour
l’archivage des fichiers de journalisation
• En SE: LOG_ARCHIVE_DEST et LOG_ARCHIVE_DUPLEX_DES entre 1 à 2 fichiers
• En EE: LOG_ARCHIVE_DEST_n entre 1 à 31 fichiers
• LOG_ARCHIVE_FORMAT: Définit le format du nom des archives des fichiers
de journalisation
• Doit inclure les variables %T, %S et %R
• donnant respectivement le numéro de l’instance (thread), le numéro de séquence du
fichier de journalisation et un identifiant d’incarnation
• REMOTE_LOGIN_PASSWORDFILE: 3 valeurs possible: NONE / SHARE
/EXCLUSIVE(defaut)
• LOCAL_LISTENER:Adresse réseau du processus d’écoute auprès duquel
l’instance doit s’enregistrer automatiquement 57
Exemple de fichier PFILE(pfile.ora)
audit_file_dest=‘/dba/traces/CAMPUS/adump‘
audit_trail='db'
compatible='19.0.0'
control_files=‘/dba/sys/CAMPUS/control01.ctl', ‘/dba/data/CAMPUS/control02.ctl‘
db_block_size=8192
db_name='CAMPUS'
diagnostic_dest=‘/dba/traces'
dispatchers='(PROTOCOL=TCP)(SERVICE=CAMPUSXDB)‘
local_listener='LISTENER_CAMPUS‘
memory_target=818m
nls_language='FRENCH'
nls_territory='FRANCE‘
open_cursors=300
processes=300
remote_login_passwordfile='EXCLUSIVE‘
undo_tablespace='UNDOTBS1'
58
Prérequis pour créer un base
manuellement
• Configurer le fichier pfile.ora avec les paramétrés
choisie au préalable
• exporter SID de la base
• export $ORACLE_BASE
• Export ORACLE_SID=CAMPUS
• Export ORACLE_HOME
• Se connecter en
• sqlplus / as sysdba
• Startup nomount pfile.ora
• connect system/« xxxxxx"
• @/$ORACLE_HOME/sqlplus/admin/pupbld.sql;
• connect / as sysdba
• @/outils/oracle/product/DEV/19.3SE2/sqlplus/admin/help/hlpbld.sql;
• @/outils/oracle/product/DEV/19.3SE2/sqlplus/admin/help/helpus.sql;
61
Création du dictionnaire de la base
• Créer le fichier spfile à partir de pfile
• Créer de nouveaux tablespaces utilisateur:
• Un DATA pour les utilisateurs
• un INDX pour les index
• Autres tablespaces applicative
Synthaxe:
Create tablespace nom_tbs
datafile ‘/chemin/nom_datafile.dbf’ size xM reuse
autoextend off
Extent management local segment space management
auto;
62
Création de la base avec DBCA
• Pour lancer dbca il faut utiliser l’interface graphique
• /outils/oracle/product/19C/prod/bin/dbca
63
Création de la base avec DBCA
64
Création de la base avec DBCA
• Permet d’utiliser une Template déjà existant pour configurer
la nouvelle base ou récupérer les paramètres d’une base
existante.
• De configurer la base en mode datawarehouse
• Genaral Purpose ou en Transaction Processing
65
Création de la base avec DBCA
66
GESTION DE L’INSTANCE
67
GESTION DE L’INSTANCE
69
Outils d’Administration
• Oracle SQL Developer Command Line (SQLcl) : outil en ligne de commande Java
basé sur le moteur d’Oracle SQL Developer ; plus convivial et plus complet que
SQL*Plus, tout en étant compatible avec ce dernier.
70
Installation du client
71
Installation du client
Les procédures d’installation d’un client Oracle ressemblent beaucoup,
en plus simples, aux procédures d’installation du serveur.
• Les similitudes d’installation entre un serveur et un client portent notamment
sur :
• Les différentes étapes de l’installation (pré-installation, installation avec Oracle Universal
Installer, post-installation) ;
• Le standard OFA, avec notamment un répertoire Oracle Home (plusieurs clients peuvent être
installés sur la même machine) ;
• Les spécificités de chaque plate-forme (variables d’environnement, base de registre, etc.) ;
• La possibilité d’effectuer une installation non interactive, en utilisant un fichier de réponse
72
73
Un client Oracle comporte généralement au minimum le composant
Oracle Net qui permet d’accéder à une base Oracle du réseau
• Lors de l’installation plusieurs types installations sont proposées
• Administrateur : installe la quasi-totalité des composants y
compris les outils d’administration et les produits de
développement.
75
Gestion des fichiers de journalisation
76
Gestion des fichiers de journalisation
77
Gestion des fichiers de journalisation
• Les fichiers de journalisation (redo log) enregistrent toutes les modifications apportées à la
base de données. Ils sont organisés en groupes écrits de manière circulaire ; les
informations sauvegardées sont donc, par défaut, périodiquement écrasées après avoir été
écrites sur disk.
• Les fichiers de journalisation sont organisés en groupes (au minimum deux) composés d’un ou de plusieurs
membres (minimum un)
• À l’intérieur d’un groupe, les membres sont écrits simultanément en miroir et contiennent les même
informations
• Lorsqu’un groupe est plein (c’est-à-dire lorsque les membres sont pleins), l’instance Oracle passe au groupe
suivant et ainsi de suite jusqu’au dernier
• Lorsque l’instance Oracle revient dans le premier groupe, elle écrase les informations qui y sont stockées après
les avoir écrite sur disk.
• Les vues du dictionnaire permettent d’obtenir des informations sur les fichiers de
journalisation
• V$LOG : informations sur les groupes.
• V$LOGFILE : informations sur les membres.
• V$LOG_HISTORY : informations sur l’historique des fichiers de journalisation
• V$LOG_HISTORY : peut être utilisée pour analyser la vitesse de basculement des fichiers de journalisation.
78
Gestion des fichiers de journalisation
• Différentes opérations d’administration peuvent être effectuées sur les fichiers
de journalisation
• Ajouter un nouveau membre dans un groupe permet d’améliorer la sécurité des fichiers
de journalisation (multiplexage)
ALTER DATABASE ADD LOGFILE MEMBER 'nom_fichier' [,...] TO GROUP numéro;
• Ajouter un nouveau groupe permet d’améliorer la disponibilité des fichiers de
journalisation pour le processus LGWR, en augmentant la durée d’un cycle complet de
rotation.
ALTER DATABASE
ADD LOGFILE [GROUP numéro] ('nom_fichier' [,...]) [ SIZE valeur [K|M|G] ] [REUSE];
• Déplacer un membre permet d’améliorer la répartition des entrées/sorties par exemple.
ALTER DATABASE ADD LOGFILE
GROUP 4 ('chemin/campus/redo04a.log', 'chemin/campus/redo04b.log') SIZE 200M;
• Supprimer un groupe peut être utilisé dans une opération d’augmentation de la taille des
groupes (ajout d’un nouveau groupe plus gros puis suppression d’un ancien).
ALTER DATABASE DROP LOGFILE GROUP numéro ;
ALTER DATABASE DROP LOGFILE MEMBER 'nom_fichier' [,...] (suppression d’un membre)
• Forcer le basculement du groupe courant au suivant peut être utilisé dans l’opération
79
d’augmentation de taille.
Gestion des fichiers de contrôle
• Le fichier de contrôle contient des informations de contrôle sur la
base de données :
• le nom de la base de données ;
• la date et l’heure de création de la base de données ;
• l’emplacement des autres fichiers de la base de données
(fichiers de données et fichiers de journalisation) ;
• le numéro de séquence actuel des fichiers de journalisation ;
• des informations sur les points de reprise (checkpoint),
• etc.
• Le fichier de contrôle est automatiquement mis à jour par Oracle
lors de chaque modification de la structure de la base de
données (ajout ou déplacement d’un fichier par exemple). La
taille du fichier de contrôle est déterminée par Oracle
83
Arrêt
• De même, il y a trois grandes phases dans le processus :
• fermeture de la base de données ;
• démontage de la base de données ;
• arrêt de l’instance.
84
Automatisation et scripts
85
Gestion des utilisateurs et de leurs droits
• Pour gérer la sécurité de la base, oracle permet:
• de définir les utilisateurs qui peuvent se connecter à la base de données
(avec une identification par le système d’exploitation ou par la base de
données) ;
• de définir dans quel(s) tablespace(s) un utilisateur peut créer des objets
(éventuellement aucun) ;
• de limiter l’utilisation des ressources système (quota) ;
• d’imposer une politique de gestion de mots de passe (expiration périodique,
non- réutilisation avant un certain temps, etc.) ;
• de définir les droits de chaque utilisateur à l’intérieur de la base de données.
•Dans une base de données Oracle, les droits des utilisateurs sont gérés avec la
notion de privilège qui peut être accordé ou révoqué.
86
• Les différents mode d’identification de l’utilisateur.
• Identification par Oracle (exemple: CONNECT oheu/rx239$)
• Identification par le système d’exploitation (exemple: CONNECT /)
Oracle ne vérifie pas le mot de passe mais contrôle simplement que le nom de l’utilisateur, au
niveau du système d’exploitation, correspond à un nom d’utilisateur dans la base de données.
Oracle utilise un préfixe défini par le paramètre OS_AUTHENT_PREFIX (par défaut égal à OPS$).
Par exemple, l’utilisateur ayant pour nom vdep au niveau du système d’exploitation pourra se
connecter à la base par un CONNECT / uniquement s’il existe un compte Oracle ops$vdep
87
Creation d’un utilisateur
• Pour qu’un utilisateur se connecte le dba ou une personne qui a les
droits adéquats doit créer le compte et lui donnée les droits en
fonction des actions à réaliser sur la base
• Synthaxe
CREATE USER nom NO AUTHENTICATION | { IDENTIFIED { BY mot_de_passe |
EXTERNALLY } }
[ DEFAULT TABLESPACE nom_tablespace ] [ TEMPORARY TABLESPACE
nom_tablespace ] [ QUOTA
{ valeur [K|M] | UNLIMITED }
ON nom_tablespace [,...] ] [ PROFILE nom_profil ] [ PASSWORD EXPIRE ]
[ ACCOUNT { LOCK | UNLOCK } ] ;
• Exemple d’un utilisateur identifié par l’OS avec uniquement les clauses
obligatoires :
CREATE USER "OPS$SRVWINORA\VDEP" IDENTIFIED EXTERNALLY;
88
• Modification d’un utilisateur
• ALTER USER nom [ NO AUTHENTICATION | { IDENTIFIED { BY
mot_de_passe | EXTERNALLY } } ] [ DEFAULT TABLESPACE nom_tablespace
] [ TEMPORARY TABLESPACE nom_tablespace ] [ QUOTA { valeur [K|M] |
UNLIMITED } ON nom_tablespace [,...] ] [ PROFILE nom_profil ]
[ PASSWORD EXPIRE ] [ ACCOUNT { LOCK | UNLOCK } ] ;
• Suppression d’un utilisateur
• DROP USER nom [ CASCADE ] ;
• Trouver des informations sur les utilisateurs
• Plusieurs vues du dictionnaire de données permettent d’obtenir des
informations sur les utilisateurs
• DBA_USERS informations sur les utilisateurs
• DBA_TS_QUOTAS : informations sur les quotas des utilisateurs
89
les profils Utilisateur
Un profil est un ensemble nommé de limitations de ressources qui
peut être attribué à un utilisateur
• Les ressources et suivantes peuvent être mises en œuvre
• temps CPU par appel et/ou par session ;
• nombre de lectures logiques par appel et/ou par session ;
• nombre de sessions ouvertes simultanément par un
utilisateur ;
• temps d’inactivité par session ;
• durée totale de la session ;
• quantité de mémoire privée dans la SGA (configuration
serveurs partagés uniquement)
90
les profils Utilisateur
• verrouillage de compte (et durée de verrouillage) au-delà d’un
certain nombre d’échecs de tentative de connexion ;
• verrouillage de compte au-delà d’un certain nombre de jours
d’inactivité (c’est-à-dire sans connexion - apparu en version 12.2) ;
• durée de vie des mots de passe (avec éventuellement une période
de grâce) ;
• non-réutilisation d’un mot de passe avant un certain temps ou
avant un certain nombre de changements ;
• complexité du mot de passe.
94
Gérer les droits
• Les droits sont des privilèges accorder ou retirer à un utilisateur
ou rôle pour exécuter un ordre SQL sur la base
• Attribution d’un privilège system a un utilisateur se fait avec l’ordre SQL
" GRANT«
• Syntaxe
GRANT nom_privilège [,...] TO { nom_utilisateur | PUBLIC } [,...]
Exemple: grant create session,create table to philippe
• Un utilisateur peut recevoir le privilège de pouvoir donner le droit à quelqu’un d’autre
avec la clause WITH ADMIN OPTION
• Plusieurs privilèges peuvent être attribués à plusieurs utilisateurs en un seul ordre
• Tous les privilèges système peuvent être attribués d’un seul coup avec le mot-clé ALL
PRIVILEGES (GRANT ALL PRIVILEGES)
• Révocation d’un privilège système à un utilisateur
• Syntaxe
• REVOKE nom_privilège [,...] FROM { nom_utilisateur | PUBLIC } [,...] ;
• Exemple REVOKE CREATE TABLE FROM francois;
• Pour pouvoir révoquer un privilège système, il faut avoir reçu le privilège avec la clause
WITH ADMIN OPTION ou le privilège système GRANT ALL PRIVILEGE
95
Gérer les droits
• Les privilèges système SYSDBA et SYSOPER
• Ces privilèges peuvent être contrôlés, soit par l’appartenance à un groupe particulier du système d’exploitation, soit
par un fichier de mots de passe
• Dans le cas de l’utilisation d’un fichier de mots de passe, par défaut seul SYS a reçu les privilèges SYSDBA et SYSOPER
• La vue V$PWFILE_USERS permet de lister les utilisateurs qui ont reçu les privilèges SYSDBA ou SYSOPER ;
• cette vue est toujours vide si REMOTE_LOGIN_PASSWORDFILE=NONE.
• Privilège objet
• Un privilège objet est le droit d’accéder à un objet d’un autre utilisateur : de mettre à jour les données de la
table CLIENT
• Par défaut, seul le propriétaire d’un objet a le droit d’y accéder. Pour qu’un autre utilisateur puisse y accéder, le
propriétaire de l’objet doit lui donner un privilège objet
• Avoir un droit sur un objet ne dispense pas de devoir qualifier l’objet par le nom du propriétaire pour y accéder (sinon,
Oracle pense que vous cherchez à accéder à un objet dans votre schéma).
• l’existence d’un synonyme, même public, ne donne aucun droit sur l’objet sous-jacent
• Pour les privilèges INSERT et UPDATE, une liste de colonnes peut être spécifiée afin de limiter le privilège aux colonnes
indiquée
• Synthaxe:
GRANT { nom_privilège[(liste_colonnes)] [,...] | ALL [PRIVILEGES] } ON [nom_schéma.]nom_objet TO
{ nom_utilisateur | PUBLIC } [,...] [ WITH GRANT OPTION ] ;
•Exemple : GRANT SELECT, INSERT, UPDATE(nom,prenom) ON adherent TO oheu;
96
Gérer les droits
• La clause WITH GRANT OPTION donne au bénéficiaire le droit de transmettre le privilège objet .
• Le mot-clé ALL permet d’attribuer tous les privilèges
97
•Révocation d’un privilège objet à un utilisateur
Gérer les droits
• Privilèges sur les vues et les programmes stockés
• Un utilisateur qui a un droit sur une vue ou procédure stockée n’a pas besoin d’avoir les droits sur les
objets manipulés par la vue ou procédure stockée
• Une procédure stockée peut s’exécute :
• Avec les droits du propriétaire (definer rights).
• Conçu pour s’exécuter avec les droits de l’appelant (invoker rights). (très dangereux)
•Le comportement souhaité se définit lors de la création du programme stocké grâce à la clause AUTHID
• Syntaxe
AUTHID { CURRENT_USER | DEFINER }
• Pour remédier à ce problème de sécurité, à partir de la version 12c, il est possible d’utiliser le privilège objet INHERIT
PRIVILEGES pour autoriser explicitement les programmes stockés d’un utilisateur à être appelés avec les droits d’un
autre utilisateur
• Syntaxe
• GRANT INHERIT PRIVILEGES ON USER nom_appelant TO
{ nom_propriétaire | PUBLIC } [,...] ;
• REVOKE INHERIT PRIVILEGES ON USER nom_appelant FROM
{ nom_propriétaire | PUBLIC } [,...] ;
• Dorénavant, lorsqu’un utilisateur appelle un programme stocké qui s’exécute avec les droits de
l’appelant, Oracle vérifie que le propriétaire du programme stocké dispose du privilège INHERIT
PRIVILEGES sur l’utilisateur appelant. Si ce n’est pas le cas, une erreur ORA-06598: privilège INHERIT
PRIVILEGES insuffisant est retournée.
98
Gestion de Role
• Un rôle est un regroupement nommé de privilèges (système et objet) qui peut être
attribué à un utilisateur.
• Tous les privilèges regroupés dans le rôle sont alors simultanément attribués à l’utilisateur
• Un rôle peut être attribué à un autre rôle.
• Un utilisateur peut avoir plusieurs rôles.
• Un rôle n’appartient à personne
• Depuis la version 12, un rôle peut être attribué à un programme stocké (Partir l’accès accorder au
programme basée sur le code » (Code-Based Access Control)
• La mise en œuvre s’effectue en trois étapes :
• 1 - création du rôle ;
Synthaxe
CREATE ROLE nom [ IDENTIFIED { BY mot_de_passe | EXTERNALLY | USING nom_package} | NOT IDENTIFIED ];
99
Gestion de Rôle
• Autre actions sur un role
• Révocation d’un privilège à un rôle
• Suppression d’un rôle
• Activation ou désactivation d’un rôle
• Un rôle attribué à un utilisateur (directement ou via un autre rôle) est par défaut
automatiquement activé sauf si l’utilisateur est déjà connecté.
• Parmi les rôles attribués à l’utilisateur, il est possible de définir ceux qui sont
effectivement automatiquement activés lors de la connexion de l’utilisateur
Syntaxe
SET ROLE { nom_rôle [ IDENTIFIED BY mot_de_passe ] [,...] | ALL [ EXCEPT nom_rôle
[,...] ] | NONE } ;
• Plusieurs vues du dictionnaire de données permettent d’obtenir des informations sur les privilèges système
• DBA_SYS_PRIVS / SESSION_PRIVS / SYSTEM_PRIVILEGE_MAP / DBA_ROLE / DBA_CODE_ROLE_PRIVS
101
Les différents types de comptes
• Une base Oracle contient en général quatre types de comptes
• Administration
Ces privilèges peuvent être obtenus par l’intermédiaire du rôle DBA ou d’un rôle équivalent
• Développement/hébergement du schéma applicatif
• A les privilèges système nécessaires pour la création des différents types d’objets (tables, vues,
procédures...)
• Il possède un quota sur au moins un tablespace.
• Les privilèges système requis peuvent être obtenus par l’intermédiaire des
rôles CONNECT et RESOURCE ou d’un rôle équivalent
• Utilisateur final
• Il a besoin de très peu de privilèges système : CREATE SESSION (obligatoire), ALTER SESSION (parfois
nécessaire) et c’est généralement tout.
• Par contre, il possède des privilèges objet sur les objets du schéma applicatif, généralement par
l’intermédiaire d’un rôle.
• Quelques conseils pour sécuriser l’accès à votre base de données
• Limitez les accès au serveur (notamment au fichier de mots de passe, au fichier de paramètres et
aux fichiers de trace ou d’alerte de chaque instance Oracle).
• Interdisez l’authentification par le système d’exploitation à travers le réseau (le
paramètre REMOTE_OS_AUTHENT doit être à FALSE).
• Modifiez les mots de passe par défaut des comptes par défaut que vous utilisez (au premier rang
desquels SYS et SYSTEM).
102
Superviser les utilisateurs connectés
• Les sessions sans valeur dans la colonne USERNAME sont celles des processus d’arrière-
plan
• Déconnecter un utilisateur de la base.
• Syntaxe
ALTER SYSTEM KILL SESSION 'sid,serial#' [IMMEDIATE];
ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' { [POST_TRANSACTION] [IMMEDIATE];
• Exemple
ALTER SYSTEM KILL SESSION '10,10494';
103
Gestion des tables et des Indexes
104
Gestion des tables
• Les principaux types d’objets d’un schéma sont
• Les tables et les index occupent de l’espace de stockage en dehors de leur définition dans le dictionnaire.
• Leur stockage doit être planifié correctement pour éviter les erreurs liées au manque d’espace ou les
problèmes de performance.
106
Gestion des tables
• Structure du bloc
• L’en-tête du bloc contient l’adresse du bloc,
• le type de segment,
• un répertoire des tables,
• un répertoire des lignes et des entrées pour les transactions.
• La taille de l’en-tête du bloc est variable, de l’ordre de 100 octets à 200 octets.
• Le reste du bloc contient les données (une à plusieurs lignes de la table) et de
l’espace libre.
109
Gestion des tables
• PCTUSED: spécifie le pourcentage d’occupation auquel le bloc doit redescendre avant de redevenir candidat à
l’insertion
110
Gestion des tables
• Le ROWID
• Le ROWID est une colonne virtuelle présente dans chaque table qui donne :
• l’adresse physique de stockage de la ligne.
• Avec le ROWID Oracle a toutes les informations nécessaires à la localisation physique de la ligne
dans un fichier de données (fichier, numéro de bloc, position dans le bloc)
• Cette colonne virtuelle peut être interrogée comme les autres colonnes de la table
• permet de localiser physiquement la ligne ;
• il est utilisé en interne par Oracle dans les index
• c’est le moyen le plus rapide pour accéder à une ligne
• Le ROWID d’une ligne ne change jamais tant que la ligne n’est pas supprimée même si la ligne
est migrée vers un autre bloc sauf dans les cas particulier
• lorsqu’une ligne change de partition dans une table partitionnée ;
• réorganisation du stockage de la table (ALTER TABLE MOVE) ;
• compactage des lignes dans la table (ALTER TABLE SHRINK SPACE).
111
Gestion des tables
• Chaînage et migration
En règle générale, une ligne d’une table est stockée en totalité à l’intérieur d’un bloc de sorte qu’Oracle n’a
besoin de lire qu’un seul bloc.
• Chaînage : Souvent il n’est pas possible pour oracle de stocker une ligne dans un bloc dans ce cas Oracle
stocke dans plusieurs bloc. Alors pour lire cette ligne, Oracle a alors besoin de lire plusieurs blocs.
• Migration: une ligne grandit suite à une modification, et il ne reste plus suffisamment d’espace libre dans le
bloc, alors Oracle déplace la ligne dans un autre bloc pointé par l’en-tête de la ligne resté dans le bloc d’origine.
Le phénomène de migration peut (et même doit) être évité, en laissant suffisamment d’espace disponible dans les blocs
pour les mises à jour. Le paramètre PCTFREE sera donc positionné avec soin sur les tables pour lesquelles la taille des lignes
insérées est sensiblement inférieure à la taille des lignes après modification(s).
• Spécifier le stockage d’une table
• Syntaxe simplifiée
CREATE TABLE nom_table (spécification des colonnes)
[ TABLESPACE nom_tablespace ] [ PCTFREE valeur ] [ PCTUSED valeur ]
[ clause_stockage] [ LOGGING | NOLOGGING ] ;
-clause_stockage
STORAGE ( [ INITIAL valeur [K|M] ]
[ NEXT valeur [K|M] ]
[ MINEXTENTS valeur ]
[ MAXEXTENTS { valeur | UNLIMITED } ] [ PCTINCREASE valeur ] )
112
Gestion des tables
• Exemple
CREATE TABLE adherent
numero NUMBER(6),
nom VARCHAR2(40),
prenom VARCHAR2(30))
TABLESPACE data
PCTFREE 30
STORAGE ( INITIAL 10M ) ;
• Syntaxe simplifiée
ALTER TABLE nom_table
[ PCTFREE valeur ]
[ PCTUSED valeur ]
[ LOGGING | NOLOGGING ]
[ clause_stockage_restreinte ] ;
-clause_stockage_restreinte
STORAGE ( [ NEXT valeur [K|M] ]
[ MAXEXTENTS { valeur | UNLIMITED } ]
[ PCTINCREASE valeur ] )
113
Gestion des tables
115
Gestion des tables
• Le tableau suivant résume les techniques envisageables (√) et indique lesquelles
sont les mieux adaptées () à tel ou tel besoin :
• Syntaxe
• ALTER TABLE nom_table DEALLOCATE UNUSED [ KEEP valeur [K|M] ] ;
L’option KEEP indique l’espace à conserver au-dessus de la HWM
116
Gestion des Indexes
Un index est une structure définie sur une ou plusieurs colonnes d’une
table ; la (les) colonne(s) constitue(nt) la clé de l’index.
• L’index permet un accès rapide aux lignes de la table lors d’une recherche
basée sur la clé de l’index.
• Un index est physiquement et logiquement dépendant de la table.
• Il peut être créé/supprimé sans affecter la table de base (sauf impact sur les
performances lorsque l’index est supprimé).
• Un index nécessite son propre espace de stockage
• actualisés à chaque mise à jour (INSERT, UPDATE, DELETE).
• Un index peut être unique ou non unique
• Les données sont stockées dans des blocs Oracle d’index comprenant les
données proprement dites et des informations de contrôle (en-tête de bloc,
en-tête de ligne, etc.).
• Pour un index unique, il existe un seul ROWID par valeur de clé ; pour un
index non unique, plusieurs ROWID sont possibles pour chaque valeur de clé
• Le remplissage du bloc, à la création de l’index uniquement, peut être
contrôlé par
• le paramètre PCTFREE. Le paramètre PCTFREE est donc important lors de 117 la
Gestion des Indexes
120
Gestion des Indexes
• Plusieurs techniques sont à notre disposition pour réorganiser le
stockage d’un index :
• Ordre SQL ALTER INDEX ... DEALLOCATE UNUSED ;
• Ordre SQL ALTER INDEX ... COALESCE ;
• Ordre SQL ALTER INDEX ... SHRINK SPACE ;
• Ordre SQL ALTER INDEX ... REBUILD.
Le tableau suivant résume les techniques envisageables (√) et celles qui sont les mieux
DEALLOCA COALESC SHRIN REBUIL
adaptées () à tel ou tel besoin : TE E K D
121
Gestion des Indexes
Depuis la version 12.2, l’accès au index est automatiquement surveillé par Oracle, ce qui peut permettre de
déterminer si les index sont utilisés ou non. Un index non utilisé peut être supprimé pour libérer de l’espace
et améliorer les performances des mises à jour
• La vue DBA_INDEX_USAGE/V$INDEX_USAGE_INFO affiche des statistiques cumulées sur l’utilisation
des index
• Les statistiques sont collectées en mémoire et écrites dans le dictionnaire de données toutes les 15
minutes. Si besoin, vous pouvez interroger la colonne LAST_FLUSH_TIME de la
vue V$INDEX_USAGE_INFO pour connaître la date et l’heure de la dernière écriture dans le dictionnaire
de données (cette vue en elle-même donne des statistiques générales sur la surveillance des index).
• Réorganiser le stockage d’un index est moins compliqué que réorganiser le stockage d’une table car
les données ne sont pas affectées et la table est toujours accessible et pleinement opérationnelle.
• L’optimiseur Oracle est chargé de déterminer le plan d’exécution des requêtes, c’est-à-dire la manière
dont Oracle va exécuter la requête.
• Depuis maintenant plusieurs versions, Oracle recommande de faire fonctionner l’optimiseur dans le
mode CBO (Cost Based Optimizer - Optimiseur basé sur les coûts). Depuis la version 10, seul le mode
CBO est supporté ; le mode RBO (Rule Based Optimizer - Optimiseur basé sur les règles) n’est plus
supporté.
122
Tablespaces et fichiers de données
• Un tablespace est une unité logique de stockage composée d’un ou plusieurs fichiers
physiques (fichiers de données).
• La majorité des opérations d’administration relatives au stockage s’effectue au niveau du tablespace, et non au
niveau des fichiers de données.
• À l’intérieur d’un tablespace, le stockage est organisé en segments, composés d’une ou de plusieurs extensions
(extent).
• Ces extensions peuvent être gérées "par le dictionnaire" ou "localement".
• Dans le premier cas (tablespace géré par le dictionnaire), les informations sur les extensions libres et allouées
sont stockées dans des tables du dictionnaire de données ; dans le second cas (tablespace géré localement), les
informations sur les extensions libres et allouées sont stockées dans l’en-tête des fichiers de données du
tablespace.
• En version 10, Oracle a introduit la notion de tablespace BIGFILE : un tablespace BIGFILE est un tablespace
composé d’un seul fichier de données qui peut être particulièrement volumineux (jusqu’à 2^32 - 3 blocs Oracle
soit plus de 4 milliards de blocs). A contrario, un tablespace traditionnel, dorénavant appelé tablespace SMALLFILE
• Un tablespace peut être READ WRITE (en lecture/écriture) ou READ ONLY (en lecture seule). Rendre un
tablespace READ ONLY est un moyen simple de garantir que les données qu’il contient ne seront jamais modifiées
• Le tablespace est l’unité de base de nombreuses tâches d’administration. La règle fondamentale est donc
d’utiliser plusieurs tablespaces pour séparer au maximum les différents types d’éléments et garantir une plus
grande souplesse dans les opérations d’administration.
123
Tablespaces et fichiers de données
Toutes les opérations relatives aux tablespaces et aux fichiers de données sont
enregistrées dans le fichier d’alerte de l’instance.
124
Tablespaces et fichiers de données
• Syntaxe simplifiée
CREATE [ BIGFILE | SMALLFILE ] TABLESPACE nom
DATAFILE spécification_fichier [,...]
[ clause_gestion_extension ]
[ clause_gestion_segment ]
[ BLOCKSIZE valeur [K] ]
[ LOGGING | NOLOGGING ]
[ FORCE LOGGING ] [
FLASHBACK { ON | OFF } ]
[ ONLINE | OFFLINE ] ; -
spécification_fichier 'nom_fichier' [ SIZE valeur [K|M|G|T] ]
[REUSE] [ clause_auto_extension ]
- clause_auto_extension AUTOEXTEND OFF
AUTOEXTEND ON [ NEXT valeur [K|M|G|T] ]
[ MAXSIZE UNLIMITED | valeur [K|M|G|T] ]
- clause_gestion_extent EXTENT MANAGEMENT DICTIONARY | EXTENT MANAGEMENT LOCAL
{ AUTOALLOCATE | UNIFORM [ SIZE valeur [K|M|G|T] ] }
• - clause_gestion_segment SEGMENT SPACE MANAGEMENT { MANUAL | AUTO }
125
Tablespaces et fichiers de données
• Exemple
• Tablespace pour les tables, avec une gestion locale uniforme des
extensions :
CREATE TABLESPACE data
DATAFILE ‘/dba/data/Campus/campus_data01.dbf' SIZE 500M
AUTOEXTEND ON NEXT 100M
MAXSIZE 800M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M SEGMENT SPACE
MANAGEMENT AUTO;
• Tablespace pour les index, avec une gestion locale automatique des
extensions :
CREATE TABLESPACE indx
DATAFILE 'e:\app\oracle\oradata\hermes\indx01.dbf' SIZE 500M
AUTOEXTEND ON NEXT 100M
MAXSIZE 800M EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE
MANAGEMENT AUTO;
126
Tablespaces et fichiers de données
• Modification sur un tablespace tablespace
• Après création, il est possible de modifier un tablespace, notamment
pour :
• le renommer ;
• lui allouer de l’espace supplémentaire ;
• ALTER TABLESPACE nom ADD DATAFILE spécification_fichier [,...];
• déplacer le(s) fichier(s) de données ;
• le passer OFFLINE / ONLINE ;
• le passer READ ONLY / READ WRITE ;
• Renommer un tablespace s’effectue avec l’ordre SQL ALTER TABLESPACE.
• ALTER TABLESPACE ancien_nom RENAME TO nouveau_nom;
128
Tablespaces et fichiers de données
• À l’intérieur d’un tablespace, le stockage est organisé en segments contenant une ou
plusieurs extensions (extents), une extension étant un ensemble de blocs Oracle contigus.
• Lorsqu’un segment est créé dans un tablespace, Oracle lui alloue une ou plusieurs
extensions dans un des fichiers de données du tablespace. Lorsque l’espace initialement
alloué est plein (suite à l’insertion de données par exemple), Oracle alloue une nouvelle
extension au segment, et ainsi de suite
• Toutes les extensions allouées à un segment sont dans le tablespace de création du
segment, mais pas obligatoirement côte à côte, ni forcément dans le même fichier de
données (si le tablespace est composé de plusieurs fichiers de données). Lorsqu’un
segment est supprimé, les extensions qu’il occupe sont libérées et rendues disponibles
pour d’autres segments. Des créations/suppressions fréquentes de segments dans un
tablespace peuvent donc conduire à une fragmentation de l’espace disponible dans ce
tablespace.
• il existe quatre types principaux de segments :
• les segments de table : espace occupé par les tables ;
• les segments d’index : espace occupé par les index ;
• les segments d’annulation : espace temporaire utilisé pour stocker les informations permettant d’annuler une
transaction ;
• les segments temporaires : espace temporaire utilisé notamment lors d’un tri.
129
Tablespaces et fichiers de données
• La première extension d’un segment contient au minimum deux blocs, le premier étant réservé à
l’en-tête du segment (ne contient pas de données utiles mais la carte des extensions allouées au
segment). Il en est de même pour chaque fichier de données du tablespace ; le premier bloc est
un bloc d’en-tête (nous verrons bientôt que l’en-tête du fichier peut contenir davantage de blocs).
• Un tablespace peut être "géré par le dictionnaire" ou "géré localement".
• Dans un tablespace "géré par le dictionnaire", les informations relatives à la gestion de l’espace
(extensions libres/allouées) sont enregistrées dans le dictionnaire de données.
• Dans un tablespace "géré localement", les informations relatives à la gestion de
l’espace (extensions libres/allouées) sont enregistrées dans une bitmap, dans l’en-tête de chaque
fichier de données du tablespace. Chaque bit de la bitmap correspond à une extension et vaut 0
ou 1 selon que l’extension est libre ou allouée.
• Par défaut, les tablespaces sont gérés localement.
• Une gestion dite "automatique" : la taille des extensions est déterminée automatiquement par Oracle.
• Une gestion dite "uniforme" : la taille des extensions est uniforme, égale à une valeur définie lors de la création du
tablespace.
• Par défaut, un tablespace permanent géré localement est en gestion automatique des extensions ; la gestion
uniforme doit être spécifiée.
• Un tablespace temporaire géré localement est obligatoirement en gestion uniforme des
extensions (détaillé ultérieurement dans la section Tablespace temporaire de ce chapitre).
130
Tablespaces et fichiers de données
• La clause EXTENT MANAGEMENT de l’ordre SQL CREATE TABLESPACE permet de
spécifier le mode de gestion d’un tablespace.
• Syntaxe
EXTENT MANAGEMENT DICTIONARY | LOCAL [ AUTOALLOCATE | UNIFORM [ SIZE valeur [K|M] ] ]
• exemples
• Tablespace géré localement avec des extensions uniformes :
• CREATE TABLESPACE tbs_local_uniform DATAFILE
‘/dba/data/CAMPUS/tbs_local_uniform.dbf‘
SIZE 10M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
131
Tablespaces et fichiers de données
• Les clauses TABLESPACE et STORAGE peuvent être utilisées dans les ordres de création
des segments pour spécifier le stockage du segment.
• Syntaxe de la clause STORAGE
STORAGE ( [ INITIAL valeur [K|M|G] ]
[ NEXT valeur [K|M|G] ]
[ MINEXTENTS valeur ]
[ MAXEXTENTS { valeur | UNLIMITED } ]
[ PCTINCREASE valeur ] )
132
Tablespaces et fichiers de données
• Gestion des extensions à l’intérieur d’un tablespace géré localement
• Dans le cas d’une gestion automatique des extensions, Oracle utilise un petit nombre de tailles
d’extension différentes (64 Ko, 1 Mo, 8 Mo, 64 Mo) et tente d’allouer côte à côte des extensions
de même taille, en nombre suffisant pour occuper de l’espace potentiellement utilisable pour
une extension de taille supérieure (16 extensions de 64 Ko = une extension potentielle de 1
Mo). Cette technique permet de limiter les risques de fragmentation de l’espace disponible : si
un segment contenant de nombreuses extensions est supprimé, l’espace libéré peut être
réutilisé de différentes manières. La taille d’extension initialement choisie pour un segment
dépend de la taille initiale du segment (pour une taille de bloc de 8 Ko)
• Dans le cas d’une gestion uniforme des extensions toutes les extensions ont la même taille
définie par l’option SIZE de la clause EXTENT MANAGEMENT (1 Mo par défaut).
• Remarque
En Enterprise Edition, par défaut, lors de la création d’une table dans un tablespace géré localement, Oracle
diffère la création du segment associé jusqu’au moment où la première ligne est insérée dans la table. Dans
ce cas, la table apparaît bien dans le dictionnaire de données (vue *_TABLES) mais pas le segment ni les
extensions (vues *_SEGMENTS et *_EXTENTS). Cette fonctionnalité permet d’économiser de l’espace et
d’accélérer la création des tables pour une application qui comporte plusieurs milliers de tables dont un
grand nombre pourraient ne jamais être alimentées. Voir le chapitre Gestion des tables et des index.
133
Tablespaces et fichiers de données
• Tablespace temporaire
• Lorsqu’une requête nécessite un tri (clause ORDER BY par exemple), Oracle tente de faire le tri en
mémoire, dans la PGA du processus serveur qui exécute la requête.
• Si le tri ne tient pas en mémoire, Oracle le découpe en morceaux et trie chaque morceau
individuellement en stockant des résultats intermédiaires sur disque dans des segments temporaires.
• Un segment temporaire peut être créé dans n’importe quel tablespace mais ce n’est pas souhaitable
pour les performances.
• Oracle recommande donc de créer un tablespace dédié, de type TEMPORARY, pour stocker les
segments temporaires, et de préférence un tablespace temporaire géré localement.
• Il est possible de créer un tablespace temporaire géré par le dictionnaire mais les performances sont
alors limitées et ce choix est déprécié par Oracle
• Syntaxe
CREATE [ BIGFILE | SMALLFILE ] TEMPORARY TABLESPACE nom TEMPFILE spécification_fichier [,...]
[ EXTENT MANAGEMENT LOCAL ] [ UNIFORM [ SIZE valeur [K|M] ] ]
[ TABLESPACE GROUP nom_groupe ] ;
- spécification_fichier 'nom_fichier' [ SIZE valeur [K|M|G|T] ] [REUSE] [ clause_auto_extend ] -
clause_auto_extend AUTOEXTEND { OFF | ON [ NEXT valeur [K|M|G|T] ]
[ MAXSIZE { UNLIMITED | valeur [K|M|G|T] } ] }
134
Gestion des informations d’annulation
• Lorsque des modifications de données sont en cours, Oracle génère des informations
d’annulation qui seront utilisées, si nécessaire, pour annuler les modifications. Ces
informations d’annulation contiennent essentiellement la valeur précédente des
données qui sont modifiées par la transaction ("image avant", "before image") et
l’identification des blocs concernés.
• Les informations d’annulation sont stockées dans des segments d’annulation.
• Elles sont principalement utilisées pour :
• l’annulation de la transaction (ROLLBACK) ;
• la lecture cohérente ;
• certaines fonctionnalités de flashback ;
• la récupération de la base de données (RECOVER).
• Le segment d’annulation est une structure utilisée par Oracle pour stocker temporairement la version
précédente des données en cours de modification dans une transaction.
• Si la transaction est validée (COMMIT), l’espace occupé est libéré ; si la transaction est annulée (ROLLBACK),
la version précédente des données est remise à la place de la nouvelle.
• Les segments d’annulation sont aussi utilisés par certaines fonctionnalités de flashback qui permettent de lire
(et récupérer) les données telles qu’elles étaient à un instant donné dans le passé (voir chapitre Sauvegarde
et récupération).
135
Gestion des informations d’annulation
• Durée de rétention des informations d’annulation
• Lorsqu’une transaction se termine, les informations d’annulation la concernant ne sont
plus nécessaires pour effectuer une annulation de la transaction (ROLLBACK). Par contre,
ces informations peuvent encore être utiles pour une lecture cohérente.
• En effet, une lecture cohérente longue qui a commencé avant ou pendant une
transaction peut encore avoir besoin de l’image avant, après la fin de la transaction. Si
cette image avant ancienne n’est plus disponible (l’espace a été réutilisé par une autre
transaction), une erreur ORA-01555 (la "fameuse" erreur snapshot too old) est retournée.
• Avec la gestion automatique de l’annulation, il existe une durée de conservation
(rétention) des informations d’annulation (undo retention period)
• c’est la durée minimale pendant laquelle Oracle tente de conserver les informations d’annulation des
transactions validées, avant de réutiliser l’espace.
• Les informations d’annulation des transactions validées sont dites expirées (expired) si elles sont plus
anciennes que la période de conservation actuelle
• l’espace qu’elles occupent peut être réutilisé par de nouvelles transactions.
• À l’inverse, les informations d’annulation des transactions validées sont dites non expirées
(unexpired) si elles sont plus récentes que la période de conservation actuelle et Oracle
tente de préserver l’espace qu’elles occupent pour satisfaire les lectures cohérentes et les
opérations flashback.
136
Gestion des informations d’annulation
• Si le tablespace d’annulation est autoextensible, Oracle règle la durée de
conservation à une valeur légèrement supérieure à la durée de la requête la
plus longue. Dans ce cas, si le paramètre UNDO_RETENTION est défini, il
impose une valeur minimum
• Si le tablespace d’annulation est de taille fixe,
• Oracle règle la durée de conservation à la plus grande valeur possible, compte tenu de la
taille du tablespace et de l’activité de la base de données. Dans ce cas, si le
paramètre UNDO_RETENTION est défini, il est ignoré (sauf si le tablespace d’annulation est
défini avec la garantie de rétention).
• Il faut noter que pour le calcul, Oracle utilise le seuil d’alerte du remplissage du tablespace
d’annulation (85 % par défaut) et non 100 % de la taille du tablespace.
• Modifier la taille du tablespace d’annulation ou son seuil d’alerte a donc, un impact direct
sur la durée de conservation.
137
Sauvegarde et récupération logique
138
Sauvegarde et restauration logique
• Data Pump Export : permet d’exporter dans un fichier binaire propriétaire tout ou une partie
des objets (structure et/ou données) d’une base de données.
• Data Pump Import : permet d’importer dans une base de données tout ou une partie des
objets (structure et/ou données) préalablement exportés par l’outil Data Pump Export.
• Caractéristique
• plus rapides ;
• possibilité d’arrêter un travail Data Pump, puis de le redémarrer ;
• possibilité de détacher sa session d’un travail Data Pump puis de la rattacher
ultérieurement ;
• possibilité de faire des transferts directs, à travers le réseau, entre deux bases de données ;
• plus de finesse dans la sélection des objets à exporter ou importer ;
• possibilité d’avoir une estimation de l’espace nécessaire lors d’un export ;
• possibilité de paralléliser une opération ou de compresser le fichier d’export
(Enterprise Edition uniquement).
139
Sauvegarde et récupération
Une des tâches principales de l’administrateur est d’assurer sécurité est assurée des données :
• la mise en œuvre d’une protection des fichiers sensibles de la base notament:
• fichiers de contrôle ;
• fichiers de journalisation.
• Par la mise en place d’une stratégie de sauvegarde/restauration adaptée aux contraintes de l’entreprise
• testée et documentée.
• La protection des fichiers de contrôle et des fichiers de journalisation s’effectue par multiplexage
• La principale question à se poser est:
• Quelle politique de sauvegarde dois je mettre en place
• Est-il acceptable de perdre des données ?
• Est-il possible d’arrêter périodiquement la base ?
• Est-il possible de réaliser une sauvegarde complète de la base pendant l’arrêt ?
•
140
Sauvegarde et récupération
physique
141
Sauvegarde et récupération
• L’archivage des fichiers de journalisation
• Le fichiers de journalisation peuvent être réappliqués à une sauvegarde de fichier de données,
pour rejouer toutes les modifications survenues entre la sauvegarde et un incident ayant
endommagé le fichier (restauration de média),
• à condition d’avoir conservé tous les fichiers de journalisation
• ceci est possible en faisant fonctionner la base de données en mode ARCHIVELOG.
• Ce mode de fonctionnement permet de garantir zéro perte de données en cas d’incident sur
un fichier de données.
142
Sauvegarde et récupération
• Pour effectuer des sauvegardes et des récupérations, il y a deux possibilités
• Sauvegarder régulièrement les fichiers de données base arrêtée.
• RMAN (Recovery Manager)
•Il est important de définir la stratégie de sauvegarde qui peut être cohérente ou incohérente:
•Une sauvegarde cohérente est une sauvegarde de la totalité de la base de données après un arrêt propre de la
base de données (pas après un SHUTDOWN ABORT ou un arrêt anormal de l’instance) ; ce type de sauvegarde est
aussi souvent appelé "sauvegarde base fermée" ou "sauvegarde à froid".
•Une sauvegarde incohérente est une sauvegarde effectuée alors que la base de données est ouverte et que
l’activité de mise à jour se poursuit pendant la sauvegarde ; ce type de sauvegarde est aussi souvent appelé
"sauvegarde base ouverte" ou "sauvegarde à chaud". Les fichiers sauvegardés ne sont pas synchrones du point de
vue des modifications enregistrées. Lorsqu’une base de données est restaurée à partir d’une sauvegarde incohérente,
il faut appliquer les fichiers de journalisation pour rendre les fichiers cohérents. Les sauvegardes incohérentes ne sont
possibles que lorsque la base de données fonctionne en mode ARCHIVELOG.
• réaliser des sauvegardes fréquentes (au minimum tous les jours) et de conserver plusieurs cycles de
sauvegarde (en cas de problème avec une sauvegarde)
• Si la base de données fonctionne en mode ARCHIVELOG, vous pouvez réaliser des sauvegardes bases ouvertes
• Dans le cas de sauvegardes partielles il faut être simplement très rigoureux dans le suivi et veiller de à faire
une sauvegarder sur un cycle complet de sauvegardes partielles.
144
Sauvegarde et récupération
• Archivage des fichiers de journalisation
• La base doit être en mode archivelogue
• Si la base est créée en mode sans archivage on peut la repasser en archive.
• Définir l’emplacement et nom des fichiers d’arch
• ALTER SYSTEM SET log_archive_format='redo_%S_%R_%T.arc‘ SCOPE=SPFILE;
• ALTER SYSTEM SET log_archive_dest_1='LOCATION=/dba/arch/CAMPUS/arch1‘ SCOPE=SPFILE;
• Shutdown immediate
• Startup mount
• Alter database archivelog
• Alter database open;
• Le mode ARCHIVELOG/NOARCHIVELOG est une propriété de la base qui se modifie par l’ordre SQL ALTER DATABASE.
• Ce mode de fonctionnement est mémorisé dans le fichier de contrôle de la base de données il n’est pas nécessaire de le
repréciser à chaque démarrage.
•Le format doit inclure les variables suivantes :
•%s ou %S Numéro de séquence du fichier de journalisation.
•%t ou %T Numéro d’instance (thread).
•%r ou %R Identifiant de remise à zéro des fichiers de journalisation (voir la section Récupération).
• Si ces trois variables ne sont pas présentes dans le format, l’erreur suivante se produit lors du démarrage de l’instance :
ORA-19905: log_archive_format doit contenir %s, %t et %r
145
Sauvegarde et récupération
• Le paramètre LOG_ARCHIVE_DEST définit une première destination de l’archivage et le paramètre LOG_ARCHIVE_DUPLEX_DEST une
deuxième destination d’archivage (dupliquée). (uniquement en Standard Edition).
• En Enterprise Edition, il faut utiliser les paramètres LOG_ARCHIVE_DEST_n ;
• pour des raisons de compatibilité ascendante, ils peuvent néanmoins encore être utilisés si aucun
paramètre LOG_ARCHIVE_DEST_n n’est défini
• les paramètres LOG_ARCHIVE_[DUPLEX_]DEST et LOG_ARCHIVE_DEST_n sont incompatibles et ne peuvent pas être définis
simultanément.
• Si aucune destination d’archivage n’est définie, mais qu’une zone de récupération rapide est configurée
(paramètre DB_RECOVERY_FILE_DEST), la zone de récupération rapide est utilisée comme destination d’archivage
• ARCHIVE_LAG_TARGET: permet de définir une durée maximale en secondes entre deux archivages
Les valeurs autorisées sont comprises entre 1mn(60s) et 2h(7200s)
• S’il n’y a rien à archiver, Oracle ne génère pas d’archive c’est-à-dire pas de ARCHIVE_LAG_TARGET de définie ou à 0
• Cela peut conduire à un blocage de LGWR si tous les fichiers de journalisation en ligne ont besoin d’être archivés.
146
RMAN (Recovery Manager)
147
RMAN (Recovery Manager) / Backup
• RMAN est un outil en ligne de commande qui permet de réaliser des sauvegardes et des
récupérations d’une base de données appelée base de données cible
• Il utilise un référentiel (repository) pour stocker des informations sur: sa configuration, les
sauvegardes réalisées, la structure de la base cible, les fichiers de journalisation archivés, etc.
• Ce référentiel est toujours stocké dans le fichier de contrôle de la base cible. La durée de conservation
des informations dans le fichier de contrôle est déterminée par le
paramètre d’initialisation CONTROL_FILE_RECORD_KEEP_TIME (7 jours par défaut).
• Le référentiel peut aussi être stocké dans un catalogue de récupération (recovery catalog) qui se
matérialise par un schéma dans une autre base de données. Un seul catalogue de récupération peut
être utilisé pour centraliser les référentiels RMAN de plusieurs bases de données cibles
• Lorsque RMAN n’est pas utiliser en mode catalogue , l’existence du fichier de contrôle est important,
en cas de perte du fichier de contrôle, RMAN n’aura plus d’information sur les sauvegarde de la base.
• Pour chaque sauvegarde restauration il s’établie un canal entre le RMAN et le client (channel)
• Une sauvegarde RMAN peut se faire sous la forme d’une copie image (image copy) ou d’un jeu de
sauvegarde (backup set).
• Une copie image est une copie à l’identique du fichier (analogue à une copie par une commande du système d’exploitation)
148
• Un jeu de sauvegarde contient un ou plusieurs fichiers sauvegardés
RMAN (Recovery Manager) / Backup
• RMAN offre un très grand nombre de fonctionnalités et d’options et peut être utilisé de différentes
manières.
• Syntaxe
rman [liste_options]
• TARGET [=] Chaîne de connexion à la base de données cible.
• CATALOG [=] Chaîne de connexion à la base de données du catalogue de récupération.
• CMDFILE [=] Chemin vers un fichier contenant des commandes RMAN à exécuter.
• LOG [=] Chemin vers un fichier journal ou log de l’activité RMAN.
• APPEND Indique que le fichier journal ou log doit être ouvert en mode ajout.
• USING valeur [...] Définit une ou plusieurs valeurs pour des variables de substitution qui peuvent être
utilisées dans un fichier de commandes RMAN. Dans le fichier de commande RMAN, les variables de
substitution sont définies par la syntaxe &n (éventuellement suivie d’un point), n étant un entier.
• Exemple: rman target /
rman target sys/wX#12@campus
• Les variables d’environnement comme NLS_DATE_FORMAT et NLS_LANG influent aussi sur le
format des dates et la langue des messages affichés par RMAN.
149
RMAN (Recovery Manager) / Backup
• Les commandes suivantes peuvent être utilisées dans RMAN :
• @fichier: Exécute un fichier de commande.
• @@fichier: Exécute un fichier de commande dans le même répertoire que le
fichier de commande actuel.
• SET ECHO ON | OFF Active ou désactive l’écho des commandes.
• SPOOL LOG TO fichier [APPEND]: Écrit la sortie RMAN dans un fichier.
• SPOOL LOG OFF
• Les commande de sqlplus d’arrêt / redémarrage d’instance sont
également disponible sous RMAN
• il est possible de grouper des commandes RMAN dans un bloc
délimité par des accolades et d’exécuter ce bloc avec la
commande RUN :
• RUN { ... }
151
RMAN (Recovery Manager) / Backup
• Exemple de configuration:
• La commande « configure" permet de modifier les paramètres de configuration permanant
CONFIGURE CHANNEL DEVICE TYPE DISK options ;
• La clause options peut prendre une ou plusieurs valeurs dont :
• FORMAT 'format' Chemin et format de nom de fichier pour la sauvegarde.
• MAXPIECESIZE taille [K|M|G] Taille maximale des éléments de sauvegarde. Aucune limite par défaut
• Exemple
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/dba/backup/%U‘ MAXPIECESIZE
2G ;
152
RMAN (Recovery
%d Nom de la base de données.
Manager) / Backup
%I Identifiant de la base de données (DBID).
%a Numéro d’activation de la base de données.
%N Nom du tablespace.
%f Numéro de fichier de données.
%e Numéro de séquence du fichier de journalisation archivé.
%h Numéro d’instance (thread) du fichier de journalisation archivé.
%s Numéro du jeu de sauvegarde (backup set).
%p Numéro de l’élément de sauvegarde (backup piece) à l’intérieur d’un jeu de sauvegarde.
%c Numéro de copie de l’élément de sauvegarde (cas d’une sauvegarde multiplexée). 1 si la sauvegarde n’est
pas multiplexée.
%u Chaîne unique de 8 caractères basée sur le numéro du jeu de sauvegarde ou de la copie image incluant
date/heure de la sauvegarde/copie.
%D Numéro du jour dans le mois sur deux chiffres.
%M Numéro du mois sur deux chiffres.
%Y Année sur quatre chiffres.
%T Date au format YYYYMMDD (équivalent à %Y%M%D).
153
RMAN (Recovery Manager) / Backup
• Définir une politique de conservation
• La politique de conservation peut être définie en termes de fenêtre de restauration ou de redondance.
• Fenêtre de restauration = nombre de jours auxquels on souhaite revenir en arrière.
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF n DAYS ;
154
RMAN (Recovery Manager) / Backup
Avec:
<t> nom du tablespace.
<u> chaîne de 8 caractères qui garantit l’unicité.
<g> numéro de groupe pour les fichiers de journalisation.
<i> numéro d’instance (thread) pour les fichiers de journalisation archivés.
<s>numéro de séquence pour les fichiers de journalisation archivés.
<a> nom donné à la sauvegarde (option TAG de la commande BACKUP).
<c>chaîne de 5 caractères correspondant au contenu du jeu de sauvegarde.
<h> horodatage de la sauvegarde automatique (nombre de secondes écoulées depuis une date
interne fixe).
Rman effectue des sauvegardes des fichiers de données dans un jeu de sauvegarde mais ne n’effectue
jamais de sauvegarde par blocs
155
RMAN (Recovery Manager) / Backup
• Les commandes
• Validate: est utilisée dans différentes situations (à titre préventif, avant une sauvegarde, avant une
restauration)
Database / tablespace / datafile / current controlfile / spfile / archivelog all / backupset liste_clés / recovery
area
• Exemples
• VALIDATE DATABASE ;
• VALIDATE DATAFILE 1,‘/dba/data/CAMPUS/campus_data_01' ;
•Sauvegarde / BACKUP
• Exemple
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE TAG='DBF';
RMAN> backup database; backup validate database;
BACKUP TABLESPACE data,indx INCLUDE CURRENT CONTROLFILE ;
BACKUP CURRENT CONTROLFILE ;
BACKUP AS COPY CURRENT CONTROLFILE ;
BACKUP SPFILE ;
•Le fichier de contrôle et le fichier de paramètre serveur sont sauvegardés dans un jeu de sauvegarde
séparé.
156
RMAN (Recovery Manager) / Backup
• Exemple
• BACKUP ARCHIVELOG ALL ;
• BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1' DELETE ALL INPUT ;
• BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG FROM TIME 'SYSDATE-7‘NOT BACKED UP 2 TIMES ;
• BACKUP DATABASE PLUS ARCHIVELOG ;
• BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT ;
• Sauvegarde incrémentale
• Pour réaliser une sauvegarde incrémentale, il suffit d’inclure l’option INCREMENTAL LEVEL n
[CUMULATIVE] dans la commande BACKUP.
• Exemple
• BACKUP INCREMENTAL LEVEL 0 DATABASE TAG='dbinc0' ;
• BACKUP INCREMENTAL LEVEL 1 DATABASE TAG='dbinc1' ;
• Une sauvegarde incrémentale de niveau 0 sauvegarde toujours tous les blocs utilisés des fichiers de données
• Une sauvegarde incrémentale différentielle de niveau 1 sauvegarde tous les blocs modifiés depuis la
dernière sauvegarde incrémentale de niveau 0 ou 1
157
RMAN (Recovery Manager) / Backup
• Une sauvegarde incrémentale cumulative de niveau 1 sauvegarde tous les blocs modifiés depuis la dernière
sauvegarde incrémentale de niveau 0.
• Les sauvegardes incrémentales cumulatives sont plus intéressantes pour la rapidité de récupération
(moins de sauvegardes intermédiaires à appliquer) mais nécessitent plus d’espace disque.
• Une sauvegarde incrémentale de niveau 0 peut être effectuée sous la forme d’une copie image (BACKUP
AS COPY INCREMENTAL LEVEL 0) alors qu’une sauvegarde incrémentale de niveau 1 est forcément
réalisée sous la forme d’un jeu de sauvegardes.
158
RMAN (Recovery Manager) / Backup
• Sauvegarde complète base fermée (cohérente)
• BACKUP DATABASE;
• Sauvegarde complète base ouverte (incohérente)
• BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
159
RMAN (Recovery Manager) / Backup
• Sauvegardes incrémentales cumulatives sont réalisées sur un cycle d’une semaine
• Dimanche : sauvegarde incrémentale de niveau 0
• BACKUP INCREMENTAL LEVEL 0 DATABASE ;
• Lundi au samedi : sauvegarde incrémentale cumulative de niveau 1
• BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE ;
• Il faut une sauvegarde des archivelogue
• La commande REPORT permet:
• lister les éléments qui nécessitent une sauvegarde ;
• lister les sauvegardes obsolètes ;
• afficher la liste des fichiers de données de la base de données.
160
RMAN (Recovery Manager) / Backup
• Syntaxe
REPORT NEED BACKUP [condition] [objets];
- condition
DAYS [=] n
INCREMENTAL [=] n
RECOVERY WINDOW OF n DAYS
REDUNDANCY [=] n
- objets
DATABASE
DATAFILE liste_numéros_ou_noms
TABLESPACE liste_noms
• La commande REPORT NEED BACKUP affiche la liste des fichiers qui nécessitent une sauvegarde par défaut,
par rapport à la politique de sauvegarde configurée (CONFIGURE RETENTION POLICY).
• La commande REPORT OBSOLETE affiche liste des sauvegardes obsolètes en tenant compte de la politique
de conservation configurée (CONFIGURE RETENTION POLICY).
• Condition: permet de spécifier le critère à prendre en compte dans la commande REPORT afin de
déterminer si un fichier doit d’être sauvegardé.
• La commande DELETE: permet de supprimer des sauvegardes. Elle supprime les fichiers physiques et l’enregistrement dans le référentiel
RMAN.
deux possibilités
• supprimer des sauvegardes ou des fichiers de journalisation spécifiques ;
• supprimer les sauvegardes obsolètes.
• La commande CATALOG: permet d'indiquer à RMAN l'emplacement d'un fichier ou l'existence ou non de celui-ci
CATALOG { ARCHIVELOG | BACKUPPIECE } liste_fichiers ;
• Permet de cataloguer des fichiers précis. Si le fichier est déjà catalogué alors RMAN supprime l’ancienne référence avant de créer la
nouvelle.
165
RMAN (Recovery Manager) / Restauration
• La commande RECOVER
Syntaxe de la commande RECOVER:
RECOVER cible [options]
- cible
DATABASE
DATAFILE liste_numéros_ou_noms
TABLESPACE liste_noms
• RMAN recherche les fichiers de journalisation archivés dont il a besoin pour faire le recover / récupération sur disque à défaut
les restaures depuis la sauvegarde vers LOG_ARCHIVE_DEST_1
• La commande REPAIR
Syntaxe de la commande REPAIR:
REPAIR cible [options]
- cible
DATABASE
DATAFILE liste_numéros_ou_noms
TABLESPACE liste_noms
167
Architecture Multitenant (CDB/PDB)
• Architecture NoCDB/CDB
Avec la version 12C d’Oracle est apparue l’architecture Multitenant (CDB Container Database). Un CDB peut
contenir plusieurs PDB (Pluggable Database)
168
Architecture Multitenant (CDB/PDB)
• Avant la 19C une seule PDB était disponible en version sans option aussi bien en EE et SE2.
• Avec 19C oracle met à disposition en EE et SE2 3PDB + PDB(SEED) sans option
• A partir de la 21C l’architecture NoCDB sera dépréciée donc il ne sera plus possible de créer un base de données
conventionnelle.
• Une base de données conteneur est composée obligatoirement d’un conteneur racine (Root ou CDB Root) et d’une base de
données enfichable d’amorçage ou modelé appelée PDB Seed et de une ou plusieurs bases de données enfichables
"utilisateurs" (PDB).
• Il est possible d’avoir le CDB(root ) et d’autre CDB applicative avec leur propre PDB
• La base CDB porte un nom défini lors de sa création par le paramètre d’initialisation DB_NAME du fichier d’initialisation,
comme pour une base de données traditionnelle. Cette base de données conteneur est ouverte de façon habituelle par une
instance désignée par la variable d’environnement ORACLE_SID.
• Dans l’architecture CDB, les différentes PDB partagent la même instance (SGA et processus).
• Dans le cas ou il y a une instance avec CDB$root, lorsqu’on arrête l’instance alors la CDB est fermée, toutes les PDB qui
sont également attachées fermées
• . Par contre, lorsque il y a un CDB$root et d’autre CDB applicative, on peut arrêter une CDB spécifique sans arrêter les
autres.
• Les fichiers de contrôle et les fichiers de journalisation jouent le même rôle que dans une base de données traditionnelle et
ils sont eux aussi partagés par l’ensemble des conteneurs (CDB Root, PDB Seed et PDB utilisateur).
• Les PDB partagent tous les fichiers de données, les metadonnées, package …. de la CDB$root
• Une PDB a aussi ces propres fichiers de données et metadonnées
• Depuis la version 12.2 oracle donne le choix pour la configuration du tablespace d’annulation (UNDO). Il peut être locale au
PDB ou partage au niveau de la CDB$Root 169
• A chaque PDB utilisateur est associé un nom de service qui porte le même nom que la PDB
• Le nom de service sera utilisé pour se connecter à la PDB comme une base de données NoCDB, soit en
utilisant le nom de service réseau défini dans le fichier tnsnames.ora, soit dans une connexion de type
(serveur(:port]/service)
• Le nom du PDB doit être unique au sein d’une CDB, mais aussi au sein de l’ensemble des CDB qui ont le même
processus d’écoute, afin d’éviter des conflits sur les noms de services enregistrés auprès du processus
d’écoute
170
171
Architecture Multitenant (CDB/PDB)
• Architecture Multitenant avec CDB$ROOT et CDB(Application)
• Une CDB-Application joue le même rôle qu’un CDB$ROOT. L’application est installé au niveau de CDB-A et
est partagée par toutes les PDBs qui sont connectées à cette applis.
172
Architecture Multitenant (CDB/PDB)
• Les différentes types de PDBs dans l’architecture multitenant
• PDB proxy est une PDB dans une CDB qui fait référence à une PDB dans une autre CDB (sur le même serveur ou sur
un autre serveur). Les utilisateurs connectés à cette PDB proxy accèdent en fait de façon transparente à la PDB
distante et voient les objets de la PDB distante comme s’ils étaient locaux.
• PDB copie snapshot est une copie d’une PDB qui utilise des mécanismes de snapshot au niveau du stockage afin
ne pas dupliquer l’intégralité des fichiers de données de la PDB d’origine. De ce fait, la création de la PDB est très
rapide et l’espace qu’elle utilise initialement très faible.
Il faut vérifier que votre système support le mécanisme de snapshot.
173
Administration d’un instance CDB
• Connexion
Dans une base de données CDB, la connexion peut s’effectuer par l’intermédiaire de n’importe quel conteneur
CDB$Root ou PDB elle peut être:
• Connexion locale au PDB en positionnant la variable d’environnement ORACLE_SID.
• Connexion à l’aide d’un nom de service réseau défini dans le fichier tnsnames.ora par l’intermediaire de
SID ou service_name
• Connexion à l’aide la méthode easy connect ([//]hôte[:port][/service]).
Pour se connecter à un CDB$ROOT, il faut avoir le privilège nécessaire "create session" ou des droit du type sys
ou system
Exemple de connexion
sqlplus / as sysdba
Show con_name affiche le nom du container de connexion.
Show PDBS affiche les noms des PDBs
174
Administration d’une instance CDB
• Pour pouvoir changer de container l’utilisateur doit avoir le droits globale ou local sur le centenaire et avoir
le "privilège set container"
ALTER SESSION SET CONTAINER = nom_conteneur [SERVICE = nom_service]; permet de se connecter à un
autre PDB.
• Les vues actuelles du dictionnaire peuvent être interrogé mais ces vues retournent des informations sur le
conteneur courant uniquement (CDB Root ou PDB). Par exemple, la vue DBA_TABLESPACES donne la liste des
tablespaces de la PDB courante, pas la liste de tous les tablespaces de la base de données dans son
ensemble c’est-à-dire la CDB .
(DBA_%, ALL_% et USER_%)
• Oracle introduit une notion "d’objet de données de conteneur" (container data objects) qui désigne une table
ou une vue qui contient des données relatives à plusieurs conteneurs.
• Les vues V$% donnent les informations sur toutes les données du conteneur.
• Il y a de nouvelle catégorie de vues dont le nom est préfixé par CDB_. Toutes ces vues comportent une
colonne CON_ID qui identifie le conteneur de la ligne retournée. Les valeurs possibles de cette colonne sont
les suivantes
175
• Remarque dans une base de données non CDB, la colonne CON_ID vaut toujours 0.
• Pour chaque vue de type DBA_% il y a une vue de type CDB_% équivalante
• Pour une connexion à CDB$Root avec un utilisateur comme SYS ou SYSTEM, l’interrogation des vues CDB_
% retourne des informations sur toutes PDB ouvertes, à l’exception de la PDB Seed et des conteneurs ouverts
dans le mode RESTRICTED.
• L’interrogation des vues V$% retourne des informations sur tous les conteneurs sans exception. Si on est
connecté à une PDB, l’interrogation de ces vues retourne des informations de la PDB courante uniquement.
L’interroger d’une vue CDB_% est équivalent dans ce cas à interroger une vue DBA_%.
• Le fichier d’alerte de l’instance est associé à l’instance et est donc unique pour une base de données conteneur
: il n’y a pas un fichier d’alerte par PDB. Le fichier d’alerte d’une instance qui ouvre une base de données
conteneur contient donc des messages relatifs à la totalité de la base de données et à l’ensemble des
conteneurs (CDB$Root et PDB).
• Les messages spécifiques à une PDB sont clairement identifiés avec le nom et l’identifiant de la PDB en début
de ligne
176
Administration d’un instance CDB
L’administration d’une base CDB est identique à celui d’une base NoCDB
La création d’une base de données Container peut se faire manuellement en exécutant les
packages nécessaire ou par l’interface graphique: le DBCA.
Cette étape va créer le CDB$ROOT et PDB$SEED.
Pour créer une PDB une fois la PDBseed créé, il y a plusieurs possibilité (voir schema ci-dessous)
177
Administration d’un instance CDB
ifférentes opérations de création ou de manipulations des objets de PDB / CDB peuvent se faire
ne de commande avec sqlpl / sqlcl / sqlDeveloper / EM Express / DBCA
178
Administration d’une instance CDB
• Prérequis à la création d’une PDB.
• Pour un utilisateur non (sys, system et n’ayant pas le rôle dba), il doit avoir le privilège "CREATE
PLUGGABLE DATABASE«
• La CDB$ROOT doit être ouverte en lecture/ écriture
• La vue PDB_PLUG_IN_VIOLATIONS permet d’afficher les information sur les problème de conflit éventuel.
179
Administration d’un instance CDB
• Exemples
exemple
CREATE PLUGGABLE DATABASE P_CAMPUS01
ADMIN USER admin_pdb IDENTIFIED BY
JesuisOraclePDB;
Exemple 2
CREATE PLUGGABLE DATABASE P_CAMPUS01
ADMIN USER admin_pdb IDENTIFIED BY
JesuisOraclePDB
FILE_NAME_CONVERT =
('/u01/CAMPUS01/data/campus/pdbseed',
'/u01/CAMPUS01/data/P_CAMPUS01/p_campus01')
Exemple 3
; CREATE PLUGGABLE DATABASE P_CAMPUS01
ADMIN USER admin_pdb IDENTIFIED BY
JesuisOraclePDB
FILE_NAME_CONVERT =
('/pdbseed/','/P_CAMPUS01/');
Exemple 4
CREATE PLUGGABLE DATABASE P_CAMPUS01
ADMIN USER admin_pdb IDENTIFIED BY JesuisOraclePDB
CREATE_FILE_DEST =
'/u01/CAMPUS01/data/P_CAMPUS01/p_campus01');
Si aucune clause n’est présente et si aucun paramètre d’initialisation n’est défini, vous obtiendrez une erreur 180
lors de la création de la PDB.
Administration d’un instance CDB
• Pour finaliser la création de la PDB, elle doit être ouvert en lecture / écriture
• La clause obligatoire ADMIN USER permet de spécifier le nom et le mot de passe d’un utilisateur local de la nouvelle PDB qui
aura potentiellement le droit d’administrer la PDB.
• Cet utilisateur reçoit le rôle PDB_DBA qui comporte initialement et uniquement les privilèges système CREATE
SESSION et CREATE PLUGGABLE DATABASE.
• Les droits de cet utilisateur sont donc restreints au départ, mais on peut lui attribuer d’autres droits ultérieurement si
nécessaire.
• CREATE PLUGGABLE
On peut ajouter DATABASE
la clause ROLES P_CAMPUS01
lors de la création de la PDB pour attribuer localement à l’utilisateur le rôle PDB_DBA.
ADMIN USER admin_pdb IDENTIFIED BY JesuisOraclePDB
roles=(DBA);
• Le rôle DBA au rôle PDB_DBA permet à l’utilisateur admin_pdb d’avoir les droits suffisants pour administrer la PDB
181
Administration d’un instance CDB
• La clause FILE_NAME_CONVERT permet de définir des règles pour la conversion des noms de fichiers sous la forme de
couples de chaînes : la première chaîne est recherchée dans le nom du fichier d’origine et remplacée par la deuxième
chaîne pour générer le fichier de destination.
• La clause FILE_NAME_CONVERT = NONE est équivalente à omettre la clause.
• La clause CREATE_FILE_DEST active l’utilisation des fichiers gérés par Oracle pour la nouvelle PDB et spécifie le
répertoire de base dans lequel les fichiers seront créés
• La clause CREATE_FILE_DEST = NONE désactive l’utilisation des fichiers gérés par Oracle (OMF) pour la PDB.
• La valeur (autre que NONE) de cette clause sera stockée dans le paramètre DB_CREATE_FILE_DEST de la PDB ceci
permet de stocker les fichiers de données d’Oracle créés ultérieurement dans la même arborescence que les fichiers
de données créés lors de la création de la PDB (sauf si le paramètre DB_CREATE_FILE_DEST est modifié entre-temps
dans la PDB).
• Par défaut, la PDB hérite de la valeur du paramètre DB_CREATE_FILE_DEST de la CDB Root
• Dans la clause CREATE_FILE_DEST, le chemin au niveau OS peut être remplacé par le nom d’un objet DIRECTORY défini
dans la CDB Root
CREATE OR REPLACE DIRECTORY PDB_DEST AS
'/u01/CAMPUS01/data/P_CAMPUS01/p_campus01';
183
Administration d’un instance CDB
• Création d’un PDB Locale par CLONAGE
• Une nouvelle PDB peut être créée par clonage d’une PDB existante sur la même CDB. Les fichiers de données de la PDB
source seront copiés vers un nouvel emplacement et associés à la nouvelle PDB.
• S la CDB est en mode noarchivelog, il faut mettre en lecture seule la PDB source avant de cloné.
• Si la CDB est en mode archivelog et en gestion locale d’annulation alors le PDB source peut être cloné en étant ouverte
en lecture / écriture
C’est le clonage a chaud.
Syntaxe
CREATE PLUGGABLE DATABASE nom_pdb_cible FROM nom_pdb_source [NO
DATA]
[ DEFAULT TABLESPACE nom_tablespace ]
[ USER_TABLESPACES = (liste) | ALL [EXCEPT (liste)] | NONE [NO DATA] ]
[ FILE_NAME_CONVERT = ('chaine1','chaîne2'[,…]) ]
[ CREATE_FILE_DEST = 'chemin' | NONE]
[ STORAGE ([MAXSIZE taille | UNLIMITED]
[MAX_DIAG_SIZE taille | UNLIMITED]) ]
[ SERVICE_NAME_CONVERT = ('ancien_nom','nouveau_nom'[,...]) ] ;
Exemple
CREATE PLUGGABLE DATABASE p_campus01 FROM p_campus02;
Exemple
CREATE PLUGGABLE DATABASE p_campus01 FROM p_campus02;
FILE_NAME_CONVERT = ('/u01/CAMPUS01/data/P_CAMPUS01/',
'/u01/CAMPUS01/data/P_CAMPUS02/')
• Dans la nouvelle PDB, les tablespaces exclus sont créés mais sont en OFFLINE, sans fichiers de données. Ils
apparaissent dans la vue V$TABLESPACE mais pas dans la vue DBA_TABLESPACES. Les tablespaces non
reprisent c’est-à-dire offline peuvent être supprimés définitivement dans la nouvelle PDB
• La clause SERVICE_NAME_CONVERT permet de renommer les services de la PDB d’origine dans la nouvelle
PDB.
Syntaxe
SERVICE_NAME_CONVERT = ('ancien_nom','nouveau_nom'[,...])
CREATE PLUGGABLE DATABASE p_campus01 FROM p_rh
FILE_NAME_CONVERT = ('/data/CAMPUS01/campus01','/data/CAMPUS01/RH/')
SERVICE_NAME_CONVERT = ('campus','p_rh');
185
Administration d’un instance CDB
• Création d’un PDB par CLONAGE distante
• Prérequis:
• Créer un utilisateur commun dans la CDB$ROOT source (un utilisateur commun est du type C##mawer)
• L’utilisateur du dblink doit avoir le privilège "CREATE SESSION, CREATE PLUGGABLE DATABASE et SYSOPER"
• Créer un dblink entre la CDB cible et la CDB ou PDB source.
• Les options installées dans la CDB source doivent être les mêmes que les options installées dans la CDB cible, ou
un sous-ensemble.
• Si le jeu de caractères de la CDB cible n’est pas AL32UTF8, alors la PDB source doit avoir le même jeu de
caractères que la CDB cible (ou un jeu de caractères compatible, c’est-à-dire un jeu de caractères qui est un sous-
ensemble du jeu de caractères de la CDB cible). Cette contrainte n’existe pas si le jeu de caractères de la CDB cible
est AL32UTF8
• Si la CDB est en mode noarchivelog, il faut mettre en lecture seule la PDB source avant de cloné.
• Si la CDB est en mode archivelog et en gestion locale d’annulation alors le PDB source peut être cloné en étant
ouverte en lecture / écriture
C’est le clonage a chaud.
Syntaxe
Exemple
CREATE PLUGGABLE DATABASE nom_pdb_cible FROM nom_pdb_source@dblink
- CREATE USER c##mawer IDENTIFIED BY JeSuisOracle; (source)
## cible ##
- Create database link to_campus01 connect to c##mawer identified by
JeSuisOracle using CAMPUS02;
-
CREATE PLUGGABLE DATABASE p_campus02 FROM p_campus01@to_campus01
FILE_NAME_CONVERT = ('/u01/CAMPUS01/data/P_CAMPUS01',
'/u01/CAMPUS01/data/P_CAMPUS02/');
186
Administration d’un instance CDB
• Création d’un PDB par CLONAGE d’un NoCDB
• Prérequis:
• Même contrainte qu’un clonage distante (options installées, jeu de caractères etc ..)
• Les version de la CDB et NoCDB doit être 12.1.0.2 ou ultérieure.
• La base de données CDB et NoCDB doivent utiliser la même taille de bloc
• CDB en mode archivelog ou noarchivelog (même contrainte clonage PDB distant)
• Créer un dblink dans la CDB cible avec un user qui a les privilèges "CREATE SESSION, CREATE
PLUGGABLE DATABASE et SYSOPER"
Exemple:
- CREATE USER mawer IDENTIFIED BY JeSuisOracle; (source NoCDB)
- GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE, SYSOPER TO mawer;
- ## Cible Base CDB
- Create database link to_dbnoCDB connect to mawer identified by JeSuisOracle using
CAMPUS02;
-
CREATE PLUGGABLE DATABASE pdb_CAMPUS01 FROM CAMPUS@to_dbnoCDB
FILE_NAME_CONVERT = ('\CAMPUS\','\pdb_CAMPUS\');
• Post Clonage:
- Exécuter le script de conversion de la base NoCDB en CDB 187
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
Administration d’un instance CDB
• Création d’une PDB par " rafraîchissable "
• C’est identique à un clonage de PDB distante mais la PDB demeure en mode lecture seule. Toute
modification faite sur la source est répercutée à une fréquence régulière sur la cible.
Syntaxe
REFRESH MODE { NONE | MANUAL | EVERY n {MINUTES | HOURS} }
188
Administration d’un instance CDB
• Création d’une PDB par "BRANCHEMENT"
• On peut débrancher un PDB (unplug) d’une CDB1 et le brancher sur une autre CDB2.
• Prérequis:
• Les options installées dans la CDB source doivent être les mêmes que les options installées dans la CDB cible, ou un sous-
ensemble
• Si le jeu de caractères de la CDB cible n’est pas AL32UTF8, alors la PDB source doit avoir le même jeu de caractères que la CDB
cible (ou un jeu de caractères compatible, c’est-à-dire un jeu de caractères qui est un sous-ensemble du jeu de caractères de la
CDB cible). Cette contrainte n’existe pas si le jeu de caractères de la CDB cible est AL32UTF8
• Se connecté à la CDB$Root avec une connexion AS SYSDBA, la PDB source à débrancher doit être fermée
• Avant de débrancher/brancher une PDB vérifier qu’elle est bien compatible avec la CDB cible (options, jeu de caractères, etc.).
Avec la procédure DBMS_PDB.DESCRIBE (source) ou DBMS_PDB.CHECK_PLUG_COMPATIBILITY (cible).
La vue PDB_PLUG_IN_VIOLATIONS pour en savoir plus d’information sur l’incompatibilité des de la PDB
Syntaxe
• ALTER PLUGGABLE DATABASE nom_pdb UNPLUG INTO 'nom_fichier'
Exemple
ALTER PLUGGABLE DATABASE p_rh CLOSE;
Fichier XML : (contient uniquement les information sur les metadonnées )
ALTER PLUGGABLE DATABASE p_rh UNPLUG INTO ‘/data/CAMPUS01/p_rh.xml';
Fichier PDB : (fichier archive plus long et volumineux mais contient le fichier xml et tous les
fichiers de données)
ALTER PLUGGABLE DATABASE p_rh UNPLUG INTO ‘/data/CAMPUS02/p_rh.pdb';
• Une fois que la PDB a été débranchée, elle apparaît toujours MOUNTED dans la vue V$PDBS mais elle a le statut UNPLUGGED dans la vue CDB_PDBS, et
elle n’est plus disponible dans la CDB 189
Administration d’un instance CDB
• Brancher la PDB
• Le branchement d’une PDB dans une CDB diffère légèrement selon que la PDB a été débranchée dans un fichier XML ou
dans une archive de PDB
• Dans l’archive de PDB, les fichiers de données de la PDB sont extraits de l’archive par conséquent il n’est pas nécessaire d’utiliser les
clauses qui spécifient l’emplacement des fichiers de données.
• Dans le cas de fichier XML il faut préciser l’emplacement des fichiers de données avec la clauses
Syntaxe SOURCE_NAME_CONVERT ou SOURCE_FILE_DIRECTORY
CREATE PLUGGABLE DATABASE nom_pdb [AS CLONE] USING nom_fichier
[ SOURCE_FILE_NAME_CONVERT = ('chaine1','chaîne2'[,…]) ]
[ SOURCE_FILE_DIRECTORY = 'chemin' ]
[ NOCOPY | COPY | MOVE ]
[ FILE_NAME_CONVERT = ('chaine1','chaîne2'[,…]) ]
[ TEMPFILE REUSE ]
[ DEFAULT TABLESPACE nom_tablespace ]
[ USER_TABLESPACES = (liste) | ALL [EXCEPT (liste)] | NONE [COPY | MOVE] ]
[ CREATE_FILE_DEST = 'chemin' | NONE]
[ STORAGE ([MAXSIZE taille | UNLIMITED] [MAX_DIAG_SIZE taille | UNLIMITED])
]
[ SERVICE_NAME_CONVERT = ('ancien_nom','nouveau_nom'[,...]) ] ;
• EM Express / SqlDeveloper
• Créer une PDB à partir de zéro
• Clonage d’un PDB local / distante
• Débranchement / Branchement
• Rafraîchissement
• Supprimer un PDB
• Ouvrir/fermer la base de données pluggable
192
Gestion de la CDB et des PDB
• Lorsqu’une CDB est ouverte, les PDBs attenante peuvent être ouverte également.
• La commande "startup" Monter / ouvre la CDB par contre les PDBs ne sont pas ouverte
automatiquement.
• Commande pour démarrer plusieurs PDBs
Syntaxe:
ALTER PLUGGABLE DATABASE {liste | ALL | ALL EXCEPT liste} action;
- liste
nom_pdb[, ...]
- action
OPEN [READ WRITE | READ ONLY] [RESTRICTED] [FORCE]
CLOSE [IMMEDIATE | ABORT]
Pour mémoriser l’action précédente de "alter pluggable…. " il faut ajouter le "save state / discard state" (vue
DBA_PDB_SAVE_STATES)
• il est aussi possible d’activer et de désactiver le mode RESTRICTED SESSION sur les PDB
individuellement
• La commande "shudtown" ferme toute les PDBs attacher à la CDB
Il existe plusieurs commandes pour ouvrir/fermer une PDB selon qu’on est connecté à la CDB$Root ou de la
PDB
193
Gestion de la CDB et des PDB
• Actions de modification de la PDB
Lorsqu’on se connecte à une PDB seule les actions alter system ci-dessous agissent au niveau de la PDB .
• ALTER SYSTEM CHECKPOINT
• ALTER SYSTEM FLUSH {SHARED_POOL | BUFFER_CACHE}
• ALTER SYSTEM REGISTER
• ALTER SYSTEM { ENABLE | DISABLE } RESTRICTED SESSION
• ALTER SYSTEM { KILL | DISCONNECT } SESSION
• ALTER SYSTEM CANCEL SQL
• ALTER SYSTEM SET
194
Gestion de la CDB et des PDB
• Gestion des paramètres
Les paramètres d’initialisation sont gérés au niveau de la CDB et les valeurs définies s’appliquent à toutes
les PDBs.
Cependant certains paramètres d’initialisation peuvent être modifiés au niveau de la PDB ainsi chaque PDB
pouvant avoir des valeurs différentes. Dès lors, les paramètres qui ne sont pas explicitement définis dans la
PDB héritent des valeurs définies au niveau de la CDB.
Les paramètres pouvant être modifier dans la PDB sont consultable dans la vue V$PARAMETER (paramètres qui
ont la valeur TRUE dans la colonne ISPDB_MODIFIABLE)
Dans la CDB
ALTER SYSTEM SET ... [CONTAINER = CURRENT | ALL] [SCOPE = ...]
195
Gestion de la CDB et des PDB
• Gestion de la mémoire et contrôle des ressources
• Gestion de la mémoire
La mémoire allouée à l’instance est définie par les paramètres habituels au niveau de la CDB et elle est
répartie entre les différentes PDB en fonction des besoins de chaque PDB. Or une PDB très active peut
consommer une grande partie de la mémoire au détriment des autres PDBs.
Pour contrôler plus précisément la répartition de la mémoire entre les PDB, il est possible de définir
plusieurs paramètres dans les PDBs. Pour que les paramètres soient prise en compte au niveau de la PDB il
faut positionner au niveau de la CDB le paramètre NONCDB_COMPATIBLE à FALSE et désactiver la gestion
automatique de l’instance MEMORY_TARGET = 0
• DB_CACHE_SIZE (Taille minimale garantie du Buffer Cache dans la PDB)
• SHARED_POOL_SIZE (Taille minimale garantie de la Shared Pool dans la PDB avec [DB_CACHE_SIZE + SHARED_POOL_SIZE] =< 50% à la valeur
de SGA_TARGET de la PDB et de la CDB.)
• SGA_MIN_SIZE (Taille minimale garantie de la SGA dans la PDB sa valeur doit être =< 50% de la valeur du paramètre SGA_TARGET de la PDB et de
la CDB)
• SGA_TARGET (La valeur de ce paramètre dans la PDB doit être =< 50% à la valeur du paramètre SGA_TARGET de la CDB )
• PGA_AGGREGATE_LIMIT (Taille maximum de la PGA dans la PDB valeur =< de PGA_AGGREGATE_LIMIT de la CDB et >= 2*
PGA_AGGREGATE_TARGET de la PDB)
• PGA_AGGREGATE_TARGET (Taille cible de la PGA dans la PDB =< à la valeur de PGA_AGGREGATE_TARGET de la CDB et =< 50% la valeur du
paramètre PGA_AGGREGATE_LIMIT de la PDB et de la CDB)
les contraintes d’inferieur ou égale à 50 % permettent de garantir qu’Oracle aura de la réserve nécessaire
pour allouer dynamiquement un minimum de mémoire en fonction des besoins.
197
Gestion de la CDB et des PDB
• Gestion de la mémoire et contrôle des ressources
• Gestion de la CPU
Le paramètre d’initialisation CPU_COUNT définit le nombre de CPU disponibles pour la base de données. Par
défaut, la valeur de ce paramètre est égale au nombre de CPU de la machine. Par conséquent la notion de
"nombre de CPU" mentionnée ici correspond à un nombre de threads (files d’exécution) en tenant compte
de l’architecture des processeurs (plusieurs cœurs avec ou sans fonctionnalité de multithreading).
Ce paramètre peut être défini explicitement dans une instance (CDB ou non CDB) pour limiter le nombre de
CPU utilisées par l’instance.
Dans une base de données conteneurs, ce paramètre peut aussi être défini dans les PDB pour limiter le
nombre de CPU utilisées par la PDB. De cette manière, il est possible de faire en sorte qu’une PDB ne
consomme pas trop de CPU au détriment des autres PDB. La valeur définie dans une PDB doit être
inférieure à la valeur définie dans la CDB (nombre maximum de CPU utilisées pour la totalité de la CDB)
Depuis la version 19.4, il est aussi possible de définir le paramètre d’initialisation CPU_MIN_COUNT ( spécifie le
nombre minimum de CPU (threads) requises pour la PDB)
Les paramètres CPU_COUNT et CPU_MIN_COUNT permettent de contrôler les consommations CPU de PDB
• Certains ordres SQL de type (alter database / system) ne peuvent pas être exécuté au niveau de la PDB car la structure se situe au
niveau de la CDB$ROOT (fichier de contrôle, journalisation ..)
si c’est le cas vous auriez une erreur du type ORA-65040: opération non autorisée à partir d'une base de données pluggable
Toutefois le paramètre statique "NONCDB_COMPATIBLE=TRUE" permet d’exécuté l’ordre au niveau de la CDB bien que la connexion
est sur la PDB sans erreur.
199
Gestion du stockage
• Gestion des tablespaces et des fichiers de données
• Dans une base de données conteneurs, chaque PDB peut avoir ces propres tablespaces, notamment
(SYSTEM, SYSAUX, data) ainsi qu’un tablespace temporaire et d’annulation selon le mode de gestion de
l’annulation choisie.
• Le tablespace SYSTEM dans une PDB stocke uniquement les définitions des objets "utilisateurs" stockés
dans la PDB, mais les définitions communes de la CDB Root sont rendues visibles par des mécanismes
internes de lien.
Par conséquent le tablespace SYSTEM de PDB est beaucoup plus petit que celui de la CDB$Root
• Le répertoire de destination de chaque fichiers de la PDB doit être définie
• Dan le cas d’utilisation de OMF il faut définir le "DB_CREATE_FILE_DEST " et Oracle créera ces fichiers dans le
répertoire indiqué.
ALTER [PLUGGABLE] DATABASE [nom] SET DEFAULT {BIGFILE|SMALLFILE}
TABLESPACE;
Les ordres SQL ci-dessous permet d’agir sur le storage d’un tablespace au niveau de la PDB
ALTER [PLUGGABLE] DATABASE [nom] DEFAULT TABLESPACE nom_tablespace;
ALTER [PLUGGABLE] DATABASE [nom] DEFAULT TEMPORARY TABLESPACE
nom_tablespace;
ALTER [PLUGGABLE] DATABASE [nom] RENAME FILE ...;
ALTER [PLUGGABLE] DATABASE [nom] DATAFILE ...;
ALTER [PLUGGABLE] DATABASE [nom] STORAGE ...;
200
Gestion du stockage
• Gestion de l’annulation
Avant la version 12.2 seule la gestion partager de l’espace d’annulation était disponible.
Avec la 12.2 est apparue la gestion locale du tablespace d’annulation.
Les avantages de la gestion locale sont les suivants
• Meilleure isolation de chaque conteneur
• Possibilité d’effectuer un clonage ou un déplacement d’une PDB ouverte en lecture/écriture
• Amélioration des performances pour certaines opérations débranchement de la PDB
• Meilleur gestion de redo log en récupération incomplète de la PDB
Pour des raisons de compatibilité ascendante, le mode partagé est le mode par défaut sauf lorsqu’on utilise DBCA.
Il est possible de passer du mode partagé au mode local par les commandes suivantes
SHUTDOWN IMMEDIATE
STARTUP UPGRADE
ALTER DATABASE LOCAL UNDO ON;
SHUTDOWN IMMEDIATE
STARTUP
ALTER PLUGGABLE DATABASE ... OPEN;
La modification est applicable à l’ensemble des PDB y comprise la PDB$SEED. La gestion locale s’active lors de la
première ouverture de la PDB avec la création d’un UNDO_01 de 20Mo.
Les ordres SQL habituels de gestion des tablespaces et des datafiles sont aussi utilisable pour modifier les
caractéristiques du tablespace créé.
La colonne 'LOCAL_UNDO_ENABLED‘ de la vue "DATABASE_PROPERTIES" permet d’avoir l’information sur le type de gestion.
201
Gestion des utilisateurs au niveau de la
CDB/PDB
• Utilisateurs dans CDB/PDB
• Dans une base de données conteneur, il est possible de créer un utilisateur commun dans la CDB$Root qui
seront connus implicitement dans toutes les PDB. A condition d’avoir le privilège CREATE SESSION.
Un utilisateur commun peut se connecter à n’importe quelle PDB, avec le même nom et le même mot de
passe.
Un utilisateur commun peut avoir des privilèges et ou rôles différents dans les différentes PDB
• Par contre un utilisateur créé localement dans une PDB n’existe que dans cette PDB et ne pourra pas se
connecter ni à la CDB$Root ni à une autre PDB.
Il est possible de créer deux utilisateurs ayant le même nom dans deux PDB différentes avec des droits
différents dans chaque PDB.
Il est possible de créer des rôles communs ou locaux, ainsi que des profils communs ou locaux.
• Les noms des utilisateurs, rôles et profils communs doivent commencer par le préfixe c## ou C##.
Le paramètre du préfixe est définie par le paramètre " COMMON_USER_PREFIX " cette valeur est modifiable
• Les ordres SQL relatifs à la gestion des utilisateurs et des droits peuvent avoir une clause "CONTAINER" qui
accepte deux valeurs
• CONTAINER=ALL : l’action s’effectue dans tous les conteneurs.
• CONTAINER=CURRENT : l’action concerne uniquement le conteneur courant
202
Gestion des utilisateurs au niveau de la
CDB/PDB
• Créer et modifier les utilisateurs
• Les syntaxes SQL qui permettent de créer, modifier un utilisateur sur une base NOCDB est le même que
pour les bases CDB.
• Pour une base CDB il faut ajouter la clause "CONTAINER" et définir le type d’utilisateur qui sera créé (local
ou commun) en respectant la règle de nommage
• Utilisateur local: se connecte à la PDB
• Utilisateur commun: se connecte à la CDB$ROOT
• Lors de la création d’un utilisateur commun, les clauses DEFAULT TABLESPACE, TEMPORARY
TABLESPACE, QUOTA et PROFILE peuvent être utilisées. Si ces clauses sont omises, les valeurs par défaut
seront utilisées
• La seule valeur autorisée pour la clause CONTAINER est:
• ALL utilisateur commun
• CURRENT Utilisateur Local
• si les conditions de nommage ou de syntaxe ne sont pas respectées une erreur est retournées.
• Les clauses ALL ou CURRENT peuvent être omises
• Un utilisateur commun peut être modifié localement ou de façon commune.
• Pour modifier un utilisateur commun localement, il faut être connecté à la PDB concernée et spécifier la
clause CONTAINER=CURRENT
• Pour modifier un utilisateur commun de façon commune, il faut être connecté à la CDB Root et spécifier la
clause CONTAINER=ALL
• La suppression d’un utilisateur commun s’effectue obligatoirement et uniquement en étant connecté à la
CDB Root
• La suppression d’un utilisateur local s’effectue obligatoirement et uniquement en étant connecté à la PDB
dans laquelle l’utilisateur est défini. 203
Gestion des utilisateurs au niveau de la
CDB/PDB
• Gestion des profils Utilisateur
• Il est possible de créer des profils communs ou locaux, avec les mêmes règles que pour la gestion des
utilisateurs
• Se connecter au bon conteneur
• Le préfixe C## peut être utiliser ou non et utilisation de la clause CONTAINER est optionnelle.
• Un profil local peut être créé, modifié ou supprimé uniquement en étant connecté à une PDB.
• Un profil commun peut être créé, modifié ou supprimé uniquement en étant connecté à la CDB Root
• Il n’est pas possible d’avoir des limites différentes CDB par rapport à la PDB
• Un utilisateur local peut avoir un profil local ou commun
• Un utilisateur commun peut avoir un profil commun ou local. Il peut se voir attribuer aussi d’autre profile
dans la CDB$ROOT et PDB
• Lorsque l’utilisateur commun se connecte à la PDB, la limite qui s’applique à la session varie selon qu’il
s’agit d’une limite liée aux mots de passe ou d’une limite liée aux ressources
• Les limites liées aux mots de passe sont extraites du profil attribué à l’utilisateur commun dans la CDB Root.
• Les limites liées aux ressources sont extraites du profil attribué à l’utilisateur commun dans la PDB.
204
Gestion des utilisateurs au niveau de la
CDB/PDB
• Gestion des droits
• Les ordres SQL habituels GRANT et REVOKE permettent d’attribuer des droits avec la valeur de la
clause CONTAINER et CURRENT par default même lorsque les ordres SQL sont exécutés en étant connecté à la CDB
Root.
• Il est possible de créer des rôles communs ou locaux, avec les mêmes règles que pour la gestion des utilisateurs en
se connectant au bon conteneur
• Il est possible d’utiliser ou non du préfixe C##. L’utilisation de la clause CONTAINER est optionnelle
• Règles relatives à l’utilisation de la clause CONTAINER=CURRENT dans l’ordre SQL GRANT
• peut être exécutée par un utilisateur commun ou local (s’il est connecté à une PDB) qu’il a le droit d’attribuer des droits à
d’autre utilisateur ;
• peut être utiliser pour attribuer un rôle commun ou local, ou un privilège système ou objet ;
• peut être utiliser pour attribuer à un utilisateur commun ou local un role ;
• peut s’appliquer uniquement au conteneur courant (CDB Root ou PDB selon la connexion).
• Règles relatives à l’utilisation de la clause CONTAINER=ALL dans l’ordre SQL GRANT
• doit être exécuté par un utilisateur commun connecté à la CDB Root et qui a le droit d’attribuer des droits à d’autre utilisateur ;
• peut permet d’attribuer un rôle commun (uniquement), ou un privilège système ou objet ;
• peut être utiliser pour attribuer à un utilisateur ou un rôle commun (uniquement) ;
• Pour être appliquer à tous les conteneurs (CDB Root et PDB actuelles et futures).
• Attribuer un privilège objet de façon commune nécessite que l’objet en question soit lui-même commun
• Les règles relatives à l’utilisation de la clause CONTAINER dans l’ordre SQL REVOKE sont les mêmes que pour l’ordre
SQL GRANT
• La règle supplémentaire de révocation d’un privilège ou d’un rôle dans un périmètre donné (CURRENT ou ALL) n’est
possible que si le privilège a été attribué dans le même périmètre
• La clause CONTAINER=CURRENT ne peut pas révoquer un privilège qui a été attribué avec CONTAINER=ALL.
• La clause CONTAINER=ALL ne peut pas révoqur un privilège qui a été attribué avec CONTAINER=CURRENT.
205
Gestion des utilisateurs au niveau de la
CDB/PDB
• Gestion des droits
• Un utilisateur commun peut avoir deux fois un privilège dans un conteneur :
• Privilège a été attribué de façon commune (CONTAINER=ALL connecté à CDB Root)
• Privilège a été attribué de façon locale (CONTAINER=CURRENT connecté à une PDB
Cette situation est source potentiel de confusion. Il est visible dans le dictionnaire de données avec la vue cdb_sys_privs
• Il n’est pas possible d’attribuer des privilèges pour une liste de PDB ou pour toutes les PDB sauf certaines.
• Pour qu’un utilisateur commun ait le droit de se connecter à toutes les PDB mais pas à la CDB Root, il n y a pas
d’autre possibilité que lui attribuer le privilège CREATE SESSION localement dans toutes les PDB mais pas dans
la CDB Root.
• L’attribution d’un droit à PUBLIC avec la clause CONTAINER=CURRENT, sera implicitement attribué à tous les
utilisateurs du conteneur courant (CDB Root ou PDB selon la connexion).
• L’attribution d’un droit à PUBLIC avec la clause CONTAINER=ALL en étant connecté à la CDB Root sera
implicitement attribué à tous les utilisateurs de tous les conteneurs (CDB Root et toutes les PDB)
• Pour des raisons de sécurité, il est déconseillé d’attribuer des droits à PUBLIC de façon commune
• Les privilèges attribués par Oracle à PUBLIC sur les objets communs fournis par Oracle sont attribués de façon
locale, ce qui laisse la possibilité de les révoquer localement dans certaines PDB si vous ne souhaitez pas que le
droit puisse être exercé par tous les utilisateurs
• Le principe d’attribution des droits sont identiques à ceux d’attribution de roles.
206
Sauvegarde et récupération
• Sauvegarde logique datapump
• L’utilisation de Data Pump avec une PDB est identique à une base non CDB avec quelque particularités.
• Data Pump peut être utilisé pour effectuer des opérations d’export/import dans différentes situations :
• Base de données non CDB vers PDB
• PDB vers PDB
• PDB vers base de données non CDB
• Lors de l’utilisation de Data Pump en étant connecté à la CDB Root génère un message d’avertissement.
Avertissement : les opérations Oracle Data Pump ne sont généralement pas nécessaires en cas de connexion à la racine ou à la valeur de départ
d'une base de données Conteneur.
• Dans une base de données conteneur, le DIRECTORY (DIRECTORY DATA_PUMP_DIR ) est défini au niveau de la CDB Root
• Oracle impose un chemin pour la directory qui n’est pas modifiable pour chaque PDB avec un sous-répertoire par PDB dont le
nom est égal au GUID (Global Unique IDentifier) de la PDB. La vue cdb_directories donne les informations sur les noms et
chemins des directories.
• L’import échouera lors qu’un utilisateur commun n’existe pas dans CDB cible ou que l’utilisateur d’une base de
données non CDB n’existe pas dans la CDB cible. Car impdp n’arrive pas à créer l’utilisateur. Pour y remédier il
faut créer l’utilisateur dans la CDB/PDB cible et utiliser remap_schemas pour importer les objets de l’utilisateur.
207
Sauvegarde et récupération
• Sauvegarde
Comme dans une base de données NOCDB, une base en conteneur peut être sauvegarder par RMAN.
• La CDB dans son ensemble (CDB Root et toutes les PDB)
• La CDB Root uniquement
• Une ou plusieurs PDB
Les différentes types de sauvegardes disponibles en NOCDB sont également disponible en mode CDB avec les
mêmes syntaxes bien qu’il peut avoir quelque différences mineurs: (sauvegarde complète ou incrémentale,
récupération complète ou incomplète, etc.)
Certaines opérations ne sont pas autorisées dans RMAN en étant connecté à une PDB
• configurer l’environnement RMAN (commande CONFIGURE) ;
• sauvegarde, suppression ou restauration des fichiers de journalisation archivés ;
• sauvegarde ou restauration du fichier de paramètres serveur ou du fichier de contrôle ;
• récupération incomplète ou flashback de la PDB en mode UNDO partagé (mais c’est possible en
mode UNDO local) ;
• utilisation du Data Recovery Advisor (il faut être connecté à la CDB Root).
Selon les cas, l’utilisation d’une commande interdite dans une PDB se manifestera soit par un message
d’erreur soit par un message d’information, la commande étant dans ce cas ignorée.
Lorsque qu’on se connecte à une CDB Root, la commande REPORT SCHEMA permet d‘afficher la liste de tous
les fichiers de données de tous les conteneurs (CDB Root et toutes les PDB).
L’appartenance d’un tablespace à une PDB particulière est indiquée par la syntaxe nom_PDB:nom_tablespace
(exemple:P_RH:SYSTEM)
208
Sauvegarde et récupération
• Sauvegarde
La commande " BACKUP DATABASE habituelle permet de sauvegarder la base de données CDB dans son ensemble
(CDB Root et toutes les PDB)" . (en étant connecter sur la CDB$ROOT)
Rman target /
BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
Chaque élément (CDB,PDB) sera sauvegardé dans des jeux de sauvegardes différents en plus du jeu de sauvegarde
des fichiers de contrôle, de paramètre et d’archivelog si la base est en archivelog.
L’utilisation des jeux de sauvegardes différentes pour chaque PDB permet une récupération individuelle d’une PDB ou
d’un fichier de données d’une PDB.
• Lorsqu’on est connecté à une PDB la commande "BACKUP DATABASE " permet de faire la sauvegarde que de la PDB
courante. Les fichiers de controles, de paramètre ne sont pas sauvegardés même si la sauvegarde automatique des
fichiers est activée.
• Lorsque qu’on se connecte à une CDB Root, on peut aussi sauvegarder des PDB individuellement à l’aide de la
commande "BACKUP PLUGGABLE DATABASE" suivie du nom de la PDB ou d’une liste de noms de PDB
• La CDB$Root peut aussi être sauvegardé individuellement avec la commande BACKUP DATABASE ROOT
• Des tablespaces ou des fichiers de données peuvent être sauvegardés avec les commandes habituelles (BACKUP
TABLESPACE ou BACKPUP DATAFILE)
• Si on est connecté à une PDB alors seules les tablespaces et datafiles de la PDB seront sauvegardés.
• Si on est connecté à la CDB$ROOT pourront être sauvegarder ceux de la CDB et le PDB. Pour sauvegarder un tablespace d’une PDB, il faut préfixer le
nom du tablespace avec le nom de la PDB sous la forme nom_pdb:nom_tablespace. Sans préfixe, c’est le tablespace du conteneur courant (CDB
Root) qui est pris en compte . 209
Sauvegarde et récupération
• Récupération
• Lorsqu’on se connecte à une CDB Root, les commandes "RESTORE DATABASE" et "RECOVER
DATABASE" habituelles (ainsi que "REPAIR DATABASE") permettent de récupérer la base de données
CDB dans son ensemble (CDB Root et toutes les PDB)
• De même lorsqu'on se connecte à une PDB; ces mêmes commandes permettent de récupérer la PDB
individuellement, indépendamment des autres PDB.
• lorsqu'on se connecte à une CDB Root on peut aussi récupérer individuellement des PDB à l’aide des
commandes RESTORE PLUGGABLE DATABASE et RECOVER PLUGGABLE DATABASE.
RESTORE PLUGGABLE DATABASE pdbrh; une PDB
RECOVER PLUGGABLE DATABASE pdbrh,pdbcpt; deux PDB
REPAIR DATABASE "cdb$root"; CDB Root
Comme dans une base de données non CDB, après une récupération incomplète, il faut ouvrir la base de données dans
le mode RESETLOGS.
Dans le cas d’une récupération incomplète d’une PDB, le RESETLOGS s’appliquer uniquement à la PDB
211