web-dev-qa-db-fra.com

Installer Oracle 12c R2 sur Ubuntu 18.04

L'installation d'Oracle 12c version 2 sur Ubuntu échoue car il ne s'agit pas d'une distribution prise en charge. Comment puis-je l'installer quand même?

2
fjalvingh

Téléchargez les fichiers d'installation et décompressez-les comme d'habitude.

Créez les utilisateurs Oracle, dba et oinstall:

Sudo groupadd oinstall
Sudo groupadd dba
Sudo useradd -g oinstall -G dba,oinstall -s /bin/bash -m -d /home/Oracle oracle

Ajoutez les paramètres suivants à /etc/sysctl.conf:

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 3355443
kernel.shmmax = 17179869184
kernel.shmmni = 4096

# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576

Ce qui précède concerne une machine de 32 Go. Si vous avez un montant différent, définissez:

  • shmmax = (mémoire en octets/2)

Maintenant, installez un ensemble de paquets nécessaires à l’installation. Commencez par mettre à jour vos paquets:

Sudo apt update

Ensuite, installez ce qui suit:

Sudo apt install libc6-i386 \
gcc-multilib g++-multilib libc6-dev-i386 libstdc++6:i386 \
alien autoconf automake autotools-dev elfutils rpm rpm-common \
build-essential debhelper expat gawk gsfonts-x11 html2text sysstat \
unixodbc unixodbc-dev doxygen ksh openssh-server pax Perl-doc rlwrap \
lsb lsb-core zlibc \
lib32z1-dev lib32ncurses5 libaio1 libaio-dev \
libelf-dev libodbcinstq4-1 libpth-dev libpthread-stubs0-dev \
libpthread-workqueue0 libpthread-workqueue-dev \
libtiff5-dev libzthread-dev libqt4-opengl:i386 libodbcinstq4-1:i386 \
libglu1-mesa:i386 libxtst6:i386 libxtst6

Sudo apt-get install -s cabextract
Sudo add-apt-repository ppa:nilarimogard/webupd8
Sudo apt update
Sudo apt install wimtools libwim-dev
Sudo apt install -s libbz2-dev:i386

Créez un certain nombre de liens symboliques pour que l'installation puisse trouver les fichiers dont elle a besoin aux endroits où elle les attend:

Sudo ln -s /usr/bin/basename /bin/basename
Sudo ln -s bin/bash /usr/bin/bash
Sudo ln -s /usr/bin/rpm /bin/rpm
Sudo ln -s /usr/bin/awk /bin/awk
Sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
Sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /lib64/libstdc++.so.6
Sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64/libgcc_s.so.1
Sudo ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a
Sudo ln -s /lib/lsb/init-functions /etc/init.d/functions
Sudo ln -sf /bin/bash /bin/sh

Lancez maintenant le programme d’installation Oracle exécuté sous le compte "Oracle", généralement comme suit:

xhost +
Sudo su - Oracle
cd /path/to/unzipped/files/database
./runInstaller

Installez la base de données mais ne créez pas une base de données lors de l'installation!

Après un moment, l'installation donnera une erreur lors de la liaison. Laissez le message d'erreur à l'écran, puis ouvrez un terminal et modifiez le fichier $ Oracle_HOME/bin/orald. Trouvez, au début, la partie qui se lit:

if [ -z "$BASH_VERSION" -o -n "$ORALD_USE_GCC" ] ; then
  exec gcc "$@"
  exit 1
fi

et changez la ligne gcc pour lire:

exec gcc -no-pie "$@"

