2017-03-03 38 views
0

ODP.NETを使用してOracle 12cデータベース・サーバーにアクセスするアプリケーションをクライアント側で開発しました。私はクライアントとサーバーの両方に2つのネットワークアダプタを持っています。サーバーは、異なるポートの両方のネットワークレールでリッスンしています。複数のIPアドレスでのフェイルオーバー

サーバー側からネットワークケーブルを引き出すと、クライアントはデータベースと通信するために他のネットワークレールにフェールオーバーするのに約21秒かかります。どのように私はこれをスピードアップするのですか?私はTCP.CONNECT_TIMEOUT、TRANSPORT_CONNECT_TIMEOUT、およびCONNECTION_TIMEOUTを使用しましたが、何も適用されないようです。私はsqlnet.oraとアプリケーションレベルの両方でTCP.CONNECT_TIMEOUTを適用しましたが、何も動作しません。 TNSPINGとsqlplusは正常に動作し、指定されたタイムアウトに応じてフェイルオーバーします。

実際にOPD.NETが説明セクション内の多くのことを尊敬していないようです。私はFAILOVER = offのような他のものをテストしましたが、それはまだ失敗します。また、「データソース」タグの下の接続文字列に説明セクションを配置しました。まだ何も。 ODP.NETにバグはありますか?

助けてください。 -david


クライアント:

TCP.CONNECT_TIMEOUT = 3 
TRANSPORT_CONNECT_TIMEOUT = 3 
CONNECTION TIMEOUT = 60 

トレースファイルからの抜粋:

sqlnet.oraファイルとapp.configを両方で

DBSVR = 
    (DESCRIPTION = 
    (RETRY_COUNT = 0) 
    (LOAD_BALANCE = off) 
    (FAILOVER = on) 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1526)) 
    ) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = DBSVR) 
     (FAILOVER_MODE = 
     (TYPE = select) 
     (METHOD = basic) 
    ) 
    ) 
) 

設定

