国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ORACLE CDC技術(shù)實(shí)現(xiàn)數(shù)據(jù)自動(dòng)同步

2015-12-17 12:53吳秀君
電腦知識(shí)與技術(shù) 2015年28期

吳秀君

摘要:當(dāng)前信息化的時(shí)代,數(shù)據(jù)成為了最重要的資源,如何能消化信息孤島,更好地完成同一組織內(nèi)部、上下級(jí)、不同組織間的數(shù)據(jù)匯總、統(tǒng)計(jì)、分析等問(wèn)題就凸顯出來(lái);只有很好地完成了數(shù)據(jù)的整合,才能更進(jìn)一步地支撐起上層數(shù)據(jù)的挖掘、分析,能對(duì)企事業(yè)單位的未來(lái)發(fā)展戰(zhàn)略提供有效的數(shù)據(jù)依據(jù)。在這種如何消化信息孤島的背景下,數(shù)據(jù)集成應(yīng)運(yùn)而生。在實(shí)施數(shù)據(jù)集成的過(guò)程中,ETL是實(shí)現(xiàn)數(shù)據(jù)集成的主要技術(shù),其主要提供數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)加載功能,數(shù)據(jù)抽取的方式常見(jiàn)的有觸發(fā)器、日志比對(duì)、CDC等。該文主要介紹基于CDC技術(shù)實(shí)現(xiàn)數(shù)據(jù)自動(dòng)同步。

關(guān)鍵詞:ORACLE;CDC;數(shù)據(jù)同步

中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)27-0008-02

當(dāng)前信息化的時(shí)代,數(shù)據(jù)成為了最重要的資源,如何能消化信息孤島,更好地完成同一組織內(nèi)部、同一組織上下級(jí)、不同組織間的數(shù)據(jù)匯總、分析等問(wèn)題就凸顯出來(lái);只有很好地完成了數(shù)據(jù)的整合,才能更進(jìn)一步地支撐起上層數(shù)據(jù)的挖掘、分析,才能對(duì)企事業(yè)單位的未來(lái)發(fā)展戰(zhàn)略提供有效的數(shù)據(jù)依據(jù)。

在這種背景下,數(shù)據(jù)集成應(yīng)運(yùn)而生。在實(shí)施數(shù)據(jù)集成的過(guò)程中,由于不同用戶提供的數(shù)據(jù)可能來(lái)自不同的途徑,其數(shù)據(jù)內(nèi)容、數(shù)據(jù)格式和數(shù)據(jù)質(zhì)量千差萬(wàn)別,有時(shí)甚至?xí)龅綌?shù)據(jù)格式不能轉(zhuǎn)換或數(shù)據(jù)轉(zhuǎn)換格式后丟失信息等棘手問(wèn)題,嚴(yán)重阻礙了數(shù)據(jù)在各部門和各應(yīng)用系統(tǒng)中的流動(dòng)與共享。因此,如何對(duì)數(shù)據(jù)進(jìn)行有效的集成管理已成為增強(qiáng)企業(yè)商業(yè)競(jìng)爭(zhēng)力的必然選擇。ETL是實(shí)現(xiàn)數(shù)據(jù)集成的主要技術(shù)。數(shù)據(jù)抽取即從源數(shù)據(jù)抽取目的數(shù)據(jù)源系統(tǒng)需要的數(shù)據(jù),數(shù)據(jù)抽取的方式常見(jiàn)的有觸發(fā)器、全面數(shù)據(jù)對(duì)比、日志比對(duì)、狀態(tài)位、時(shí)間戳、CDC等。本文主要介紹以CDC技術(shù)為基礎(chǔ)實(shí)現(xiàn)源與目標(biāo)數(shù)據(jù)的自動(dòng)同步。

1 CDC簡(jiǎn)介

