Outils pour utilisateurs

Outils du site


installation_oracle_11g

Introduction

L'objectif de ce document est de présenter l'installation et la configuration d'une base de données Oracle sur un serveur Linux en mode ligne de commande afin de ne pas mettre en place la couche graphique.

L'approche est volontairement décomposée afin de bien comprendre chaque étape. Il est supposé connaitre suffisamment les concepts Oracle et Linux.

Le serveur sera sous Linux Centos 5.5 version 32 bits. Bien que non certifiée par Oracle, Centos est la version Libre de Redhat. Bien que j'ai une nette préférence pour Debian, j'ai pu constater que Redhat est le plus souvent utilisé en entreprise. Oracle 11g fonctionne très bien sous Debian et même sous Ubuntu, la procédure est juste un peu différente. Le lecteur intéressé trouvera sur le blog un billet sur ce sujet.Oracle 11g sous Ubuntu 10.04 LTS

La version de Oracle est la 11.2.0.1, téléchargeable sur le site de Oracle.

Il est important de noter qu'il faut s'acquitter auprès de Oracle d'une licence d'utilisation du produit en cas d'utilisation de la base en production. Oracle tolère l'utilisation de son produit à des fins de test, de formation ou de développement. De plus la version disponible n'est pas la dernière en date et ne dispose pas des correctifs de mise à jour.

La configuration du serveur est volontairement modeste : RAM 2Go et 50Go de disque. Il faut savoir que 2Go de RAM suffisent amplement à Oracle pour gérer une base avec 20 connexions simultanées. La taille disque ne dépend que de la volumétrie de la base.

Cette installation a été testée sur une machine virtuelle ( RAM 2Go et 50Go de disque ) et sur un serveur kimsufi de OVH ( RAM 2Go et 250Go de disque ) avec uniquement un accès ssh.

SYNTAXE

Les commandes présentées ainsi sont à lancer en étant connecté root.
Les commandes présentées ainsi sont à lancer en étant connecté oracle.

Les lignes présentées ainsi sont éditées avec vi

Logiciels

Cette installation part du principe que le serveur est totalement dédié à l'instance Oracle. Il sera donc procédé à une installation minimale et basique de Centos, complétée par les packages requis pour Oracle.

Centos

Centos est la version Libre de Redhat, à ce titre elle est identique à la version Commerciale. La version 5.5 correspond donc à la Redhat 5. Télécharger la version NetInstalll de Centos

wget http://centos.cict.fr/5.5/isos/i386/CentOS-5.5-i386-netinstall.iso
L'image de ce CD est très petite ( 9,5Mo ). Tous les packages seront téléchargés depuis un dépot Internet. Une fois cette image chargée, la graver sur un CD-ROM et booter le serveur dessus.

Démarrage de l'installation

L'installation se fera en mode expert et caractère, aussi taper dans la fenêtre d'installation : linux text puis la touche "Entrée"

Dans l'écran suivant, choisir la langue d'installation.

Puis sélectionner une configuration de clavier.

Il sera ensuite demandé la localisation des sources logicielles, choisir "HTTP"

Il faut ensuite configurer le réseau, seul IPV4 sera utilisé et l'adresse sera manuelle.

Pour l'exemple, le serveur aura l'IP 192.168.1.100 et un masque de 255.255.255.0. La passerelle sera en 192.168.1.1 qui sera aussi le serveur de noms.

Il faut ensuite donner l'adresse du serveur Internet disposant des sources logicielles. Le site web est : mirror.centos.org et le répertoire : centos/5.5/os/i386. Une fois cette écran validé, une image de boot sera chargée( "Récupération images/stage2.img…", celle-ci pèse environ 100Mo, le temps peut donc être assez long.

Une fois l'image chargée, l'écran suivant est affiché. Choisir "Mode texte".

Puis valider l'écran de bienvenue.

Configuration disque

La fenêtre suivante permettra la configuration du disque. Le serveur exemple dispose de 2Go de RAM et d'un disque de 50Go.

Accepter de définir la table des partition et choisir un partionnement personnalisé dans l'écran suivant

Partionner le disque de 50Go selon le tableau suivant :

Primaire
MontageType Taille
/bootExt2 100Mo
swap 4Go
/Ext3 500Mo
Logique
MontageType Taille
/usrExt3 5Go
/varExt3 2Go
/tmpExt3 2Go
/u01Ext3 10Go
/u02Ext3 10Go
/u03Ext3 10Go
/homeExt3 Le reste

Chargeur de démarrage

Le chargeur est GRUB, les cinq écrans suivants sont validés sans modifications, les choix par défaut convenant parfaitement.

