如何解决“ORA-6413:连接未打开”。在Windows 7上

时间:2013-12-19 05:00:45

标签: c# asp.net-mvc-4 oracle-xe

我有一个ASP .NET MVC 4应用程序,其数据库(Oracle 10g)位于远程服务器上。

现在我想让它与本地数据库服务器(在同一台机器上)一起工作。我设置了 Oracle 10G Express Edition 。设置成功,我可以使用 SQL plus 访问数据库。但我的应用程序根本无法连接到它(使用 Oracle.DataAccess.dll )。

我在互联网上搜索了很多,发现它可能是因为目录的路径中安装了Visual Studio 2010(Program Files(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

1 个答案:

答案 0 :(得分:3)

最佳解决方案是升级到Oracle 11G第1版客户端工具(Build:11.1.0.6.0),而不是在10G客户端上应用可能无法产生预期结果的一系列补丁。 11G版本的客户端工具经过测试并确认包含上述错误的FIX。如果绝对有必要坚持客户端的10G版本(不应该),请参阅以下内容:

对于32位Oracle客户端:

  1. 安装10.2.0.2升级 - 您需要选择以前10.2.0.1安装的正确Oracle Home路径。

  2. 之后,您需要为10.2.0.2客户端工具安装补丁(5383042)。

  3. 对于64位Oracle客户端:

    1. 安装64位10.2.02升级 - 选择正确的Oracle主页。

    2. 安装64位10.2.03升级 - 选择正确的Oracle主页。

    3. 参考:http://blogs.msdn.com/b/debarchan/archive/2009/02/04/good-old-connectivity-issue.aspx