(l'option -no-pie commence par un seul tiret).

Copiez ensuite le script suivant dans un fichier, par exemple/tmp/fixora:

#!/bin/bash

# Change the path below to point to your installation
export Oracle_HOME=/opt/Oracle/12cr2

Sudo ln -s $Oracle_HOME/lib/libclntshcore.so.12.1 /usr/lib
Sudo ln -s $Oracle_HOME/lib/libclntsh.so.12.1 /usr/lib

cp $Oracle_HOME/rdbms/lib/ins_rdbms.mk $Oracle_HOME/rdbms/lib/ins_rdbms.bkp
cp $Oracle_HOME/rdbms/lib/env_rdbms.mk $Oracle_HOME/rdbms/lib/env_rdbms.bkp

sed -i 's/\$(ORAPWD_LINKLINE)/\$(ORAPWD_LINKLINE) -lnnz12/' $Oracle_HOME/rdbms/lib/ins_rdbms.mk
sed -i 's/\$(HSOTS_LINKLINE)/\$(HSOTS_LINKLINE) -lagtsh/' $Oracle_HOME/rdbms/lib/ins_rdbms.mk
sed -i 's/\$(EXTPROC_LINKLINE)/\$(EXTPROC_LINKLINE) -lagtsh/' $Oracle_HOME/rdbms/lib/ins_rdbms.mk
sed -i 's/\$(OPT) \$(HSOTSMAI)/\$(OPT) -Wl,--no-as-needed \$(HSOTSMAI)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$(OPT) \$(HSDEPMAI)/\$(OPT) -Wl,--no-as-needed \$(HSDEPMAI)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$(OPT) \$(EXTPMAI)/\$(OPT) -Wl,--no-as-needed \$(EXTPMAI)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' $Oracle_HOME/network/lib/env_network.mk
sed -i 's/\$(SPOBJS) \$(LLIBSERVER)/\$(SPOBJS) -Wl,--no-as-needed \$(LLIBSERVER)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$(S0MAIN) \$(SSKFEDED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFEDED)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$(S0MAIN) \$(SSKFODED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFODED)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$(S0MAIN) \$(SSKFNDGED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFNDGED)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$(S0MAIN) \$(SSKFMUED)/\$(S0MAIN) -Wl,--no-as-needed \$(SSKFMUED)/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/^\(Oracle_LINKLINE.*\$(Oracle_LINKER)\) \($(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/\$LD \$LD_RUNTIME/$LD -Wl,--no-as-needed \$LD_RUNTIME/' $Oracle_HOME/bin/genorasdksh
sed -i 's/\$(GETCRSHOME_OBJ1) \$(OCRLIBS_DEFAULT)/\$(GETCRSHOME_OBJ1) -Wl,--no-as-needed \$(OCRLIBS_DEFAULT)/' $Oracle_HOME/srvm/lib/env_srvm.mk

sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/rdbms/lib/env_rdbms.mk
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/crs/lib/env_has.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/odbc/lib/env_odbc.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/precomp/lib/env_precomp.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/srvm/lib/env_srvm.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/network/lib/env_network.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/ldap/lib/env_ldap.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/ord/im/lib/env_ordim.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/plsql/lib/env_plsql.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/ctx/lib/env_ctx.mk;
sed -i 's/LDDISABLENEWDTAGS=-Wl,--disable-new-dtags/LDDISABLENEWDTAGS=-Wl,--no-as-needed,--disable-new-dtags/' $Oracle_HOME/sqlplus/lib/env_sqlplus.mk;

Modifiez la ligne Oracle_HOME dans le script pour qu'elle pointe vers votre répertoire d'installation pour Oracle. Rendre le script exécutable et l'exécuter en tant qu'utilisateur Oracle:

chmod a+x /tmp/fixora
Sudo su - Oracle
/tmp/fixora

Revenez maintenant à l'installateur et appuyez sur le bouton "Réessayer" dans la boîte de dialogue d'erreur. L'installation devrait maintenant se terminer sans autre problème.

L'installation résultante ne fonctionne toutefois pas: la création d'une base de données sera bloquée dans la commande "démarrage de montage", avec un processus Oracle BEQ bloqué dans localtime. Pour résoudre ce problème, procédez comme suit, à nouveau en tant qu'utilisateur Oracle:

cd $Oracle_HOME/lib/stubs
rm libc*
cd ../../bin
./relink all

Une fois la liaison établie, créer une base de données devrait fonctionner. vous pouvez en créer un en utilisant:

dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname $DBNAME -sid $DBNAME -responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword REPLACE_WITH_PASSWORD \
-systemPassword REPLACE_WITH_PASSWORD \
-createAsContainerDatabase false \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 2048 \
-storageType FS \
-datafileDestination "/opt/Oracle/oradata/" \
-redoLogFileSize 500 \
-emConfiguration NONE \
-ignorePreReqs
4
fjalvingh

Vérifiez que $Oracle_HOME/bin/oradism appartient à la racine et que setuid est activé:

-rwsr-x--- 1 root dba 95844 may 24  2018 $Oracle_HOME/bin/oradism
0
manu