利用Caché Shadow服务器的Dejournaling routine实现CDC

自作多情 提交于 2019-12-15 07:11:16

利用Caché Shadow服务器的Dejournaling filter routine实现CDC Caché Shadow

上次介绍了使用InterSystems IRIS/Caché的Reporting类型的异步镜像成员获取数据变更。但早期的Caché并不支持镜像,例如Caché 2008,它只支持Shadow。

在这些早期版本上是否也可以实利用Journal实现类似CDC的功能呢?答案是肯定的,就是利用Shadow服务器的Dejournaling filter routine (Dejournaling过滤器routine)。

Dejournaling filter routine

InterSystems Caché的 Dejournaling过滤器routine是一个用户自定义的routine,用于在Shadow服务器上过滤Journal记录。当配置了Dejournaling 过滤器后,Shadow服务器在redo journal前会自动调用Dejournaling过滤器routine。该routine传入参数以下:

pid:记录进程ID;
dir:源数据库目录;
glo:Global节点(包括下标);
type: 操作类型,为S (Set)、K (Kill)、s (BITSET)、k (ZKILL);
addr:Journal记录在Journal文件中的偏移量;
time:记录的时间戳。
该Routine返回1,说明此journal记录需要被Shadow恢复,而返回0说明此journal记录不需要被Shadow恢复。

因为这是一个自定义routine,且会被Shadow服务器恢复Journal时自动调用,因此我们可以利用它记录数据变更。

注意:

Shadow配置不在本文内容里,请参考文档:
[Caché] https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCDI_shadow

编写Dejournaling filter routine

Routine的名字可以任意,但这个routine需要保存在Caché Shadow服务器的%SYS下。

例如,将global的数据变更记录在^CDCLog中:

MyShadowFilter(pid,dir,glo,type,addr,time)
{
Set ^CDCLog( $I(I (I(^CDCLog))=$lb(dir,glo,type,addr)
Quit 1
}

配置Dejournaling filter routine

在 Caché Shadow服务器的系统管理门户的[Home] > [Configuration] > [Shadow Server Settings] 上选择已经建立好的Shadow服务器,选择高级(Advanced)设置,在Filter routine里填写上面创建的routine名称即可。
————————————————
版权声明:本文为CSDN博主「iscciris」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iscciris/article/details/101568676

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!