ablog

不器用で落着きのない技術者のメモ

某ETLツールから Oracle に FQDN で接続できなかった件

環境

  • Oracle は Active/Standby の HA 構成。
  • Virtual IP は使っていない。
  • スイッチオーバーする際は、DNS を書き換えるので、アプリケーション側の接続文字列は変更不要。
  • 本現象が発生する少し前に、Standby 側にスイッチオーバーしており、本現象が発生した時点では元に戻していた。

現象

  • ETL ツールから OracleFQDN で接続できない。
  • ETL ツールで接続テストを行うと以下のエラーが発生する。
java.sql.SQLException: I/O例外です。: The Network Adapter could not establish the connection
  • Standby側のリスナーを起動して、リスナーログを監視しながら、ETLツールから Oracle に接続すると接続要求が届いた。
$ lsnrctl start
$ cd $ORACLE_HOME/network/log
$ tail -f listener.log
...
04-MAY-2010 11:10:40 * (CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) *
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.11)(PORT=4222)) * establish * orcl * 0
  • また、ETLツールで表示されるエラーが以下の内容に変わった。
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No shuch file or directory
  • FQDNping すると、無問題。Primary 側に ping が通る。
  • sqlplus で FQDN に接続すると、データベースにログインできる。
  • JDBC Thin Driver を使ってログインするだけのテストプログラムで FQDN にログインできる。

原因

  • Standby 側に切替えていた時の DNS 情報を ETL ツールがキャッシュしていた。

解決策

  • スイッチオーバー、スイッチバックを行う際は、ETL ツールの再起動を行う。