2010-07-21 3 views
2

Oracle에 처음 들어서서 내가 직면 한 문제가 있습니다. IDE - Visual Studio 2005에서 응용 프로그램을 실행할 때 데이터베이스 연결이 원활하게 이루어졌지만 설치된 버전의 응용 프로그램을 실행하면 DB 연결이 실패하고 TNS : 연결 시간 초과가 발생했습니다. 오류가 발생합니다.ODAC 및 C# - TNS : 연결 시간 초과가 발생했습니다. - VS2005 디버거를 통해서만 연결됩니다.

SQLNET.ORA를 사용해 보았지만 비슷한 해결책이 온라인에서 발견되었지만 문제를 해결할 수 없습니다. IDE를 통해 실행되는 설치와 설치를 통해 실행되는 응용 프로그램이 동일한 PC에 있기 때문에 왜 이런 일이 발생하는지 궁금합니다. TNSNAMES.ORA 파일이 올바르게 편집되었는지 확인하고 Visual Studio에서 직접 실행중인 응용 프로그램의 인스턴스를 통해 연결할 수 있습니다.

public bool connectToDatabase(string dbConnStr) 
{ 
    try 
    { 
     databaseConnection = dbConnStr; 
     OracleConnection dbConn = new OracleConnection(databaseConnection); 
     if (dbConn == null) 
     { 
      CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, "Connection object is null"); 
      return false; 
     } 
     if (dbConn.State.ToString().Equals("Closed", StringComparison.OrdinalIgnoreCase)) 
     { 
      CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, "DB connection - " + dbConn.ConnectionString); 
      dbConn.Open(); 
      return true; 
     } 
    } 
    catch (Exception ex) 
    { 
     CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, ex.Message + "\n" + ex.StackTrace); 
     CreateDLLLogFiles.ErrorLog(CreateDLLLogFiles.FileName, "DB String - " + databaseConnection); 

     return false; 
    } 
    return false; 
} 

는 스택 추적은 다음과 같이 읽습니다, 나는 통해 ContextSwitchDeadlock 오류가 발행되고 있던 한편

MySource = 
    (DESCRIPTION = 
    (CONNECT_TIMEOUT=180)(RETRY_COUNT=2) 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 125.63.77.232)(PORT = 1521))) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = MySource) 
    ) 
) 

:

7/22/2010 6:38:51 PM ORA-12170: TNS:Connect timeout occurred 
    at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) 
    at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) 
    at Oracle.DataAccess.Client.OracleConnection.Open() 
    at SQL.connectToDatabase(String dbConnStr) 

tnsnames.ora 파일은 다음과 같이이다 디버거, 그래서 나는 지침을 따라 Main()에서 MTAThread에 대한 속성을 STAThread에서 변경했습니다. ContextSwitchDeadlock이 더 이상 존재하지 않음 - 여전히 연결 문제가 지속됩니다.

나는이 문제에 대해 밝힐 수 있기를 바랬다. 나는 머리카락을 꺼내는 데 가깝다. 모든 통찰력은 인정 될 것이다.

+0

응용 프로그램 (설치된 경우)에 다양한 Oracle 클라이언트 파일에 대한 "읽기"권한이 있고 해당 파일/레지스트리 가상화가 간섭하지 않도록하십시오. 또한 오라클 서비스가 실행되는 포트에 나가는 트래픽을 차단하는 방화벽이 없다는 것을 보장 했습니까? – slugster

+0

예, 읽기 권한이 있습니다. 포트를 막는 방화벽도 없습니다. 그게 제일 먼저 체크 아웃했다. 여전히 VS2005 IDE에서 실행될 때만 작동하는 이유는 궁금합니다. 응용 프로그램이 그 시점에서 매력처럼 작동합니다. –

+0

또한 SQLNET.ORA를 사용하는 경우 "패킷 쓰기 오류"오류가 발생하고 디버거와 설치되어있는 두 인스턴스에서 연결에 실패합니다. 어떤 단서를 제공하는 것입니까? 지금은 SQLNET.ORA 파일을 사용하고 있지 않습니다. –

답변

0

문제가 해결되었습니다. 도와 주셔서 대단히 감사합니다. :) 손상된 ODAC dll과 그 다음의 조합으로 밝혀졌습니다.

관련 문제