簡體   English   中英

ORA-06413: 連接未打開,在我的另一台電腦上工作正常

[英]ORA-06413: Connection not open, works fine on my other pc

我目前收到錯誤“ORA-06413:連接未打開。” 在我的一個 asp.net Web 應用程序中,我目前使用的是 Visual Studio 2010,我安裝了 Windows 7(64 位),並安裝了 oracle 10g (10.3) 客戶端。

現在我問社區的原因是我有 2 台我開發的 pc,它們都是完全相同的規格,使用完全相同的軟件,只有一個目前沒有給我這個錯誤的,是在六個月前安裝的,給我錯誤的 PC 是新安裝的 PC。

代碼在一台電腦上運行良好,但在另一台電腦上產生錯誤:

        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();

但是,在新安裝的 PC(6 台新 PC 中的 1 台)上,我收到此錯誤。 但是,TOAD 連接到數據庫沒有問題。 那么有人可以告訴我要檢查什么以及我可能會遺漏什么嗎?

我遇到了同樣的問題,我的解決方案是:

首先,確保(手動)工作站中的 OracleClient 的庫。

我以這種方式創建了一個文件夾:C:\\Oracle C:\\Oracle\\Bin C:\\Oracle\\Network\\Admin

不需要任何文件夾 o 文件更多。 此步驟中的文件夾為空。

確保環境變量

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 應用程序做了同樣的事情,但在這種情況下,每次更改庫時都需要關閉 IIS Express 服務器。

就我而言,它適用於以下庫:instantclient-basiclite-win32-10.2.0.5

在 Web 應用程序和控制台應用程序中,其他庫僅適用於控制台應用程序

如果您需要其他信息來幫助解決此問題,請發表評論。

我知道這篇文章太舊了,但我現在需要連接到 Oracle 9i 並且我沒有找到任何解決方案。 如果其他人有同樣的問題,我希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM