Oracleインストール直後にORA-12547のエラーが出た場合の対処

前回の記事でOracleDatabase12cのサイレントインストール方法を紹介しました。

スルスルと何事も無く終わっているように見えますが、

もちろん、一発ではできませんでした!(てへっ☆)

OSDBAユーザ(oracle)でアイドルインスタンスにつなごうとすると……

$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Sat Aug 20 00:49:02 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

ORA-12547:TNS:lost contact

何かエラー出た。

lost contact」って何ぞや。 このメッセージから分かるのは「接続ができなかった」ってことだけですね! 安定の不親切さ。

Google先生に聞いた結果、以下のページが回答になりました。
http://ruleoftech.com/2016/problems-with-installing-oracle-db-12c-ee-ora-12547-tns-lost-contactruleoftech.com

oracleバイナリが0バイト!?

リンク先にあるように、$ORACLE_HOME/bin/oracleを確認してみると……

$ ls -la $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle oinstall 0 Aug 11 22:10 2016 oracle

oracle」というバイナリファイルが0バイト

これ明らかにコアになるモジュールですやん。 これが0バイトって明らかにおかしいやん。

魔法のコマンド「relink all」

ということで、「relink all」を実行すると解決するらしい。

relinkコマンドを実行すると、Oracle製品の実行可能ファイルが再リンクされます。 再リンクの意味がイマイチ分からないのですが、要は最新の状態に作りなおすってことだよね!?

$ relink all

うん、リンク先だと「Segmentaion fault」が出てるけど自分のは出てないしOKだね!

$ ls -la $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle oinstall 0 Aug 11 23:10 2016 oracle

うん、変わってない。

ログを見よう

ここからしばらくハマり、必死にググること数時間……

そこで気付いた。あれ、ログのパスが出てるじゃん。
ということで「$ORACLE_HOME/install/relink.log」を確認してみます。

$view $ORACLE_HOME/install/relink.log
……
INFO: make: *** [/opt/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/oracle] Error 1

INFO: End output from spawned process.
INFO: ----------------------------------
SEVERE: oracle.sysman.oii.oiil.OiilActionException: Error in invoking target 'irman ioracle' of makefile '/opt/app/oracle/product/12.1.0/dbhome_1/rdbms/lib/ins_rdbms.mk'. See '/opt/app/oracle/product/12.1.0/dbhome_1/install/relinkActions2016-08-11_04-37-05-PM.log' for details.
        at oracle.sysman.oii.oiis.OiisMakeDeps.invokeMakefile(OiisMakeDeps.java:537)
        at oracle.sysman.oii.oiis.OiisMakeDeps.doRelink(OiisMakeDeps.java:614)
        at oracle.sysman.oii.oiis.OiisMakeDeps.doOperation(OiisMakeDeps.java:799)
        at oracle.sysman.oii.oiis.OiisMakeDeps.main(OiisMakeDeps.java:809)

エラー出てるじゃないですか。

makeでrelinkを実行しよう

見よう見まねで、makeによるrenlinkの実行を試みます。

$ cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk install
……
collect2: ld terminated with signal 9 [Killed]

なんじゃこりゃ。

このメッセージで検索してみると、同じエラーで困っている人がちらほら。 こちらのサイトを見て解決。(Oracleとは全然関係ないです。)

sueda13.hatenablog.com

メモリ不足だってよ。

ということで

不要なプロセス切りまくって再度relinkを実行しました。

$ relink all
……
$ ls -la $ORACLE_HOME/bin/oracle
-rwsr-s--x  1 oracle oinstall 323762222 Aug 12 22:12 oracle

できてるぅ!!

$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Sat Aug 20 01:34:36 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to an idle instance.

SQL>

無事つながりました。

なお搭載メモリサイズは1GBです。(激安レンタルサーバなんでね……)

ログはきちんと確認しよう。システム要件も確認しよう。(おわり)

Oracleの現場を効率化する100の技

Oracleの現場を効率化する100の技