Oracle DatabaseをUbuntu15.10にインストールする際の事前準備とエラーへの対処まとめ

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Oracle Database 12c Release 1をUbuntu 15.10にインストールしたのですが、エラーがわんさか出たので、それらへの対処方法を備忘録的にまとめておくことにしました。

基本的にはインストレーション・ガイドにしたがって作業を行いました。
http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/index.html

1. 事前準備

インストールの前に環境設定を行います。

ユーザーグループの作成

ソフトウェアの所有者であることを表す、Oracleインベントリグループ(oinstall)および、データベースの管理者グループ(dbaなど)を作成し、ユーザーを割り当てます。
インストレーション・ガイドを参考にして以下のように作りました。

グループ名 グループID 備考
oinstall 54321 ソフトウェアの所有者、Oracleインベントリグループ。
dba 54322 データベースの管理者グループ。
backupdba 54323 バックアップおよびリカバリをするグループ。
oper 54324 データベースの管理者グループ。権限はdbaより制限される。
dgdba 54325 Oracle Data Guardを管理および監視するグループ。
kmdba 54326 暗号化キーを管理するグループ。

何がなんだかわからないものもありますが、気にせずすべてのグループを用意します。

$ sudo groupadd -g 54321 oinstall
$ sudo groupadd -g 54322 dba
$ sudo groupadd -g 54323 backupdba
$ sudo groupadd -g 54324 oper
$ sudo groupadd -g 54325 dgdba
$ sudo groupadd -g 54326 kmdba

これらのグループは細かく役割が分かれているけれども、必要に応じて別々の権限に対して同じグループを割り当てることも可能だという認識。

$ sudo gpasswd -a username oinstall
$ sudo gpasswd -a username dba
$ sudo gpasswd -a username backupdba
$ sudo gpasswd -a username oper
$ sudo gpasswd -a username dgdba
$ sudo gpasswd -a username kmdba

インストールディレクトリの作成

インストールに必要なディレクトリを作成します。

$ sudo mkdir -p /u01/app/oracle
$ sudo chown username:oinstall /u01/app/oracle
$ sudo chmod -R 775 /u01

環境変数の設定

事前に環境変数を設定しておくと、インストール時の作業が少なくて済むので、やっておくことにしました。

環境変数 備考
ORACLE_BASE Oracle Databaseをインストールする際にベースとなるディレクトリ。
ORACLE_HOME Oracle Databaseをインストールするディレクトリ。複数のバージョンがインストールされている場合に、それぞれ別々のORACLE_HOMEを割り当てることになる。
ORACLE_SID システム識別子。複数のインスタンスが起動している場合、どれに接続するかを識別する。
LD_LIBRARY_PATH 共有ライブラリのパスを指定する。

~/.bashrcの末尾に環境変数の設定を書き込んでおきます。

.bashrc
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
LD_LIBRARY_PATH=/usr/lib:$ORACLE_HOME/lib; export LD_LIBRARY_PATH

ここまでで環境設定は終わりです。インストールを行う前に、一旦再起動します。

2. Oracle Databaseのインストール時のエラー対処方法

インストールは特に難しくないので、インストレーション・ガイドに従っておけばよいです。
ここからは、インストール時の困り事について、どのように対処したかをまとめます。

unzipが動かない

私の環境では、同梱されているunzipがうまく動かず、インストーラが起動しませんでした。
Ubuntu 15.10にプリインストールされているunzipならばうまく行くようなので、とりあえず/usr/binから持ってきて、installディレクトリ以下のunzipと置き換えます。

Oracle Universal Installerが文字化けする

普通に起動すると文字化けしてしまうので、LANG=Cで実行しました。
Screenshot from 2016-03-21 21-05-18.png

Screenshot from 2016-03-21 21-05-46.png

必要なライブラリが見つからない

私の環境ではインストールの途中でエラーになってしまいます。
Screenshot from 2016-03-21 21-42-40.png

Screenshot from 2016-03-21 22-24-09.png

/u01/app/oracle/product/12.1.0/dbhome_1/install/make.log を確認してみると
Screenshot from 2016-03-21 22-26-30.png
/usr/bin/ld: cannot find /usr/lib64/libpthread_nonshared.a inside
/usr/lib64/libpthread_nonshared.aが見つからないとのこと。

