使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决
在數(shù)據(jù)庫同步中我們經(jīng)常會用到DBLink方式。DBLink可以將物理上存放于網(wǎng)絡的多個數(shù)據(jù)庫在邏輯上當成一個單一的大數(shù)據(jù)庫。開發(fā)人員無需關心數(shù)據(jù)庫的網(wǎng)絡分布,就能很方便的實現(xiàn)從不同數(shù)據(jù)庫之間讀取數(shù)據(jù)。如何在Oracle數(shù)據(jù)庫間建立DBLink我在之前的文章已有涉及,這里就不花篇幅講解了。具體請查看Oracle建立DBLink。
本篇文章主要闡述如何解決DBLink方式無法實現(xiàn)Blob、Clob字段數(shù)據(jù)同步的問題。在網(wǎng)上已經(jīng)有很多牛人給出了解決方案,在參照他們的方案解決問題的過程中,發(fā)現(xiàn)有些小問題并沒有解決,而且也沒有人給出一個完整的解決過程。這里我把我的解決過程記錄下來,供大家參考。
首先,我們看一下DBLink為何不能實現(xiàn)Blob、Clob字段的同步。我在我本機Oracle數(shù)據(jù)庫中建立了DEVD數(shù)據(jù)庫的Database Link。當我們Select沒有大字段的DEVD數(shù)據(jù)庫的表的時候,數(shù)據(jù)能查詢出來。當我們查找含有大字段的表時,系統(tǒng)給出如下提示:
[sql]?view plaincopy
因為Oracle不允許LOB屬性的數(shù)據(jù)進行DBLink方式的查詢的。解決此類問題有人提出使用臨時表的形式進行中轉,然后再進行數(shù)據(jù)的同步。使用這種方法確實能夠解決問題,具體解決方案如下:
1.使用子查詢來建立臨時表,實現(xiàn)本地臨時表復制遠程數(shù)據(jù)庫表的數(shù)據(jù)。
[sql]?view plaincopy
通過查詢temp表,我們發(fā)現(xiàn)所有JJR_TJJR_CYZGXX表中的數(shù)據(jù)已經(jīng)同步到temp表中。
2.在本地test表中同步臨時表temp的數(shù)據(jù),先刪除test表中數(shù)據(jù),然后用子查詢實現(xiàn)數(shù)據(jù)復制。
[sql]?view plaincopy
?其他解決方案:
通過臨時表能夠?qū)崿F(xiàn)含大字段表的數(shù)據(jù)同步,我們之間使用本地表是否也能達到相同的效果呢?通過實驗我們發(fā)現(xiàn)直接通過本地表也是能夠?qū)崿F(xiàn)的。
首先建立test1表,結構和JJR_TJJR_CYZGXX表結構一致。通過子查詢來實現(xiàn)數(shù)據(jù)復制
[sql]?view plaincopy
總結
以上是生活随笔為你收集整理的使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符设备和块设备的区别
- 下一篇: PL/SQL如何设置 窗口列表默认显示