Installer un serveur Oracle 11g sur Debian 5.0 Lenny
Oracle est un système de gestion de base de données (SGBD) très répandu dans le domaine de l'entreprise. Personnellement, je trouve que dans 99% des cas, MySQL ou PostgreSQL font parfaitement l'affaire... mais on ne lutte pas contre les DSI. Cet article vous guide au travers de l'installation d'un serveur Oracle 11g sur Debian 5.0 Lenny.
Prérequis
Oracle nécessite les prérequis suivants :
- 4Go d'espace disque libre environ (3,85 Go... mais arrivé la... le détail ne sert à rien) (et c'est sans compter les 2 Go de fichier téléchargé) (bref, mettez au moins 10 Go sur le "/") (Voir 15 Go) (Ou alors, 5 Go de /, et 10 Go de /opt).
- 1 Go de RAM au moins.
- 1,5 Go de swap au moins.
Afin que notre processus d'installation se déroule correctement, nous avons besoin de quelques prérequis :
/usr/bin/apt-get install unzip curl x11-utils \ binutils libstdc++5 libelf-dev \ gcc g++ libc6-dev libaio-dev \ make sysstat ksh rpm gcc-multilib \ libc6-dev-i386
Nous initialisons la base de données de RPM :
/usr/bin/rpm --initdb
L'installation d'Oracle nécessite la création de nouveaux groupes et utilisateurs.
/usr/sbin/addgroup --system oinstall /usr/sbin/addgroup --system dba /usr/sbin/addgroup --system oper /usr/sbin/addgroup --system asmadmin /usr/sbin/adduser --system --shell /bin/bash --home /opt/oracle --ingroup oinstall oracle /usr/sbin/adduser oracle dba /usr/sbin/adduser oracle oper /usr/sbin/adduser oracle asmadmin
L'utilisateur nobody est aussi nécessaire, mais il est déjà disponible sur un système debian de base, comme indiqué par la commande :
id nobody
Nous calculons la valeur de la moitié de la quantité de mémoire du système :
HALF_MEM=$(($(/bin/cat /proc/meminfo \ | /bin/grep MemTotal \ | /bin/sed -e 's/^MemTotal:[ ]*\([0-9]*\) .*/\1/') * 1024 / 2))
Nous configureons les paramètres du noyau nécessaires au bon fonctionnement d'Oracle :
/bin/echo "# Oracle Sysctl configuration fs.file-max = 65535 # Shared memory parameters kernel.shmall = 2097152 kernel.shmmax = ${HALF_MEM} kernel.shmmni = 4096 # Semaphore parameters kernel.sem = 250 32000 100 128 # Network parameters net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 262144 " > /etc/sysctl.d/oracle.conf
Une fois le fichier de configuration créé, chargez les paramères :
/etc/init.d/procps restart
Afin d'augmenter les performances de notre système, nous augmentons les limites du shell pour l'utilisateur Oracle. Pour ce faire, utilisez la ligne de commande suivante :
/bin/echo "# Raising shell limits for oracle user. # Increase Oracle databases performances. oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536" >> /etc/security/limits.conf
Une fois ceci fait, nous créons le dossier destiné à contenir l'installation d'oracle (et les bibliothèques partagées) :
/bin/mkdir --parent /opt/oracle/app /bin/chown -R oracle:oinstall /opt/oracle/app /bin/chmod 775 /opt/oracle/app
Si vous utilisez un système 64bit, nous remplaçons temporairement certains fichiers de /usr/lib par des lien symboliques vers leur version 32 bit :
/bin/mv /usr/lib64 /usr/lib64.old /bin/cp -a /usr/lib /usr/lib64 /bin/mv /usr/lib/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a.bck /bin/mv /usr/lib/libc_nonshared.a /usr/lib/libc_nonshared.a.bck /bin/ln -s /usr/lib32/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a /bin/ln -s /usr/lib32/libc_nonshared.a /usr/lib/libc_nonshared.a
Nous créons les liens symbolique pour les applications dont Oracle est incapable de détecter le chemin (once again... RPM sucks) :
/bin/ln -s /usr/bin/rpm /bin/rpm /bin/ln -s /usr/bin/awk /bin/awk /bin/ln -s /usr/bin/basename /bin/basename
Nous configurons l'environnement de l'utilisateur oracle dont nous allons nous servir pour installer Oracle. En premier lieu, nous copions le squelette du fichier .bashrc :
/bin/cp /etc/skel/.* /opt/oracle/ /bin/chown oracle:oinstall /opt/oracle/.*
Enfin, nous copions le id_rsa.pub de la machine hébergeant le serveur X dans le fichier authorised_keys de l'utilisateur Oracle.
/bin/mkdir /opt/oracle/.ssh /bin/cat "${HOME}"/id_rsa.pub >> /opt/oracle/.ssh/authorised_keys /bin/chown -R oracle:oinstall /opt/oracle/.ssh
Nous assignons un mot de passe à l'utilisateur oracle, de façon à pouvoir l'utiliser avec une connexion SSH :
passwd oracle
Nous pouvons maintenant passer à l'installation d'Oracle. Vous pouvez vous deconnecter de votre serveur Oracle, nous allons nous y reconnecter avec le compte oracle :
exit
Installation d'Oracle
Téléchargement de l'installeur d'Oracle
Obtenez la dernière version d'Oracle pour GNU/Linux i386 ou amd64 en le téléchargeant depuis la page :
Oracle Database Software Downloads
Remarque : Il est nécessaire de s'inscrire pour télécharger l'installeur :(.
Une fois inscrit, si vous souhaitez télécharger l'installeur depuis le serveur cible.
L'installation d'Oracle nécessite la présence d'un serveur X (kof). Ne souhaitant pas mettre en place un serveur X sur le serveur de base de données (parceque faut pas déconner non plus), nous allons établir un tunnel SSH avec support du protocole X11 depuis notre machine de bureau, disposant d'un serveur X, vers le serveur ou sera installé la base de donnée Oracle.
Identifiez-vous comme l'utilisateur oracle sur le serveur en utilisant cette ligne de commande :
/usr/bin/ssh -Y -C oracle@www.mon-serveur-oracle.com
Remarque : L'option -C compresse la connexion, et l'option -Y va nous permettre d'utiliser des programmes nécessitant X via la connexion SSH : C'est indispensable pour lancer l'installation d'Oracle.
Renseignez vos identifiants pour le site Oracle :
ORACLE_USERNAME=email@domain.com ORACLE_PASSWORD=my-password
Nous récupérons l'IP de la connexion Internet serveur :
IP_ADDRESS=$(/usr/bin/wget -q http://www.monip.org/ -O- \ | /bin/grep "IP :" | /usr/bin/cut --characters=-80 \ | /bin/sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')
Nous renseignons le nom du fichier que nous souhaitons télécharger :
-
Pour la version amd64 :
FILENAME=linux.x64_11gR1_database_1013.zip
-
Pour la version i386 :
FILENAME=linux_11gR1_database_1013.zip
Nous utilisons curl pour nous identifier sur le serveur Oracle, et télécharger l'installeur :
/usr/bin/curl --data-urlencode "remoteIp=${IP_ADDRESS}" \ --data-urlencode 'globalId=' \ --data-urlencode "redirectUrl=http://download-llnw.oracle.com/otn/linux/oracle11g/${FILENAME}" \ --data-urlencode "onFailRedirectUrl=/jsp/realms/otnWrongPassword.jsp?nexturl=http://download-llnw.oracle.com/otn/linux/oracle11g/${FILENAME}" \ --data-urlencode "username=${ORACLE_USERNAME}" \ --data-urlencode "password=${ORACLE_PASSWORD}" \ --data-urlencode "submit=Continue" \ --referer "http://profile.oracle.com/jsp/realms/otnLogin.jsp?remoteIp=${IP_ADDRESS}&globalId=&redirectUrl=http%3a%2f%2fdownload-llnw.oracle.com%3a80%2fotn%2flinux%2foracle11g%2f${FILENAME}" \ --user-agent 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1' \ --location --cookie-jar /tmp/cookie.jar \ --output "/opt/oracle/${FILENAME}" \ https://profile.oracle.com/jsp/reg/loginHandler.jsp
Nous décompressons le fichier téléchargé :
/usr/bin/unzip -d "/opt/oracle" "/opt/oracle/${FILENAME}"
Installation d'Oracle
Nous renseignons les dossiers ou nous souhaitons installer Oracle :
export ORACLE_BASE=/opt/oracle/app/oracle
export ORACLE_SID=my_database
Remarque : my_database est le nom de votre base de données. Vous pouvez l'adapter à votre besoin.
Nous nous assurons qu'aucune variable indésirable ne vienne perturber notre installation :
unset ORACLE_HOME
unset TNS_ADMIN
Nous remplaçons le binaire "unzip" fourni avec oracle par celui de notre système :
/bin/mv /opt/oracle/database/install/unzip /opt/oracle/database/install/unzip.back /bin/ln -s /usr/bin/unzip /opt/oracle/database/install/unzip
Une fois ceci fait, nous lançons l'installation :
/opt/oracle/database/runInstaller -ignoreSysPrereqs
- Étape 1 : Cliquez sur "suivant".
- Étape 2 : Cliquez sur "suivant".
- Étape 3 : Choisissez le type d'installation (personnellement, j'utilise Standard Edition), et cliquez sur "suivant".
- Étape 4 : Cliquez sur "suivant".
- Étape 5 : Cliquez sur "suivant". Une boite d'avertissement s'affiche alors. Ignorez-la et cliquez sur "Oui".
- Étape 6 : Choisissez "Installer le logiciel uniquement", et cliquez sur "suivant".
- Étape 7 : Cliquez sur "suivant".
- Étape 8 : Oracle s'installe durant cette étape. C'est le moment de la pause café. À la fin du processus d'installation, une boite de dialogue s'affiche vous demandant d'exécuter certains scripts en tant que root. Cliquez sur Ok, ce point étant abordé plus loin dans ce guide.
- Étape 9 : Cliquez sur "Quitter"
Une fois l'installation terminée, exécutez en tant que root les deux commandes indiquées dans la dernière boite de dialogue :
/bin/su -c "/opt/oracle/app/oraInventory/orainstRoot.sh /opt/oracle/app/oracle/product/11.1.0/db_1/root.sh"
Une fois ceci fait, ajoutez les paramètre nécessaires à Oracle à votre fichier /etc/profile :
/bin/su -c "/bin/echo '# Oracle environment settings. export ORACLE_OWNER=\"oracle\" export ORACLE_HOME=\"/opt/oracle/app/oracle/product/11.1.0/db_1\" PATH=\"\${PATH}:/opt/oracle/app/oracle/product/11.1.0/db_1/bin\"' >> /etc/profile"
Enfin, nous remettons en place l'environnement par défaut de Debian, que nous avions du tweaker afin que l'installation s'effectue sans problème :
/bin/su -c '/bin/rm -r /usr/lib64 /bin/mv /usr/lib64.old /usr/lib64 /bin/rm /usr/lib/libpthread_nonshared.a /bin/mv /usr/lib/libpthread_nonshared.a.bck /usr/lib/libpthread_nonshared.a /bin/rm /usr/lib/libc_nonshared.a /bin/mv /usr/lib/libc_nonshared.a.bck /usr/lib/libc_nonshared.a'
Nous avons terminé l'installation d'Oracle. Il faut maintenant créer notre première base de données.
Création du service "listener"
Le listener permet de se connecter à une base Oracle via une connexion TCP. C'est un élément très important, puisque sans lui, votre serveur Oracle est inaccessible sur le réseau. Pour l'installer, utiliser l'assistant de configuration Oracle Net :
/opt/oracle/app/oracle/product/11.1.0/db_1/bin/netca
La création du Listener est une suite de clics sur le bouton "suivant". Veuillez toutefois à la fin à ne pas repartir dans la création d'un second listener. Voici les étapes successives de la création d'un listener :
Une fois le listener installé, il est automatiquement lancé. Par la suite, vous pourrez le démarrer à l'aide de la commande :
/opt/oracle/app/oracle/product/11.1.0/db_1/bin/lsnrctl start LISTENER
Mise en place du script Init.d pour Oracle
Afin de pouvoir démarrer vos base de données au lancement de votre système, vous devez mettre en place un script Init.d. Cela se fait avec les commandes suivantes :
/bin/su -c '/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-un-serveur-oracle-sur-debian-5-0-lenny/oracle \ --output-document=/etc/init.d/oracle /bin/chmod +x /etc/init.d/oracle /usr/sbin/update-rc.d oracle defaults'
Création de la base de données
L'outil dbca permet de créer de nouvelle base de données. Pour le lancer, utilisez la commande suivante :
/opt/oracle/app/oracle/product/11.1.0/db_1/bin/dbca
Remarque : Cette commande nécessite un affichage X. L'option -Y de ssh peut vous aider (voir plus haut).
- Étape 1 : Cliquez sur "suivant".
- Étape 2 : Cliquez sur "suivant".
- Étape 3 : Cliquez sur "suivant".
- Étape 4 : Saisissez le nom de votre base de données et cliquez sur "suivant".
- Étape 5 : Si vous le souhaitez vous pouvez configurer une alerte par e-mail.
- Étape 6 : Saisissez un mot de passe commun pour les 4 comptes standard.
- Étape 7 : Cliquez sur "Terminer"
- Étape 8 : Cliquez sur "Ok".
- Étape finale : Votre base de données est créée. Cliquez sur "Quitter".
Votre base de données est maintenant créée. Si vous souhaitez qu'elle soit lancée au démarrage du système, modifiez le fichier /etc/oratab de manière adéquate à l'aide de la commande suivante :
/bin/sed -e '$s/:N$/:Y/' /etc/oratab > /tmp/oratab /bin/cat /tmp/oratab > /etc/oratab /bin/rm /tmp/oratab
Par la suite, vous pouvez vous y connecter avec la commande :
sqlplus SYSMAN@ma-base-de-donnee
Configuration de RkHunter
Oracle créant une tripotée de fichiers /dev/shm/..., il est nécessaire de configurer RkHunter pour les ignorer. Pour ce faire, utilisez la ligne de commande suivante :
if [ -e /etc/rkhunter.conf ]; then /bin/sed -i -e '0,/ALLOWDEVFILE/{//a\ ALLOWDEVFILE=/dev/shm/JOXSHM_EXT_*\ ALLOWDEVFILE=/dev/shm/ora_* ;}' \ /etc/rkhunter.conf fi
Pour aller plus loin
Developpez.com semble fournir d'excellent guide pour apprendre l'administration d'Oracle. En voici 2 sur lesquels je suis tombé :
- Administration Oracle : Gestion des utilisateurs.
- Sauvegarde et restauration de données sous Oracle 9i.
A l'aide de ces guides, voici quelques lignes de commandes que j'ai obtenu, et que je place ici en guide d'aide mémoire.
Outil graphique d'administration Oracle
Si vous n'aimez pas la ligne de commande, vous pouvez vous intéresser à TOra : Toolkit for Oracle qui est une interface graphique de gestion d'une base de données Oracle.
Ajout d'un utilisateur
Pour ajouter un utilisateur avec les droits de SELECT, INSERT, UPDATE, etc à votre base de données, voici la méthode à utiliser.
En premier lieu, connectez-vous à votre base de données :
sqlplus SYSMAN@ma-base-de-donnee
Une fois connecté, utilisez cette requête SQL pour ajouter un utilisateur :
CREATE USER my-username IDENTIFIED BY my-password;
Et ensuite, assignez lui les droits par défaut à l'aide de cette requête :
GRANT connect, resource TO my-username;
Remarque : Par la suite, vous pouvez vérifier l'état de cet utilisateur en suivant la méthode donnée par flo|va-nu-pied dans son article Vérifier l'état d'un utilisateur Oracle.
Restauration d'un dump Oracle
Pour restaurer un base de données depuis un dump Oracle, voici la commande à utiliser :
imp userid=SYSMAN/my-password@my-dabase file=/root/my-dump.dmp fromuser=exportuser touser=myuser
Pour plus d'informations sur l'utilisation de imp, utilisez cette commande :
imp help=y
Remarque : d'après mon expérience, l'un des principal problèmes lors d'un import est de ciblé précisément le schéma de destination... Si vos tables ne sont pas créé pour le bon utilisateur, cela peut causer de mauvaises surprises.
Lister les tables d'une base Oracle
Si vous souhaitez lister toute les tables d'une base oracle, vous pouvez utiliser la requête :
SELECT table_name FROM all_tables;
Si vous souhaitez seulement lister les tables d'un schéma utilisateur :
SELECT table_name FROM user_tables;
Ou encore :
SELECT table_name FROM tabs;
Source : Merci aux personnes ayant répondu à Liste des tables d'une BdD sur Oracle.
Remerciements
- Merci à Augusto Bott de The Pythian Group pour son article Installing Oracle 11g on Ubuntu 8.04 LTS (Hardy Heron).
- Merci à Jaouad Zouaghi pour son article Installation d'Oracle 11G sous Linux et créer une base de données.
- Merci à Van Emery pour son article X over SSH - A Turorial.
serveur X
si vous utilisez Xming, il faut faire un export DISPLAY=xming_ip:0 sur la machine Debian (du moins je pense).
Perso, j'utilise ubuntu comme machine de bureau (c'est tellement plus agréable que windows :)), j'ai donc parlé de l'option -Y de ssh.
Bon courrage.
Beau travail.
Bonne continuation.
Sylvain
Excellent travail
Tout d'abord, merci pour ce tutoriel très complet, cependant après avoir suivi scrupuleusement le déroulement de l'installation, j'ai un petit souci à l'arrivée. Il me semble que ma Debian a perdu toutes ses variables d'environnement. Pour preuve, je dois rentrer à chaque commande son chemin complet. Avez-vous eu le même souci ?, d'autre part après un "shutdown immediate" de la base, il m'est impossible de faire un "startup mount" (une erreur TNS survient).
Merci d'avance de votre réponse.
Cordialement
Joche.
Merci
pour ce qui est de votre problème, j'ai suivi plusieurs fois ce guide sans le rencontrer. Je vous conseille de vérifier le contenu de votre fichier /etc/profile qui aurait pu être écrasé, bien que je ne vois pas comment.
Bon courage.
variable d'environement
En effet le problème venait de là.
Merci
Excellent document
Merci !
Problème au lancement de netca
Un petit problème au lancement de netca pour la config de SQLNet.
"UnsatisfiedLinkError exception loading native library: njni11"
Résolu par l'installation de libaio1 : (root) > apt-get install libaio1 libaio-dev
Sinon félicitations et merci pour cet excellent travail !!
Stéphane
erreur java vm lors du lancement de netca
J'ai essayé une installation de Oracle Database 11g (11.2.0) sur une Debian Squeeze à l'aide de ton tutorial. L'installation s'est déroulée sans problème, mais au lancement de netca, j'obtiens le message d'erreur suivant :
oracle@squeeze-vm:~$ /opt/oracle/app/oracle/product/11.2.0/dbhome_1/bin/netca
Configuration des services Oracle Net :
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# SIGSEGV (0xb) at pc=0xa3bc9510, pid=2086, tid=3077531328
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_17-b02 mixed mode)
# Problematic frame:
#
[error occurred during error reporting, step 60, id 0xb]
# An error report file with more information is saved as hs_err_pid2086.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
Aborted
Il y a un fichier log d'erreur plus complet, mais il est un peu long pour poster ici.
As-tu déjà rencontré ce problème ? Une idée pour le résoudre ?
En tous cas, bravo pour ce tutorial très clair !
Précisions sur l'installation sans serveur X
Vous avez écrit:
"L'installation d'Oracle nécessite la présence d'un serveur X (kof). Ne souhaitant pas mettre en place un serveur X sur le serveur de base de données (parceque faut pas déconner non plus), nous allons établir un tunnel SSH avec support du protocole X11 depuis notre machine de bureau, disposant d'un serveur X, vers le serveur ou sera installé la base de donnée Oracle."
J'utilise une Debian sans serveur x (aucune commande xterm, xstart... n'existe sur le serveur.
J'utilise habituellement xMing pour installer Oracle sous Linux
Je crois comprendre qu'on peut réaliser l'installation d'Oracle sans le serveur X installé sur la debian. Je n'y arrive pas avec Xming.
Ai je bien compris vos explication?
Si oui, pourriez vous m'expliquer comment faire pour installer Oracle dans ma configuration?
merci d'avance