關於SQL Server通過OLEDB訪問ORACLE資料表涉及Oracle11g新增欄位的錯誤提示
在一個SQL SERVER從Oracle同步資料的案例中發現:
SQL Server資料庫任務中錯誤提示如下:
OLE DB 提供程式 'MSDAORA' 為列提供的後設資料不一致。執行時更改了後設資料資訊。 [SQLSTATE 42000](錯誤 7356) OLE DB 錯誤跟蹤[Non-interface error: Column 'STOTAL' (compile-time ordinal 6) of object '"USR01"."T_SALE"' was reported to have a DBTYPE of 131 at compile time and 130 at run time]。
查詢分析器執行語句select * from ORCL..USR01.T_SALE測試,錯誤提示如下:
伺服器: 訊息 7356,級別 16,狀態 1,行 1
OLE DB 提供程式 'MSDAORA' 為列提供的後設資料不一致。執行時更改了後設資料資訊。
OLE DB 錯誤跟蹤[Non-interface error: Column 'STOTAL' (compile-time ordinal 6) of object '"USR01"."T_SALE"' was reported to have a DBTYPE of 131 at compile time and 130 at run time]。
考慮到Oracle資料庫使用的是11g版本,可能使用微軟MSDAORA驅動會不相容,所以,改為使用Oracle公司的驅動再進行測試.
SQL Server資料庫任務中錯誤提示如下:
OLE DB 提供程式 'OraOLEDB.Oracle' 為列提供的後設資料不一致。執行時更改了後設資料資訊。 [SQLSTATE 42000](錯誤 7356) OLE DB 錯誤跟蹤[Non-interface error: Column 'STOTAL' (compile-time ordinal 6) of object '"USR01"."T_SALE"' was reported to have a DBTYPE of 131 at compile time and 130 at run time]。
查詢分析器執行語句select * from ORCL..USR01.T_SALE測試,錯誤提示如下:
伺服器: 訊息 7356,級別 16,狀態 1,行 1
OLE DB 提供程式 'OraOLEDB.Oracle' 為列提供的後設資料不一致。執行時更改了後設資料資訊。
OLE DB 錯誤跟蹤[Non-interface error: Column 'STOTAL' (compile-time ordinal 6) of object '"USR01"."T_SALE"' was reported to have a DBTYPE of 131 at compile time and 130 at run time]。
最終查明初步的原因是:
Oracle11g資料庫中,T_SALE表的STOTAL欄位不是初始建表即有的,而是後來新增的欄位.
聯想到Oracle11g能夠增強效能的一個新特性:在新增一個包含DEFAULT值的NOT NULL欄位,Oracle不會去更新現有的資料,Oracle是將預設值以及對應的表資訊、列資訊一起儲存在一個新增資料字典表ecol$中。
估計跨庫取資料欄位的資料型別受此新特性影響了.
根據本問題所做的測試來看,無論是使用Microsoft的驅動連線oracle庫,還是使用Oracle的驅動來建立連結伺服器連線oracle庫,都存在此問題.
看來正如同《基督山伯爵》中伯爵所說的:永遠不要忘記,直到上帝揭露人的未來圖景的那一天以前,人類的一切智慧就包含在這四個字裡面!"等待""希望".
目前臨時解決此問題所用的方法是:
一是將oracle新增欄位的表資料匯出,重建表,讓其建表即包含所有欄位,避免新增欄位,匯入資料;
二是在oracle庫中中建一個檢視,不包含新增的欄位,然後過程取檢視。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29512902/viewspace-1165127/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQL Server通過OLEDB訪問ORACLE資料表涉及CLOB或BLOB欄位的錯誤提示SQLServerOracle
- SQL Server通過dblink訪問Oracle資料SQLServerOracle
- SQL新增表欄位SQL
- 通過 SQL Server 檢視訪問另一個資料庫伺服器表的方法SQLServer資料庫伺服器
- oracle通過透明閘道器(Oracle Transparent Geteways),訪問ms sql server和其他資料庫OracleSQLServer資料庫
- 關於jsp 呼叫bean 訪問sql-server資料庫問題JSBeanSQLServer資料庫
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- SQL Server訪問Oracle提示[訊息 9803 資料不適用於型別 "numeric"]問題SQLServerOracle型別
- sql server資料庫附加錯誤的解決過程SQLServer資料庫
- 一種錯誤的資料欄位取名
- SQL SERVER 資料庫查詢表和欄位資訊語句SQLServer資料庫
- 關於儲存過程通過DBLINK 訪問只讀資料庫報錯 PL/SQL: ORA-04063:的說明儲存過程資料庫SQL
- Oracle11g新特性 - 快速線上新增not null欄位OracleNull
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- 獲取sql server資料庫中所有庫、表、欄位名的方法SQLServer資料庫
- 【PRODUCE】Oracle 通過儲存過程限制使用者訪問表資料Oracle儲存過程
- SQL Server 資料訪問策略:CLRMESQLServer
- SQL Server 不同網段IP通過名稱訪問SQLServer
- 轉載-64位SQL Server 2008的Linked Server連線64位的Oracle--Oracle Provider for OLEDBSQLServerOracleIDE
- SQL SERVER 查詢表的欄位名、資料型別和最大長度SQLServer資料型別
- 【PRODUCE】Oracle 通過儲存過程限制使用者訪問表資料(二)Oracle儲存過程
- oracle透過透明閘道器訪問sql serverOracleSQLServer
- SQL Server複製的表中如何修改欄位SQLServer
- SQL Server通過建立臨時表遍歷更新資料SQLServer
- 關於oracle中blob欄位的錄入問題Oracle
- Python SqlAlchemy動態新增資料表欄位PythonSQL
- SQL Server DACPAC資料庫部署錯誤SQLServer資料庫
- SQL Server 查詢表註釋和欄位SQLServer
- C#中有關欄位的訪問控制C#
- 【SQL】Oracle資料庫通過job定期重建同步表資料SQLOracle資料庫
- SQL Server 資料訪問策略:即席SQLCUSQLServer
- Oracle資料庫連結(DBLink)中如何訪問包含BLOB欄位的資料Oracle資料庫
- 從Oracle訪問SQL Server(GATEWAYS)OracleSQLServerGateway
- Oracle-欄位的新增Oracle
- SQL Server建立Linked Server訪問OracleSQLServerOracle
- 11g中關於表新增欄位default屬性研究
- DB2訪問遠端資料庫通訊錯誤DB2資料庫
- 錯誤新增表空間的資料檔案