一步一步配置autolog CDC

CDC的全称是Change Data Capture,主要用在数据仓库中,对原数据库的数据进行抽取、传输到数据仓库中,用于进行分析和统计。CDC有同步模式和异步模式:

1. CDC同步模式:
通过trigger来实现。

2. CDC异步模式:
2.1 异步HotLog模式
2.2 异步分布式HotLog模式
2.3 异步AutoLog模式。
2.3.1 异步Autolog模式-online redo log
2.3.2 异步Autolog模式-archive log

今天我们来配置的是异步AutoLog模式-online redo log(澳洲电讯的某应用的数据库就是用的该架构),该模式的好处是日志传输到备机(stage site)后,后续的publish,subscribe,capture操作都是在备机(stage site),不是在生产数据库(source site),因此能大大减轻生产数据库的压力。

上图为online redo的传输,另外还有archive log的传输:

与online redo传输不同的是:前者RFS进程传输的是redo,到standby redo log,downstream capture进程处理的是standby redo log; 后者RFS进程传输的是archive log,downstream capture进程处理的是archive log。

注意:Autolog CDC需要与downstream配合使用。
CDC的capture有两种:local capture和downstream capture。
可以通过

来查看。

capture进程负责创建LCRs(logical change record),CDC能“看到”DDL LCRs,但是不做处理,CDC只处理DML的LCRs。

下面我们就开始来配置CDC。

CDC的生产数据库,我们成为Source site,目标机器,用于做数据仓库的机器,我们称作Stage site。
做CDC的要求2边的数据库版本都是10g以上,且stage site的数据库版本必须等于或者大于source site的数据库版本。

1. 配置source site:
1.1 配置初始化参数,以sysdba登录:

1.2 重启数据库,检查

2. 配置stage site.
2.1 配置初始化参数,用sysdba登录:

2.2 重启数据库,检查。

3. 创建stream adminstrator(在stage site执行:),从上面文章开始处的第一个图,我们看出,当log(无论是online还是archive)到stage site之后,由downstream capture进程进行挖掘。因此我们要在stage site先创建stream administrator。

downstream capture用来产生stage site的change source(注意,除了异步HotLog模式,其他模式的change source都在stage site),stage change set,和stage change table。
注:在本例中,change source只存在stage site; change set在source site和stage site都有;change table在stage site,对应在source site叫source table。

4. 准备用来做cdc复制的表(,即source table,操作是在source site)。

我们的source database的instance name叫cdc01,里面有一个用户叫app_user,我们选取了该用户下的cdc_demo3表,作为用来测试的source table,同时,为了演示方便,我们只取一个表作为source table,因此source change set中,就只有一个表。所以,该表也是source change set。(上面说了,change set在source site和stage site都存在,为了区别,我把在source site的change set叫source change set,把在stage site的change set 叫stage change set。)

5. 创建standby redo。
5.1 在stage site建立路径,注意和在source site的dest2一致。

5.2 在stage site建立standby log:

6. 实例化source site的数据字典。
取source site的scn,是为了创建logmnr数据字典的时候,需要知道scn。

我们记下该scn号:524561

7. 准备soruce table的实例化。

注意在source site的每一个source table都必须准备实例化,如果不准备实例化,在stage site的capture会出现问题,无法capture source table的变化。

8. 确定各个source database和创建change source。

在我们的例子中,source database就只有一个cdc01,change source,再说一次,是出现在stage中的。我们把change source取名叫做CS_DEMO3。
在stage site:

9. 创建stage change set。 我们这里把stage change set取名叫做OMEGA_CSET。

注意当CDC创建了change set的时候,stream的capture和apply进程也被同时创建了,但是仅仅是创建,还未启动。

在stage site:

10. 确定用于查询的用户,即subscriber,我们假定该用户叫为app_dev不存在,我们新建一个。

注:该用户在change table创建完成之后,需要授权该用户能读取change table。

11. 在stage site上,创建change table。

change table是publisher做的最后一个事情,从目标到最后的过程为:source table->source change set->change source->stage change set->change table.当然,这期间可以过滤某些字段,或者某些表。

我们开始创建change table,在stage site:

12. enable change set:
注意当change set is enabled,Streams capture进程和apply进程将启动。

13. 在source site做switch logfile.

好了,上述publisher的配置就完成了。但是我们还要继续配置subscriber。

14. 检查source table对subscriber是否有access权限:
只需在stage site检查all_source_name即可,不需去source site:

15. 找到subscriber有权限访问的change set的名字和change set的每一列:
在stage site:

16. 创建subscription。
在stage site:

17. 订阅source table和source table中的列,你可以订阅所有的列,可以选择几列来订阅:

注意,如果在第15步,查到的各个列的pub_id是不一样的,那么在订阅的时候,就要针对不同的列指定不同的pub id,详情可见online document上的Database Data Warehousing Guide

18. 激活订阅:

19. 获得下一个可用的change data。

20. 完成,此时你就可以在CDC_DEMO3_SUB_VIEW中查数据了。

参考文档:
Metalink:Doc ID 972876.1
Oracle Streams and Change Data Capture(CDC) 10gR2
Online Document-Database Data Warehousing Guide
Oracle Change Data Capture Asynchronous Autolog Demo

相关文章

8条评论

  1. 太复杂了, 太难用了. 与Simple is beautiful相背离. 从CDC, Stream到Golden gate, Oracle的数据复制产品,就没有一个好用的.
    回头看看Cassandra分布式数据库, 五分钟搞定安装和配置, 简单的不是一星半点.

  2. 这鸟东西配起来太痛苦了,这是属于stream的一种应用吗?与logical dataguard或者goldengate相比有选择的优势吗?

  3. CDC 这玩意,能不用就尽量不要用了。
    1.配置太复杂。
    2.基本上是个黑匣子,出了问题排错很痛苦, 很多时候需要重新部署。
    3.异步模式的底层使用了streams解析日志技术,当遇到特大事务,就像streams一样,只有等死的份.

  4. 请问:oracle 9i 支持autolog异步模式吗? autolog异步模式可以指定多个source database吗?
    有木有更好的办法做增量抽取的?

  5. 按照步骤,当执行完DBMS_CDC_PUBLISH.CREATE_CHANGE_SET后,出现以下的错误:
    ERROR at line 1:
    ORA-26764: invalid parameter “DOWNSTREAM_REAL_TIME_MINE” for local capture
    “CDC$C_CHICAGO_DAILY”
    ORA-06512: at “SYS.DBMS_LOGREP_UTIL”, line 65
    ORA-06512: at “SYS.DBMS_CAPTURE_ADM”, line 68
    ORA-06512: at line 1
    ORA-06512: at “SYS.DBMS_CDC_PUBLISH”, line 560
    ORA-06512: at line 2
    烦请楼主指点下!

  6. 按照步骤,当执行完DBMS_CDC_PUBLISH.CREATE_CHANGE_SET后,出现以下的错误:

    参数 “DOWNSTREAM_REAL_TIME_MINE” 对于本地捕获 “CDC$C_CHICAGO_DAILY” 无效

    请指教一下

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据