Gbase+8s+數(shù)據(jù)捕獲接口使用方法_第1頁
Gbase+8s+數(shù)據(jù)捕獲接口使用方法_第2頁
Gbase+8s+數(shù)據(jù)捕獲接口使用方法_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Gbase 8s 數(shù)據(jù)捕獲接口使用方法1 Change Data Capture API簡介Change Data Capture API 使外部的客戶端程序能夠捕獲GBase 8s的事務(wù)數(shù)據(jù)。用戶可以在各種客戶端程序上使用這套接口,例如JDBC, ODBC, ESQL/C, and DB-Access。接口以智能大對象的形式返回CDC記錄,用戶可以使用智能大對象讀取函數(shù)讀取CDC數(shù)據(jù)。用戶根據(jù)自己的應(yīng)用可以決定如何處理這些數(shù)據(jù)。例如,可以編寫一個(gè)程序?qū)base 8s數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到另外一個(gè)數(shù)據(jù)庫上。在開始捕獲一個(gè)表的數(shù)據(jù)時(shí),Change Data Capture API輸出了表的結(jié)構(gòu)信

2、息,用戶可以使用這些信息去創(chuàng)建一個(gè)表。當(dāng)數(shù)據(jù)捕獲開始以后,表結(jié)構(gòu)變化時(shí)將不再提供新的表結(jié)構(gòu)數(shù)據(jù)。Change Data Capture API僅提供變化的數(shù)據(jù),它不提供數(shù)據(jù)庫內(nèi)容的初始快照。如果用戶需要遷移一個(gè)表,可以通過其它方式復(fù)制現(xiàn)有數(shù)據(jù)。然后再使用Change Data Capture API在新表上進(jìn)行數(shù)據(jù)更新。只有當(dāng)數(shù)據(jù)庫的日志打開時(shí),Change Data Capture API才能夠正常工作。2 Change Data Capture API使用方法2.1 準(zhǔn)備工作在使用CDC API之前需要做一些準(zhǔn)備工作:1. 在需要進(jìn)行CDC的數(shù)據(jù)庫上打開日志開關(guān)。2. 執(zhí)行$INFORMI

3、XDIR/etc目錄下的syscdcv1.sql腳本,它會(huì)創(chuàng)建syscdcv1數(shù)據(jù)庫,并在syscdcv1數(shù)據(jù)庫中創(chuàng)建若干表和函數(shù)。3. 確認(rèn)syscdcv1.sql腳本成功創(chuàng)建syscdcv1數(shù)據(jù)庫。4. 設(shè)置環(huán)境變量DB_LOCALE,使它和需要進(jìn)行CDC的數(shù)據(jù)庫的本地化(locale)設(shè)置相同。2.2 CDC API的基本使用方法使用CDC需要如下基本步驟:1. 使用informix用戶連接到syscdcv1數(shù)據(jù)庫(準(zhǔn)備工作中創(chuàng)建的)。2. 調(diào)用cdc_opensess()函數(shù),cdc_opensess()函數(shù)會(huì)返回一個(gè)session ID。3. 調(diào)用cdc_set_fullrowlog

4、ging()函數(shù)打開full-row logging。每個(gè)需要捕獲的表都要調(diào)用一次。4. 調(diào)用cdc_startcapture()通知數(shù)據(jù)庫需要捕獲哪些表(數(shù)據(jù)名+表名)和哪些列需要捕獲。每個(gè)表需要調(diào)用一次。5. 調(diào)用dc_activatesess()函數(shù)啟動(dòng)數(shù)據(jù)庫捕獲過程。6. CDC數(shù)據(jù)通過智能大對象返回。需要通過智能大對象讀取函數(shù)例如mi_lo_read()進(jìn)行讀取。使用session ID作為智能大對象的文件描述符參數(shù)。7. 解析智能大對象中返回的數(shù)據(jù)。在Java程序中可以使用IfxToJavaType類將一個(gè)byte stream轉(zhuǎn)換為java的類和類型。8. 為每一個(gè)表調(diào)用一次cd

5、c_endcapture()函數(shù)。9. 為每一個(gè)表調(diào)用一次dc_set_fullrowlogging()函數(shù),關(guān)閉full-row logging。10. 調(diào)用cdc_closesess()關(guān)閉CDC的session。注意: CDC數(shù)據(jù)中在開頭會(huì)包含表結(jié)構(gòu)信息,需要按照CDC_REC_TABSCHEMA的格式進(jìn)行解析。解析之后可以獲得表的字段組成,和各個(gè)字段的排列順序,這將在解析CDC_REC_INSERT / CDC_REC_UPDBEF / CDC_REC_UPDAFT / CDC_REC_DELETE類型記錄時(shí)使用到。具體示例參見4.3節(jié)。2.3 CDC記錄基本格式每條CDC記錄通常由以

