管理异步变更源
发布者可以启用禁用异步变更集合,当变更集合禁用的时候,就不会继续处理新变更数据了。异步变更源在创建的时候是禁用状态的。
启用发布者:
BEGIN
DBMS_CDC_PUBLISH.ALTER_CHANGE_SET(
change_set_name => ‘PRODUCTS_SET’,
enable_capture => ‘y’); –禁用的话将y变成n即可
END;
/
对异步的hotlog 和autolog变更集合,oracle stream在变更集合被启用的时候开始捕获并应用。
即使禁用了变更集合,如果归档的日志仍然存在,那么就不会丢失数据。
发布者可以指定变更集合在遇到ddl的时候是否自动停止,一些ddl会影响捕捉的进程。
stop_on_ddl => ‘y’);
在遇到ddl停止捕获的时候,需要移除ddl才能在重启捕获变更集合。
在遇到错误的时候,首先查看alert日志文件,可能会提示下面的错误:
Change Data Capture has encountered error number: 1688 for change set:
CHICAGO_DAILY
Change Data Capture did not process LCR with scn 219337
然后用下面的sql去查看具体的出错原因
SELECT ERROR_MESSAGE FROM DBA_APPLY_ERROR
WHERE APPLY_NAME =
(SELECT APPLY_NAME FROM ALL_CHANGE_SETS WHERE SET_NAME =’CHICAGO_DAILY’);
在修复问题后,可以使用下面的命令尝试修复变更集合
change_set_name => ‘CHICAGO_DAILY’,
recover_after_error => ‘y’);
如果不成功,可以根据提示去继续处理,再次尝试恢复。
在遇到ddl导致变更集合停止的情况下,使用下面的命令移走ddl
recover_after_error => ‘y’,
remove_ddl => ‘y’);
正在移走ddl后,在启用变更集合。
查看所有的变更表:
SELECT * FROM ALL_SOURCE_TABLES;
select * from CDC_CHANGE_TABLES ;查看所用的变更集select∗fromCDCCHANGESETS ;
查看变更表涉及的字段
select * FROM ALL_PUBLISHED_COLUMNS WHERE SOURCE_SCHEMA_NAME =’WDW’ AND SOURCE_TABLE_NAME = ‘T1’;在cdc_publisher用户下)
SELECT * FROM CDC_CHANGE_COLUMNS$;