1. 程式人生 > 其它 >物化檢視重新整理結合ADG的嘗試 (r8筆記第47天)

物化檢視重新整理結合ADG的嘗試 (r8筆記第47天)

最近開發提了幾個需求,需要把幾個線上的分散式的表整合到統計系統中方便統計,看來分久必合,合久必分,當時的分開考慮,肯定沒有想到以後會整合起來,這 可對我們是一些額外的工作,這個時候增量資料的問題就擺在我們眼前,當然目前已經基本拋棄了根據日期來增量同步資料,因為會有dml的資料不準確,當然數 據多了,分析多了,對統計系統對資料的精確度也在提高。 比如資料的架構是下面這種形式,左邊的是線上系統,右邊的統計系統。

當然這種重新整理現在已然沒有什麼新意了,而且目前來看也算是經歷住了一些大查詢的考驗。 但是如果結合ADG來看待物化檢視重新整理,是否能夠成正果? 原本的重新整理流程圖是這樣的情況,假設存在兩個OLTP的主庫primary1,primary2,資料都會通過物化檢視日誌增量重新整理到統計庫中。

我在處理這種案例的時候就在想,第一次重新整理是一個全量的重新整理,如果資料量很大的情況,對主庫是不是壓力有些大,如果物化檢視比較多的情況下,這勢必對主庫有一些潛在的影響。 尤其是我碰到一個主庫沒有開大頁,然後看著swap等待程序,剩餘記憶體被越刷越少,老是擔心出現OOM-killer的情況,這就得不償失了。 如果是在備庫執行,在ADG的環境中,可以認為是同一個資料來源,只是一個只讀,一個可寫。 假設我們需要建立的物化檢視如下: create materialized view TEST.ACC20_USER_INFO refresh fast as select *from ACC20.USER_INFO@public_primary1; create materialized view TEST.ACC15_USER_INFO refresh fast as select *from ACC15.USER_INFO@public_primary1;

我首先db link指向主庫Primary1,然後常見了一個物化檢視,指定快速重新整理,執行成功。 然後在當前的session下,修改tnsnames.ora的配置,把它修改為備庫ADG的ip。然後繼續執行第二條語句,也是執行成功。所以最開始得出一個結論是ADG的這種重新整理是可行的。 然後還自己起了移花接木的美名,想這樣的話可以極大改善資料同步的問題。 自己的設想思路是:

但是吃了晚飯回去繼續折騰這個問題,發現卻不行了。 非常相似的語句,繼續開了一個視窗執行就報錯了。 SQL>create materialized view TEST.ACC13_USER_INFO refresh fast as select *from ACC13.USER_INFO@public_primary1; create materialized view TEST.ACC13_USER_INFO refresh fast as select *from ACC13.USER_INFO@public_primary1; * ERROR at line 1: ORA-16000: database open for read-only access ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 364 ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 446 ORA-06512: at line 1

繼續測試,如果放低要求,全量重新整理,結果還是不行。 SQL>create materialized view TEST.ACC13_USER_INFO refresh fast as select *from ACC13.USER_INFO@public_primary1; create materialized view TEST.ACC13_USER_INFO as select *from ACC13.USER_INFO@public_primary1; * ERROR at line 1: ORA-16000: database open for read-only access ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 364 ORA-06512: at "SYS.DBMS_SNAPSHOT_UTL", line 446 ORA-06512: at line 1 自己在想,是不是物化檢視日誌影響的,於是刪除了主庫的物化檢視日誌,繼續測試,在ADG的環境繼續嘗試全表掃描,依舊是同樣的報錯。 不能增量重新整理著實讓我有一些失落,為什麼最開始的時候可以呢,那是因為在同一個session裡。 不過退一步來說,對於ADG的資料重新整理,如果附帶這樣的子查詢的形式,其實還是可行的,不過對於大量資料的重新整理就得不償失了。

 CREATE MATERIALIZED VIEW MIMI.MV_TEST 
   TABLESPACE USERS 
   BUILD IMMEDIATE 
   REFRESH COMPLETE 
   AS (SELECT * FROM TEST@MIMI_ROSTBY WHERE ROWNUM>0);

筆記簡介:

分享自己整理的學習筆記,大多數是關於oracle的工作心得,還有一些關於linux,shell,MySQL,Java開發等的筆記,有感興趣的朋友可以加我微信公眾號: jianrong-notes 已經堅持740多天了,共同進步,儘量堅持每天都發 :)

可以通過以下方式聯絡到我

微信公眾號:jianrong-notes

個人郵箱 :[email protected]

個人技術部落格:http://blog.itpub.net/23718752/

微信: jeanron100 (新增請註明原因)