CDC是Oracle數(shù)據(jù)庫(kù)的特性。CDC能夠幫助你識(shí)別從上次提取之后發(fā)生變化的數(shù)據(jù),包括對(duì)源表進(jìn)行增、刪、改等操作。而且,變化數(shù)據(jù)保存在變化表中,這樣就可以捕獲發(fā)生變化的數(shù)據(jù)。CDC技術(shù)主要設(shè)計(jì)的對(duì)象包括:源表、變化表、變化集、訂閱視圖、訂閱窗口。

CDC同步模式分為兩種:同步模式和異步模式,本文主要采用同步模式實(shí)現(xiàn)變化數(shù)據(jù)的抽取。

2 CDC的配置步驟

2.1 創(chuàng)建訂閱、發(fā)布用戶

在ORACLE中創(chuàng)建訂閱cdc_dy_test、發(fā)布用戶cdc_fb_test,并給cdc_fb_test授予select_catalog_role、execute_ catalog_role、dbms_cdc_publish等權(quán)限;給cdc_dy_test授予create any procedure、create any job等權(quán)限。

2.2 創(chuàng)建源、目標(biāo)用戶

在ORACLE中創(chuàng)建源用戶test、目標(biāo)用戶target,并給用戶授權(quán)。

目標(biāo)用戶下創(chuàng)建表student_test (id,name ,sex ),并授所有權(quán)限給cdc_dy_test。

源用戶下創(chuàng)建表student_test (id,name ,sex ),并授所有權(quán)限給cdc_fb_test和cdc_dy_test。

2.3 發(fā)布數(shù)據(jù)

2.3.1 創(chuàng)建改變集

登錄cdc_fb_test,利用dbms_cdc_publish.create_change_set創(chuàng)建改變集student_test_change_set。

2.3.2 創(chuàng)建改變表

登錄cdc_fb_test,利用dbms_cdc_publish.create_change_table創(chuàng)建改變表student_test_ct、改變集參數(shù)為student_test_change_set,并且把改變表查詢權(quán)限授權(quán)給訂閱用戶cdc_dy_test。

2.4 訂閱數(shù)據(jù)

2.4.1 創(chuàng)建訂閱

以訂閱者(cdc_dy_test)登錄,使用dbms_cdc_subscribe.create_subscription創(chuàng)建訂閱student_test_cdc_sub。

2.4.2 訂閱表

登錄cdc_dy_test,針對(duì)發(fā)布表建立訂閱視圖,將來(lái)訂閱時(shí)從這些視圖讀取數(shù)據(jù),使用dbms_cdc_subscribe.subscribe創(chuàng)建訂閱student_test_cdc_sub對(duì)應(yīng)的訂閱表cdc_student_test_sub_v。

2.4.3 激活訂閱

訂閱需要激活,才能生效,使用dbms_cdc_subscribe.activate_subscription激活訂閱student_test_cdc_sub,激活后CDC就開(kāi)始捕獲改變數(shù)據(jù)。

至此,發(fā)布、訂閱的管理工作完成。接下來(lái)基于CDC獲取變化數(shù)據(jù)并同步至目標(biāo)表。

3 基于CDC技術(shù)實(shí)現(xiàn)數(shù)據(jù)同步

基于CDC實(shí)現(xiàn)數(shù)據(jù)同步,主要思路是:創(chuàng)建存儲(chǔ)過(guò)程,在存儲(chǔ)過(guò)程中借助之前已經(jīng)完成的工作,讀取變化數(shù)據(jù),并向目標(biāo)同步數(shù)據(jù);之后,創(chuàng)建作業(yè)定時(shí)調(diào)度該存儲(chǔ)過(guò)程,從而實(shí)現(xiàn)數(shù)據(jù)自動(dòng)同步。

3.1 創(chuàng)建數(shù)據(jù)同步存儲(chǔ)過(guò)程

通過(guò)存儲(chǔ)過(guò)程同步處理源表test.student_test與目標(biāo)表target.student_test的數(shù)據(jù)。

create or replace procedure proc_cdc

is

v_rowcount number;

v_rowcount1 number;

begin

