Sybase复制服务器-重复事务处理。

2020-09-03 06:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

早安!

在这里需要您的建议。

我们已经设置了表级复制,源为DB2,目标为HANA,复制由1个sybase复制服务器负责。

现在,每当重复记录发现DSI关闭时,到目前为止,我们尚未设置任何错误类别或自动更正功能。

但是我的客户需要的是DSI不会下降,或者如果DSI下降,它会自行恢复(例如通过脚本代码),并且还会记录重复的记录,以便人们可以检查并决定是否需要应用或跳过 那个tran。

据我了解,连接级别的自动更正功能只是将插入/更新转换为删除,然后再插入。 这意味着它不会记录或跟踪重复事务,因为它已经处理好了。 我在这里正确吗?

(将 dsi_command_convert 设置为'i2none,u2none,d2none')也是如此,因为它也执行半自动校正操作。 因此,它也不会记录重复的交易信息,因为它已经很小心了。

但是,根据我的客户需求,我相信"异常错误类"将帮助我满足需求。 因为即使发现重复记录,它也将继续运行,它将发送到异常表,因此DSI不会关闭,后者我们可以对错误类中的重复事务进行操作并决定要做什么。 到目前为止,我的理解是否正确?


还是我们可以通过其他方式实现这一目标? 请提出建议并分享您对此的想法。


感谢与问候

Sukriti V

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

早安!

在这里需要您的建议。

我们已经设置了表级复制,源为DB2,目标为HANA,复制由1个sybase复制服务器负责。

现在,每当重复记录发现DSI关闭时,到目前为止,我们尚未设置任何错误类别或自动更正功能。

但是我的客户需要的是DSI不会下降,或者如果DSI下降,它会自行恢复(例如通过脚本代码),并且还会记录重复的记录,以便人们可以检查并决定是否需要应用或跳过 那个tran。

据我了解,连接级别的自动更正功能只是将插入/更新转换为删除,然后再插入。 这意味着它不会记录或跟踪重复事务,因为它已经处理好了。 我在这里正确吗?

(将 dsi_command_convert 设置为'i2none,u2none,d2none')也是如此,因为它也执行半自动校正操作。 因此,它也不会记录重复的交易信息,因为它已经很小心了。

但是,根据我的客户需求,我相信"异常错误类"将帮助我满足需求。 因为即使发现重复记录,它也将继续运行,它将发送到异常表,因此DSI不会关闭,后者我们可以对错误类中的重复事务进行操作并决定要做什么。 到目前为止,我的理解是否正确?


还是我们可以通过其他方式实现这一目标? 请提出建议并分享您对此的想法。


感谢与问候

Sukriti V

付费偷看设置
发送
2条回答
愤怒的猪头君
1楼 · 2020-09-03 07:32.采纳回答

1-您是正确的,"自动更正"功能已按照您所说的进行,并且*未*记录在(RS)例外日志中

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

2.a-不要将 dsi_command_convert 设置为'i2none,d2none,u2none',因为这将丢弃所有 插入,删除和更新(即,所有DML语句将被丢弃,永远不会到达HANA,并且不会将任何内容写入异常日志)

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

2.b-您可以通过将 dsi_command_convert 设置为'i2di,u2di'

注意在DSI上模拟"自动校正": 您需要研究是否可以对所有来自DB2的更新使用 u2di ; 例如,在Oracle中,具有lob列的行的更新将不会在该行的整个"之前"图像上发送,因此当尝试执行以下操作时," u2di "可能会丢失某些列的数据 通过'exception error class'构建'insert'

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

3-我要 假设您是指分配给特定数据库/DSI的"错误类别"; 您可能正在寻找 assign action 命令,并且您要使用的选项似乎是'log'(回滚当前有问题的交易,登录到( RS)例外日志,然后继续下一个事务)

注意:此方法的一个潜在问题是将跳过整个事务,因此,如果一个DML语句遇到"重复键"错误,则所有 事务中的DML语句将被跳过并记录到(RS)异常日志中。

显然(???)每当您跳过事务时,都可能导致复制数据库不同步,并且 尽管手动检查/应用记录的事务可能会起作用,但是您也冒着应用(例如)"旧"更新的风险,该更新将覆盖已经对复制数据库应用的"较新"更新的结果。

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

对于自动重新启动已关闭的DSI,只要您已编码,这当然是一个选项 外壳脚本 (?)正确。

我以前是用以下逻辑做到这一点的:

-如果找到DSI,我记下了DSI名称

-恢复DSI(秒)

-等待几秒钟,看看DSI是否再次下降

-如果DSI(秒) )再次发生故障,那么我认为这是一个持续存在的问题(例如,重复密钥冲突),然后我将采取一些预定的措施(取决于环境,应用程序以及是否可以跳过事务):

a-跳过交易并继续; 这里一个潜在的问题是,您可能会有很多这样的事务通过复制进行,因此您必须确定要说/足够多并发出警报之前,要跳过/恢复多少次 p>

b-关闭DSI并生成警报

然后安排脚本每隔XX分钟运行一次。

在一个客户端上,他们正在复制2倍以内的数据 数据库。 他们必须支持跨数据库参照完整性约束。 他们遇到的问题是,子表的txn偶尔会在父表的txn之前到达复制数据库,因此DSI会因引用完整性约束冲突而崩溃。 "简单"解决方案是分配操作/重试停止和计划每3-5分钟运行一次的shell脚本的混合,该脚本将登录RRS并发出" 恢复连接"命令(通常期望父表的txn在发出" 恢复连接"时已应用于其复制数据库)。

< p>一种更精细的方法是使用一些智能工具来实施(RS)错误日志监视过程,这些智能工具会监视"重复的密钥冲突"消息,然后采取适当的措施。

宇峰Kouji
2楼-- · 2020-09-03 07:36

1- 不,所有 dsi_command_convert 设置都不会导致将事务转储到异常日志中

2-错误导致回滚; 是否将跳过/回滚的事务写入异常日志取决于您为有问题的错误号设置了哪个选项

我建议您设置一个测试RS环境并尝试我提到的各种项目( 以上); 然后您通过一些"重复的"交易进行发送,看看会发生什么。

一周热门 更多>