太高興了。終於搞定了兩個Oracle資料庫之間的同步問題,特別是ArcSde中繼資料庫的同步

來源:互聯網
上載者:User

在一個項目中,按使用者的要求,必須實現系統的穩定性和高可用性。原來提的方案中計劃採用雙機熱備的方式來實現。

當初做方案的時候,根不沒有做ArcSde+Oracle的雙機熱備會這麼麻煩,也是過於樂觀,覺得通過資料可以完成。

由於需要雙網卡和心跳設定,普通的環境沒法測試。就想著在使用者的環境裡做實驗。。。但是同時自己忽略了一點,使用者在做硬體方案時,已經做了網路冗餘,伺服器的網卡都被用掉了。。。想想該咋辦呢。。。國慶前的最後一天,差點沒有失眠。開始到處在網上找資料,找替代方案。

首先考慮到的資料庫之間的同步複製。再這裡非常感謝

 

姓名:張玉彬   職業:程式員

住址:北京    網名:jillzhang

專長:分布式應用程式開發

的一篇:發布一個用於Oracle資料庫間資料複製的組件-OraSyner 文章,讓我茅塞頓開,有了基本的實現思路,而且減少了代碼架構準備的時間。

看完這篇文章後,正如樓主所說,幾萬條資料,效能還可以,資料量大了,肯定吃不消,我該怎麼辦?

一:先考慮下我的目標是什嗎?

1,如果主伺服器掛掉以後,從伺服器在很短的時間內能夠快速接上;

    問題:

  • 短時間?使用者能夠接受的資料同步延時是多少,3秒鐘?
  • 資料的差異程度?使用者能夠承受的伺服器切換時造成的資料丟失量,1~5條,這個很難測試?
  • 兩個資料庫遵循的原子時鐘是否一致?如果不一致,將會導致同步的方向判斷出現問題。

2,每次同步時,產生的資料轉送量最少;

    問題: 

  • 如何控制資料庫之間傳輸的資料量?
  • 如何擷取主伺服器表,甚至行的變化,添加,刪除,修改等操作?

3,還必須比較資料庫之間的最後修改時間,也就是需要計算同步的方向;

    問題:

  • 如何擷取表中記錄修改的最後時間?
  • 如何讓Oracle的時間類型欄位,顯示到長日期,包括時:分:秒?

4,同時需要考慮一個主伺服器,多從伺服器同步的問題;

    問題:

  •  如果有多台資料庫需要同步?
  • 如果多台資料庫需要實現部分同步?

二:然後對這套組件進行分析,並結合項目需求進行測試。

哎,為了這套東西,整個國慶都奉獻出去了。還好幾次到後半夜。

還好有環境,兩台伺服器,一台同步測試機器。多次對資料庫進行匯入匯出,備份,竟然直接把ArcSde伺服器給同步跨了。。。再不斷的同步測試時,發現,我需要

1,支援大物件類型的同步————————————————這個還好。很快解決

2,支援Oracle自訂類型的同步—————————————到現在為止沒有找到辦法,請各位高手指點一二啊。。。

3,資料庫有很多個表,編寫同步檔案也是一個非常麻煩的事情————————————還好以前有一個資料庫結構瀏覽程式,該把該把做了同步檔案產生器

4,資料量很大時,效能確實夠嗆—————————————開始尋找如何監控每條記錄的變化,還好曾經接觸過物化視圖,利用物化視圖日誌表這個東東來解決記錄變化的監控;

5,如何擷取每條記錄變化的確切日期———————————物化視圖日誌表鐘有一個TimeSpan$$欄位,記錄了變化時間,但我沒有辦法使他顯示長日期,不知各位大大有何好辦法沒有?

6,很多表沒有主鍵,無法建立物化視圖日誌————————在同步群組件中實現了對同步結構的初始化,相當於再一個物體上嵌入了很多寄生蟲。。。bt一下。

7,很多表沒有主鍵,但是有唯一索引或唯一約束,而且有多個索引————在配置同步檔案時,取哪個索引來做主鍵欄位呢?通過對物化視圖日誌表建立的分析

使用主鍵的原則:欄位數量少,整形優先.

8,在物化視圖日誌中,如何擷取新增記錄,修改記錄,刪除記錄——————該表中有欄位DMLTYPE$$, OLD_NEW$$,其中DMLTYPE: U=Update,D=Delete,I=Insert

OLD_NEW$$:N=New;O=Old;U=Update

9,ArcSde中繼資料庫多次,失敗,竟然使ArcCatalog等用戶端無法串連,卸載,重裝ArcSde都無效——————Schema的同步還是很難的,問題就出在7當中的問題,索引多,把所有索引欄位都當成主鍵來處理了。

到下午為止,終於基本上搞定了。

三:系統的效能

1,需要同步的表再1200個左右;

2,啟動系統時,做第一次同步,先對所有註冊的表進行掃描,初始化。沒有主鍵的建立主鍵,沒有物化視圖日誌表的建立之;每次第一次同步大概需要3分鐘;

3,後續同步時,只對變化的表,變化的記錄進行同步,基本上在3到4秒之間;曾經想用多線程來進行同步,利用線程池,但老報錯,估計是公用變數的值變化了。覺得3,4秒中的延時,暫時可以接受。先應付過去,等組件相對穩定並經過一段時間測試後,再來考慮多線程同步的問題。

四:系統遺留問題小結

1,多伺服器沒有遵循同一個原子時間,而是利用了本地時間;

2,對行記錄變化的控制只精確到一天,這樣很不安全,起碼到秒;

3,沒有採用多線程,系統效能還不夠高效;

4,現在只支援Oracle之間同步,ArcSde相同版本的同步;

5,現在沒有支援資料庫結構描述變化的同步

6,Oracle自訂類型欄位無法同步

五:擴充

1,有時間實現Sql Server之間的資料同步;

2,研究不同資料庫之間的同步

 

同步工具提供下載

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.