Réseau

La carte réseau étant déja configurée précédemment, il faut choisir "Non"

Nommer le serveur manuellement, dans l'exemple : chopin.adimcor.eu

Horloge

Choisir le fuseau horaire de Paris

Mot de passe du root

Renseigner ici le mot de passe de root.

Choix des packages

Déselectionner GNOME et choisir Personnalisation

Dans cet écran, 4 groupes de packages sont pré-selectionnés, les dévalider tous

L'installation minimale démarre alors, à la fin il faudra relancer le serveur. L'unique service actif est ssh.

Mise à jour de Centos

Il est nécessaire de procéder à une mise à jour des packages en se connectant root et en lançant yum update

yum update
Le système met à jour une quarantaine de packages. A ce stade, le serveur est configuré en installation minimale. Il est possible de s'y connecter via ssh.

Pour la suite, il faut charger le package wget, qui va servir aux téléchargements depuis le site Oracle.

yum install wget
A titre personnel, j'installe aussi l'éditeur vim
yum install vim-enhanced

Oracle

Il est possible de télécharger le média d'installation de Oracle sur le site de l'éditeur ( http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html ). Il faut toutefois se créer un compte, ce qui est gratuit. Ce compte va servir pour télécharger le logiciel Oracle par wget. Il consiste à donner une adresse mail et un mot de passe.

Le media d'installation du serveur est composé de 2 fichiers .zip de 1Go chacun.

cd /home
wget –http-user <adresse_mail> –http-password <mot_de_passe> -O linux_11gR2_database_1of2.zip \
"http://download.oracle.com/otn/linux/oracle11g/R2/linux_11gR2_database_1of2.zip" –no-check-certificate
wget –http-user <adresse_mail> –http-password <mot_de_passe> -O linux_11gR2_database_2of2.zip \
"http://download.oracle.com/otn/linux/oracle11g/R2/linux_11gR2_database_2of2.zip" –no-check-certificate

Prérequis

Il faut charger un certain nombre de packages complémentaires pour l'installation

yum -y install compat-libstdc++-296 compat-libstdc++-33 \
make elfutils-libelf-devel glibc-devel \
glibc-headers gcc gcc-c++ \
libaio-devel  sysstat unixODBC \
unixODBC-devel xorg-x11-deprecated-libs unzip \
pdksh
Bien que Centos soit une Redhat, il est bon de le dire
echo "Red Hat Enterprise Linux Server release 5 (Tikanga) Update 5" > /etc/redhat-release

Pour Oracle 6 :

yum -y install compat-libstdc++-296 compat-libstdc++-33 \
make elfutils-libelf-devel glibc-devel \
glibc-headers gcc gcc-c++ \
libaio-devel  sysstat unixODBC \
unixODBC-devel unzip ksh compat-libcap1

User Oracle

Créer 3 groupes, oinstall, dba et oper

groupadd oinstall
groupadd dba
groupadd oper
Créer le user oracle, lui affecter les bons groupes et lui donner un mot de passe.
useradd -g oinstall -G dba,oper -p password -d /home/oracle -s /bin/bash oracle
passwd oracle

Configuration système

Editer le fichier /etc/sysctl.conf et y ajouter les lignes suivantes :

kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

Les valeurs type shm concernent la Shared Memory, donc la SGA de Oracle.

Les valeurs type sem concernent les sémaphores donc liées au paramètre PROCESSES de Oracle.

Les valeurs type net sont relatives au réseau.

Ne pas oublier que ces valeurs partent du principe que seul Oracle tourne sur le serveur. D'autres logiciels utilisent aussi la Shared Memory et les sémaphores.

Activer la configuration par la commande suivante :

sysctl -p
Rajouter les lignes suivantes dans /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

Les limites sont relatives aux ressources utilisées par un user particulier, en l'occurrence ici Oracle. Sont concernées le nombre de processus et de fichiers ouverts.

Ces limites n'influencent pas sur les performances. Par contre elles peuvent gêner leur bon fonctionnement.

La limite soft d'un utilisateur peut être modifiée par l'utilisateur lui-même, mais sans toutefois dépasser la limite hard.

Le fichier limits.conf permet de définir les limites soft et hard d'un user. La commande ulimit permet à un utilisateur de modifier ses limites pour le shell courant.

Modifier le fichier /etc/pam.d/login et ajouter la ligne suivante :

session required pam_limits.so

Editer le fichier /etc/profile et ajouter les lignes suivantes :

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

L'ensemble de ces commandes peut être mis dans un script oracle11g_centos.sh

