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
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 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.isoL'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.
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.
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 | ||
---|---|---|
Montage | Type | Taille |
/boot | Ext2 | 100Mo |
swap | 4Go | |
/ | Ext3 | 500Mo |
Logique | ||
Montage | Type | Taille |
/usr | Ext3 | 5Go |
/var | Ext3 | 2Go |
/tmp | Ext3 | 2Go |
/u01 | Ext3 | 10Go |
/u02 | Ext3 | 10Go |
/u03 | Ext3 | 10Go |
/home | Ext3 | Le reste |
Le chargeur est GRUB, les cinq écrans suivants sont validés sans modifications, les choix par défaut convenant parfaitement.
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
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.
Il est nécessaire de procéder à une mise à jour des packages en se connectant root et en lançant yum update
yum updateLe 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 wgetA titre personnel, j'installe aussi l'éditeur vim
yum install vim-enhanced
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
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 \ pdkshBien 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
Créer 3 groupes, oinstall, dba et oper
groupadd oinstall groupadd dba groupadd operCré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
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 -pRajouter 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 offDé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
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.zipCes deux commandes vont créer un sous répertoire /home/database dans lequel se trouve l'intégralité des fichiers d'installation de Oracle.
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
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
Ce fichier est stocké sous /home/oracle/db.rsp. La commande suivante lance l'installation silencieuse.
/home/database/runInstaller -silent -responseFile /home/oracle/db.rspOptions : -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.logIl 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.shCe script modifie les privilèges de certains fichiers.
/u01/app/oracle/product/11.2.0/dbhome_1/root.shCe script positionne le droit setUID sur les binaires Oracle et créés les fichiers oraenv, coraenv et dbhome
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_profileVé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_1La 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
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 startLa 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.
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.
L'exemple présenté ici va créer une base de données nommée RED avec le minimum requis
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.
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/REDCré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 :
Création du lien symbolique dans $ORACLE_HOME/dbs
cd $ORACLE_HOME/dbs ln -s $ORACLE_BASE/admin/RED/pfile/initRED.ora initRED.oraCréation du fichier de mot de passe pour la connexion en sysdba
cd $ORACLE_HOME/dbs orapwd file=orapwRED password=manager11Revenir 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;
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
Toujours sous sqlplus en mode sysdba.
SQL> start $ORACLE_HOME/rdbms/admin/catalog.sql SQL> start $ORACLE_HOME/rdbms/admin/catproc.sqlCes deux scripts sont assez longs, il faut compter 15 à 20 minutes.
Toujours sous sqlplus en mode sysdba.
SQL> alter user sys identified by manager11; SQL> alter user system identified by manager11;
Toujours sous sqlplus en mode sysdba.
SQL> create spfile from pfile; SQL> exit;
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;
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 startA 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.
Afin que la base soit fiable il est nécessaire de multiplexer le fichier de contrôle ainsi que les redologs.
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;
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;
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.
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.
Créer le répertoire
mkdir -p /u03/app/oracle/flash_recovery_areaSe 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;
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>
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 :
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.
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.
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 REDLa 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é, … )
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.
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_processesNAME TYPE VALUE ———————————— ———– —————————— job_queue_processes integer 1000
emca -repos createLe script pose 5 questions :
emca -config dbcontrol dbLe script pose 9 questions
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.
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.
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
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/oracleActiver les niveaux d'exécution
chkconfig –add oracle chkconfig –level 2345 oracle onCe 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
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 :
Il existe une multitude de modes possibles avec RMAN, voir la doc !
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
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 sauvegarde incrémentale utilise un principe de niveau, 0 ou 1.
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
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.
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;
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.