兩個Oracle Linked Server與SQL間資料移轉問題

我在一台SQL上設了Linked Server指向ORACLE,利用

INSERT INTO SqlTable
    SELECT * FROM LinkedOracleServer..MySchema.MyTable

的方法從ORACLE端匯資料過來,一路相安無事。

直到今天同事改了ORACLE上的Schema,將USERNAME由VARCHAR2改為NVARCHAR2,結果在倒資料時冒出以下錯誤:

Msg 7356, Level 16, State 1, Line 5
The OLE DB provider "MSDAORA" for linked server "LinkedOracleServer" supplied inconsistent metadata for a column. The column "USERNAME" (compile-time ordinal 9) of object ""MySchema"."MyTable"" was reported to have a "DBTYPE" of 130 at compile time and 129 at run time.

Google了一下,有人說是9.2.0.4之前版本的Bug,我想起設Linked Server時用的是Microsoft OLEDB Provider for ORACLE,記得上回在處理中文問題時,它跟Oracle Provider for OLE DB產生的結果很不相同,所以我先想做的就是換一下Provider試試手氣。更換後,原本的問題就消失了。

正以為之後會一帆風順,卻又被潑了一盆冷水...

在ORACLE與SQL的有一組對應的Table,Schema/Primary Key設定都相同,但明明在ORACLE都是UNIQUE的資料,倒入SQL的對應Table卻出現Primary Key重複的錯誤。我反覆利用GROUP BY ... HAVING COUNT(*) > 1檢查ORACLE上的Table不下五次,明明就沒有重複資料呀,鬼月都過了還這樣。

後來,使出撒手鐧,將SQL上Table Primary Key設定先移除,倒完資料再用GROUP BY ... HAVING COUNT(*) > 1檢查,終於揪出凶手。繼上回發現ORACLE會將空字串當成NULL,今天又發現SQL Server會將VARCHAR欄位後方的空白自動RTRIM掉,而ORACLE則不會。今天出錯的原因就在於ORACLE上,有人手滑在設了兩筆資料,PK分別為'AAA'及'AAA ',在ORACLE上被視為兩筆,等要轉入SQL時,'AAA '被RTRIM成'AAA',就發生了PK重複的慘劇。找到苦主,請他把手滑的重複資料清除,總算搞定了原本應輕鬆做完的工作。

整合系統的日子真是多采多姿呀~~~

Published 03 September 2008 08:22 AM by Jeffrey
Filed under: , ,


Comments

# dave said on 02 September, 2008 07:06 PM

>SQL Server會將VARCHAR欄位後方的空白自動RTRIM掉,

>而ORACLE則不會。

太歡樂,那麼自動的的東西真是惡夢

Leave a Comment

(required) 
(required) 
(optional)
(required) 

Please input the numbers above:

Search

Go

<September 2008>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
【工商服務】
最新回應


BlogLook Score and Rank

Syndication