質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database 10g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

Q&A

1回答

21555閲覧

sqlnet.logにて、TNS-12547が発生する。

hrsi_teratail

総合スコア93

Oracle Database 10g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

0グッド

2クリップ

投稿2016/04/07 08:47

編集2016/04/08 00:30

oracle 10g R2 を使用しております。

vb.net .net3.5 を実行しているアプリケーション
より、ODP.NET を使用しORACLEへ接続しております。

下記のログが数秒単位で出力されています。

sqlnet.logにて、TNS-12547
が出力されます。

--


Fatal NI connect error 12547, connecting to:
(LOCAL=NO)

VERSION INFORMATION:
TNS for Solaris: Version 10.2.0.5.0 - Production
Oracle Bequeath NT Protocol Adapter for Solaris: Version 10.2.0.5.0 - Production
TCP/IP NT Protocol Adapter for Solaris: Version 10.2.0.5.0 - Production
Time: 24-3月 -2016 14:28:56
Tracing not turned on.
Tns error struct:
ns main err code: 12547
TNS-12547: TNS: 接続を失いました。
ns secondary err code: 12560
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0

発生する原因がよくわかりません。

ご存知のかた教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabe3

2016/04/07 11:27

・このエラーが出るのはどのタイミングですか?(例:sqlplusで接続する時) ・エラーが出る頻度はどの程度ですか?
guest

回答1

0

ODP.NETと言うことで。
OTNのスレッドで似たような問題がありました。
「ORA-12547: TNS:lost contact」が出てもアプリでエラーにならない。
こちらの例では接続プーリングを使用しなくすること(Pooling=False)で解決した、とあります。
まずはこちらを試して変化があるかを確認してはどうでしょうか。
参考ページ:Oracle® Data Provider for .NET開発者ガイド Oracleデータベースへの接続

Oracle Database Net Services リファレンス
SQLNET.INBOUND_CONNECT_TIMEOUT の説明には次のようにあります。

クライアントが指定の時間内に接続を確立し、認証を完了するのに失敗した場合、データベース・サーバーは接続を終了します。
クライアントは「ORA-12547: TNS: 接続を失いました。」または「ORA-12637: パケット受信に失敗しました。」のいずれかのエラー・メッセージを受け取ります。
特定の環境におけるシステムあるいはネットワークの通常の遅延によってクライアントが指定の時間内に接続を完了できない場合は、必要なだけ時間を増やします。

クライアント:sqlnet.ora・・・SQLNET.INBOUND_CONNECT_TIMEOUT
サーバー:listener.ora・・・INBOUND_CONNECT_TIMEOUT_listener_name
どちらも初期値は60秒と長めですが、もしかしたらセキュリティを考慮して
タイムアウト時間が短めに設定されていないか確認をしてみてください。

Oracle Database Net Services リファレンス 5 プロファイル・パラメータ(sqlnet.ora)
Oracle Database Net Services リファレンス 7 リスナー・パラメータ(listener.ora)

投稿2016/04/08 11:54

nabe3

総合スコア345

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hrsi_teratail

2016/04/11 03:31

接続プーリングを使用しなくすること(Pooling=False)で現象は発生しなくなりました。ただ接続プーリングは使用したく、問題を解決したいと思っております。 sqlnet.oraのファイルは存在しないので、デフォルトの60秒 listener.oraにはINBOUND_CONNECT_TIMEOUT_listener_name は定義されておりませんので、デフォルトの60秒 だという認識です。
nabe3

2016/04/11 13:21

ネットサービスの設定は上記認識で合っています。 ODP.NETでの接続文字列に対する接続文字列属性は何が指定されていて、 どのような設定がされているでしょうか? 下記に接続文字列属性の一覧表があります。 (ODP.NETのバージョンが明記されていませんでしたので下記は10.2.0.2の例です。) 表3-1 サポートされている接続文字列属性 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/win.102/B31247-01/featConnecting.htm#CJAEDBGH > Connection Timeoutに達していても、プールに有効な接続がない場合、 > 接続プーリング・サービスは、接続プール要求がタイムアウトしたことを示す例外を呼び出します。 この記述が今回のエラーと関連があるのではないかと思いました。 Connection Timeoutの時間をデフォルトの15秒より長くする、 プール内の接続の最大数(Max Pool Size)を多くするなど、 設定をカスタマイズして様子を見てはいかがでしょうか? またVB.NET側でコネクションのClose, Disposeをきちんと行っているか、 漏れはないか確認してみてください。 con.ConnectionString = ~ con.Open() ~処理~ con.Close() con.Dispose()
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問