/usr/lib以下を探してみると、libpthread_nonshared.aが見つかったので、要求されている通りにリンクを貼ります。
Screenshot from 2016-03-21 22-31-14.png

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a
$ sudo ln -s /usr/lib usr/lib64

libc_nonshared.aでも同様のエラーが発生したので、同じようにリンクを貼って対処しました。

GCCによるコンパイルエラー

UbuntuのGCC特有のエラーのようですが、RDBMSなどのmake時、エラーになってしまうようです。このため、以下のMakefileを修正します。

/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/ins_rdbms.mk
/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/env_rdbms.mk
/u01/app/oracle/product/12.1.0/dbhome_1/network/lib/ins_net_server.mk

エラーごとに修正しなければならない箇所が異なるため、自分の環境では発生しなかったけれどもネットでは見つかった事例も含めて以下に列挙します。以下の全てでエラーが起こるわけではないっぽいので(Ubuntuのバージョンによって異なる?)、エラーの度にログを見て随時修正していくのが一番確実だと思います。
基本的にはログのmake: *** [/oracle/base/dbhome_1/rdbms/lib/XXXXXX] Error 1と書かれている行を探し、上記の設定ファイルの中から$(XXXXXX_LINKLINE)と書かれているところへ引数を追加してやればよいです。

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/orapwd] Error 1 の場合

ins_rdbms.mk_修正前
$(ORAPWD) : $(ALWAYS) $(ORAPWD_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking password utility (orapwd)"
    $(RMF) $@
    $(ORAPWD_LINKLINE)

に以下のように引数を追加します。

ins_rdbms.mk_修正後
$(ORAPWD) : $(ALWAYS) $(ORAPWD_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking password utility (orapwd)"
    $(RMF) $@
    $(ORAPWD_LINKLINE) -lnnz12

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/hsots] Error 1 の場合

ins_rdbms.mk_修正前
$(HSOTS) : $(ALWAYS) $(HSOTS_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking HS OTS agent"
    $(RMF) $@
    $(HSOTS_LINKLINE)
env_rdbms.mk_修正前
HSOTS_LINKLINE=$(LINK) $(OPT) $(HSOTSMAI) $(HSALIB_SUBSET1) \
    $(HS_OTS_DRIVER) $(HS_XASWITCH_ORA) $(RDBMSLIB)$(XAD_OFF) \
    $(HSALIB_SUBSET2)

にそれぞれ以下のように引数を追加します。

ins_rdbms.mk_修正後
$(HSOTS) : $(ALWAYS) $(HSOTS_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking HS OTS agent"
    $(RMF) $@
    $(HSOTS_LINKLINE) -lagtsh
env_rdbms.mk_修正後
HSOTS_LINKLINE=$(LINK) $(OPT) -Wl,--no-as-needed $(HSOTSMAI) $(HSALIB_SUBSET1) \
    $(HS_OTS_DRIVER) $(HS_XASWITCH_ORA) $(RDBMSLIB)$(XAD_OFF) \
    $(HSALIB_SUBSET2)

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/hsdepxa] Error 1 の場合

env_rdbms.mk_修正前
HSDEPXA_LINKLINE=$(LINK) $(OPT) $(HSDEPMAI) $(HSALIB_SUBSET1) \
    $(HS_DEP_DRIVER) $(RDBMSLIB)$(XAD_OFF) \
    $(HSALIB_SUBSET2)

に以下のように引数を追加します。

env_rdbms.mk_修正後
HSDEPXA_LINKLINE=$(LINK) $(OPT) -Wl,--no-as-needed $(HSDEPMAI) $(HSALIB_SUBSET1) \
    $(HS_DEP_DRIVER) $(RDBMSLIB)$(XAD_OFF) \
    $(HSALIB_SUBSET2)

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/kfod] Error 1 の場合

env_rdbms.mk_修正前
KFOD_LINKLINE=$(LINK) $(S0MAIN) $(SSKFODED) $(SKFODPT) $(KFODOBJ) \
    $(LLIBCLNTSH) $(LIBGENERIC) $(LLIBDBTOOLS) \
    $(LIBGENERIC) $(LLIBSAGE) $(LLIBSKGXP) $(LIBCORE) \
        $(CSSCLNTLIBS) $(LLIBASMCLNT) $(LINKTTLIBS)

に以下のように引数を追加します。

env_rdbms.mk_修正後
KFOD_LINKLINE=$(LINK) $(S0MAIN) -Wl,--no-as-needed $(SSKFODED) $(SKFODPT) $(KFODOBJ) \
    $(LLIBCLNTSH) $(LIBGENERIC) $(LLIBDBTOOLS) \
    $(LIBGENERIC) $(LLIBSAGE) $(LLIBSKGXP) $(LIBCORE) \
        $(CSSCLNTLIBS) $(LLIBASMCLNT) $(LINKTTLIBS)

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/amdu] Error 1 の場合