6、下幾個(gè)部分構(gòu)成:Common header.Record-specific headerRecord-content1. Common header. 所有的CDC記錄都是相同的。Common header 中的Record number字段用來表明當(dāng)前記錄的記錄類型,需要使用Record number字段的值到syscdcv1數(shù)據(jù)庫syscdcrectypes表中去匹配recnum字段。根據(jù)匹配到的記錄中的recname字段可以獲取當(dāng)前記錄的類型。例如是CDC_REC_INSERT還是CDC_REC_UPDBEF。2. Record-specific header這一部分根據(jù)CDC記錄類型的

7、不同而有著不同的格式。3. Record-content通常這一部分包含著數(shù)據(jù)變化部分內(nèi)容。對于CDC_REC_INSERT / CDC_REC_UPDBEF / CDC_REC_UPDAFT / CDC_REC_DELETE,內(nèi)容由以下幾部分組成:a. 可變長度列的長度如果記錄中存在可變長度列的內(nèi)容,每個(gè)列將對應(yīng)4個(gè)字節(jié)的長度說明。這些長度說明的順序與CDC_REC_TABSCHEMA記錄中列的排列順序相同。b. 固定長度列數(shù)據(jù)如果記錄存在固定長度列的內(nèi)容,這些列將按照CDC_REC_TABSCHEMA記錄中列的排列順序出現(xiàn)。具體數(shù)據(jù)格式參見第6.1節(jié)。c. 可變長度列數(shù)據(jù)如果記錄存在可變長

8、度列的內(nèi)容,這些列將按照CDC_REC_TABSCHEMA記錄中列的排列順序出現(xiàn)。具體數(shù)據(jù)格式參見第6.2節(jié)。舉例說明:數(shù)據(jù)庫使用如下語句創(chuàng)建:Create table table1(a int, b varchar, c int);CDC會(huì)話開始之后會(huì)首先收到一個(gè)CDC_REC_TABSCHEMA記錄(表中數(shù)據(jù)為16進(jìn)制數(shù)據(jù)):00 00 00 24 00 00 00 26 00 00 00 42 00 00 00 c800 00 00 00 00 00 00 00 00 00 00 08 00 00 00 0200 00 00 01 61 20 69 6e 74 65 67 65 72 2

9、c 20 6320 69 6e 74 65 67 65 72 2c 20 62 20 76 61 72 6368 61 72 28 32 30 2c 30 29 00其中紅色的部分是Common header. 最開始4個(gè)字節(jié)表明Common header和Record-specific header的合計(jì)長度是0x24(紅色和綠色的部分的長度,因?yàn)镃ommon header固定為16個(gè)字節(jié),因此Record-specific header長度為20)。接下來的4個(gè)字節(jié)說明記錄內(nèi)容長度是0x26(黑色部分). 用戶根據(jù)最后4個(gè)字段00 00 00 c8到syscdcrectypes表中去查詢r(jià)

10、ecnum等于0xc8的記錄,該條記錄的recname為CDC_REC_TABSCHEM。我們就可以知道這是一條CDC_REC_TABSCHEMA記錄。綠色的部分是Record-specific header。接下來就可以根據(jù)參考文獻(xiàn)【1】中的說明來解析綠色的Record-specific header部分。最開始的4個(gè)字節(jié)是在調(diào)用cdc_startcapture()函數(shù)時(shí)傳入的User Data,它可以用來區(qū)分不同的表。接下來的4個(gè)字節(jié)必須為0。再接下來的4個(gè)字節(jié)說明固定長度字段占用了8個(gè)字節(jié)(兩個(gè)int字段)。再接下來的4個(gè)字節(jié)說明有2個(gè)固定長度列。再接下來的4個(gè)字節(jié)說明有1個(gè)可變長度列。

11、最后黑色部分是各個(gè)字段的類型說明(ascii字符):a integer, c integer, b varchar(20,0) 。請注意這里的字段排列順序。當(dāng)執(zhí)行插入數(shù)據(jù)操作:insert into table1 values(6,hello,8); 之后會(huì)收到CDC_REC_INSERT記錄(事務(wù)相關(guān)CDC記錄在這里不做介紹)00 00 00 28 00 00 00 0e 00 00 00 42 00 00 00 2800 00 00 17 00 ab 80 bc 00 00 00 09 00 00 00 0800 00 00 00 00 00 00 06 00 00 00 06 00 00 00 0805 68 65 6c 6c 6f其中紅色的部分是Common header.綠色部分是Record-specific header,前8個(gè)字節(jié)為Sequence number,接下來的4個(gè)字節(jié)為Transacti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論