暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

inset插入时间不一致问题记录

原创 哪点 2020-05-28
1926

今天业务反应有一个表intime、senddate两个字段的设置是取默认值sysdate。
但是我们在plsql中插入一条记录(这两个字段为空不填数值),系统中生成的默认时间是sysdate +10分钟。

image.png
插入测试数据后时间的确+10分钟​

使用dbms_metadata.get_ddl 查看该表创建语句发现该表为同义词并且使用DB_LINK连接到另一个库

在查看两主机时间,发现的确有时差

oracle@nadian:/home/oracle> date
Thu May 28 16:55:07 EAT 2020

oracle@nadian1:/home/oracle> date
Thu May 28 17:04:13 CST 2020
复制

使用DB_LINK和本地时间对比,结果是一致的

select sysdate from dual union all select sysdate from dual@nadian_A1.nadian.MOBILE.COM 2020/5/28 16:56:12 2020/5/28 16:56:12 - -----nadian - SQL> select sysdate from dual; - SYSDATE - ----------------- - 20200528 17:00:48 - - SQL> select sysdate from dual@nadian_A1.nadian.MOBILE.COM; - SYSDATE - ----------------- - 20200528 17:00:50 - - ++------nadian1 - SQL> SQL> select sysdate from dual; - ++ - SYSDATE - ----------------- - 20200528 17:10:14 -
复制

如下实验可以证明

创建表

SQL> CREATE TABLE "DBMT"."SMNOTIFY_TEST" 2 ( "REGION" NUMBER(4,0) NOT NULL, 3 "INTIME" DATE DEFAULT sysdate NOT NULL , 4 "SENDDATE" DATE DEFAULT sysdate 5 ); Table created.
复制

远端库创建该表同义词,并插入测试数据

SQL> CREATE OR REPLACE SYNONYM "DBMT"."SH_SMNOTIFY_TEST" FOR "DBMT"."SMNOTIFY_TEST"@"nadian_A1.nadian.MOBILE.COM"; Synonym created. SQL> SQL> insert into DBMT.SH_SMNOTIFY_TEST(region) values(311); 1 row created.
复制

查看时间确实为源表段的系统时间,问题一目了然

SQL> select * from DBMT.SH_SMNOTIFY_TEST; REGION INTIME SENDDATE ---------- ----------------- ----------------- 311 20200528 17:09:36 20200528 17:09:36
复制

解决方案:肯定是得修改系统时间的

该RAC共有4个节点,其中问题节点1时间快了10分钟

风险:
1.如果直接将1节点系统时间往回调10分钟,首先oracle不推荐在数据库和集群启动的时候大幅度调整时间,特别是往后调,一些进程会通过系统时间判断无响应然后就…节点驱逐
2.业务部分使用时间的应用可能会受影响,比如短信发送时间,发送成功时间,时间回调可能导致发送成功时间小于短信发送时间.

建议:
1.建议NTP 增加 -x 微调 慢调
2.停库和CRS , os 调大跨度的时间

最后修改时间:2020-05-29 10:57:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
2人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论