Désactiver le parefeu sur Centos. Stopper iptables

/etc/init.d/iptables stop
/etc/init.d/ip6tables stop
chkconfig iptables off
chkconfig ip6tables off
Désactiver SELinux. Editer le fichier /etc/selinux/config et passer la valeur de SELINUX à disabled :

SELINUX=disabled

Pour le prendre en compte immédiatement taper la commande suivante :

setenforce 0

Installation

Les binaires oracle ont été chargés précédemment via wget et se trouve sous /home, les décompresser

unzip linux_11gR2_database_1of2.zip
unzip linux_11gR2_database_2of2.zip
Ces deux commandes vont créer un sous répertoire /home/database dans lequel se trouve l'intégralité des fichiers d'installation de Oracle.

Répertoires

Créer les répertoires suivants et les affecter au user oracle

mkdir -p /u01/app/oracle
mkdir -p /u02/app/oracle
mkdir -p /u03/app/oracle
chown -R oracle:dba /u01
chown -R oracle:dba /u02
chown -R oracle:dba /u03

Installation silencieuse

Se connecter en tant que user oracle.

Oracle demande une interface graphique pour s'installer, sauf si on lui spécifie un fichier de réponses. Ce principe est l'installation silencieuse. Sous le répertoire /home/database/response, se trouve le fichier db_install.rsp qui est abondamment commenté. Ci-dessous le fichier réponse utilisé pour cette installation. La version de Oracle est Entreprise Edition ( EE )

Attention : selon la version Oracle téléchargée les options sont parfois différentes, bien vérifier le fichier fourni par Oracle en cas de doute.

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=chopin.adimcor.eu
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en,fr
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=false
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
  • oracle.install.option permet de choisir l’option d’installation; INSTALL_DB_SWONLY ne crée pas de base de données mais n’installe que le logiciel Oracle. La base sera créée ultérieurement.
  • UNIX_GROUP_NAME est le groupe d’installation du logiciel et de l’inventory Oracle
  • INVENTORY_LOCATION permet de choisir l’endroit où l’inventory Oracle ( liste des produits installés ) est créé.
  • SELECTED_LANGUAGES permet de choisir les langues des différents messages d’Oracle.
  • ORACLE_HOME indique où sera installée Oracle.
  • oracle.install.db.InstallEdition permet de choisir entre Enterprise Edition (EE), Standard Edition (SE) et Personal Edition (PE)
  • oracle.install.db.IsCustomInstall positionné à false installe toute les options de la version Enterprise ( Partionning,… )
  • oracle.install.db.DBA_GROUP et oracle.install.db.OPER_GROUP permettent de choisir les groupes des utilisateurs respectivement SYSDBA et SYSOPER
  • SECURITY_UPDATES_VIA_MYORACLESUPPORT et DECLINE_SECURITY_UPDATES sont positionnée à false si on ne possède pas d'identifiant My Oracle Support.

Ce fichier est stocké sous /home/oracle/db.rsp. La commande suivante lance l'installation silencieuse.

/home/database/runInstaller -silent -responseFile /home/oracle/db.rsp
Options : -ignoreSysPrereqs et -ignorePrereq, elles sont requises si la plate-forme n'est pas certifiée ( Debian, Ubuntu,… ) afin d'éviter une erreur.

Il ne se passe pas grand chose à l'écran, au bout d'un moment oracle va tracer l'installation dans un fichier de log ( type : /u01/app/oraInventory/logs/installActions2011… ) qu'il est possible de visualiser avec tail -f

tail -f /u01/app/oraInventory/logs/installActions2011-03-05_03-19-31PM.log
Il y a une première phase de copie des fichiers et ensuite une édition de lien ( relink ). Il faut environ 15 à 20 minutes pour l'installation complète.

L'écran en fin d'installation silencieuse doit afficher un message de ce type :

Vous devez exécuter les scripts de configuration suivants en tant qu'utilisateur root. 
#!/bin/sh 
Nombre de scripts racine à exécuter
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Pour exécuter les scripts de configuration :
Ouvrir une fenêtre de terminal 
Se connecter en tant qu'utilisateur root 
Exécuter les scripts 
Revenir à cette fenêtre et appuyer sur Entrée pour continuer 
Successfully Setup Software.

Il faudra donc lancer à la fin,en tant que root, deux scripts

/u01/app/oraInventory/orainstRoot.sh
Ce script modifie les privilèges de certains fichiers.
/u01/app/oracle/product/11.2.0/dbhome_1/root.sh 
Ce script positionne le droit setUID sur les binaires Oracle et créés les fichiers oraenv, coraenv et dbhome

