ORA-06413:连接未打开,在我的另一台电脑上运行良好

本文关键字:一台 电脑 运行 连接 我的 ORA-06413 | 更新日期: 2023-09-27 18:28:57

我当前收到一个错误"ORA-06413:连接未打开。"在我的一个asp.net web应用程序中,我当前使用的是Visual Studio 2010,我安装了Windows 7(64位),并安装了oracle 10g(10.3)客户端。

现在,我问社区的原因是,我有两台我开发的电脑,它们都是完全相同的规格,使用完全相同的软件,只有目前没有给我这个错误的电脑是六个月前安装的,给我这个问题的电脑是一台新安装的电脑。

代码在一台电脑上运行良好,并在另一台电脑产生错误:

        OracleConnection con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=!!!HOSTNAME!!!)(PORT = 1521)))(CONNECT_DATA=(SID = dwh)(SRVR = DEDICATED)));User ID=user;Password=pass;");
        con.Open();
        string sql = "select * "
           + "from ods_dw.base";
        OracleCommand cmd = new OracleCommand(sql, con);
        cmd.ExecuteNonQuery();
        con.Close();

然而,在新安装的电脑(6台新电脑中的1台)上,我收到了这个错误。但是,TOAD连接到数据库没有问题。那么,有人能告诉我该检查什么以及我可能缺少什么吗?

ORA-06413:连接未打开,在我的另一台电脑上运行良好

我遇到了同样的问题,我的解决方案是:

首先,确保(手动)工作站中的OracleClient库。

我以这种方式创建了文件夹:C: '' OracleC: ''Oracle''BinC: ''Oracle''Network''Admin

不再需要任何文件夹。此步骤中的文件夹为空。

确保环境变量

PATH:           Must include oracle bin path: C:'Oracle'Bin'
ORACLE_HOME:    C:'Oracle
TNS_ADMIN:      C:'Oracle'Network'Admin
NLS_LANG:       American_America.UTF8 (or find the righ value if is necessary)
JAVA_HOME:      (install java normally to get this configuration)

确保Windows注册表项

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE'SOFTWARE'Oracle'KEY_Oracle]
"StmtCacheSize"="0"
"ORACLE_HOME_NAME"="Oracle"
"ORACLE_BASE"="C:''Oracle''"
"VERSION"="10.2.0.1.0"
@=""
"ORACLE_HOME_KEY"="SOFTWARE''ORACLE''KEY_Oracle"
"NLS_LANG"="LATIN AMERICAN SPANISH_COLOMBIA.WE8MSWIN1252"
"ORAMTS_CP_TRACE_LEVEL"="0"
"ORACLE_HOME"="C:''Oracle''"
"ORAMTS_CP_TRACE_DIR"="C:''Oracle''oramts''trace"
"StatementCacheSize"="0"
"OLEDB"="C:''Oracle''oledb''mesg"
[HKEY_LOCAL_MACHINE'SOFTWARE'Oracle'KEY_Oracle'ODP.NET]
"TraceFileName"="C:''Oracle''ODPNET.trc"
"TraceLevel"="0"
"TraceOption"="0"
"StatementCacheSize"="10"
@=""
"Version"="10.2.0.100"
[HKEY_LOCAL_MACHINE'SOFTWARE'Oracle'KEY_Oracle'OLEDB]
"CacheType"="Memory"
"ChunkSize"="100"
"DistribTX"="1"
"FetchSize"="100"
"OSAuthent"="0"
"PLSQLRset"="0"
"PwdChgDlg"="1"
"SchRstLng"="10000"
"UserDefFn"="0"
"DisableRetClause"="1"
"VCharNull"="1"
"TraceCategory"="0"
"TraceFileName"="c:''Oracle''OraOLEDB.trc"
"TraceLevel"="0"
"TraceOption"="0"
"SPPrmDefVal"="0"
"StmtCacheSize"="10"
@=""

这些条目可能不是全部都需要,但我没有时间检查每一个。

下一步我已经创建了一个控制台应用程序来测试连接。这必须包括System.Data.OracleClient引用。

在我的第一次测试中,C:''Oracle''Bin文件夹是空的。还没有库。但是TNSNAMES.ora必须存在于C:''Oracle''Network''Admin文件夹中别名指向oracle实例。

奇怪的是,有必要确保其他客户端连接到该实例,如SQLPLUS、Toad或许多其他客户端。或者至少确保通过实例的端口从工作站连接到实例服务器,默认为:1521

我的基本代码

using System;
using System.Data.OracleClient;
namespace ConsoleApp {
    class Program {
        static void Main(string[] args) {
            try {
                using (OracleConnection conn = new OracleConnection("User Id=myuser; Password=mypwd; Data Source=MYSSID")) {
                    conn.Open();
                }//End using
                Console.WriteLine("CONECTION SUCCESS!");
            }//End try
            catch (Exception ex) {
                Console.WriteLine("ERROR:" + ex.Message);
            }//End catch
        Console.ReadKey();
        }
    }
}

这可能会返回一条消息,说Oracle需要最低版本xx才能连接,这是因为bin目录是空的。

所以接下来我从de oracle页面下载了大多数旧库此时此刻:https://www.oracle.com/database/technologies/instant-client/downloads.html

我开始把每一个都放在Bin文件夹中,并尝试连接,直到其中一个成功连接。

接下来,我对一个Web应用程序做了同样的事情,但在这种情况下,每次都必须关闭IISExpress服务器才能更改库。

在我的情况下,它与以下库一起工作:instantclient-basiclite-win32-02.0.5

在web应用程序和控制台应用程序中其他库仅适用于控制台应用程序

如果您需要其他信息来帮助解决此问题,请留下评论。

我知道这篇文章太旧了,但我现在需要连接到Oracle9i,但我没有找到任何解决方案。如果其他人也有同样的问题,我希望这会有所帮助。

不要忘记,在IIS(不是express)上,对32位架构的更改过程是必要的