軟體工程師的小事:到底要不要 Close

使用 MSDAORA.1 Provider 透過 OleDb 連線到 Oracle 資料庫收到 ORA-01019 錯誤

使用 OleDb 連線到 Oracle 資料庫在開啟連線的時候會收到下列錯誤訊息(Provider 使用 MSDAORA.1)

Error while trying to retrieve text for error ORA-01019

處理方式

若使用連線字串如下

Provider=MSDAORA.1;Password=oracle;User ID=system;Data Source={server}

將 OleDbConnection 連線字串的 Provider 由 MSDAORA.1 改成 ORAOLEDB.Oracle

Provider=ORAOLEDB.Oracle;Password=oracle;User ID=system;Data Source={server}

就可以連線到資料庫

如果 Provider 不是 MSDAORA.1 的話 ... 請參考網路上其他解決方式,以節省您的寶貴時間

若安裝的 ODAC 版本為 18 的話,會改收到下列訊息:「ORA-01019: unable to allocate memory in the user side」
文章環境與測試紀錄

測試連線的 powershell 指令碼可以在此取得
connect-oracle-database-use-oledb.ps1

作業系統
Windows Server 2016 Standard (1607) 14393.2370
Oracle 資料庫
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
ODAC 版本
ODTwithODAC122011
使用 wnameless/oracle-xe-11g 映像檔建立 Oracle 11g XE 資料庫
ODAC 目前最新版本為 ODTwithODAC183

請確認上述環境是否相符,本文章說明的解決方式無法保證一定能夠解決您的問題

備註

在此環境中若重新開機之後第一次使用 MSDAORA.1 的 Provider 連線到資料庫的話, 還是會收到 ORA-01019 的錯誤訊息。且之後使用 Provider=ORAOLEDB.Oracle 也會有問題,請重開機之後第一次連線使用 Provider=ORAOLEDB.Oracle 就可以解決此問題

修正 Provider 後僅代表可正確連線到 Oracle 資料庫,可連線到資料庫後請確認是否會有其他的問題:查詢、參數、資料型態 ... etc

留言