数据库中sysdate函数获取时间与当前时间不一致

达梦数据库中sysdate函数获取的操作系统的时间,所以如果在数据库中使用sysdate函数获取的时间与当前时间不一致,一般原因就是当前客户端操作系统时间有问题。

数据库中sysdate函数获取时间与当前时间不一致

所以排查方向很明确,那就是本地操作系统时间,除此之外还应该考虑到达梦数据库dm_svc.conf的配置时间。

1、当前操作系统时间

当前操作系统时间一般排查比较简单,查看是否与当前时间一致即可,在linux中可以通过date、timedatectl等命令进行查看,以linux为例,查看当前时间的方法:

[dmdba@DATABASE ~]$ date
Sun Jun 25 12:11:43 CST 2023
[dmdba@DATABASE ~]$ timedatectl 
               Local time: Sun 2023-06-25 12:11:50 CST
           Universal time: Sun 2023-06-25 04:11:50 UTC
                 RTC time: Sun 2023-06-25 04:11:50
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

注意timedatectl命令中查看local time时间就可以了,其他时区和当前时区是+8的关系。在确认当前操作系统时间与当前时间准确的情况下,我们需要排查dm_svc.conf的配置文件。

2、核查dm_svc.conf配置问题

简单说明下,dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置的一些参数,具体的配置文件参数含义大家可以去查看《DM8系统管理员手册.pdf》手册,需要注意的是dm_svc.conf中默认有一个TIME_ZONE的参数用来指明客户端的默认时区,而且达梦客户端、disql工具等都是优先读取该配置文件的,如果这个配置文件错误,必然影响sysdate函数获取的时间。

初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同。
1. 32 位的 DM 安装在 Win32 操作平台下,此文件位于%SystemRoot%\system32 目录;
2. 64 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%\system32 目录;
3. 32 位的 DM 安装在 Win64 操作平台下,此文件位于%SystemRoot%\SysWOW64 目录;
4. 在 Linux 平台下,此文件位于/etc 目录。
可以通过设置操作系统环境变量 DM_SVC_PATH 来修改 dm_svc.conf 文件路径。

下面是具体的排查过程(linux环境中dm_svc.conf配置文件time_zone不正确引发):

[dmdba@DATABASE ~]$ /soft/dmdbms/bin/disql sysdba:5237

服务器[LOCALHOST:5237]:处于备库打开状态
登录使用时间 : 1.425(ms)
disql V8
SQL> select sysdate;

行号     SYSDATE            
---------- -------------------
1          2023-06-25 10:22:55

已用时间: 1.088(毫秒). 执行号:1000.
SQL> exit
[dmdba@DATABASE ~]$ date
Sun Jun 25 12:22:59 CST 2023
[dmdba@DATABASE ~]$ cat /etc/dm_svc.conf
TIME_ZONE=(+360)
LANGUAGE=(cn)

[dmdba@DATABASE ~]$ vi /etc/dm_svc.conf
[dmdba@DATABASE ~]$ cat /etc/dm_svc.conf
TIME_ZONE=(+480)
LANGUAGE=(cn)

[dmdba@DATABASE ~]$ /soft/dmdbms/bin/disql sysdba:5237

服务器[LOCALHOST:5237]:处于备库打开状态
登录使用时间 : 1.024(ms)
disql V8
SQL> select sysdate;

行号     SYSDATE            
---------- -------------------
1          2023-06-25 12:23:40

已用时间: 1.745(毫秒). 执行号:1100.
SQL> 

可以看到默认disql工具是从dm_svc.conf配置文件中获取time_zone的时区,由于该时间配置错误(默认东8区,1区60min,应该配置为+480)导致,在调整时区时间后sysdate函数获取的时间就恢复正常的。

在达梦数据库中,job作业也是获取的sysdate函数的时间,所以该问题还会影响到数据库job作业的执行,表现为job作业调度未按预期执行,存在滞后执行或不执行的情况。

原创文章,作者:lzb,如若转载,请注明出处:https://www.wlkjzx.com/2023/06/25/%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%adsysdate%e5%87%bd%e6%95%b0%e8%8e%b7%e5%8f%96%e6%97%b6%e9%97%b4%e4%b8%8e%e5%bd%93%e5%89%8d%e6%97%b6%e9%97%b4%e4%b8%8d%e4%b8%80%e8%87%b4/

(0)
打赏 微信扫一扫 微信扫一扫
lzblzb
上一篇 2024年10月25日
下一篇 2023年6月28日

相关推荐

发表回复

登录后才能评论