Finalisation

Rajouter les lignes suivantes dans le fichier .bash_profile du user oracle.

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG=FRENCH_FRANCE.UTF8 
export NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS'
export SQLPATH=$HOME/sql

Les 3 dernières lignes sont facultatives, mais permet la gestion des accents dans les outils oracle type SQL*Plus ainsi que l'affichage à la seconde près des dates dans les traces. Cette variable influe aussi sur le format des dates et des tris dans Oracle. La variable SQLPATH est sous SQL*Plus le répertoire par défaut de recherche des scripts SQL.

Sourcer le fichier .bash_profile

. .bash_profile
Vérifier la configuration correcte par la commande env.
env | grep ORACLE
ORACLE_OWNER=oracle
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
La variable ORACLE_HOME est primordiale dans Oracle, dans la suite de ce document il y sera souvent fait référence pour indiquer le répertoire /u01/app/oracle/product/11.2.0/dbhome_1

Configuration serveur Oracle*Net

Oracle*Net est la couche réseau de Oracle. Un processus est lancé sur le serveur, le listener. Ce processus écoute les demandes du réseau de connexion à la base Oracle sur le port 1521 par défaut.

La configuration du listener se fait en éditant le fichier $ORACLE_HOME/network/admin/listener.ora; Il est possible de référencer ce répertoire par la variable d'environnement TNS_ADMIN ( export TNS_ADMIN=$ORACLE_HOME/network/admin )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
     (ADDRESS=(PROTOCOL = TCP)(HOST = chopin.adimcor.eu )(PORT = 1521))
    )
  )

Lancer le listener

lsnrctl start
La commande netstat permet de vérifier l'écoute sur le port 1521
netstat -ltaupen
(Tous les processus ne peuvent être identifiés, les infos sur les processus
non possédés ne seront pas affichées, vous devez être root pour les voir toutes.)
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       Utilisatr  Inode      PID/Program name   
tcp        0      0 :::1521                     :::*                        LISTEN      500        58868      4848/tnslsnr        
tcp        0      0 :::22                       :::*                        LISTEN      0          7265       -                   
tcp        0      0 ::ffff:192.168.1.29:22      ::ffff:192.168.1.11:60123   ESTABLISHED 0          8222       -                   
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               0          6103       -                   
La configuration Oracle*Net utilise aussi deux autres fichiers tnsnames.ora et sqlnet.ora, ceux-ci sont requis sur le client et non sur un serveur, ils seront donc vu lors de la configuration client.

Listener et procédures externes

La configuration du listener via l'assistant netca configure par défaut l'utilisation de procédures externes en incluant dans le listener.ora ces lignes :

(DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
     )

Si la base de données ne fait pas appel à des procédures externes, Oracle recommande de supprimer cette configuration améliorant ainsi la sécurité.

Le lecteur intéressé par cette fonctionnalité pourra consulter le lien suivant : PL/SQL et procédures externes

Arrivé à ce stade, le logiciel Oracle est opérationnel, il est alors possible de créer la base de données.

Création de la base

L'exemple présenté ici va créer une base de données nommée RED avec le minimum requis

  • 1 fichier de contrôle,
  • 2 groupes de redolog,
  • 1 tablespace temporaire,
  • 1 tablespace undo

Au fur et à mesure, cette base sera modifiée afin de la préparer à un environnement de production.

L'ensemble des commandes présentées peut ensuite être mis dans un script afin d'automatiser la création.

Les différent fichiers composants la base de données seront répartis sur les points de montage /u01, /u02 et /u03. La norme OFA sera respectée.

Fichier de paramètres

Mise en place des répertoires

mkdir -p /u01/app/oracle/admin/RED/pfile
mkdir -p /u01/app/oracle/oradata/RED
mkdir -p /u02/app/oracle/oradata/RED
mkdir -p /u03/app/oracle/oradata/RED
Création initiale d'un fichier minimum sous /u01/app/oracle/admin/RED/pfile/initRED.ora

db_name = RED
db_block_size = 8192
control_files = /u01/app/oracle/oradata/RED/control01.ctl
sga_target = 1280M
pga_aggregate_target = 320M

La répartition mémoire est ainsi définie :

  • 20% pour l'OS → 400Mo
  • 80% pour Oracle → 1600Mo
    • 80% à la SGA → 1280Mo
    • 20% à la PGA → 320Mo

Pré-configuration avant création

Création du lien symbolique dans $ORACLE_HOME/dbs

