Oracle中心にIT全般の技術情報を気が向くままに書いています。他にLinux、仮想化技術(VMWare)やトラブルに役立つ情報などがあります。

スポンサーサイトtnspingでTNS-12541とか12543が発生した時の対処


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
OUIを利用してほとんどデフォルトのままOracle 12cデータベースをインストールしました。
本当に簡単にインストールできたのですが、リモートからデータベース接続ができずに少しハマりましたので、メモしておこうと思います。

「ServerA」がOracleデータベースをインストールしたサーバで、「ClientB」から「ServerA」にアクセスしようとしても接続できません。
この環境では接続用の名前として「ORCL」を定義しています。




■切り分け1:ローカル環境からの接続確認
データベースに接続できない場合の切り分けには、tnspingコマンドを利用するのが定石です。

今回の場合は、下記のようにローカル環境(ServerA)からは正常にアクセスできること(tnspingの結果がOK)を確認しました。
[oracle@ServerA ~]$ tnsping ORCL TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 06:59:04 Copyright (c) 1997, 2013, Oracle. All rights reserved. パラメータ・ファイルを使用しました: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora エイリアスを解決するためにTNSNAMESアダプタを使用しました。 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.sakusaku.jp)))に接続の試行 中 OK (0ミリ秒)

■切り分け2:リモート環境からの接続確認
「ClientB」からtnspingコマンドを実行したところ、下記のように「TNS-12543」エラーが発生してしまいました。
[oracle@ClientB ~]$ tnsping ORCL TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:08:34 Copyright (c) 1997, 2013, Oracle. All rights reserved. パラメータ・ファイルを使用しました: エイリアスを解決するためにTNSNAMESアダプタを使用しました。 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ServerA.sakusaku.jp)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.sakusaku.jp)))に接続の試行中 TNS-12543: TNS: 接続先ホストに到達できません。

trcrouteコマンドも試してみましたがやっぱりエラーが発生しました。
[oracle@ClientB ~]$ trcroute ORCL Trace Route Utility for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:10:21 Copyright (c) 1995, 2013, Oracle. All rights reserved. Route of TrcRoute: ------------------ Node: Client Time and address of entry into node: ------------------------------------------------------------- 27-1月 -2014 07:10:21 ADDRESS= PROTOCOL=TCP HOST=ServerA.sakusaku.jp PORT=1521 TNS-12225: TNS: 接続先ホストに到達できません。 TNS-12543: TNS: 接続先ホストに到達できません。 TNS-12560: TNS: プロトコル・アダプタ・エラー TNS-03601: ルート情報の収集に失敗しました。

そもそもネットワークに繋がっていないのではと思い、pingで疎通確認しましたが、そちらの結果は良好でした。
[oracle@ClientB ~]$ ping ServerA.sakusaku.jp PING ServerA.sakusaku.jp (192.168.0.36) 56(84) bytes of data. 64 bytes from ServerA.sakusaku.jp (192.168.0.36): icmp_seq=1 ttl=64 time=0.255 ms 64 bytes from ServerA.sakusaku.jp (192.168.0.36): icmp_seq=2 ttl=64 time=0.171 ms ^C --- ServerA.sakusaku.jp ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 2005ms rtt min/avg/max/mdev = 0.171/0.213/0.255/0.042 ms

■対処1:ファイアウォールの設定
実はこのエラーの原因は、「ServerA」のファイアウォールにより、データベースへの接続が遮断されていたためでした。
対象のポートだけを通せば良いのですが、検証用環境のため、下記のようにファイアウォール自体を止めてしまいます。
[root@ServerA ~]# service iptables stop iptables: ファイアウォールルールを消去中: [ OK ] iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ] iptables: モジュールを取り外し中: [ OK ]

サーバを再起動してもファイアウォールが起動しないように設定します。
[root@ServerA ~]# chkconfig iptables off

■それでも別のエラーが発生
ファイアウォールを停止したので、疎通はうまくいくはずということで、再度、「ClientB」からtnspingを実行しましたが、今度は「TNS-12541」エラーが発生してしまいました。
[oracle@ClientB ~]$ tnsping ORCL TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:19:54 Copyright (c) 1997, 2013, Oracle. All rights reserved. パラメータ・ファイルを使用しました: エイリアスを解決するためにTNSNAMESアダプタを使用しました。 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ServerA.sakusaku.jp)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.sakusaku.jp)))に接続の試行中 TNS-12541: TNS: リスナーがありません。

