Introduction
L'installation du SGBD Oracle sur un serveur Linux peut sembler simple. Il y a toutefois des précautions à prendre afin d'obtenir une plate-forme stable. Ce billet présente l'installation de la version 12.2.0.1 de Oracle sur CentOS 7 en utilisant le mode silencieux, c'est à dire sans interface graphique. Dans les environnements de production l'unique accès étant via SSH cette méthode est plus efficace. De plus maîtriser l'installation silencieuse permet de scripter totalement les installations massives et de faciliter les déploiements.
Prérequis système
Avant de lancer l'installation, un certain nombre d'actions au niveau système sont nécessaires :
- Packages complémentaires
- Création d'un user oracle
- Paramétrage du noyau
- Configuration des limites
Packages requis
La documentation Oracle donne un grand nombre de packages à installer. En raison de la non utilisation de l'interface graphique ce nombre est réduit. Il est de plus inutile d'installer les package 32 bits.Cette version de Linux, ainsi que la version 12c de Oracle n'existe qu'en 64 bits.
Il est supposé que le serveur est installé avec une version de CentOS ou RedHAt 7. Une installation de type "Minimal Install" est réalisée.
Afin de faciliter le déploiement en réseau il est conseillé de désactiver complètement le pare-feu
systemctl stop firewalld systemctl disable firewalld
Installation des packages via YUM
yum -y install compat-libcap1 gcc gcc-c++ ksh libaio-devel nfs-utils sysstat unzip bind-utils smartmontools
Autres packages. Ceux ci ne sont pas indispensables mais facilitent bien la vie...
yum -y install vim-enhanced wget psmisc net-tools
- wget permet de charger un fichier depuis une URL.
- psmisc contient la commande pstree et fuser ( indispensable pour PSU )
- net-tools contient la commande ifconfig
Si les pluggables databases sont utilisées, il faut installer aussi le package PERL suivant afin d'utiliser le script catcon.pl.
yum -y install perl-TermReadKey
Création du user oracle
La documentation Oracle demande la création de divers groupes : oinstall, dba, oper... et d'un utilisateur dédié le plus souvent nommé oracle. En pratique tous ces groupes sont facultatifs utiliser oinstall et dba suffisent.
Création des groupes
groupadd oinstall groupadd dba
Création du user oracle
useradd -g oinstall -G dba -p wt99ijrb/q0bo -d /home/oracle -s /bin/bash oracle
Le groupe principal est oinstall, le groupe secondaire dba. Le mot de passe est la version cryptée de "Manager12" et peut être obtenue ainsi :
perl -e 'print crypt(Manager12, "wtf")'
Paramétrage noyau.
Oracle demande quelques ajustements du noyau Linux en particulier sur la gestion mémoire et les processus via les sémaphores.
De nombreuses documentations préconisent de configurer le noyau via différents fichiers situés sous /etc/sysctl.d et non directement dans /etc/sysctl.conf. La raison étant que un upgrade ou un ajout de RPM peut écraser la configuration en place. L'installeur de Oracle ne gère pas ceci, aussi les configurations sont faites uniquement dans /etc/sysctl.conf. Il est recommandé une fois l'installation faite de transférer tous les paramètres propres à Oracle dans un fichier de configuration sous /etc/sysctl.d et de les supprimer de /etc/sysctl.conf.
Ci dessous le fichier /etc/sysctl.conf utilisé.
# Memoire partagee # kernel.shmall limite la taille de la shared memory ici 3Go sur les 4Go en place ( penser à la PGA et à l'OS... ) kernel.shmall = 786432 kernel.shmmax = 2072418304 kernel.shmmni = 4096 # Semaphores kernel.sem = 250 32000 100 128 kernel.panic_on_oops = 1 # Nbre fichiers fs.file-max = 6815744 fs.aio-max-nr = 1048576 # Reseau 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 # Desactive totalement IPV6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 # Optimisation mémoire vm.swappiness = 1 vm.dirty_background_ratio = 3 vm.dirty_ratio = 80 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100
- 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.
- Les valeurs type vm sont relatives à la mémoire et notamment sur la gestion des dirty block dans le database buffer cache.
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
Paramétrage des limites
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.
Créer un fichier 99-oracle.conf sous /etc/security/limits.d avec les lignes suivantes :
oracle soft nproc 16384 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768
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.
Cette configuration 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
Dans le répertoire /etc/profile.d créer le fichier oracle.sh avec 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
Binaires Oracle
Se connecter sur le site Oracle afin de récupérer les binaires. Le téléchargement est gratuit via un compte à créer ( également gratuit ). Choisir le fichier pour Linux 64 bits soit Linux x86-64
Le fichier : linuxx64_12201_database.zip fait une taille d'environ 3,2Go. Une fois chargé le décompresser.
unzip linuxx64_12201_database.zip
Ceci va créer un sous répertoire nommé database sous lequel se trouve l'exécutable runInstaller.
Pour l'installation la norme OFA sera respectée, voir le billet suivant sur le sujet : Norme OFA
Créer le répertoire de base et affecter les bons droits
mkdir /ora01 chown oracle:oinstall /ora01
Il est de plus impératif que le nom d'hôte soit correctement résolu, soit par DNS, soit par /etc/hosts avec une ligne de ce type :
192.168.56.21 ora01.formation.maison ora01
Fichier réponse
L'installation se faisant en mode silence, il faut créer un fichier response. Suite à la décompression des binaires, dans le sous répertoire response, se trouve un fichier vierge : db_install.rsp qu'il suffit de compléter. Ci-dessous le fichier définitif. Ici seuls les binaires seront mis en place, pas de création de base par défaut.
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0 oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/ora01/app/oraInventory ORACLE_HOME=/ora01/app/oracle/product/12.2.0.1/DB ORACLE_BASE=/ora01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP= oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.OSRACDBA_GROUP=dba SECURITY_UPDATES_VIA_MYORACLESUPPORT=false DECLINE_SECURITY_UPDATES=true
Se connecter oracle et lancer l'installation
/home/oracle/database/runInstaller -silent -waitforcompletion -showprogress -responsefile /home/oracle/db12c.rsp
Un certain nombre d'informations s'affichent alors
Démarrage d'Oracle Universal Installer... Vérification de l'espace temporaire : doit être supérieur à 500 Mo. Réel 33855 Mo Succès Vérification de l'espace de swap : il doit être supérieur à 150 Mo. Réel 4095 Mo Succès Préparation du lancement d'Oracle Universal Installer à partir de /tmp/OraInstall2017-07-11_09-17-49AM. Veuillez patienter...Le journal de cette session d'installation se trouve dans : /ora01/app/oraInventory/logs/installActions2017-07-11_09-17-49AM.log Préparer en cours. .................................................. 8% Terminé. Réussite de Préparer Copier les fichiers en cours. .................................................. 17% Terminé. .................................................. 22% Terminé. .................................................. 27% Terminé. .................................................. 32% Terminé. .................................................. 40% Terminé. .................................................. 45% Terminé. .................................................. 50% Terminé. .................................................. 55% Terminé. .................................................. 60% Terminé. .................................................. 65% Terminé. .................................................. 70% Terminé. .................................................. 75% Terminé. .................................................. 80% Terminé. .................... Réussite de Copier les fichiers Lier les fichiers binaires en cours. .......... Réussite de Lier les fichiers binaires Fichiers de configuration en cours. .............................. Réussite de Fichiers de configuration Configurer l'inventaire en cours. Réussite de Configurer l'inventaire Réussite de Terminer la configuration L'opération installation de Oracle Database 12c a réussi. Pour plus de détails, consultez '/ora01/app/oraInventory/logs/silentInstall2017-07-11_09-17-49AM.log'. Configurer Oracle Base en cours. Réussite de Configurer Oracle Base .................................................. 95% Terminé. En tant qu'utilisateur root, exécutez les scripts suivants : 1. /ora01/app/oraInventory/orainstRoot.sh 2. /ora01/app/oracle/product/12.2.0.1/DB/root.sh .................................................. 100% Terminé. Successfully Setup Software.
En fin d'installation ouvrir une session en tant que root et passer les deux shell suivants:
/ora01/app/oraInventory/orainstRoot.sh /ora01/app/oracle/product/12.2.0.1/DB/root.sh
Finalisation de l'installation
Il ne reste plus qu'à mettre en place certaines variables d'environnement pour le user oracle dans le fichier .bash_profile
export ORACLE_BASE=/ora01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/DB export PATH=$PATH:$ORACLE_HOME/bin export ORACLE_OWNER=oracle export NLS_LANG=FRENCH_FRANCE.UTF8 export NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS' export SQLPATH=$HOME/sql
La variable NLS_DATE_FORMAT permet d'avoir dans certains états, notamment RMAN, une datation précise ( par défaut le format est DD/MM/YY ).
Créer ensuite le répertoire $HOME/sql. Ce répertoire contiendra les scripts sql pouvant être lancés depuis SQL*Plus sans spécifier l'emplacement ( variable d'environnement SQLPATH ).
mkdir -p $HOME/sql
Dans ce répertoire est également situé le fichier login.sql, qui est lu à chaque lancement de SQL*Plus, et qui permet un paramétrage de l'environnement SQL*Plus. Créer ce fichier et y ajouter les lignes suivantes :
define _editor=vi set sqlprompt '&_user.@&_connect_identifier. >' set linesize 250 set pagesize 50
Ainsi sous SQL*Plus lors de l'appel de l'éditeur vi sera lancé en lieu et place de ed. Le prompt est redéfini afin d'afficher le user et l'alias Oracle*Net en cours lors de la session SQL*Plus.
Autre élément de confort, la possibilité de rappeler sous SQL*Plus les lignes précédentes. Il faut pour cela installer le package rlwrap qui n'est pas configuré dans les dépôts pour CentOS7. Un simple recherche sur le net permet de trouver le RPM correct par exemple
wget ftp://195.220.108.108/linux/epel/7/x86_64/r/rlwrap-0.42-1.el7.x86_64.rpm
Une fois téléchargé, l'installer via YUM
yum -y install rlwrap-0.42-1.el7.x86_64.rpm
Une fois cette installation faite, ajouter les alias suivants dans $HOME/.bashrc ( user oracle ).
alias sqlplus='rlwrap sqlplus' alias rman='rlwrap rman' alias adrci='rlwrap adrci'
Tester ensuite simplement la connexion SQL*Plus
[oracle@ora01 ~]$ sqlplus /nolog SQL*Plus: Release 12.2.0.1.0 Production on Mar. Juil. 11 10:40:56 2017 Copyright (c) 1982, 2016, Oracle. All rights reserved. SQL>
Conclusion
Installer Oracle en mode silencieux n'est pas complexe et beaucoup plus efficace qu'en mode graphique. Il est de plus très simple de préparer un fichier kickstart pour installer tous les prérequis. Ci dessous un exemple de fichier kickstart ( se reporter à la documentation RedHat sur kickstart pour personnaliser les options ).:
# Fichier kickstart installation Oracle 12c sur redhat 7 install url --url=http://192.168.56.1/centos/7/os/x86_64 lang fr_FR.UTF-8 keyboard fr-latin9 text rootpw root01 network --onboot yes --device enp0s3 --bootproto static --ip 192.168.56.31 --netmask 255.255.255.0 --gateway 192.168.56.1 --noipv6 --nameserver 192.168.56.11 --hostname ora01.formation.maison reboot authconfig --enableshadow --passalgo=sha512 timezone --utc Europe/Paris # Desactivation du premier boot firstboot --disabled # partitionnement disque zerombr clearpart --all ignoredisk --only-use=sda part swap --asprimary --size=4096 part / --fstype=ext4 --asprimary --size=1 --grow %packages --excludedocs # Installation minimale @core # Utiles vim-enhanced wget psmisc net-tools # Requis pour Oracle 12c compat-libcap1 gcc gcc-c++ ksh libaio-devel nfs-utils sysstat unzip bind-utils smartmontools perl-TermReadKey %end %post # Configuration depots rm -f /etc/yum.repos.d/* cat <<EOF > /etc/yum.repos.d/local.repo [local] name=local baseurl=http://192.168.56.1/centos/7/os/x86_64 enabled=1 gpgcheck=0 [local-updates] name=local-updates baseurl=http://192.168.56.1/centos/7/updates/x86_64 enabled=1 gpgcheck=0 EOF # Lancement MAJ yum -y update # Groupes et utilisateur groupadd oinstall groupadd dba # Le mot de passe oracle est Manager12 useradd -g oinstall -G dba -p wt99ijrb/q0bo -d /home/oracle -s /bin/bash oracle # Parammetre systeme specifique Oracle cat <<EOF >> /etc/sysctl.conf # Parametrage noyau pour Oracle 12c # Memoire partagee # kernel.shmall limite la taille de la shared memory ici 3Go sur les 4Go en place ( penser à la PGA et à l'OS... ) # ( 3 * 1024 * 1024 * 1024 ) / 4096 = 786432 kernel.shmall = 786432 kernel.shmmax = 2072418304 kernel.shmmni = 4096 # Semaphores kernel.sem = 250 32000 100 128 kernel.panic_on_oops = 1 # Nbre fichiers fs.file-max = 6815744 fs.aio-max-nr = 1048576 # Reseau 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 # Optimisation mémoire vm.swappiness = 1 vm.dirty_background_ratio = 3 vm.dirty_ratio = 80 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100 EOF cat <<EOF >> /etc/security/limits.d/oracle-limits.conf oracle soft nproc 16384 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768 EOF echo "session required pam_limits.so" >> /etc/pam.d/login cat <<EOF >> /etc/profile.d/oracle.sh if [ \$USER = "oracle" ]; then if [ \$SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi EOF # Desactiver le pare-feu systemctl disable firewalld # Optimisation connexion ssh sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config %end # Desactivation KDUMP %addon com_redhat_kdump --disable --reserve-mb='auto' %end