cd $ORACLE_HOME/dbs
ln -s $ORACLE_BASE/admin/RED/pfile/initRED.ora initRED.ora
Création du fichier de mot de passe pour la connexion en sysdba
cd $ORACLE_HOME/dbs
orapwd file=orapwRED password=manager11
Revenir sous $HOME ( par la commande cd $HOME ) et créer un script SQL, createRED.sql, pour la création de la base contenant les lignes suivantes :

create database RED
character set AL32UTF8
national character set AL16UTF16 
logfile
group 1 '/u01/app/oracle/oradata/RED/redo01a.log' size 50M,
group 2 '/u01/app/oracle/oradata/RED/redo02a.log' size 50M
datafile '/u01/app/oracle/oradata/RED/system01.dbf' size 500M autoextend on next 100M maxsize 2G extent management local
sysaux datafile '/u01/app/oracle/oradata/RED/sysaux01.dbf' size 500M autoextend on next 100M maxsize 2G
undo tablespace UNDO_TBS datafile '/u01/app/oracle/oradata/RED/undo_tbs01.dbf' size 25M
default temporary tablespace TEMP tempfile '/u01/app/oracle/oradata/RED/temp01.dbf' size 50M;

Création

Se connecter avec sqlplus en mode sysdba et lancer le script de création

export ORACLE_SID=RED
sqlplus /nolog
SQL> connect / as sysdba
SQL> startup nomount;
SQL> start $HOME/createRED.sql

Tables du dictionnaire

Toujours sous sqlplus en mode sysdba.

SQL> start $ORACLE_HOME/rdbms/admin/catalog.sql
SQL> start $ORACLE_HOME/rdbms/admin/catproc.sql
Ces deux scripts sont assez longs, il faut compter 15 à 20 minutes.

Mot de passe sys et system

Toujours sous sqlplus en mode sysdba.

SQL> alter user sys identified by manager11;
SQL> alter user system identified by manager11;

Mise en place du spfile

Toujours sous sqlplus en mode sysdba.

SQL> create spfile from pfile;
SQL> exit;

Finalisation

Sortir de sqlplus et se reconnecter en system pour lancer le script pupbld.sql

sqlplus system/manager11
SQL> start $ORACLE_HOME/sqlplus/admin/pupbld.sql
SQL> exit;
Ce script créé une table, PRODUCT_USER_PROFILE, dont la présence est testée par les outils Oracle lors de la connexion d’un utilisateur. Si la table n’existe pas et que l’utilisateur n’est pas un DBA, un message d’alerte est affiché, mais la connexion est acceptée.

Afin d'activer la gestion par le spfile, procéder à un arrêt/re-démarrage de la base

sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate;
SQL> startup;
SQL> exit;

Enregistrement listener

Cette manipulation n'est pas obligatoire, en effet une base oracle au moment de son démarrage s'enregistre automatiquement auprès du listener. Elle présente toutefois un avantage, celui de pouvoir démarrer la base à distance.

Editer le fichier $ORACLE_HOME/network/admin/listener.ora et ajouter les lignes suivantes :

