同事報案: 在SQL 2008 R2使用Oracle Provider for OLE DB建立Linked Server,執行SELECT * FROM ORASVR1..SCHEMANAME.TABLNAME時出現以下錯誤:

The OLE DB provider "OraOLEDB.Oracle" for linked server "ORASVR1" supplied inconsistent metadata for a column. The column "COLNAME" (compile-time ordinal 9) of object ""SCHEMANAME"."TABLENAME"" was reported to have a "LENGTH" of 30 at compile time and 60 at run time.

但若使用OPENQUERY則可順利執行:
SELECT * FROM OPENQUERY(ORASVR1, 'SELECT * FROM ORASVR1..SCHEMANAME.TABLNAME')

過往經驗,此問題多半與使用的Data Provider版本有關。而有趣的是,出問題的機器就是稍早PO文提到的那台新裝Oralce 11g Client測試機,讓我懷疑起Oracle 11g OLE DB... (今天Oracle Client算是在我的管區犯下連續縱火案了 XD)

於是我試著重新註冊9.2版的OLEDB元件(regsvr32 x:\oracle\ora92\bin\oraoledb.dll),LENGTH錯誤立即消失。為了求證起見,再次註冊11g版OLEDB(regsvr32 x:\oracle\product\11.2.0\client_1\bin\oraoledb11.dll),LENGTH不符問題再度出現。因此歸納出結論,該問題與11.2的OLE DB有關,先換回9.2版讓工作可順利進行。至於是特定環境匹配問題,還是Oracle 11g OLE DB與SQL 2008 R2水土不服? 暫無暇深入調查,就留待有類似環境的熱心朋友幫忙測試回報,我再整理。


Comments

# by Yuta

謝謝您的分享,經測試ORACLE 12C 的Client也行,就是不能用11G的.

Post a comment