關於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資料庫附加錯誤的解決過程SQLServer資料庫
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- SQL Server 資料訪問策略:儲存過程QCSQLServer儲存過程
- SQL Server 資料訪問策略:CLRMESQLServer
- 【PRODUCE】Oracle 通過儲存過程限制使用者訪問表資料Oracle儲存過程
- 一種錯誤的資料欄位取名
- SQL Server DACPAC資料庫部署錯誤SQLServer資料庫
- Oracle資料庫連結(DBLink)中如何訪問包含BLOB欄位的資料Oracle資料庫
- 透過Kerberos認證訪問Oracle11gROSOracle
- 【PRODUCE】Oracle 通過儲存過程限制使用者訪問表資料(二)Oracle儲存過程
- 【SQL】Oracle資料庫通過job定期重建同步表資料SQLOracle資料庫
- SQL Server通過建立臨時表遍歷更新資料SQLServer
- Oracle DBLink跨資料庫訪問SQL server資料同步 踩坑實錄Oracle資料庫SQLServer
- SQL Server 資料訪問策略:即席SQLCUSQLServer
- Oracle-欄位的新增Oracle
- SQL Server 查詢表註釋和欄位SQLServer
- -206 錯誤. 在表中找不到對應的資料欄位txt
- 在 SQL Server 中,建立表時可以直接為欄位新增唯一約束(UNIQUE)SQLServer
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- [探索]在使用模型時,關於資料表欄位的一個思考?模型
- SQL Server 備份 出現作業系統錯誤 5(拒絕訪問。)SQLServer作業系統
- 關於 RemoteViews 跨程式資源訪問的勘誤REMView
- SQL server 修改表資料SQLServer
- 微課sql最佳化(10)、關於資料訪問方法SQL
- oracle關於ORA-12988錯誤Oracle
- 關於SQL server2008除錯儲存過程的完整步驟SQLServer除錯儲存過程
- 如何較方便給上百張資料庫表新增表欄位資料庫
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- oracle中判斷欄位是否存在和新增表結構Oracle
- [提問交流]如何通過指令碼升級或新增OneThink獨立模型的欄位?指令碼模型
- oracle 修改表欄位的長度Oracle
- 資料庫資料恢復—附加資料庫錯誤823的SQL Server資料恢復案例資料庫資料恢復SQLServer
- 關於SQL Server 映象資料庫快照的建立及使用SQLServer資料庫
- SQL中欄位比較型別不匹配錯誤:‘cannot be cast to’SQL型別AST
- Oracle 通過透明閘道器訪問mysqlOracleMySql
- 通過SQL Server資料庫映象保護虛擬資料庫ICSQLServer資料庫
- 基於BIGINT溢位錯誤的SQL隱碼攻擊SQL
- mysql資料庫新增和修改欄位MySql資料庫