Oracle Messaging Gateway のおはなし。
現象
--エージェントを起動する SQL> conn mgwadmin/oracle SQL> exec dbms_mgwadm.startup --エージェントが起動していることを確認する。 SQL> set linesize 160 SQL> col last_error_msg for a60 SQL> select agent_status,agent_ping,last_error_msg from mgw_gateway; AGENT_STATUS AGENT_PING LAST_ERROR_MSG --------------- ----------- ------------------------------------------------------------ START_SCHEDULED ORA-28575: 外部プロシージャ・エージェントへのRPC接続をオープンできません。
原因
- sqlplus から実行した場合、sqlplus のプロセスとサーバープロセスがプロセス間通信し、サーバープロセスとリスナープロセスがプロセス間通信し、リスナーが extproc を fork する。
- サーバープロセスとリスナープロセスの間のプロセス間通信が正常にできていないのが原因。
- 従って、チェックポイントは、リスナーが起動しているか、listener.ora、tnsnames.ora の設定が正しいかといったあたりになる。Oracle のバージョンにもよるが 文字数・スペース・改行などが原因になることがある。
解決策
- リスナーを起動する。
- listener.ora を変更した場合は、再起動する必要がある。
- tnsnames.ora、listener.ora の設定を修正する。
参考
チェックポイントいろいろ
- $ORACLE_HOME/mgw/admin/mgw.ora の 「set CLASSPATH=」で指定しているクラスパスは正しいか?
- 例えば、クラスパスに /opt/mqm/java/lib を指定しているが、WebSphereMQ は /usr/mqm 以下にインストールされているとか。
- 環境変数 LD_LIBRARY_PATH に $ORACLE_HOME/lib が指定されているか?
- mgw_gateway.last_error_msg を確認して、ORA-06520 が発生している場合は、listener.ora の「ENVS="LD_LIBRARY_PATH=..."」にライブラリへのパスを追加する。
- ある環境でこのエラーが出てたので、「find $ORACLE_HOME -name <ライブラリ名>」で検索して、listener.ora に追記してやったら解決した。
- listener.ora の記述ミス
誤) (ENVS="LD_LIBRARY_PATH="..."") 正) (ENVS="LD_LIBRARY_PATH=...")