Linked server和SSIS連線Oracle時的常見問題
1. Linked server去連線oracle的時候,是按照SQL Server 引擎的版本去載入oracle provider的版本。如果SQL Server是64bit的,只能載入64 bit oracle的provider。32bit的SQL Server只能使用32bit的oracle的provider。
2. 很多SQL Server的圖形介面工具都是32bit的,比如SSIS,32位的 import/export wizard,這些32bit的工具只能load 32 bit的oracle provider。如果想知道這個工具是不是32bit的,去檢查工具所對應的exe檔案是不是在program files(x86)子路徑下。
3. Linked server去 連線oracle的時候,首先會讀取tnsname.ora檔案,然後讀取sqlnet.ora檔案,然後用SQLServr.exe直接去連oracle,連線成功以後會再次讀取tnsname.ora檔案,然後開始載入oracle OLEDB的DLL檔案。在64位作業系統上安裝的32位SQL Server中,讀到的路徑是這樣的:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.2.118)(PORT=1521))(CONNECT_DATA=(SID=express)(CID=(PROGRAM=D:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe)(HOST=SCT-IT-SQLTEST)(USER=SYSTEM))))
在64 bit的作業系統上按照32 bit的SQL Server伺服器以及32 bit的oracle客戶端,是可以建立linked server和SSIS程式包的。但是,oracle在處理包含括號檔案全路徑名稱時有個bug,這個bug在8i,9i和10g的版本上都存在。必須通過打oracle的補丁來解決。
以下報錯由Oracle bug引起(以下參考了官方定義關於此bug的文件):
主題:在64位Windows作業系統上執行32位Oracle報錯ORA-12154或者 ORA-6413
原文件 ID: 334528.1
症狀:如果在64位Windows作業系統上執行32位Oracle客戶端,自Windows平臺使用ODBC、OLEDB、OO4O、ODP.NET四種介面之一嘗試聯接Oracle資料庫時,將遇到以下報錯資訊
ORA-12154: TNS:could not resolve the connect identifier specified
或者
ORA-6413: Connection not open. Cause64-bit Microsoft OS's install 32-bit applications into the following location
"C:\Program Files (x86)\..."
rather than the typical location of
"C:\Program Files\..."
這將導致發生現有網路的錯誤,因為網路層無法解析程式地址中包含的可執行檔案是試圖連線到Oracle的路徑括號。
這個bug已被提出來如下修正方案:
Bug 3807408 - CANNOT EXTERNALLY AUTHENTICATE USER WITH QUOTE IN USERNAME
更多資訊
之所以遇到ORA-6413或ORA-12154這是一般是取決於您選擇用於連線到Oracle的程式設計介面。
錯誤ORA-12154是當使用最新的OCI介面連線時的典型錯誤,介面包括
Oracle ODBC Driver
Oracle Provider for OLE DB
Oracle Objects for OLE
Oracle Data Provider for .NET (ODP.NET)
Microsoft's .NET Managed Provider for Oracle
錯誤ORA-6413則是使用舊版本的介面,即呼叫Oracle OCI API 7版本的介面:
Microsoft ODBC Driver for Oracle
Microsoft OLE DB Provider for Oracle
解決方案有如下兩種
解決1:
使用Oracle軟體包含Bug 3807408補丁的版本
注意: 目前為止已釋出適用於Windows的補丁有:
Windows 32-bit
9.2.0.7.0 Patch 6: Apply Patch 4928723 or later
10.2.0.1.0 Patch 4: Apply Patch 4923768 or later
10.2.0.2.0 Patch 5: Apply Patch 5383042 or later
10.2.0.3.0: Apply Patch 5337014 or later
Windows 64-bit AMD64 and INTEL EM64T
10.2.0.1.0 Patch 4: Apply Patch 4923787 or later
10.2.0.2.0 Patch 5: Apply Patch 5388871 or later
10.2.0.3.0: Apply Patch 5337014 or later
對於其他版本的Windows平臺請使用解決方案2
解決方案 2:
找到報錯的應用程式路徑,檢查是否含有括號,如何有,請重新配置該應用到一個沒有括號的路徑中
4. 如果使用64 bit的SQL Server伺服器和64 bit 的oracle 客戶端,linked server是可以工作的。但是oracle在64 bit的OLEDB provider上有個bug,會導致連線伺服器訪問失敗。
報錯資訊如:Msg 7333, Level 16, State 2, Line 1
Cannot fetch a row using a bookmark from OLE DB provider "OraOLEDB.Oracle" for
linked server
這個問題在32位環境下使用32位 MSDAORA (Microsoft’s OLEDB Provider for Oracle) provider或者32-bit ORAOLEDB (Oracle’s OLEDB Provider) provider時不會發生。只發生在使用64-bit ORAOLEDB provider時(MSDAORA沒有64位版本存在)。
這是一個與Oracle的64位OLEDB provider的已知問題。多數情況下,客戶發生錯誤資訊到Oracle或通過Oracle補丁或升級Oracle提供程式解決了這一問題。
最新64位Oracle OLE DB provider版本是10.2.0.3.00. 如果使用者在使用低版本,升級即可解決。
對此問題Oracle正事補丁#5084517,Oracle關於bug1023的前提補丁# 6166400也解決了早期部分使用者的這一問題。看起來這些版本補丁都包含最新的Oracle provider
5. 如果在一個64 位的SQL Server上想同時使用linked server和SSIS的BIDS去連oracle,必須要同時安裝64 位和32位的oracle客戶端。但是,在oracle 10g早期的版本中,貌似有一個bug導致oracle 10g的32 位和64 位客戶端無法同時在一臺機器上工作。不確定這個問題是否已經被解決。目前11g的32bit 和64bit Oracle客戶端同時安裝在一個機器上沒有遇到這樣的問題。
6. 32 位上還可以使用oracle的ODBC driver 建立ODBC資料來源,然後在建立linked server時候使用Microsoft OLEDB for ODBC provider 然後指向oracle的ODBC資料來源。如果是64位的SQL Server 2005,預設安裝是沒有64bit的Microsoft OLEDB for ODBC provider的。需要去下載並安裝64 位 Microsoft OLEDB for ODBC provider,然後就可以按照同樣的方法使用oracle的ODBC。http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en
7. 使用oracle ODBC provider比較容易遇到中文字元的問題,建議儘量使用OLEDB的provider。
8. SQL Server對於oracle client OLEDB和ODBC的支援和test只到oracle 8.17的最後版本.這個版本中對於一些資料型別,比如blob欄位是不支援的。如果使用9i以及後續版本的oracle client,不能保證在連線和使用中不遇到任何相容性問題。任何相容性問題,微軟都不保證一定能解決方案。
9. 對於oracle client 9i和10g的版本,Microsoft .net的oracle provider提供了相容性支援。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25175503/viewspace-704916/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server linked server 連線OracleSQLServerOracle
- 如何使用Linked Server連線Oracle與SQL ServerServerOracleSQL
- SQL Server常見問題收集SQLServer
- SQL Server建立Linked Server訪問OracleSQLServerOracle
- Oracle常見問題一千問Oracle
- ORACLE常見問題(zt)Oracle
- oracle基礎知識和常見問題Oracle
- 《新手面試時的常見問題和對策》面試
- 小鳥雲管理終端(VNC連線)常見問題VNC
- 轉 監聽器連線常見的問題及其解決方法
- SQL Server連線中三個常見的錯誤分析SQLServer
- Oracle Exp/Imp常見問題Oracle
- 學習WebFlux時常見的問題WebUX
- Dynamic Parameters造成的linked server效能問題Server
- Oracle備份和恢復常見問題解答Oracle
- SQL Server 連線常見錯誤及其處理方法SQLServer
- ORACLE表連線方式及常見用法(二)Oracle
- Jdbc連線Oracle常見錯誤彙總JDBCOracle
- SSIS中匯入Excel資料到資料庫的一個常見小問題Excel資料庫
- SQL Server資料庫中處理空值時常見問題SQLServer資料庫
- JDBC連線ORACLE問題JDBCOracle
- ACE(02):Oracle ACE常見問題Oracle
- 常見問題--oracle 回收站Oracle
- Oracle EM 常見問題總結Oracle
- 連線oracle中出現的問題Oracle
- 轉載-64位SQL Server 2008的Linked Server連線64位的Oracle--Oracle Provider for OLEDBSQLServerOracleIDE
- sqlserver的waitresource等待事件是linked server連結伺服器的問題SQLServerAI事件伺服器
- 【常見的SQL Server連線失敗錯誤以及解決方法】SQLServer
- ORACLE表連線方式分析及常見用法(zt)Oracle
- SQL Server資料庫恢復常見問題SQLServer資料庫
- WebSphere Application Server 常見問題及解答:安全WebAPPServer
- SQL Server 2005常見問題淺析SQLServer
- oracle連線超時自動斷開問題[轉]Oracle
- SQL SERVER和ORACLE的排序問題SQLServerOracle排序
- MongoDB常見問題解答:時間與時區MongoDB
- docker安裝和常見問題Docker
- RDSforMySQLMysqldump常見問題和處理ORMMySql
- 解決SQL Server常見的七個經典問題SQLServer