溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle_CDC該怎么部署

發布時間:2021-11-30 11:11:48 來源:億速云 閱讀:149 作者:柒染 欄目:關系型數據庫

今天就跟大家聊聊有關Oracle_CDC該怎么部署,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1.  CDC的實施步驟(異步在線日志)

1.1.  數據庫初始化

SQL>

alter system set job_queue_processes = 100;

alter system set java_pool_size = 50m;

alter system set streams_pool_size=50m;

alter system set undo_retention=3600;

alter database force logging; 

alter database add supplemental log data;

select LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;

1.2.  準備測試表

SQL>

create table scott.test(id int,name varchar2(30),mark varchar2(50));

1.3.  創建發布者

SQL>

conn / as sysdba;

create tablespace cdc_tbsp;

create user cdc_publisher identified by cdc_publisher default tablespace cdc_tbsp temporary tablespace temp;

GRANT CREATE SESSION TO cdc_publisher;

GRANT CREATE TABLE TO cdc_publisher;

grant create sequence TO cdc_publisher;

grant create procedure TO cdc_publisher; 

grant create any job TO cdc_publisher; 

GRANT CREATE TABLESPACE TO cdc_publisher;

GRANT UNLIMITED TABLESPACE TO cdc_publisher;

GRANT SELECT_CATALOG_ROLE TO cdc_publisher;

GRANT EXECUTE_CATALOG_ROLE TO cdc_publisher;

GRANT EXECUTE ON DBMS_CDC_PUBLISH TO cdc_publisher;

grant execute ON dbms_lock TO cdc_publisher; 

execute dbms_streams_auth.grant_admin_privilege('CDC_PUBLISHER'); 

grant all on scott.test to cdc_publisher;

grant dba to cdc_publisher;

1.4.  創建訂閱者

SQL>

create user cdc_subscriber identified by cdc_subscriber default tablespace cdc_tbsp temporary tablespace temp;

grant create session TO cdc_subscriber;

grant resource to cdc_subscriber;

grant connect to cdc_subscriber;

GRANT CREATE TABLE TO cdc_subscriber;

GRANT CREATE VIEW TO cdc_subscriber;

GRANT UNLIMITED TABLESPACE TO cdc_subscriber;

1.5.  發布數據

1.5.1.               發布-準備源表

SQL>

conn cdc_publisher/cdc_publisher;

BEGIN

DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(TABLE_NAME => 'scott.test');

END;

/

1.5.2.               發布-創建變更集

SQL>

conn cdc_publisher/cdc_publisher;

BEGIN

DBMS_CDC_PUBLISH.CREATE_CHANGE_SET(

change_set_name => 'CDC_SCOTT_TEST',

description => 'Change set for product info',

change_source_name => 'HOTLOG_SOURCE',

stop_on_ddl => 'y');

END;

/

注意:

change_source_name參數:

同步模式中必須為:SYNC_SOURCE

異步在線日志模式必須為:HOTLOG_SOURCE

1.5.3.               發布-創建變更表

SQL>

conn cdc_publisher/cdc_publisher;

BEGIN

    DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE(

    owner              => 'cdc_publisher',

    change_table_name  => 'cdc_test',

    change_set_name    => 'CDC_SCOTT_TEST',

    source_schema      => 'SCOTT',

    source_table       => 'TEST',

    column_type_list   => 'ID NUMBER(5), NAME VARCHAR2(30),MARK VARCHAR2(50)',

    capture_values     => 'both',

    rs_id              => 'y',

    row_id             => 'n',

    user_id            => 'n',

    timestamp          => 'n',

    object_id          => 'n',

    source_colmap      => 'n',

    target_colmap      => 'y',

    options_string     => 'TABLESPACE CDC_TBSP');

 END;

 /

注意:

owner是指發布用戶

source_schema是源表所屬用戶

同步模式需加參數ddl_markers => 'n'

options_string指定改變表的存儲參數,可以使用除partition以外的所有create table中指定的存儲參數,如tablespace、pctfree 等。

1.5.4.               發布-激活變更集

SQL>

conn cdc_publisher/cdc_publisher;

 BEGIN

    DBMS_CDC_PUBLISH.ALTER_CHANGE_SET(

       change_set_name => 'CDC_SCOTT_TEST',

       enable_capture => 'y');

 END;

/

1.5.5.               授權變更表給訂閱者

conn cdc_publisher/cdc_publisher;

grant select on  cdc_test to cdc_subscriber;

備注:

到此cdc_subscriber用戶已經可以檢測到scott.test表的變更了

測試:

$ sqlplus scott/tiger

SQL>

insert into scott.test values(1,'beijing','11');

commit;

update scott.test set name='shanghai' where id=1;

commit;

delete scott.test where id=1;

commit;

SQL>

conn cdc_subscriber/cdc_subscriber

SQL> select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from cdc_publisher.cdc_test t;