--目標(biāo)表有沒(méi)有數(shù)據(jù)

select count(1) into v_rowcount from target.student_test;

--獲得下一組變更數(shù)據(jù)

dbms_cdc_subscribe.extend_window(subscription_name => 'student_test_cdc_sub');

--源表數(shù)據(jù)是否變化

select count(1) into v_rowcount1 from cdc_student_test_sub_v;

if v_rowcount=0 then

insert into target.student_test(id ,name,sex)

select id ,name,sex from test.student_test;

commit;

elsif v_rowcount1>0 then

--同步刪除

delete from target.student_test a

where a.id in (select b.id from cdc_student_test_sub_v b where trim(b.operation$)='d');

--同步更新

update target.student_test a

set id=(select id from cdc_student_test_sub_v b

where a.id=b.id and trim(b.operation$)='un'),

name=(select name from cdc_student_test_sub_v b

where a.id=b.id and trim(b.operation$)='un'),

sex=(select sex from cdc_student_test_sub_v b

where a.id=b.id and trim(b.operation$)='un');

--同步插入

insert into target.student_test

select id,name,sex from cdc_student_test_sub_v b where trim(b.operation$)='i';

commit;

dbms_cdc_subscribe.purge_window(subscription_name => 'student_test_cdc_sub');

end if;

end proc_cdc;

3.2 創(chuàng)建作業(yè)

通過(guò)創(chuàng)建ORACLE作業(yè),定時(shí)執(zhí)行存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)數(shù)據(jù)自動(dòng)同步。作業(yè)創(chuàng)建可以借助工具,作業(yè)名稱為cdc_job,作業(yè)執(zhí)行周期為1分鐘。

4 結(jié)束語(yǔ)

綜上所述,ORACLE CDC與存儲(chǔ)過(guò)程、作業(yè)等技術(shù)結(jié)合即可實(shí)現(xiàn)數(shù)據(jù)的同步,而無(wú)需開(kāi)發(fā)應(yīng)用軟件,為數(shù)據(jù)的同步提供了一種數(shù)據(jù)庫(kù)層面的技術(shù)手段。當(dāng)然,本文只介紹了基本的CDC數(shù)據(jù)同步方式,但掌握了CDC的基礎(chǔ)技能后,就可以在此基礎(chǔ)上進(jìn)行擴(kuò)展,實(shí)現(xiàn)更多、更強(qiáng)的功能。

參考文獻(xiàn):

[1] 鄒先霞.基于數(shù)據(jù)庫(kù)日志的變化數(shù)據(jù)捕獲研究,2012.

[2] Oracle CDC部署流程.http://blog.itpub.net/24930246/viewspace-1069835/.

[3] ORACLE_CDC.http://my.oschina.net/u/140663/blog/307967.

[4] 王冰.基于ETL的數(shù)據(jù)管理方法的分析和實(shí)現(xiàn),2008.

[5] 顧云鋒.Oracle數(shù)據(jù)庫(kù)中存儲(chǔ)過(guò)程開(kāi)發(fā)研究,2011.

[6] 王忠民.解析Oracle存儲(chǔ)過(guò)程的使用,2009.

[7] 肖慧.王魯珊.用Oracle的DBMS_JOB來(lái)實(shí)現(xiàn)任務(wù)計(jì)劃管理,2004.

勐海县| 璧山县| 巴楚县| 黄陵县| 那曲县| 宣恩县| 陈巴尔虎旗| 安平县| 威信县| 玉田县| 连云港市| 波密县| 马边| 资溪县| 菏泽市| 黄平县| 普兰县| 娱乐| 辽阳市| 锡林浩特市| 汤原县| 左云县| 佛教| 彰化市| 布尔津县| 育儿| 宜都市| 沿河| 郑州市| 剑川县| 茂名市| 抚顺县| 壤塘县| 宁晋县| 洛阳市| 元谋县| 静乐县| 滕州市| 临朐县| 铜山县| 辽源市|