■切り分け3:リスナー環境の設定確認
エラーメッセージからリスナーが異常であることが分かりますので、下記のように起動状態の確認を行いましたが、リスナーは起動されており、リスナーの起動が原因では無いことが分かりました。
[oracle@ServerA ~]$ lsnrctl status LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:22:35 Copyright (c) 1991, 2013, Oracle. All rights reserved. (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))に接続中 リスナーのステータス ------------------------ 別名 LISTENER バージョン TNSLSNR for Linux: Version 12.1.0.1.0 - Production 開始日 27-1月 -2014 07:19:46 稼働時間 0 日 0 時間 2 分 49 秒 トレース・レベル off セキュリティ ON: Local OS Authentication SNMP OFF パラメータ・ファイル /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora ログ・ファイル /u01/app/oracle/diag/tnslsnr/ServerA/listener/alert/log.xml リスニング・エンドポイントのサマリー... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) リスナーはサービスをサポートしていません。 コマンドは正常に終了しました。

しかし上記のログを良く見ると、「HOST=127.0.0.1」のローカルループバックアドレスが表示されており、リモート環境からアクセスするためには、HOST=の指定を実際のホスト名もしくはIPアドレスに設定する必要があることが分かりました。

■対処2:listener.oraファイルの設定
listener.oraの変更前にリスナーを停止します。
[oracle@ServerA ~]$ lsnrctl stop LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:35:06 Copyright (c) 1991, 2013, Oracle. All rights reserved. (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))に接続中 コマンドは正常に終了しました。

下記のようにlistener.oraファイルの編集を行い、HOST=の指定を実際のホスト名に変更します。
・[×]変更前
[oracle@ServerA ~]$ vi $ORACLE_HOME/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) )

・[]変更後
[oracle@ServerA ~]$ vi $ORACLE_HOME/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ServerA.sakusaku.jp)(PORT = 1521)) ) )

リスナーを起動し、設定変更を反映させます。
[oracle@ServerA ~]$ lsnrctl start LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:36:50 Copyright (c) 1991, 2013, Oracle. All rights reserved. /u01/app/oracle/product/12.1.0/dbhome_1/bin/tnslsnrを起動しています。お待ちくだ さい... TNSLSNR for Linux: Version 12.1.0.1.0 - Production システム・パラメータ・ファイルは/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.oraです。 ログ・メッセージを/u01/app/oracle/diag/tnslsnr/ServerA/listener/alert/log.xmlに書き込みました。 リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ServerA.sakusaku.jp)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerA.sakusaku.jp)(PORT=1521)))に接続中 リスナーのステータス ------------------------ 別名 LISTENER バージョン TNSLSNR for Linux: Version 12.1.0.1.0 - Production 開始日 27-1月 -2014 07:36:50 稼働時間 0 日 0 時間 0 分 0 秒 トレース・レベル off セキュリティ ON: Local OS Authentication SNMP OFF パラメータ・ファイル /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora ログ・ファイル /u01/app/oracle/diag/tnslsnr/ServerA/listener/alert/log.xml リスニング・エンドポイントのサマリー... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ServerA.sakusaku.jp)(PORT=1521))) リスナーはサービスをサポートしていません。 コマンドは正常に終了しました。

■リモート接続結果良好
以上の対処をしたところ、ようやく下記のようにtnspingによる疎通確認が正常となりました
[oracle@ClientB ~]$ tnsping ORCL TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 27-1月 -2014 07:37:58 Copyright (c) 1997, 2013, Oracle. All rights reserved. パラメータ・ファイルを使用しました: エイリアスを解決するためにTNSNAMESアダプタを使用しました。 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ServerA.sakusaku.jp)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.sakusaku.jp)))に接続の試行中 OK (0ミリ秒)




以上です。




トラックバックURL

この記事にトラックバックする(FC2ブログユーザー)



前ページへ:runInstaller実行時にPRVF-0002
次ページへ:FC2ブログで「目次(全記事一覧)」に古い記事が表示されない

ページのトップへ

必ずお読みください

本ブログ記事をご利用になって生じたいかなる損害についても当方は一切責任を負いません。
ご利用は自己責任でお願いします。(^―^)

広 告





ブログランキング/その他


ビジネスブログ100選

ブログランキング・にほんブログ村へ
blogramで人気ブログを分析




最新トラックバック


RSSリンクの表示

QRコード

QR

アクセスカウンター

ユニーク:
トータル:


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。