OPERATION$ COMMIT_TIMESTAMP$   ID NAME           MARK

---------- ---------- ------ ----------- ------------------------------

I          2018/2/8 20:04:58      1 beijing                        11

UO         2018/2/8 20:04:58      1 beijing                        11

UN         2018/2/8 20:04:58      1 shanghai                       11

D          2018/2/8 20:04:58      1 shanghai                       11

備注:operation 的意思

此列中的值可以是下列任何一個1:

I: 指示此行表示插入操作

: 指示此行表示以下情況下更新的源表行的前映像: UO

異步更改數據捕獲

當更改表包括基于主鍵的對象 ID, 而不是主鍵的捕獲列已更改時, 同步更改數據捕獲。

UU: 指示此行表示更新的源表行的前圖像, 用于同步更改數據捕獲, 而不是由. UO.

UN: 指示此行表示更新的源表行的后映像。

D: 指示此行表示刪除操作。

當發布者發布了相關的改變表后,會生成一個惟一的發布id( publication ID), 可以查閱視圖ALL_PUBLISHED_COLUMNS以獲取已經發布的表及字段信息

SQL> conn CDC_PUBLISHER/CDC_PUBLISHER;

select change_set_name,pub_id,source_table_name from ALL_PUBLISHED_COLUMNS ;

CHANGE_SET_NAME                    PUB_ID SOURCE_TABLE_NAME

------------------------------ ---------- ------------------------------

CDC_SCOTT_TEST                      91956 TEST

CDC_SCOTT_TEST                      91956 TEST

CDC_SCOTT_TEST                      91956 TEST

1.6.  訂閱

1.6.1.               訂閱-創建訂閱集

SQL>

conn cdc_subscriber/cdc_subscriber

BEGIN

 dbms_cdc_subscribe.create_subscription(

 change_set_name=>'CDC_SCOTT_TEST',

 description=>'cdc scott subx',

 subscription_name=>'CDC_SCOTT_SUB');

 END;

/

備注:

一次訂閱與改變集對應,由于改變集與源表之間是一對多的關系,所以一次訂閱就可以訂閱多張表.

1.6.2.               訂閱-開始訂閱數據

SQL>

BEGIN

 dbms_cdc_subscribe.subscribe(

 subscription_name=>'CDC_SCOTT_SUB',

 source_schema=>'SCOTT',

 source_table=>'TEST',

 column_list=>'ID, NAME,MARK',

 subscriber_view=>'TEST_TEMP');

 END;

 /

SQL> select view_name,text from user_views;

VIEW_NAME                      TEXT

--------------- ----------------------------------------

TEST_TEMP     SELECT OPERATION$, CSCN$, COMMIT_TIMESTAMP$, XIDUSN$, XIDSLT$, XIDSEQ$,   DDLDES

備注:

如果改變集中有多個表,需要操作多次

1.6.3.               訂閱-激活訂閱

SQL>

BEGIN

 dbms_cdc_subscribe.activate_subscription(

 subscription_name=>'CDC_SCOTT_SUB');

 END;

 /

1.6.4.               訂閱-擴展訂閱窗口

SQL>

conn cdc_subscriber/cdc_subscriber; 

BEGIN

 dbms_cdc_subscribe.extend_window(

 subscription_name=>'CDC_SCOTT_SUB');

 END;

 /

備注:

訂閱調用DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW過程取得改變數據的集合,如果第一次執行,就取得激活訂閱后所有改變數據.每次執行DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW后,擴展窗口只看到上次執行DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW至今的數據.

1.6.5.               查看訂閱內容

SQL>

conn cdc_subscriber/cdc_subscriber;

SQL> select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from test_temp t;

OPERATION$ COMMIT_TIMESTAMP$     ID NAME                           MARK

---------- ----------------- ------ ------------------------------ --------------------------------------------------

I          2018/2/8 20:04:58      1 beijing                        11

UO         2018/2/8 20:04:58      1 beijing                        11

UN         2018/2/8 20:04:58      1 shanghai                       11

D          2018/2/8 20:04:58      1 shanghai                       11

1.7.  測試

1.7.1.               源表變更

SQL> conn scott/tiger;

insert into test values(2,'renqinglei','aa');

commit;

update test set mark='tt' where id=2;

commit;

delete test where id=2;

commit;

1.7.2.               查詢數據發布情況

SQL> conn cdc_publisher/cdc_publisher

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from cdc_publisher.cdc_test t;

OP COMMIT_TIMESTAMP$          ID NAME                           MARK

-- ------------------ ---------- ------------------------------

I  13-JAN-16                   1 beijing                        11

UO 13-JAN-16                   1 beijing                        11

UN 13-JAN-16                   1 shanghai                       11

D  13-JAN-16                   1 shanghai                       11

I  13-JAN-16                   2 renqinglei                     aa

UO 13-JAN-16                   2 renqinglei                     aa