SID_LIST_LISTENER =
(SID_LIST=
  (SID_DESC =
    (GLOBAL_DBNAME = RED)
    (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
    (SID_NAME = RED)
  )
)

Suite à cette manipulation, redémarrer le listener.

lsnrctl stop
lsnrctl start
A ce stade la base de données est une enveloppe vide. Il importe de la fiabiliser au niveau de son fichier de contrôle et de ses redologs.

Fiabilisation de la base

Afin que la base soit fiable il est nécessaire de multiplexer le fichier de contrôle ainsi que les redologs.

Multiplexage fichier de contrôle

Se connecter sqlplus en sysdba

sqlplus /nolog
SQL> connect / as sysdba
SQL> alter system set control_files= 
'/u01/app/oracle/oradata/RED/control01.ctl','/u02/app/oracle/oradata/RED/control02.ctl','/u03/app/oracle/oradata/RED/control03.ctl' scope=spfile;
SQL> shutdown immediate;
SQL> host cp /u01/app/oracle/oradata/RED/control01.ctl /u02/app/oracle/oradata/RED/control02.ctl
SQL> host cp /u01/app/oracle/oradata/RED/control01.ctl /u03/app/oracle/oradata/RED/control03.ctl
SQL> startup;

Multiplexage redologs

Toujours sous sqlplus

SQL> alter database add logfile member '/u02/app/oracle/oradata/RED/redo01b.log' to group 1;
SQL> alter database add logfile member '/u02/app/oracle/oradata/RED/redo02b.log' to group 2;
Ajout d'un troisième groupe de redolog
SQL> alter database add logfile group 3 
( '/u01/app/oracle/oradata/RED/redo03a.log','/u02/app/oracle/oradata/RED/redo03b.log' ) size 50M;

Tablespace par défaut

Lors de la création d'un segment, table ou index, si le tablespace n'est pas spécifié, Oracle le stocke dans le tablespace par défaut de l'utilisateur.

Ce tablespace par défaut de l'utilisateur est mis en place par l'ordre create user. Il peut toutefois être omis et Oracle utilise alors le tablespace par défaut de la base : SYSTEM.

Ceci pose un problème car les données de l'utilisateur seront alors stockées dans le tablespace SYSTEM.

Il est possible de définir un autre tablespace par défaut au niveau de la base. Ne pas spécifier de tablespace par défaut pour un utilisateur ou dans la création du segment n'est pas conseillé. Pour limiter ce problème, créer un tablespace par défaut de très petite taille. Ainsi Oracle le satura très vite indiquant ainsi un "oubli".

export ORACLE_SID=RED
sqlplus system/manager11
SQL> create tablespace users datafile '/u02/app/oracle/oradata/RED/users_01.dbf' size 100K;
SQL> alter database default tablespace users;
Arrivé à ce stade, il est conseillé d'effectuer une sauvegarde de la base.

Sauvegarde de la base

La base étant en mode NOARCHIVELOG sa sauvegarde devra se faire base stoppée. Le référentiel de sauvegarde sera stocké dans le fichier de contrôle.

Afin de faciliter les restaurations, la Flash Recovery Area sera paramétrée.

Flash Recovery Area

Créer le répertoire

mkdir -p /u03/app/oracle/flash_recovery_area
Se connecter sqlplus en sysdba
export ORACLE_SID=RED
sqlplus /nolog
SQL> connect / as sysdba
SQL> alter system set db_recovery_file_dest_size=5G scope=both;
SQL> alter system set db_recovery_file_dest='/u03/app/oracle/flash_recovery_area' scope=both;
SQL> exit;

Lancement de la première sauvegarde

export ORACLE_SID=RED
rman target /
RMAN> configure controlfile autobackup on;
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup database;
RMAN> alter database open;
RMAN> exit;
La commande RMAN configure controlfile autobackup on n'est à exécuter qu'une fois, ainsi le fichier de contrôle et le spfile seront automatiquement sauvegardés et il sera possible de les restaurer par la commande RMAN restore controlfile/spfile from autobackup.

Il est possible de visualiser la sauvegarde par la commande list backup, la sortie écran devrait être de ce type :

RMAN> list backup;

utilisation du fichier de contrôle de la base de données cible au lieu du catalogue de récupération

Liste des ensembles de sauvegarde
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1       Full    238.52M    DISK        00:00:14     05/03/11       
        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20110305T191429
        Piece Name: /u03/app/oracle/flash_recovery_area/RED/backupset/2011_03_05/o1_mf_nnndf_TAG20110305T191429_6q4zd6hl_.bkp
  Liste des fichiers de données dans l'ensemble de sauvegarde 1
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 303854     05/03/11 /u01/app/oracle/oradata/RED/system01.dbf
  2       Full 303854     05/03/11 /u01/app/oracle/oradata/RED/sysaux01.dbf
  3       Full 303854     05/03/11 /u01/app/oracle/oradata/RED/undo_tbs01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
2       Full    7.55M      DISK        00:00:00     05/03/11       
        BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: TAG20110305T191446
        Piece Name: /u03/app/oracle/flash_recovery_area/RED/autobackup/2011_03_05/o1_mf_s_745010043_6q4zdpmk_.bkp
  SPFILE inclus : temps de modification : 05/03/11
  SPFILE db_unique_name: RED
  Control File Included: Ckp SCN: 303854       Ckp time: 05/03/11

RMAN> 

Configuration client Oracle*Net

La base de données doit être accessible par les applications clientes. A ce stade le serveur n'a d'autre besoin que d'avoir un listener de configuré.

La configuration du client se fait de diverses manières, ici je vais parler des deux plus courantes :

  • Easy-Connect
  • Résolution locale

La première solution, Easy-Connect est la plus simple car il n'y a rien à configurer. Elle impose juste l'utilisation du protocole TCP/IP. La seconde solution demande la configuration de deux fichiers : sqlnet.ora et tnsnames.ora. Il est d'ailleurs possible de mixer les deux méthodes.

Connexion Easy-Connect

Depuis le poste client

sqlplus system/manager11@//chopin.adimcor.eu:1521/red
SQL> 

Notifier le port 1521 peut-être omis, car c'est le port par défaut.

Configuration de résolution locale

Sur le poste client, se positionner dans le répertoire $ORACLE_HOME/network/admin et créer un fichier nommé sqlnet.ora contenant la ligne suivante :

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

Ce fichier indique que pour se connecter à la base Oracle, le client tentera de résoudre le nom localement ( via tnsnames.ora ) et utilisera sinon Easy-Connect.

Créer sous le même répertoire le fichier tnsnames.ora et y ajouter les lignes suivantes :

RED =
  (DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = chopin.adimcor.eu)(PORT = 1521))
    )
    (CONNECT_DATA =
       (SERVICE_NAME = RED)
    ) 
)

