Introduction
Cette documentation présente un exemple de normalisation des instances Oracle sous Solaris. Dans cet exemple de norme, l’instance est en mode archivelog automatique.
Organisation des répertoires et variables Shells
Dans toute la documentation, $DBA
est une variable d’environnement qui est
positionnée dans le fichier .profile
du user Oracle. Pour tous les
environnements Oracle : $DBA=/Software/oracle/dba
.
Environnement d’une instance (fichiers instance.inst et defaults_inst.ksh)
Dans le répertoire $DBA/bin
, le shell USE
source l’environnement
d’une instance.
shell > USE -I <INSTANCE_NAME>
Le shell USE
charge le fichier INSTANCE_NAME.inst
localisé dans le
répertoire $DBA/etc
, fichier dans lequel sont positionnées les variables
propres à l’instance ($ORACLE_SID
, version d’Oracle, $DBENV
, $NLS_LANG
etc…).
$DBA/etc/OEMDA1ORA.inst
# Putting the version of Oracle for the instance
ORA_VERSION="9.2.0"
export ORA_VERSION
# Putting the APPNAME for the instance
export APPNAME=oem
# Putting the type of environment
export DBENV=DEV
# Putting the SID Oracle and the NLS_LANG variable
ORACLE_SID="OEMD1ORA"
NLS_LANG=FRENCH_FRANCE.WE8ISO8859P15
. ~oracle/dba/etc/defaults_inst.ksh
Les valeurs pour la variable $DBENV
, variable destinée aux envois des alertes
sur les consoles, sont : PROD
, UAT
ou DEV
.
Le shell defaults_inst.ksh
est générique pour toutes les instances pour
positionner la plupart des variables d’environnement de l’instance.
#!/bin/ksh
######################################################################
###
# @(#) Fichier : defaults_inst.ksh
# @(#) Auteur : DBA team
# @(#) Objet : Set default environment
######################################################################
###
export DBA=~oracle/dba
export RINST=~oracle/Instances/$ORACLE_SID
export CFG=$RINST/pfile
export SCRIPT=$RINST/scriptexport DMP=$RINST/dmp
export RUN=$RINST/run
export LOG=$RINST/bdump
export TRC=$RINST/udump
export ARC=/$APPNAME/oracle/$ORACLE_SID/archivelog
ORACLE_HOME=$ORACLE_ROOT/app/product/$ORA_VERSION
ORA_NLS=$ORACLE_HOME/ocommon/nls/admin/data
ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/data
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
ORA_NLS10=$ORACLE_HOME/nls/data
ORA_NLS11=$ORACLE_HOME/nls/data
#
# Applying the variables LD_LIBRARY_PATH and PATH with $ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:$PATH
export PATH LD_LIBRARY_PATH ORACLE_SID ORACLE_HOME NLS_LANG
export ORA_NLS10 ORA_NLS11 ORA_NLS33 ORA_NLS32 ORA_NLS
export PS1="$LOGNAME@$ORACLE_SID > "
Les variables $ORA_NLS%
définissent la localisation des fichiers de
définition des langues, jeux de caractères, etc. dans la distribution Oracle.
En fonction de la version d’Oracle, la bonne variable est prise en charge par
l’instance Oracle :
Variable | Version Oracle |
---|---|
$ORA_NLS |
Oracle 7.2.x |
$ORA_NLS32 |
Oracle 7.3.x |
$ORA_NLS33 |
Oracle 8, 8i et 9i |
$ORA_NLS10 |
Oracle 10g |
$ORA_NLS11 |
Oracle 11g |
Organisation des répertoires
Les fichiers de données (fichiers de redo log, fichiers de contrôle,
fichiers de tablespaces) sont localisés dans le répertoire
/$APPNAME/oracle/$ORACLE_SID
.
Les fichiers de redo log archivés sont localisés dans le répertoire
/$APPNAME/oracle/$ORACLE_SID/archivelog
, répertoire identifié par la variable
d’environnement $ARC
.
Le répertoire de backup de l’instance Oracle est identifié par la variable
d’environnement $DMP
et correspond au répertoire
/$APPNAME/oracle/$ORACLE_SID/export
.
Description | Repertoire |
---|---|
Fichiers de données (fichiers de contrôle, fichiers de données, UNDO et des tablespaces temporaires) | /$APPNAME/oracle/$ORACLE_SID |
Fichiers de redo log | /$APPNAME/oracle/$ORACLE_SID/redolog |
Fichiers de redo log archivés (archived redo logs) | $ARC : /$APPNAME/oracle/$ORACLE_SID/archivelog |
Répertoire de backup | $DMP : /$APPNAME/oracle/$ORACLE_SID/export |
Fichiers init<Instance_name>.ora et config<Instance_name>.ora
Les fichiers d’initialisation de l’instance sont localisés dans le
répertoire $CFG
(/Software/oracle/Instances/<INSTANCE_NAME>/pfile
).
- le fichier
config<INSTANCE_NAME>.ora
contient des paramètres d’initialisation pour lesquels des codages en dur de répertoire sont spécifiés (paramètrescontrol_files, user_dump_dest, core_dump_dest, log_archive_dest, background_dump_dest, utl_file_dir
, etc.). - le fichier
init<INSTANCE_NAME>.ora
ne contient quant à lui que des paramètres non liés à l’arborescence de l’instance (shared_pool_size, sort_area_size, optimizer_mode
, etc.).
Le fichier d’initialisation init<INSTANCE_NAME>.ora
appelle le fichier
config<INSTANCE_NAME>.ora
avec le paramètre ifile
:
initOEMD1ORA.ora
# include database configuration parameters
ifile = /Software/oracle/Instances/OEMD1ORA/pfile/configOEMD1ORA.ora
configOEMD1ORA.ora
control_files = (/oem/oracle/OEMD1ORA/control01.ctl,
/oem/oracle/OEMD1ORA/control02.ctl,
/oem/oracle/OEMD1ORA/control03.ctl)
background_dump_dest = /Software/oracle/Instances/OEMD1ORA/bdump
core_dump_dest = /Software/oracle/Instances/OEMD1ORA/cdump
user_dump_dest = /Software/oracle/Instances/OEMD1ORA/udump
utl_file_dir = /Software/oracle/Instances/OEMD1ORA/udump
log_archive_dest = /oem/oracle/OEMD1ORA/archivelog
Il est impératif de ne pas oublier de créer le lien init<INSTANCE_NAME>.ora
dans le répertoire ${ORACLE_HOME}/dbs
vers le fichier ${CFG}/init<INSTANCE_NAME>.ora
.
cd /Software/oracle/app/product/9.2.0 ls initOEMD1ORA.ora
lrwxrwxrwx 1 oracle dba 58 Feb 7 12:36 initOEMD1ORA.ora -> /Software/oracle/Instances/OEMD1ORA/pfile/initOEMD1ORA.ora
Nomenclature des fichiers de données
Nomenclature des fichiers de redo log
Pour chaque instance, 3 groupes de 2 fichiers de redo log en multiplexing
sont créés avec la nomenclature redo<# group>_XX.log
:
select group#, member from v$logfile;
1 /oem/oracle/OEMD1ORA/redolog/redo1_01.log 1 /oem/oracle/OEMD1ORA/redolog/redo1_02.log 2 /oem/oracle/OEMD1ORA/redolog/redo2_01.log 2 /oem/oracle/OEMD1ORA/redolog/redo2_02.log 3 /oem/oracle/OEMD1ORA/redolog/redo3_01.log 3 /oem/oracle/OEMD1ORA/redolog/redo3_02.log
Lors de la création de la base de données, il faut que le
paramètre MAXLOGMEMBERS
soit supérieur ou égal à 2 pour pouvoir s’assurer qu’un
groupe de fichiers de redo log puisse au moins contenir 2 fichiers de redo log
multiplexés.
Il faut également respecter la taille minimale des fichiers de redo log en fonction de la version d’Oracle : par exemple 4Mb minimum pour Oracle 10g. Une taille de 10 Mb minimum est recommandée par Oracle pour toutes les versions (8i, 9i et 10g).
Nomenclature des fichiers de contrôle
Les fichiers de contrôle ont la nomenclature controlXX.ctl
. Chaque
instance possède 3 fichiers de contrôle dans le répertoire
/$APPNAME/oracle/$ORACLE_SID
: control01.ctl
, control02.ctl
et
control03.ctl
.
select value from v$parameter where name='control_files';
/oem/oracle/OEMD1ORA/control01.ctl,/oem/oracle/OEMD1ORA/control02.ctl, /oem/oracle/OEMD1ORA/control03.ctl
Nomenclature des fichiers des tablespaces de données et temporaires
Les fichiers de données des tablespaces temporaires ou de données ont la
nomenclature <tablespace_name>_XX.dbf
. Si par exemple, le
tablespace USERS
est réparti sur 4 fichiers de données, cela correspond dans le
répertoire /$APPNAME/oracle/$ORACLE_SID
à 4 fichiers : USERS_01.dbf,
USERS_02.dbf, USERS_03.dbf, USERS_04.dbf
.
select name from v$datafile;
/oem/oracle/OEMD1ORA/USERS_01.dbf /oem/oracle/OEMD1ORA/USERS_02.dbf /oem/oracle/OEMD1ORA/USERS_03.dbf /oem/oracle/OEMD1ORA/USERS_04.dbf
Nomenclature des tablespaces des segments d’annulation (RBS et UNDO)
La gestion des segments d’annulation (rollback segments) entre la version 8i d’une part et les versions 9i et 10g d’autre part est radicalement différente.
Lorsque les segments d’annulation sont gérés manuellement, le tablespace
supportant les segments d’annulation a pour nomenclature RBS
. En mode
automatique UNDO (9i et 10g), le tablespace d’undo a pour nomenclature UNDO
.
Oracle 8i (tablespace RBS)
Avec la version 8i, les segments d’annulation sont créés manuellement avec
la commande CREATE ROLLBACK SEGMENT
et référencés dans le fichier
d’initialisation de l’instance <Instance_name>.ora
.
Dans la configuration 8i, le tablespace supportant les segments d’annulation
s’appelle RBS
, tablespace qui est créé comme un tablespace utilisateur normal.
Les fichiers de données du tablespace RBS
sont localisés dans le répertoire
/$APPNAME/oracle/$ORACLE_SID
et ont pour nomenclature RBS_xx.dbf
.
Les segments d’annulation ont pour nomenclature RBSxx
et sont créés avec les
syntaxes CREATE ROLLBACK SEGMENT
et ALTER ROLLBACK SEGMENT .. ONLINE
:
create rollback segment RBS01 tablespace rbs;
alter rollback segment RBS01 online;
Les segments d’annulations sont également renseignés dans le fichier
<Instance_name>.ora
pour leur activation automatique au démarrage de
l’instance :
$CFG/initOEMD1ORA.ora
...
rollback_segments=(RBS01,RBS02,RBS03,RBS04)
...
Oracle 9i et 10g (tablespace UNDO)
À partir de la version 9i, les segments d’annulation sont gérés
automatiquement dans un tablespace dit de type undo. Le tablespace est appelé
UNDO
, les fichiers supportant le tablespace UNDO
sont localisés dans le
répertoire /$APPNAME/oracle/$ORACLE_SID
et ont pour nomenclature
UNDO_xx.dbf
.
Pour utiliser la fonctionnalité des tablespaces d’UNDO, le paramètre
compatible
de l’instance doit être positionné à 9.2.0.0.0
au minimum et les
paramètres undo_management
et undo_tablespace
doivent être obligatoirement
renseignés dans le fichier d’initialisation de l’instance
<Instance_name>.ora
:
$CFG/initOEMD1ORA.ora
undo_management=auto
undo_tablespace=UNDO
compatible=9.2.0.0.0 # au minimum
Création de bases de données 8i, 9i et 10g avec la commande CREATE DATABASE
Lors de la création des bases de données, quelle que soit la version, les
paramètres mémoire comme les paramètres shared_pool_size
, library cache
, etc.
doivent respecter les pré-requis pour la version Oracle concernée. Dans le cas
contraire l’exécution des scripts catproc.sql
et catalog.sql
peut être en échec
faute de mémoire.
Création d’une base de données Oracle 8i
Avec la version 8i, la commande CREATE DATABASE
ne crée que le tablespace
SYSTEM
. Le tablespace temporaire et le tablespace RBS
contenant les segments
d’annulation (rollback segments) sont créés à des étapes ultérieures.
oracle[OEMD1ORA] > sqlplus "/ as sysdba"
startup nomount pfile=/Software/oracle/Instances/OEMD1ORA/pfile/initOEMD1ORA.ora; create database OEM maxlogfiles 32 maxlogmembers 4 maxloghistory 1 maxdatafiles 254 maxinstances 1 archivelog controlfile reuse logfile group 1 ('/oem/oracle/OEMD1ORA/redolog/redo1_01.log', '/oem/oracle/OEMD1ORA/redolog/redo1_02.log') SIZE 1024K, group 2 ('/oem/oracle/OEMD1ORA/redolog/redo2_01.log', '/oem/oracle/OEMD1ORA/redolog/redo2_02.log') SIZE 1024K, group 3 ('/oem/oracle/OEMD1ORA/redolog/redo3_01.log', '/oem/oracle/OEMD1ORA/redolog/redo3_02.log') SIZE 1024K datafile '/oem/oracle/OEMD1ORA/SYSTEM_01.dbf' size 264M reuse autoextend off character set WE8ISO8859P1;
Pour pouvoir créer les tablespaces RBS
et TEMP
, un segment d’annulation
temporaire RBS_TEMP
est défini dans le tablespace SYSTEM
:
create rollback segment rbs_temp tablespace system;
alter rollback segment rbs_temp online;
Le tablespace RBS
est créé avec ses 4 segments d’annulations RBS01, RBS02,
RBS03
et RBS04
, segments définis dans le fichier d’initialisation de l’instance
<Instance_name>.ora
.
create tablespace RBS
datafile '/oem/oracle/OEMD1ORA/RBS_01.dbf' size 500M;
create rollback segment RBS01 tablespace RBS;
create rollback segment RBS02 tablespace RBS;
create rollback segment RBS03 tablespace RBS;
create rollback segment RBS04 tablespace RBS;
alter rollback segment RBS01 online;
alter rollback segment RBS02 online;
alter rollback segment RBS03 online;
alter rollback segment RBS04 online;
Le tablespace temporaire TEMP
est ensuite créé avec la commande CREATE
TEMPORARY TABLESPACE
d’Oracle 8i (uniform size
doit être un multiple du
paramètre sort_area_size
) :
create temporary tablespace TEMP
tempfile '/oem/oracle/OEMD1ORA/TEMP_01.dbf' size 500M
extent management local uniform size 4M;
Lorsque les tablespace RBS
et TEMP
sont construits, le segment d’annulation
RBS_TEMP
créé précédemment dans le tablespace SYSTEM
peut être détruit :
alter rollback segment rbs_temp offline;
drop rollback segment rbs_temp;
Création d’une base de données Oracle 9i
À partir de la version 9i, les créations des tablespaces temporaires TEMP
et UNDO
ansi
que la définition de l’option extent management local
au niveau de
l’instance peuvent être réalisées directement dans la commande CREATE
DATABASE
.
oracle[OEMD1ORA] > sqlplus "/ as sysdba"
startup nomount pfile=/Software/oracle/Instances/OEMD1ORA/pfile/initOEMD1ORA.ora; create database OEM noarchivelog maxinstances 1 maxlogfiles 32 maxdatafiles 32 maxlogmembers 4 controlfile reuse datafile '/oem/oracle/OEMD1ORA/SYSTEM_01.dbf' size 400M logfile group 1 ( '/oem/oracle/OEMD1ORA/redolog/redo1_01.log', '/oem/oracle/OEMD1ORA/redolog/redo1_02.log') size 100M, group 2 ( '/oem/oracle/OEMD1ORA/redolog/redo2_01.log', '/oem/oracle/OEMD1ORA/redolog/redo2_02.log') size 100M, group 3 ( '/oem/oracle/OEMD1ORA/redolog/redo3_01.log', '/oem/oracle/OEMD1ORA/redolog/redo3_02.log') size 100M character set "WE8ISO8859P15" national character set AL16UTF16 extent management local undo tablespace UNDO datafile '/oem/oracle/OEMD1ORA/UNDO_01.dbf' size 500M default temporary tablespace TEMP tempfile '/oem/oracle/OEMD1ORA/TEMP_01.dbf' size 500M;
Pour le tablespace UNDO
, les paramètres undo_management=auto
et
undo_tablespace=undo
doivent être renseignés dans le fichier d’initialisation
de l’instance lors du lancement de la commande de création de la base de
données 9i.
Création d’une base de données Oracle 10g
La syntaxe pour la création d’une base de données Oracle 10g est
sensiblement la même que pour une version 9i, à l’exception près du nouveau
tablespace SYSAUX
, nouveau tablespace système d’Oracle 10g.
oracle[OEMD1ORA] > sqlplus "/ as sysdba"
startup nomount pfile=/Software/oracle/Instances/OEMD1ORA/pfile/initOEMD1ORA.ora; create database OEM noarchivelog maxinstances 1 maxlogfiles 32 maxdatafiles 32 maxlogmembers 4 controlfile reuse datafile '/oem/oracle/OEMD1ORA/SYSTEM_01.dbf' size 400M sysaux datafile '/oem/oracle/RISK/SYSAUX_01.dbf' size 500M logfile group 1 ( '/oem/oracle/OEMD1ORA/redolog/redo1_01.log', '/oem/oracle/OEMD1ORA/redolog/redo1_02.log') size 100M, group 2 ( '/oem/oracle/OEMD1ORA/redolog/redo2_01.log', '/oem/oracle/OEMD1ORA/redolog/redo2_02.log') size 100M, group 3 ( '/oem/oracle/OEMD1ORA/redolog/redo3_01.log', '/oem/oracle/OEMD1ORA/redolog/redo3_02.log') size 100M character set "WE8ISO8859P15" national character set AL16UTF16 extent management local undo tablespace UNDO datafile '/oem/oracle/OEMD1ORA/UNDO_01.dbf' size 500M default temporary tablespace TEMP tempfile '/oem/oracle/OEMD1ORA/TEMP_01.dbf' size 500M;
Pour le tablespace d’UNDO, comme en version 9i, les paramètres
undo_management=auto
et undo_tablespace=undo
doivent être renseignés dans le
fichier d’initialisation de l’instance lors du lancement de la commande de
création de la base de données 10g.
Étapes post création (catalog.sql, catproc.sql)
Pour toutes les versions, après la création de la base de données, les
scripts catproc.sql
et catalog.sql
localisés dans $ORACLE_HOME/rdbms/admin
sont
exécutés.
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
Normalisation du mode archivelog
Localisation des fichiers de redo log archivés (LOG_ARCHIVE_DEST)
La localisation des fichiers de redo log archivés avec le paramètre
LOG_ARCHIVE_DEST
est spécifié dans le fichier config<INSTANCE_NAME>.ora
et pointe sur le filesystem /$APPNAME/oracle/$ORACLE_SID/archivelog
.
configOEMD1ORA.ora
log_archive_dest = /oem/oracle/OEMD1ORA/archivelog
Mode archive log automatique (LOG_ARCHIVE_START), Oracle 8i et Oracle 9i
L’archivage automatique est spécifié dans le fichier d’initialisation de
l’instance init<INSTANCE_NAME>.ora
avec le paramètre
LOG_ARCHIVE_START
.
initOEMD1ORA.ora
log_archive_start = true
Le paramètre log_archive_start
n’est valable que pour Oracle 8i et 9i.
À partir de la version 10g, ce paramètre est obsolète et n’est plus nécessaire.
Nomenclature des fichiers de redo log archivés (LOG_ARCHIVE_FORMAT)
La nomenclature des fichiers de redo log archivés est spécifié dans le
fichier d’initialisation de l’instance init<INSTANCE_NAME>.ora
avec le
paramètre LOG_ARCHIVE_FORMAT
. La nomenclature ne doit pas faire référence au
nom de l’instance pour aisément rafraîchir une autre instance.
La nomenclature adoptée est la suivante : T%t_S%s.arc
. %t
est le
numéro de thread qui écrit l’archive du fichier de redo log et %s
est le numéro
de séquence (SCN).
initOEMD1ORA.ora
log_archive_format = T%t_S%s.arc
Nombre de processus ARC (LOG_ARCHIVE_MAX_PROCESSES)
Le nombre de threads ARC (archiveurs) est positionné à 1 dans un premier temps, ce paramètre doit suffire car les fichiers de redo log online sont redimensionnés pour minimiser le nombre de switches.
initOEMD1ORA.ora
log_archive_max_processes = 1
Paramétrage nécessaire pour l’utilisation du LogMiner (UTL_FILE_DIR)
Pour être en mesure d’utiliser le LogMiner, utilitaire qui permet de lire
les fichiers de redo log online ou archivés, le paramètre d’initialisation
UTL_FILE_DIR
est paramétré. UTL_FILE_DIR
doit pointer sur un
répertoire existant.
Dans la nouvelle normalisation, utl_file_dir
pointe sur le répertoire de
trace udump
.
configOEMD1ORA.ora
utl_file_dir=/Software/oracle/Instances/OEMD1ORA/udump
Sans le positionnement du paramètre d’initialisation utl_file_dir
, la
procédure stockée BUILD
du package DBMS_LOGMNR_D
ne peut être utilisée pour la
création du fichier dictionary.ora
:
EXECUTE DBMS_LOGMNR_D.BUILD( -
DICTIONARY_FILENAME => 'dictionary.ora', -
DICTIONARY_LOCATION => '/Software/oracle/Instances/OEMD1ORA/udump');