多次遇到过Db2所在机器由于误操作或者时间服务的问题导致时间往后跳了几小时甚至几天(比如从11日跳到12日)的情况。等用户试图把时间往回调时,所有更新操作遇到SQL0903N RC=3的错误。 那么如果时间真往后跳了,怎么样把时间调回正确值呢?
假设你需要往回调N小时,那么:
如果N <24, 你可以通过设置max_time_diff完成。 你可以把它设置成1440也就是24小时(这是这个参数能设置的最大值),或者设置成 N * 60, 然后直接调系统时间;
如果N >=24, 那么你可以选择下面几种方式:
2.1. 使用时间跳变前的备份恢复库,并rollforward到时间跳变前的PIT。注意不能rollforward到eng of logs,否者之后还会出SQL0903N错。 当然,这种方式会丢数据;
2.2. 时间跳变后,把Db2停调,然后把时间往回调成正确值(往回调N小时),然后等等等,等上N小时,然后启动Db2, 这时可以更新了;
2.3. 假设当时系统时间从T跳变到了T+48H,这时候往回调,可以:
2.3.1 把 max_time_diff设置成 480 (即8小时)
2.3.2 系统时间调成 T + 40H, 此时更新没问题的
2.3.3 等等等,等到实际时间又变成T+48H,
2.3.4 重复 2.3.2 --> 2.3.3, 直到系统时间调回正确值
2.4. 开Case找Db2 support, 他们可以给日志控制文件打个补丁,把VTS设置成0,问题解决!
最后修改时间:2021-04-16 23:03:21
文章转载自Db2技术分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