UN 13-JAN-16                   2 renqinglei                     tt

D  13-JAN-16                   2 renqinglei                     tt

1.7.3.               查詢數據訂閱情況

SQL> conn cdc_subscriber/cdc_subscriber

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from test_temp t;

OP COMMIT_TIMESTAMP$          ID NAME                           MARK

-- ------------------ ---------- ------------------------------

I  13-JAN-16                   1 beijing                        11

UO 13-JAN-16                   1 beijing                        11

UN 13-JAN-16                   1 shanghai                       11

D  13-JAN-16                   1 shanghai                       11.

1.7.4.               發現訂閱的數據沒有變化,擴展一下訂閱窗口:

SQL> conn cdc_subscriber/cdc_subscriber

BEGIN

 dbms_cdc_subscribe.extend_window(

 subscription_name=>'CDC_SCOTT_SUB');

 END;

 /

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from test_temp t;

OPERATION$ COMMIT_TIMESTAMP$    ID NAME                           MARK

---------- ----------------- ------ ------------------------------ ----------

I          2018/2/8 20:04:58      1 beijing                        11

UO         2018/2/8 20:04:58      1 beijing                        11

UN         2018/2/8 20:04:58      1 shanghai                       11

D          2018/2/8 20:04:58      1 shanghai                       11

I          2018/2/8 20:26:01      2 renqinglei                     aa

UO         2018/2/8 20:26:01      2 renqinglei                     aa

UN         2018/2/8 20:26:01      2 renqinglei                     tt

D          2018/2/8 20:26:01      2 renqinglei                     tt

1.7.5.               清除變更數據集

SQL> conn cdc_subscriber/cdc_subscriber

BEGIN

 DBMS_CDC_SUBSCRIBE.PURGE_WINDOW(

 subscription_name => 'CDC_SCOTT_SUB');

 END;

 /

查看訂閱數據為空

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from test_temp t;

備注:

擴展窗口的數據可以進行清空操作,避免改變數據過多帶來的系統負載。

1.7.6.               重新生成變化數據

conn scott/tiger;

insert into test values(3,'shandong','hh');

insert into test values(4,'diankeyuan','hh');

commit;

查看發布信息

conn cdc_publisher/cdc_publisher

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from cdc_publisher.cdc_test t;

OPERATION$ COMMIT_TIMESTAMP$  ID NAME                           MARK

---------- ----------------- ------ ------------------------------ ------------------          2018/2/8 20:04:58      1 beijing                        11

UO         2018/2/8 20:04:58      1 beijing                        11

UN         2018/2/8 20:04:58      1 shanghai                       11

D          2018/2/8 20:04:58      1 shanghai                       11

I          2018/2/8 20:26:01      2 renqinglei                     aa

UO         2018/2/8 20:26:01      2 renqinglei                     aa

UN         2018/2/8 20:26:01      2 renqinglei                     tt

D          2018/2/8 20:26:01      2 renqinglei                     tt

I          2018/2/8 20:33:48      3 shandong                       hh

I          2018/2/8 20:33:48      4 diankeyuan                     hh

SQL> conn cdc_subscriber/cdc_subscriber;

BEGIN

 dbms_cdc_subscribe.extend_window(

 subscription_name=>'CDC_SCOTT_SUB');

 END;

 /

查看訂閱信息

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from test_temp t;

OPERATION$ COMMIT_TIMESTAMP$  ID NAME                           MARK

---------- ---------- ------ -------------- ---------------------------------

I          2018/2/8 20:33:48      3 shandong                       hh

I          2018/2/8 20:33:48      4 diankeyuan                     hh

1.7.7.                刪除發布的數據

SQL>

conn cdc_publisher/cdc_publisher

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from cdc_publisher.cdc_test t;

OP COMMIT_TIMESTAMP$          ID NAME                           MARK

-- ------------------ ---------- ------------------------------

I  13-JAN-16                   1 beijing                        11

UO 13-JAN-16                   1 beijing                        11

UN 13-JAN-16                   1 shanghai                       11

D  13-JAN-16                   1 shanghai                       11

I  13-JAN-16                   2 renqinglei                     aa

UO 13-JAN-16                   2 renqinglei                     aa

UN 13-JAN-16                   2 renqinglei                     tt

D  13-JAN-16                   2 renqinglei                     tt

I  13-JAN-16                   3 shandong                       hh

I  13-JAN-16                   4 diankeyuan                     hh

rows selected.

不可truncate

SQL> truncate cdc_test;

ERROR at line 1:

ORA-03290: Invalid truncate command - missing CLUSTER or TABLE keyword

刪除后無記錄

SQL>

delete cdc_test;

commit;

select t.operation$,t.commit_timestamp$,t.id,t.name,t.mark from cdc_publisher.cdc_test t;

看完上述內容,你們對Oracle_CDC該怎么部署有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女