env_rdbms.mk_修正前
AMDU_LINKLINE=$(LINK) $(S0MAIN) $(SSKFMUED) $(SKFMUPT) $(LLIBCLNTSH) \
    $(LLIBDBTOOLS) $(LLIBCORE) $(LLIBGENERIC) $(LLIBUNLSRTL) \
        $(LLIBNLSRTL) $(LLIBCORE) $(LLIBSAGE) $(LLIBSKGXP) \
        $(LLIBNLSRTL) $(CSSCLNTLIBS) $(LLIBASMCLNT) $(LINKTTLIBS)

に以下のように引数を追加します。

env_rdbms.mk_修正後
AMDU_LINKLINE=$(LINK) $(S0MAIN) -Wl,--no-as-needed $(SSKFMUED) $(SKFMUPT) $(LLIBCLNTSH) \
    $(LLIBDBTOOLS) $(LLIBCORE) $(LLIBGENERIC) $(LLIBUNLSRTL) \
        $(LLIBNLSRTL) $(LLIBCORE) $(LLIBSAGE) $(LLIBSKGXP) \
        $(LLIBNLSRTL) $(CSSCLNTLIBS) $(LLIBASMCLNT) $(LINKTTLIBS)

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/kfed] Error 1 の場合

env_rdbms.mk_修正前
KFED_LINKLINE=$(LINK) $(S0MAIN) $(SSKFEDED) $(SKFEDPT) \
              $(LLIBDBTOOLS) $(LLIBCLNTSH) $(LLIBNNZ) $(LLIBSAGE) \
              $(LLIBSKGXP) $(CSSCLNTLIBS_SERVER) $(LLIBASMCLNT) $(LINKTTLIBS)

に以下のように引数を追加します。

env_rdbms.mk_修正後
KFED_LINKLINE=$(LINK) $(S0MAIN) -Wl,--no-as-needed $(SSKFEDED) $(SKFEDPT) \
              $(LLIBDBTOOLS) $(LLIBCLNTSH) $(LLIBNNZ) $(LLIBSAGE) \
              $(LLIBSKGXP) $(CSSCLNTLIBS_SERVER) $(LLIBASMCLNT) $(LINKTTLIBS)

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/renamedg] Error 1 の場合

env_rdbms.mk_修正前
KFNDG_LINKLINE=$(LINK) $(S0MAIN) $(SSKFNDGED) $(SKFNDGPT) $(KFNDGOBJ) \
        $(LLIBCLNTSH) $(LIBGENERIC) $(DEF_OPT) $(LLIBDBTOOLS) $(LIBGENERIC) \
        $(LIBCORE) $(CSSCLNTLIBS) $(ASMCLNT_LIBS) $(LINKTTLIBS)

に以下のように引数を追加します。

env_rdbms.mk_修正後
KFNDG_LINKLINE=$(LINK) $(S0MAIN) -Wl,--no-as-needed $(SSKFNDGED) $(SKFNDGPT) $(KFNDGOBJ) \
        $(LLIBCLNTSH) $(LIBGENERIC) $(DEF_OPT) $(LLIBDBTOOLS) $(LIBGENERIC) \
        $(LIBCORE) $(CSSCLNTLIBS) $(ASMCLNT_LIBS) $(LINKTTLIBS)

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/plshprof] Error 1 の場合

