2017-03-03 1 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에 버그가 있습니까?

도와주세요. 데이비드


클라이언트 :

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

추적 파일에서 발췌 :

,691 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

크리스찬에게 제안을 해주셔서 감사합니다. 내가 체크하고 최신 버전을 가지고있다. 모든 오아시스 파일은 다른 설정을 테스트하여 선택되지만 재미만으로는 exe가있는 로컬 폴더로 파일을 옮겼지만 사용할 수 없습니다 ... 여전히 긁어 모으는 파일 ... – dave

+0

추적 파일에 ODAC Rel 3 ODAC 릴리스 4로 업그레이드하십시오. 최신 ODP.NET을 nuget에서 관리 할 수 ​​있습니다. https://www.nuget.org/packages/Oracle.ManagedDataAccess/ –

답변

0

주 풀 스레드에 대한 추적을 제공했습니다. 또한 연결 설정 스레드의 추적 파일을 제공 할 수 있습니다. 그러면 연결되는 내용을 볼 수 있습니다.

죄송합니다. 답변 대신 댓글을 달았으나 그렇게하지 않았습니다.

참고. 올바른 내용입니다. ODP.Managed는 (failover =)를 지원하지 않습니다. ODP.Managed는 장애 조치 (address_list로드 균형 조정을 지원하지 않음) 만 지원하므로 address_list의 유일한 용도는 장애 조치입니다.

또한 ODP.Managed는 재시도를 지원하지 않습니다 (retry_count 및 retry_delay).

+0

연결 설정 스레드 추적을 얻는 방법을 알려주시겠습니까? 나는 트레이스 레벨 = 7을 사용 해왔다. – dave

+0

실제로, 당신은 끝에 다른 스레드가 있음을 발견하지 못했다. ODACv3의 연결 설정 스레드에서 추적이 많이 발생하지 않았을 수 있습니다. 크리스챤이 말했듯이, ODACr4로 시험해보고 장애 극복이나 추적에 도움이되는지 확인할 수 있습니까? – ScotMac

관련 문제