2017-02-26 16:21:27.818678 TID:1 (CFG) (SQLNET) SQLNET.AUTHENTICATION_SERVICES : (none) 
2017-02-26 16:21:27.820678 TID:1 (CFG) (SQLNET) TRACE_LEVEL_CLIENT : SUPPORT 
2017-02-26 16:21:27.820678 TID:1 (CFG) (SQLNET) TRACE_DIRECTORY_CLIENT : C:\OracleTrace 
2017-02-26 16:21:27.820678 TID:1 (CFG) (SQLNET) TRACE_FILE_CLIENT : client_trace.log 
2017-02-26 16:21:27.820678 TID:1 (CFG) (SQLNET) DIAG_ADR_ENABLED : OFF 
2017-02-26 16:21:27.822678 TID:1 (CFG) (ENV)  Machine Name : CASGUI2 
2017-02-26 16:21:27.822678 TID:1 (CFG) (ENV)  User Name : aimscsadmin 
2017-02-26 16:21:27.822678 TID:1 (CFG) (ENV)  OS Version : Microsoft Windows NT 6.1.7601 Service Pack 1 
2017-02-26 16:21:27.822678 TID:1 (CFG) (ENV)  64-bit OS : True 
2017-02-26 16:21:27.822678 TID:1 (CFG) (ENV)  64-bit Process : False 
2017-02-26 16:21:27.822678 TID:1 (CFG) (ENV)  .NET Runtime Version : 4.0.30319.42000 
2017-02-26 16:21:27.822678 TID:1 (CFG) (VER)  Oracle Data Provider for .NET, Managed Driver Version : 4.121.2.0 
2017-02-26 16:21:27.822678 TID:1 (CFG) (VER)  Oracle Data Provider for .NET, Managed Driver Informational Version : 4.121.2.20141216 ODAC RELEASE 3 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  TraceLevel : 7 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  TRANSPORT_CONNECT_TIMEOUT : 6 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  TRACE_FILE_CLIENT : client_trace.log 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  DIAG_ADR_ENABLED : OFF 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  TCP.CONNECT_TIMEOUT : 3 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  TRACE_DIRECTORY_CLIENT : C:\OracleTrace 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  TRACE_LEVEL_CLIENT : SUPPORT 
2017-02-26 16:21:27.822678 TID:1 (CFG) (.NET)  SQLNET.AUTHENTICATION_SERVICES : (none) 
2017-02-26 16:21:27.823679 TID:1 (CFG) (TNSNAMES) DBSVR : (DESCRIPTION =(RETRY_COUNT = 0)(LOAD_BALANCE = off)(FAILOVER = on)(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.11)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1526)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = DBSVR)(FAILOVER_MODE =(TYPE = select)(METHOD = basic)))) 
2017-02-26 16:21:27.826679 TID:1 (CFG) (SQLNET) FilePath : C:\oracle\product\12.1.0\client_1\network\admin\sqlnet.ora 
2017-02-26 16:21:27.826679 TID:1 (CFG) (TNSNAMES) FilePath : C:\oracle\product\12.1.0\client_1\network\admin\tnsnames.ora 
2017-02-26 16:21:27.826679 TID:1 (PUB) (ENT) OracleConnection.ctor() 
2017-02-26 16:21:27.829679 TID:1 (PRI) (ENT) (CP) ConnectionString.GetCS() 
2017-02-26 16:21:27.831679 TID:1 (PRI) (ENT) (CP) ConnectionString.ctor() 
2017-02-26 16:21:27.834679 TID:1 (PRI) (ENT) (CP) ConnectionString.Parse() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (ENT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (ENT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (ENT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (ENT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.SetProperty() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.Parse() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.ctor() 
2017-02-26 16:21:27.837679 TID:1 (PRI) (EXT) (CP) ConnectionString.GetCS() 
2017-02-26 16:21:27.838679 TID:1 (PUB) (EXT) OracleConnection.ctor() 
2017-02-26 16:21:27.873681 TID:1 (PUB) (ENT) OracleConnection.Open() (conid=45028263) (state=Closed) (sessid=0) (implid=0) (pooling=T) (txnid=n/a) 
2017-02-26 16:21:27.874681 TID:1 (PRI) (ENT) (CP) OracleConnectionDispenser`3..cctor() 
2017-02-26 16:21:27.875681 TID:1 (PRI) (EXT) (CP) OracleConnectionDispenser`3..cctor() 
2017-02-26 16:21:27.875681 TID:1 (PRI) (ENT) (CP) OracleConnectionDispenser`3.Get() 
2017-02-26 16:21:27.876682 TID:1 (PRI) (ENT) (CP) PoolManager`3.ctor() 
2017-02-26 16:21:27.877682 TID:1 (PRI) (EXT) (CP) PoolManager`3.ctor() 
2017-02-26 16:21:27.878682 TID:1 (PRI) (ENT) (CP) PoolManager`3.Initialize() (constr=data source=dbsvr;user id=USR1;Connection Timeout=60;) 
2017-02-26 16:21:27.878682 TID:1 (PRI) (ENT) (CP) ConnectionString.Secure() 
2017-02-26 16:21:27.879682 TID:1 (PRI) (EXT) (CP) ConnectionString.Secure() 
2017-02-26 16:21:27.882682 TID:1 (PRI) (EXT) (CP) PoolManager`3.Initialize() (pmid=56648283) (constr=data source=dbsvr;user id=USR1;Connection Timeout=60;) 
2017-02-26 16:21:27.882682 TID:1 (PRI) (BUF) (OBP.CTOR) (poolid:40072506) (OracleConnectionDispenser`3.GetPM) 
2017-02-26 16:21:27.884682 TID:1 (PRI) (ENT) (CP) OraclePoolManager.Get() 
2017-02-26 16:21:27.887682 TID:1 (PRI) (ENT) (CP) PoolManager`3.Get() (txnid=n/a) (bForceMatch=F) 
2017-02-26 16:21:27.889682 TID:1 (PRI) (ENT) (CP) PoolManager`3.CreateNewPR() (txnid=n/a) 
2017-02-26 16:21:28.027690 TID:1 (PRI) (ENT) TimeStamp.GetLocalTZOffset() 
2017-02-26 16:21:28.027690 TID:1 (PRI) (EXT) TimeStamp.GetLocalTZOffset() 
2017-02-26 16:21:28.029690 TID:1 (PRI) (ENT) (CP) ConnectionString.GetStringFromSecureString() 
2017-02-26 16:21:28.029690 TID:1 (PRI) (EXT) (CP) ConnectionString.GetStringFromSecureString() 
2017-02-26 16:21:28.031690 TID:6 (PRI) (ENT) (CP) PoolManager`3.CreateNewPRThreadFunc() 
2017-02-26 16:21:28.033691 TID:6 (PRI) (SVC) (ENT) OracleConnectionImpl.Connect() (oper=open) (aff=n/a) (inst=) (affmatch=n/a) (sessid=-1:-1) (F;F;F;;N) (pmid=56648283) 
2017-02-26 16:21:28.034691 TID:6 (PRI) (BUF) (COBP.CTOR) (poolid:1) (parentpoolid:40072506) (OracleConnectionImpl.Connect) 
2017-02-26 16:21:49.046892 TID:6 (PRI) (BUF) (ALLOCATION) (bufid:1) 
+0

Managed ODP.NETを使用しているようですね。その場合、最初に行うことは、TNSNAMES.ORAとSQLNET.ORAが選択されていることを確認することです。これらのファイルを.EXEと同じディレクトリに移動し、設定ファイルからTNS_ADMINを削除してから、アプリケーションが再起動するようにしてください。次に、使用しているバージョン以降に行われた多くのネットワーク関連の拡張機能のように、最新の管理対象ODP.NETにアップグレードします。 –

+0

クリスチャンが提案してくれてありがとう。私はチェックして、最新のバージョンを持っている。すべてのoraファイルは他の設定をテストすることで取得されていますが、面白いのは、exeが存在するローカルフォルダにファイルを移動しましたが、役に立たない... – dave

+0

トレースファイルは、ODAC Rel 3 ODACリリース4にアップグレードしてください。最新のODP.NETをnugetから管理することができます:https://www.nuget.org/packages/Oracle.ManagedDataAccess/ –

答えて

0

メインプールスレッドのトレースを指定しました。また、接続確立スレッドのトレースファイルを提供することができますので、何が掛かっているのか確認できますか?

申し訳ありません、申し訳ありませんが、これは回答ではなくコメントとして入力してください。

注:正しいです。 ODP.Managedは(フェイルオーバー=)をサポートしていません。 ODP.Managedはフェイルオーバーのみをサポートします(address_listロード・バランシングはサポートしていません)。そのため、address_listの目的はフェイルオーバーのみです。

また、ODP.Managedはサポートを再試行しません(retry_countおよびretry_delay)。

+0

接続確立スレッドトレースを取得する方法を教えてください。私はトレースレベル= 7を使っています。 – dave

+0

実際、あなたは最後に別のスレッドがあったことに気づいていませんでした。 ODACv3の接続確立スレッドにはほとんどトレースがなかった可能性があります。クリスチャンが言ったように、あなたはODACr4でそれを試してみて、それがフェイルオーバーかトレースのどちらに役立つかを見てみることができますか? – ScotMac

関連する問題