Я новичок в Oracle, и у меня возникла проблема. Когда я запускаю приложение из IDE — Visual Studio 2005, соединение с базой данных устанавливается плавно, но когда я запускаю установленную версию приложения, соединение с БД завершается сбоем, и я получаю сообщение TNS: Ошибка тайм-аута подключения.
Я пытался использовать SQLNET.ORA и аналогичные решения, найденные в Интернете, но не смог решить проблему. Интересно, почему так происходит, ведь приложение, работающее через IDE и через установку, находится на одном и том же ПК. Я убедился, что файл 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;
}
Трассировка стека выглядит так:
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 выглядит примерно так:
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 )
)
)
Тем временем отладчик выдал ошибку ContextSwitchDeadlock, поэтому я последовал инструкциям и изменил атрибут с STAThread на MTAThread в Main(). Нет больше ContextSwitchDeadlock - и тем не менее проблема с подключением сохраняется.
Я надеялся, что вы сможете пролить свет на этот вопрос - я близок к тому, чтобы вырвать себе волосы. Любое понимание будет оценено.
Read
прав на различные файлы клиента Oracle и что виртуализация файлов/реестров не мешает? Вы также убедились, что брандмауэр не блокирует исходящий трафик на порту, на котором работает служба Oracle? - person slugster   schedule 21.07.2010