oracle Streams基礎:如何捕獲進程

來源:互聯網
上載者:User

前一章我們實踐了一把streams同步單表的過程,看起來很簡單是不是(如果你覺著複雜,那不是因為streams本身操作複雜,而是為了配置好streams前期的準備工作較複雜),事實上也確實很簡單,由小能見大,我們從上述樣本中應該也能看出streams的操作方式就是捕獲(capture)->傳播(propagation)->應用(apply),不管是表也好,schema也好,database也好,都是遵循這個操作過程,下面逐一介紹捕獲傳播和應用進程,俺儘可能做到清晰簡單直白,但限於個人理解和自身水平,如描述有誤請自行鑒別:))。另,本章文字描述較多,內容相對枯燥,閱讀前要做好準備,如有心直接上手更進階的實踐配置,可跳過本節,瀏覽第二部分。

捕獲(Capture)

眾所周知,資料庫的修改操作均會被記入redolog(表鑽牛角尖,俺指通常情況下),以便在發生錯誤時,能有途徑修正。而Capture進程做為oracle的一個後台進程天生就擁有讀取redolog的本領,因此它也就具有了捕獲dml,dll修改操作的能力。

Capture進程將修改格式化為指定的格式存入message定義為LCRs並將其置入隊列(queue)。由於運行中的capture進程自動基於其自己的規則捕獲修改,因此又被稱為:隱式捕獲(implicit capture)。

提示:什麼是LCR

capture進程捕獲資料庫的操作,例如表/schema甚至整個資料庫的修改等。這些修改都會記入redo,而capture進程就是根據redolog分析資料庫中的修改並格式化儲存為message,這些message即被稱為:logical change record (LCR)。捕獲進程通過定義的rule來確定哪些修改會被捕獲,這些被捕獲的修改稱為captured messages。

因此:Messages->LCRs->Captured message

LCRs也分兩種:

A>.row LCR:包括DML操作產生的修改資訊,注意由於單條dml sql語句也有可能觸發多條記錄的修改,因此一條dml修改操作也可能產生多條row LCR,另外對於單行中大欄位類型的修改比如long,lob也可能產生多條row LCR;

每條rowLCR被封裝成LCR$_ROW_RECORD的物件類型,包含下列屬性:

n source_database_name:觸發修改操作的資料庫

n command_type:觸發修改操作的命令類型,比如:INSERT, UPDATE, DELETE, LOB ERASE, LOB WRITE, or LOB TRIM。

n object_owner:對象屬主

n object_name:對象名稱

n Tag:標籤,可用於追蹤LCR

n transaction_id:觸發修改的DML語句所屬事務ID

n Scn:發生修改時的SCN(system change number )

n old_values:DML修改前的值,不過注意不同的dml操作產生值也不同,比如UPDATE or DELETE的舊值就是修改前的值,而對於INSERT則該列為空白

n new_values:DML修改後的值,基於相同的原因,不同的dml操作也會產生不同的值,比如UPDATE or INSERT的值即修改後的值,而DELETE操作則該列為空白

B>.DDL LCR:包括ddl操作產生的對象修改資訊,DDL LCR包括下列的資訊:

n source_database_name:同rowLCR

n command_type:同rowLCR

n object_owner:同rowLCR

n object_name:同rowLCR

n object_type:物件類型,比如TABLE/VIEW/PACKAGE

n ddl_text:執行的DDL語句

n logon_user:執行DDL語句的使用者

n current_schema:執行DDL語句的schema

n base_table_owner:基表屬主(如果有的話,當然通常沒有,但是對於某些操作比如觸發器觸發的的修改,則基表即是觸發表)

n base_table_name:基表名稱,其它同上。

n tag:同rowLCR

n transaction_id:同rowLCR

n scn:同rowLCR

提示:

不管是rowLCRs或DDL LCRs都包括來源資料庫名稱,為避免在propagation或apply時出現問題,ORACLE建議不要隨便修改來源資料庫名稱。

1、捕獲方式

Capture進程即可以在本地捕獲,即本地捕獲進程(local capture process),也可以在遠程其它資料庫執行捕獲,即下遊捕獲進程(downstream capture process),執行下載捕獲的資料庫也被稱為downstream資料庫,甚至還可以同時配置本地捕獲和下遊捕獲。

本地捕獲比較簡單,是指capture進程運行於本地,如圖所示:

下遊捕獲就要複雜一點點,因為它要涉及到將本地產生的redologs發送至遠端執行捕獲的資料庫,說到發送redologs讓回憶起了standby是吧,對,此處確實與standby有所關聯,發送redologs應用的技術是一樣的(正好趁此機會再複習一下),因此下遊捕獲也不得不被分成兩類:

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.