La configuration correcte peut être testée par la commande tnsping

tnsping RED
La commande doit renvoyer un message de ce type :

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 06-MARS -2011 10:29:39
Copyright (c) 1997, 2009, Oracle.  All rights reserved.
Fichiers de paramètres utilisés :
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora
Adaptateur TNSNAMES utilisé pour la résolution de l'alias
Tentative de contact de (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = chopin.adimcor.eu)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RED)))
OK (20 msec)

Si ce test échoue, il sera impossible de se connecter à la base en distant. Les causes sont diverses ( cable réseau débranché, listener non lancé, … )

Le database control

Bien que ce document soit orienté ligne de commande, Oracle offre depuis la 10g, un module d'administration graphique accessible via un serveur web. Cette interface est automatiquement mise en place lorsque la base est créée par dbca. Il est possible de configurer le database control à postériori.

Pré-requis

Il faut renseigner dans le spfile un paramètre supplémentaire, job_queue_processes à 1 minimum.

export ORACLE_SID=RED
sqlplus /nolog
SQL> connect / as sysdba
SQL> alter system set job_queue_processes=1 scope=both;
SQL> exit;
En 11GR2, cette manipulation n'est plus nécessaire, car la valeur par défaut de ce paramètre est de 1000.
show parameter job_queue_processes

NAME TYPE VALUE ———————————— ———– —————————— job_queue_processes integer 1000

Création du référentiel EM

emca -repos create 
Le script pose 5 questions :

  • SID → RED
  • Port d'écoute → 1521
  • Mot de passe SYS → manager11
  • Mot de passe SYSMAN → manager11 ( cet utilisateur va être créé )
  • Répondre Y pour lancer le traitement.

Mise en place de l'interface Web

emca -config dbcontrol db
Le script pose 9 questions

  • SID → RED
  • Processus d'écoute → 1521
  • Répertoire d'origine ORACLE_HOME du processus d'écoute : accepter
  • Mot de passe de SYS → manager11
  • Mot de passe de DBSNMP → manager11 ( cet utilisateur va être créé )
  • Mot de passe de SYSMAN: → manager11
  • Adresse électronique pour les notifications (facultatif): Laisser vide
  • Serveur de messagerie sortant (SMTP) pour les notifications (facultatif): Laisser vide
  • Répondre Y pour lancer le traitement

Une fois la configuration terminée, il sera possible de se connecter au database control de RED par l'URL https://chopin.adimcor.eu:1158/em. La connexion est sécurisée. ( le port peut être différent, voir le fichier $ORACLE_HOME/install/portlist.ini )

Se connecter en system/manager11. Le database control est un produit très complet, le document Oracle 2 days DBA est une bonne approche de l'adminstration Oracle par le database control.

L'écran montre ici la fenêtre principale du database control.

Démarrage automatique de la base

Il est parfois intéressant que la base soit démarrée automatiquement au boot du serveur. Afin de prendre en charge cette fonctionnalité il faut enregistrer la base dans le fichier /etc/oratab et créer un script de lancement.

/etc/oratab

Sa syntaxe est simple, editer le fichier /etc/oratab et y mettre la ligne suivante :

RED:/u01/app/oracle/product/11.2.0/dbhome_1:Y

Script de lancement

Editer un fichier /etc/init.d/oracle

# chkconfig: 235 80 20
# description: ajout de service auto pour start/stop oracle
#!/bin/bash
ORACLE_OWNER=oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
case $1 in
  start)
    echo -n "Démarrage Oracle DB:"
    su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
    touch /var/lock/subsys/dbora
  ;;
  stop)
    echo -n "Arrêt Oracle DB:"
    su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
    rm -f /var/lock/subsys/dbora
  ;;
  *)
    echo "Usage: $0 {start|stop}"
  ;;
esac

Le rendre exécutable 

