2014年7月6日日曜日

ubuntuに oracle11g をインストール

ubuntu16.10 に oracle11g(R2) をインストールする際、以前にもまして以下のようなエラーが発生する。
/usr/bin/ld: /u01/app/oracle/product/11.2.0/dbhome_1/lib//libpls11.a(plzsql.o): relocation R_X86_64_32 against
情報:  `_2__STRING.0.0' can not be used when making a shared object。 -fPIC を付けて再コンパイルしてください。
/usr/bin/ld: 最終リンクに失敗しました: 出力に対応するセクションがありません

このエラーには、該当箇所に -no-pie オプションを付与することで解決した。
※このエラーについては、「Ubuntu 16 で Stack + GHC がライブラリのリンクに失敗する場合の対処法」 を参照させて頂いた。

省力化のため、この問題も含めインストール中に出るエラーの対策をまとめた patch と oracle11g(R2) をインストールする前準備のシェルを作成した。 なお、この手順は VirtualBox に ubuntu16.04 および ubuntu16.10 をインストールし、2017/04/06日時点までの update を当てて作成した。






1.事前準備として以下の構成のディレクトリを作成
 /mnt/vbox/share/oracle11g 
 |-- database : linux.x64_11gR2_database_[12]of2.zip を展開
 `-- inst11g : inst11g.tar.gz を展開

2.oracle11g が要求する各種設定を適用
$ sudo -s
# cd /mnt/vbox/share/oracle11g/inst11g
# ./inst11g.sh

※inst11g.sh の内容は、 「oracle11g が要求する各種設定を一括設定」 を参照

3.oracle11g のインストール
# cd /mnt/vbox/share/oracle11g/database/install
# cp /usr/bin/unzip .
# passwd oracle
Changing password for user oracle.
New UNIX password: <oracle ユーザーパスワード>
Retype new UNIX password: <oracle ユーザーパスワード>
passwd: all authentication tokens updated successfully.  
# xhost +
# su - oracle
$ cd /mnt/vbox/share/oracle11g/database
$ ./runInstaller -jreloc /usr/lib/jvm/default-java
4.エラーが発生したら patch を適用
$ cd /u01/app/oracle/product/11.2.0/dbhome_1
$ patch -p1 -d . < /mnt/vbox/share/oracle11g/inst11g/ora11g-ubuntu.patch
<再施行>
$ exit
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
# su - oracle



5.リスナとデータベース作成の前準備
 $HOME/.profile に以下の行を追記
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG=JAPANESE_JAPAN.UTF8

6.リスナの作成
$ vi `which netca`
===========================================================
diff bin.org/netca bin/netca
99c99,100
< JRE_DIR=/u01/app/oracle/product/11.2.0/dbhome_1/jdk/jre
---
> #JRE_DIR=/u01/app/oracle/product/11.2.0/dbhome_1/jdk/jre
> JRE_DIR=/usr/lib/jvm/default-java
===========================================================
$ netca
 ※リスナー作成時のメニュー選択は1521ポートを使用するのであれば全てリターンで作成可

7.データベースの作成
$ vi `which dbca`
===========================================================
diff bin.org/dbca bin/dbca
69c69,70
< JRE_DIR=/u01/app/oracle/product/11.2.0/dbhome_1/jdk/jre
---
> #JRE_DIR=/u01/app/oracle/product/11.2.0/dbhome_1/jdk/jre
> JRE_DIR=/usr/lib/jvm/default-java
===========================================================
$ dbca



================【以下は2014年9月の記載内容】=================== h

まずは、oracle11g をこちらから以下のファイルをダウンロード。
  • linux.x64_11gR2_database_1of2.zip
  • linux.x64_11gR2_database_2of2.zip

最初にホスト名を設定。
127.0.0.1       localhost
127.0.1.1       linux
192.168.11.200  linux.oracle.com linux

次にライブラリ環境などを用意。
$ cat test11g-01.sh
#! /bin/sh
#
# ubuntu14.04(workstation)〜ubuntu15.10(workstation)
# sudo apt-get install gcc make binutils gawk x11-utils rpm build-essential libaio1 libaio-dev libmotif4 libtool expat alien ksh pdksh unixODBC unixODBC-dev sysstat elfutils libelf-dev 
# ubuntu16.04(workstation)
sudo apt-get install gawk rpm libaio1 libaio-dev libtool expat alien ksh unixodbc unixodbc-dev sysstat elfutils libelf-dev libstdc++5 lsb-cxx libstdc++5

