返回顶部
首页 > 资讯 > 数据库 >Oracle_CDC该怎么部署
  • 544
分享到

Oracle_CDC该怎么部署

2024-04-02 19:04:59 544人浏览 安东尼
摘要

今天就跟大家聊聊有关oracle_CDC该怎么部署,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.  CDC的实施步骤(异步在线日志)1

今天就跟大家聊聊有关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该怎么部署有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: Oracle_CDC该怎么部署

本文链接: https://lsjlt.com/news/68486.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle_CDC该怎么部署
    今天就跟大家聊聊有关Oracle_CDC该怎么部署,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.  CDC的实施步骤(异步在线日志)1...
    99+
    2024-04-02
  • hadoop该怎么部署
    这篇文章主要讲解了“hadoop该怎么部署”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“hadoop该怎么部署”吧!hadoop部署Hadoop介绍:广义: 以apache hadoop软件...
    99+
    2023-06-02
  • 数据库与防火墙该怎么样部署
    本篇文章为大家展示了数据库与防火墙该怎么样部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  安全与性能是数据库管理员的两块心头肉。而通过防火墙来保护数据库的安全...
    99+
    2024-04-02
  • centos6.8 怎么部署php
    本文操作环境:centos6.8系统、php7.0、Dell G3。centos6.8 怎么部署php?centos6.8源码安装php7.0安装依赖包yum -y install gd gd-devel zlib-devel libjpe...
    99+
    2017-05-07
    centos6.8 php
  • 怎么部署Oracle19c dataguard
    本篇内容介绍了“怎么部署Oracle19c dataguard”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • CentOS7怎么部署L2TP
    这篇文章主要介绍“CentOS7怎么部署L2TP”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CentOS7怎么部署L2TP”文章能帮助大家解决问题。l2tp是一种工业标准的Internet隧道协议...
    99+
    2023-06-27
  • Linux怎么部署WebLogic
    这篇文章主要介绍“Linux怎么部署WebLogic”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux怎么部署WebLogic”文章能帮助大家解决问题。Linux部署weblogic具体步骤:...
    99+
    2023-06-28
  • Ansible怎么部署Tomcat
    这篇文章主要讲解了“Ansible怎么部署Tomcat”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ansible怎么部署Tomcat”吧!Ansible的特性:ansible基于Pytho...
    99+
    2023-06-27
  • docker怎么部署fastapi
    这篇文章主要介绍了docker怎么部署fastapi的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇docker怎么部署fastapi文章都会有所收获,下面我们一起来看看吧。项目结构:pycharm结构:拷贝到x...
    99+
    2023-07-05
  • golang android怎么部署
    随着移动互联网的快速发展,移动应用的开发与管理成为各大企业和开发者的一个重要问题。而在移动应用的开发中,Android系统的应用开发一直处于不断发展的状态。对于许多开发者来说,如何快速高效地部署开发环境也是一个比较烦恼的问题。框架类似于 g...
    99+
    2023-05-14
  • golang怎么部署docker
    随着近年来容器化技术的火热,Docker也成为了越来越多开发者、运维人员、IT从业者等的必备工具。而Golang语言的高并发优势也让它成为了不少开发者使用的首选语言。那么,如何将Golang应用部署到Docker容器中呢?本文将为大家介绍g...
    99+
    2023-05-14
  • windows golang怎么部署
    Go语言是一种由谷歌公司开发推出的开源编程语言。自推出以来,它以其高效、稳定和安全的特性,迅速成为了开发者喜爱的语言之一。在Windows平台上,如何将Golang部署在服务器上呢?下面我们来详细介绍。一、环境准备在部署Golang之前,需...
    99+
    2023-05-14
  • CentOS7.2怎么部署FTP
    这篇文章主要为大家展示了“CentOS7.2怎么部署FTP”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CentOS7.2怎么部署FTP”这篇文章吧。目前Linux大部分部署的FTP服务器都是v...
    99+
    2023-06-10
  • linux golang怎么部署
    这篇文章主要讲解了“linux golang怎么部署”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux golang怎么部署”吧!要在 Linux 系统上部署 Golang 应用程序,...
    99+
    2023-07-06
  • gunicorn怎么部署flask
    Gunicorn部署Flask应用的步骤如下:1、在终端或命令行中输入“pip install gunicorn”命令来安装Gunicorn;2、创建Flask应用;3、在终端或命令行中输入“flask run”命令来启动Flask应用程序...
    99+
    2023-12-19
    Flask gunicorn部署flask gunicorn
  • 怎么安装部署MyCat
    怎么安装部署MyCat?相信大部分人都还没学会怎么安装部署,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧1、准备mycat部署环境系统IP主机名服务Centos 7.5192.168.20....
    99+
    2024-04-02
  • 怎么部署SharePlex环境
    这篇文章主要讲解了“怎么部署SharePlex环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么部署SharePlex环境”吧!目标在 Linux 系统...
    99+
    2024-04-02
  • 怎么部署MySQL Group Replication
    这篇文章主要介绍“怎么部署MySQL Group Replication”,在日常操作中,相信很多人在怎么部署MySQL Group Replication问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2024-04-02
  • Redis怎么安装部署
    小编给大家分享一下Redis怎么安装部署,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、Redis是什么Redis:REmot...
    99+
    2024-04-02
  • 怎么部署Hadoop集群
    本篇内容主要讲解“怎么部署Hadoop集群”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么部署Hadoop集群”吧!环境准备一共用5台机器作为硬件环境,全都是...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作