====== 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.[[http://www.silverlake.fr/index.php?post/2011/02/17/Installation-de-Oracle-11g-sous-Ubuntu-10.04-LTS|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" {{:centos_inst_01.png?|}} Dans l'écran suivant, choisir la langue d'installation. {{:centos_inst_02.png?|}} Puis sélectionner une configuration de clavier. {{:centos_inst_03.png?|}} Il sera ensuite demandé la localisation des sources logicielles, choisir "HTTP" {{:centos_inst_04.png?|}} Il faut ensuite configurer le réseau, seul IPV4 sera utilisé et l'adresse sera manuelle. {{:centos_inst_05.png?|}} 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. {{:centos_inst_06.png?|}} 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. {{:centos_inst_07.png?|}} Une fois l'image chargée, l'écran suivant est affiché. Choisir "Mode texte". {{:centos_inst_08.png?|}} Puis valider l'écran de bienvenue. {{:centos_inst_09.png?|}} ==== 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. {{:centos_inst_10.png?|}} Accepter de définir la table des partition et choisir un partionnement personnalisé dans l'écran suivant {{:centos_inst_11.png?|}} 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| {{:centos_inst_12.png?|}} ==== Chargeur de démarrage ==== Le chargeur est GRUB, les cinq écrans suivants sont validés sans modifications, les choix par défaut convenant parfaitement. {{:centos_inst_13.png?|}} {{:centos_inst_14.png?|}} {{:centos_inst_15.png?|}} {{:centos_inst_16.png?|}} {{:centos_inst_17.png?|}} ==== Réseau ==== La carte réseau étant déja configurée précédemment, il faut choisir "Non" {{:centos_install_18.png?|}} Nommer le serveur manuellement, dans l'exemple : chopin.adimcor.eu {{:centos_inst_19.png?|}} ==== Horloge ==== Choisir le fuseau horaire de Paris {{:centos_inst_20.png?|}} ==== Mot de passe du root ==== Renseigner ici le mot de passe de root. {{:centos_inst_21.png?|}} ==== Choix des packages ==== Déselectionner GNOME et choisir Personnalisation {{:centos_inst_22.png?|}} Dans cet écran, 4 groupes de packages sont pré-selectionnés, les dévalider tous {{:centos_inst_23.png?|}} 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 --http-password -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 --http-password -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 [[http://www.silverlake.fr/PDF/oracle11_centos.sh|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 : [[http://laurent-dardenne.developpez.com/articles/oracle-proc-externe-delphi/|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 ) {{:connexion_em.png?|}} Se connecter en system/manager11. Le database control est un produit très complet, le document [[http://download.oracle.com/docs/cd/E11882_01/server.112/e10897/toc.htm|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. {{:database_control_01.png?1000|}} ====== 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. {{:sauv_differentielles.jpg?|}} 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.