chmod 0755 /etc/init.d/oracle
Activer les niveaux d'exécution
chkconfig –add oracle
chkconfig –level 2345 oracle on
Ce script démarre la base oracle et le listener, mais pas le database control. Pour lancer le database control :
export ORACLE_SID=RED
emctl start dbconsole

Sauvegarde régulière

Une première sauvegarde fut dans ce document réalisée. Il est important de faire régulièrement des sauvegardes de données. Il est encore plus important de tester les restaurations, sinon sauvegarder ne sert pas à grand chose.

Je vais présenter ici plusieurs modes de sauvegarde de la base RED :

  • Complète à froid
  • Incrémentale à froid
  • Sauvegarde à chaud, sans arrêt de la base.

Il existe une multitude de modes possibles avec RMAN, voir la doc !

Sauvegarde complète à froid

Il est assez simple de mettre en place une sauvegarde à froid se lançant automatiquement à 22H00 chaque jour. Editer sous $HOME un fichier script RMAN : svfroid_full.rma et y placer les lignes suivantes :

run {
  shutdown immediate;
  startup mount;
  backup database;
  delete noprompt obsolete;
  alter database open;
}

Ce script arrête la base, la passe en mode mount et lance la sauvegarde compète vers la flash_recovery_area. Ensuite seule la dernière sauvegarde est conservée, et en fin de procédure la base est à nouveau ouverte.

Afin d'automatiser ce processus, il suffit de programmer le cron en editant le fichier /etc/crontab et en y ajoutant la ligne suivante :

00 22 * * * oracle . ~/.bash_profile; export ORACLE_SID=RED; rman target / @$HOME/svfroid_full.rma > $HOME/svfroid_full.rma.log

Lors de la planification d'une tâche via la crontab, un shell minimal est lancé. Ainsi l'environnement habituel de l'utilisateur n'est pas pris en compte. Ceci explique le fait que une commande existe dans la session et ne fonctionne pas avec le cron. Pour éviter cela il faut demander au cron de lire le fichier .bash_profile explicitement

Sauvegarde incrémentale à froid

Les sauvegardes incrémentales présentent l'avantage d'être plus rapides en ne prenant en compte que les modifications entre deux sauvegardes. Ce principe permet de diminuer le temps d'arrêt de la base.

Pour ce scénario je vais poser les hypothèses suivantes :

  • La base est sauvegardée complètement chaque dimanche à 4h00
  • les autres jours il est procédé à une sauvegarde incrémentale à 22H00.

La sauvegarde incrémentale utilise un principe de niveau, 0 ou 1.

  • Le niveau 0 correspond à une sauvegarde complète
  • Le niveau 1 ne sauvegarde que les différences entre 2 sauvegardes.

Le schéma suivant montre le principe des sauvegardes incrémentales.

Créer sous $HOME le script svfroid_inc0.rma

run {
  shutdown immediate;
  startup mount;
  backup incremental level 0 database;
  delete noprompt obsolete;
  alter database open;
}

Créer sous $HOME le script svfroid_inc1.rma

run {
  shutdown immediate;
  startup mount;
  backup incremental level 1 database;
  alter database open;
}

Automatiser le tout dans le fichier /etc/crontab

00 04 * * 7 oracle . ~/.bash_profile; export ORACLE_SID=RED; rman target / @$HOME/svfroid_inc0.rma > $HOME/svfroid_inc0.rma.log
00 22 * * 1-6 oracle . ~/.bash_profile; export ORACLE_SID=RED; rman target / @$HOME/svfroid_inc1.rma > $HOME/svfroid_inc1.rma.log

Sauvegarde à chaud

Si la base de données ne peut être stoppée, il est nécessaire de la passer en mode ARCHIVELOG afin de pouvoir la sauvegarde sans arrêt.

Mise en mode ARCHIVELOG

Ici encore la flash recovery area sera mise à contribution, car c'est par défaut la destination des archivelogs.

export ORACLE_SID=RED
sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> exit;

Sauvegarde

Créer sous $HOME le script RMAN svchaud_full.rma

run {
  backup database plus archivelog delete all input;
  delete noprompt obsolete;
}

Il n'est plus nécessaire de stopper la base, cette sauvegarde est complète, y compris les archivelogs qui sont purgés une fois sauvegardés. Il suffit alors de programmer le cron ainsi.

00 22 * * * oracle . ~/.bash_profile; export ORACLE_SID=RED; rman target / @$HOME/svchaud_full.rma > $HOME/svchaud_full.rma.log

Adapter ce principe avec les incrémentales est simple.

installation_oracle_11g.txt · Dernière modification: 2017/05/30 13:25 par admin