2013-12-19 6 views
1

У меня есть приложение ASP.NET MVC 4, чья база данных (Oracle 10g) находится на удаленном сервере.Как решить «ORA-6413: соединение не открыто». на windows 7

Теперь я хочу, чтобы он работал с локальным сервером базы данных (на той же машине). Я установил Oracle 10G Express Edition. Настройка прошла успешно, и я могу получить доступ к базе данных с помощью SQL plus. Но мое приложение просто не подключается к нему (используя Oracle.DataAccess.dll).

Я много искал в Интернете и выяснил, что это может быть потому, что на пути к каталогу, где установлен Visual Studio 2010 (программные файлы (x86)), есть специальный символ. Поэтому я удалил его и установил его по другому пути без специальных символов.

Тем не менее приложение просто не подключается к локальному серверу oracle.

Для тестирования я создал еще одно простое консольное приложение и написал код для подключения к локальной базе данных в функции Main() и успешно подключен. Точно такой же код в приложении не работает.

ошибка, что я получаю:

ORA-6413: Connection not open. 
Oracle.DataAccess.Client.OracleException was unhandled by user code 
Message=ORA-6413: Connection not open. 
Source=Oracle Data Provider for .NET 
DataSource="" 
Number=6413 
Procedure="" 
StackTrace: 
    at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) 
    at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) 
    at Oracle.DataAccess.Client.OracleConnection.Open() 
    at IBeam.Common.Repositories.SessionProvider.GetSessionFactory(String groupCode, String companyCode) in D:\Projects\IBeamNewRepo\IBeamCopy\Src\Trunk\IBeam.Common\Repositories\SessionProvider.cs:line 61 
    at IBeam.Common.Repositories.SessionProvider.GetSession() in D:\Projects\IBeamNewRepo\IBeamCopy\Src\Trunk\IBeam.Common\Repositories\SessionProvider.cs:line 191 
    at IBeam.Controllers.AccountController.Login(String url) in D:\Projects\IBeamNewRepo\IBeamCopy\Src\Trunk\IBeam\Controllers\AccountController.cs:line 38 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 

Мой код для подключения к Oracle:

var connection = new OracleConnection(); 
        var str = 
         @"Data Source = (DESCRIPTION = 
         (ADDRESS = (PROTOCOL = TCP)(HOST = mridula-PC)(PORT = 1521)) 
         (CONNECT_DATA = 
         (SERVICE_NAME = XE) 
         ) 
         ); 
         User Id=app$security; 
         Password=appsecurity;"; 
connection.ConnectionString = str; 
connection.Open(); <- Exception Here 

Моя ОС Windows 7.

ответ

3

Лучшим возможным решением является обновление до версии 11.11 версии 1.0 для клиентских инструментов Oracle 11G Release (Build: 11.1.0.6.0), а не применение серии патчей к клиенту 10G, который может не дать желаемых результатов. 11G версия клиентских инструментов проверена и подтверждена включением FIX для вышеуказанной ошибки. Если это абсолютно необходимо придерживаться версии 10G клиента (оно не должно быть), обратитесь к следующему:

Для 32-BIT Oracle Client:

  1. Установка 10.2.0.2 обновление - Вам нужно выбрать правильный путь Oracle Home предыдущей установки 10.2.0.1.

  2. После этого вам необходимо установить патч (5383042) для клиентских инструментов 10.2.0.2.

Для 64-разрядного клиента Oracle:

  1. Установка 64-битные 10.2.02 обновления - Выберите правильный Oracle Home.

  2. Установить 64-разрядное обновление 10.2.03 - выбрать правильный сервер Oracle.

Ссылка: http://blogs.msdn.com/b/debarchan/archive/2009/02/04/good-old-connectivity-issue.aspx

+0

Но это о клиенте. Что относительно 10G экспресс-сервера? Нужно ли мне это обновить? – mridula

+0

Попробуйте обновить, он должен работать :) – mrinal