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이 더 이상 존재하지 않음 - 여전히 연결 문제가 지속됩니다.
나는이 문제에 대해 밝힐 수 있기를 바랬다. 나는 머리카락을 꺼내는 데 가깝다. 모든 통찰력은 인정 될 것이다.
응용 프로그램 (설치된 경우)에 다양한 Oracle 클라이언트 파일에 대한 "읽기"권한이 있고 해당 파일/레지스트리 가상화가 간섭하지 않도록하십시오. 또한 오라클 서비스가 실행되는 포트에 나가는 트래픽을 차단하는 방화벽이 없다는 것을 보장 했습니까? – slugster
예, 읽기 권한이 있습니다. 포트를 막는 방화벽도 없습니다. 그게 제일 먼저 체크 아웃했다. 여전히 VS2005 IDE에서 실행될 때만 작동하는 이유는 궁금합니다. 응용 프로그램이 그 시점에서 매력처럼 작동합니다. –
또한 SQLNET.ORA를 사용하는 경우 "패킷 쓰기 오류"오류가 발생하고 디버거와 설치되어있는 두 인스턴스에서 연결에 실패합니다. 어떤 단서를 제공하는 것입니까? 지금은 SQLNET.ORA 파일을 사용하고 있지 않습니다. –