sudo ln -sf /bin/bash /bin/sh
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /usr/bin/basename /bin/basename
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.5 /usr/lib/libstc++.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
sudo ln -s /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib64
#
sudo mkdir /etc/rc.d
sudo ln -s /etc/rc0.d /etc/rc.d/rc0.d
sudo ln -s /etc/rc1.d /etc/rc.d/rc1.d
sudo ln -s /etc/rc2.d /etc/rc.d/rc2.d
sudo ln -s /etc/rc3.d /etc/rc.d/rc3.d
sudo ln -s /etc/rc4.d /etc/rc.d/rc4.d
sudo ln -s /etc/rc5.d /etc/rc.d/rc5.d
sudo ln -s /etc/rc6.d /etc/rc.d/rc6.d
sudo ln -s /etc/rcS.d /etc/rc.d/rcS.d

$ ./test11g-01.sh

次にstatic-glibc ライブラリをこのあたりよりダウンロードして追加インストール。
$ sudo alien glibc-static-*.rpm
$ sudo dpkg -i glibc-static_*.deb

次にオラクルユーザを作成。
$ cat test11g-02.sh
#! /bin/sh
#
sudo groupadd oinstall
sudo groupadd dba
sudo adduser oracle
sudo usermod -g oinstall -G dba oracle
sudo mkdir -p /u01/app
sudo chown -R oracle:oinstall /u01/app
sudo chmod -R 775 /u01/app

$./test11g-02.sh

次にOSパラメータなどを設定。
$ cat test11g-03.sh
#! /bin/sh
#
sudo sh -c 'echo "Red Hat Linux release 5"               > /etc/redhat-release'

#
sudo sh -c 'echo "#"                              >> /etc/security/limits.conf'
sudo sh -c 'echo "oracle soft nproc 2047"         >> /etc/security/limits.conf'
sudo sh -c 'echo "oracle hard nproc 16384"        >> /etc/security/limits.conf'
sudo sh -c 'echo "oracle soft nofile 1024"        >> /etc/security/limits.conf'
sudo sh -c 'echo "oracle hard nofile 65536"       >> /etc/security/limits.conf'
sudo sh -c 'echo "oracle soft stack 10240"        >> /etc/security/limits.conf'

#
sudo sh -c 'echo "#"                                       >> /etc/sysctl.conf'
sudo sh -c 'echo "fs.aio-max-nr=1048576"                   >> /etc/sysctl.conf'
sudo sh -c 'echo "fs.file-max=6815744"                     >> /etc/sysctl.conf'
sudo sh -c 'echo "kernel.shmall=2097152"                   >> /etc/sysctl.conf'
sudo sh -c 'echo "kernel.shmmni=4096"                      >> /etc/sysctl.conf'
sudo sh -c 'echo "kernel.sem=250 32000 100 128"            >> /etc/sysctl.conf'
sudo sh -c 'echo "net.ipv4.ip_local_port_range=9000 65500" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.rmem_default=262144"            >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.rmem_max=4194304"               >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.wmem_default=262144"            >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.wmem_max=1048586"               >> /etc/sysctl.conf'
sudo sh -c 'echo "kernel.shmmax=1073741824"                >> /etc/sysctl.conf'
sudo sysctl -p

$./test11g-03.sh

次に java をインストール。oracle 付属の java でインストーラを起動すると文字化けが発生。
(英語モード(LANG=C)でインストーラ起動する場合には不要。)
$ sudo apt-get install default-jre

次に oracle ユーザで oracle パッケージのを展開。
$ mv linux.x64_11gR2_database_1of2.zip /tmp
$ mv linux.x64_11gR2_database_2of2.zip /tmp
$ xhost +
$ su - oracle
$ unzip /tmp/linux.x64_11gR2_database_1of2.zip
$ unzip /tmp/linux.x64_11gR2_database_2of2.zip
$ cd database

次に oracle インストーラを起動します。
(ubuntu15.04 では、database/install/unzip でエラーとなったため、/usr/bin/unzip を上書き)
$ ./runInstaller -jreLoc /usr/lib/jvm/default-java
# 英語モード表示の場合
$ export LANG=c
$ ./runInstaller

「セキュリティ・アップデートをMy Oracle Support経由で受け取ります」のチェックを外して次へをクリック。


警告は「はい」で無視。


「データベース・ソフトウェアのみインストール」を選択して次へをクリック。