ins_rdbms.mk_修正前
$(PLSHPROF) : $(ALWAYS) $(PLSHPROF_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking hierarchical profiler utility (plshprof)"
    $(RMF) $@
    $(PLSHPROF_LINKLINE)

に以下のように引数を追加します。

ins_rdbms.mk_修正後
$(PLSHPROF) : $(ALWAYS) $(PLSHPROF_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking hierarchical profiler utility (plshprof)"
    $(RMF) $@
    $(PLSHPROF_LINKLINE) -lons

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/rman] Error 1 の場合

ins_rdbms.mk_修正前
$(RMAN) : $(ALWAYS) $(RMAN_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking recovery manager (rman)"
    $(RMF) $@
    $(RMAN_LINKLINE)

に以下のように引数を追加します。

ins_rdbms.mk_修正後
$(RMAN) : $(ALWAYS) $(RMAN_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking recovery manager (rman)"
    $(RMF) $@
    $(RMAN_LINKLINE) -lons

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/dg4pwd] Error 1 の場合

ins_rdbms.mk_修正前
$(TG4PWD) : $(ALWAYS) $(TG4PWD_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking $(TG4DG4)pwd utility"
    $(RMF) $@
    $(TG4PWD_LINKLINE)

に以下のように引数を追加します。

ins_rdbms.mk_修正後
$(TG4PWD) : $(ALWAYS) $(TG4PWD_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) " - Linking $(TG4DG4)pwd utility"
    $(RMF) $@
    $(TG4PWD_LINKLINE) -lnnz12

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/extproc] Error 1 の場合

ins_rdbms.mk_修正前
$(EXTPROC): $(ALWAYS) $(EXTPROC_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) "Linking external procedure agent ($@)"
    $(RMF) $@
    $(EXTPROC_LINKLINE)
env_rdbms.mk_修正前
EXTPROC_LINKLINE=$(LINK) $(OPT) $(EXTPMAI) $(PROD_EXTPROC_OPT) \
    $(HSALIB_SUBSET1) $(HSALIB_SUBSET2)

にそれぞれ以下のように引数を追加します。

ins_rdbms.mk_修正後
$(EXTPROC): $(ALWAYS) $(EXTPROC_DEPS)
    $(SILENT)$(ECHO)
    $(SILENT)$(ECHO) "Linking external procedure agent ($@)"
    $(RMF) $@
    $(EXTPROC_LINKLINE) -lagtsh
env_rdbms.mk_修正後
EXTPROC_LINKLINE=$(LINK) $(OPT) -Wl,--no-as-needed $(EXTPMAI) $(PROD_EXTPROC_OPT) \
    $(HSALIB_SUBSET1) $(HSALIB_SUBSET2)

make: *** [tnslsnr] Error 1 の場合

ins_net_server.mk_修正前
tnslsnr: $(S0NSGL) $(SNSGLP) $(NSGLPNP)
    $(SILENT)$(ECHO) " - Linking $(TNSLSNR)"
    $(RMF) $@
    $(TNSLSNR_LINKLINE)

に以下のように引数を追加します。

ins_net_server.mk_修正後
tnslsnr: $(S0NSGL) $(SNSGLP) $(NSGLPNP)
    $(SILENT)$(ECHO) " - Linking $(TNSLSNR)"
    $(RMF) $@
    $(TNSLSNR_LINKLINE) -lnnz12 -lons

make: *** [/u01/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/oracle] Error 1 の場合

env_rdbms.mk_修正前
ORACLE_LINKLINE=$(ORACLE_LINKER) $(PL_FLAGS) $(ORAMAI) $(SSORED) $(TTCSOI) \
    $(ORACLE_KERNEL_LIBS) $(LINKLDLIBS)

に以下のように引数を追加します。

env_rdbms.mk_修正後
ORACLE_LINKLINE=$(ORACLE_LINKER) -Wl,--no-as-needed $(PL_FLAGS) $(ORAMAI) $(SSORED) $(TTCSOI) \
    $(ORACLE_KERNEL_LIBS) $(LINKLDLIBS)

以上です。何か間違いなどありましたらご指摘ください。

おまけ:共有ライブラリが参照しているライブラリを見つけられない

インストール時、libnnz12.solibclntshcore.so.12.1を、libagtsh.solibclntsh.so.12.1を、libocrb12.solibocrutl12.soを参照します。これらは$ORACLE_HOME/lib/にはあるのですが、/usr/libにはないため、環境変数LD_LIBRARY_PATHを事前に設定していない場合、依存関係のエラーになります。
LD_LIBRARY_PATHを事前に設定し忘れた場合は、シンボリックリンクを作りましょう。

sudo ln -s /u01/app/oracle/product/12.1.0/dbhome_1/lib/libclntshcore.so.12.1 /usr/lib/
sudo ln -s /u01/app/oracle/product/12.1.0/dbhome_1/lib/libclntsh.so.12.1 /usr/lib/
sudo ln -s /u01/app/oracle/product/12.1.0/dbhome_1/lib/libocrutl12.so /usr/lib/