単一インスタンス・データベースのインストール」を選択して次へをクリック。


言語に「日本語」と「英語」が選択されていることを確認して次へをクリック。


「Enterprise Edition」を選択して次へをクリック。


パスを確認して次へをクリック。


oraInventoryグループ名に「oinstall」が選択されていることを確認して次へをクリック。


データべース管理者(OSDBA)グループに「dba」 データベース・オペレータ(OSOPER)グループに「oinstall」 が選択されていることを確認して次へをクリック。


前提条件チェックでアラートは無視して次に進む。



終了をクリックしてインストール開始。


バイナリリンク中に以下のポップアップがでたら以下の作業を行って再試行。


sudo  vi /u01/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk
  => -static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/libc.a

sudo vi /u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk
  =>190: $(MK_EMAGENT_NMECTL) -lnnz11

sudo vi /u01/app/oracle/product/11.2.0/dbhome_1/bin/genorasdksh
  =>278: OLIBS= ... -lagtsh -lorasdkbase

sudo vi /u01/app/oracle/product/11.2.0/dbhome_1/srvm/lib/env_srvm.mk
  =>90: PRODUCT=srvm

sudo vi /u01/app/oracle/product/11.2.0/dbhome_1/srvm/lib/ins_srvm.mk
  => GETCRSHOME_LINKLINE= ... -Wl,--start-group $(OCRLIBS_DEFAULT) -Wl,--end-group $(OCRLIBS_DEFAULT) ...

sudo vi /u01/app/oracle/product/11.2.0/dbhome_1/network/lib/env_network.mk
  => 2150: TNSLSNR_LINKLINE=... -Wl,--no-as-needed $(LLIBONS) ...

sudo vi /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/env_rdbms.mk
  =>2113: ORACLE_KERNEL_LIBS=...$(SPOBJS) -Wl,--no-as-needed $(LLIBSERVER)...



端末をもう一つ立ち上げてrootユーザで構成スクリプトを実行して終了。
次に .profile に以下の変数を追加し、source .profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG=JAPANESE_JAPAN.UTF8


次に netca インストーラを起動。
$ netca
# 日本語で起動したい場合は、99行目のJREを変更。
JRE_DIR=/usr/lib/jvm/default-java/jre
#JRE_DIR=/u01/app/oracle/product/11.2.0/dbhome_1/jdk/jre


「リスナー構成」を選択して次へをクリック。


「追加」を選択して次へをクリック。

リスナー名が「LISTENER」となっていることを確認して次へをクリック。


「TCP」が選択されていることを確認して次へをクリック。


「標準ポート番号の1521を使用」を選択して次へをクリック。


「いいえ」を選択して次へをクリック。


次へをクリック。


「完了」をクリック。


次に dbca を起動。
クローニング中に「out of memory」のエラーで異常終了する場合、script の生成、実行でデータベースで回避。
$ dbca
# 日本語で起動したい場合は、69行目のJREを変更。
JRE_DIR=/usr/lib/jvm/default-java/jre
# JRE_DIR=/u01/app/oracle/product/11.2.0/dbhome_1/jdk/jre


次へをクリック。

「データベースの作成」を選択して次へをクリック。

「汎用またはトランザクション処理」を選択して次へをクリック。


データベース識別情報を入力して次へをクリック。


「Enterprise Managerの構成」にチェックが付いているのを確認して次へをクリック。


「すべてのアカウントに同じ管理パスワードを使用」を選択してパスワードを入力。


警告に対して「はい」で受け入れ。


今回はファイルシステムで作成するため、デフォルトのまま次へをクリック。


必要であれば「アーカイブの有効化」にチェック後、データベースを「アーカイブ・モード」に設定。


「サンプル・スキーマ」にチェックを入れて次へをクリック。


「キャラクタ・セット」タブをクリック。


「Unicode(AL32UTF8)を使用」を選択して次へをクリック。


次へをクリック。


「データベースの作成」にチェックが付いてることを確認して完了をクリック。
(「out of memory」で異常終了する場合は、「データベースの作成」のチェックを外し、「データベース作成スクリプトの生成」をチェックして実行する。生成された /u01/app/oracle/admin/orcl/scripts/ora.sh を実行するとデータベースの生成が可能であった。)


データベースの構成サマリーを確認してOKをクリック。


この画面が出たらデータベースの作成終了。
最後に、以下のファイルをリネーム。
sudo mv /etc/redhat-release /etc/redhat-release.bk