如果oracle数据库时间不正确,总结了一下调整方法是否可行
oracle数据库中的时间依赖操作系统中的时间,如果操作系统中的时间不准确,会导致数据库时间超前或拖后。
会导致单机数据库数据紊乱,RAC服务器由于时间不同步重启等,下面通过实例来演示一下如何调整时间数据库
服务器时间,分两种情况说明:
1)数据库时间比当前时间快
修改的思路是我们先确认一下数据库时间和当前时间差(以下称时间差),然后关闭数据库一段时间(比时间差稍长一点)修改操作系统时间为正确时间,启动数据库,验证SCN和当前时间是否一致。
验证数据库当前SCN是否与操作系统时间是否一致
SQL>
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') current_time,
to_char(scn_to_timestamp(dbms_flashback.get_system_change_number),'yyyy-mm-ddhh24:mi:ss') scn_time
fromdual;
CURRENT_TIME
SCN_TIME
----------------------------------------------------------------------------
2010-11-1220:40:40
2010-11-1220:40:38
系统时间和SCN转换后的时间很接近,我们可以认为当前数据库SCN和系统时间是一致的
查询服务器操作系统时间和当前的时间差
当前时间:
2010-11-1220:12:08
操作系统(数据库)时间:
$ date
FriNov 12 20:41:19 CST 2010
可以看到服务器时间比当前时间快29分钟,同样数据库时间比当前时间快29分钟
关闭数据库
SQL>
shutdown immediate
修改操作系统时间为当前时间
# date -s 20:20:08
29分钟后打开数据库(约20:49:00)
SQL>startup
验证数据库当前SCN是否与操作系统时间是否一致
SQL>
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') current_time,
to_char(scn_to_timestamp(dbms_flashback.get_system_change_number),'yyyy-mm-ddhh24:mi:ss') scn_time
from dual;
CURRENT_TIME
SCN_TIME
----------------------------------------------------------------------------
2010-11-1220:49:20
2010-11-1220:49:17
# date
FriNov 12 20:49:41 CST 2010
可以看到当前数据库SCN转换成时间,与数据库时间,和操作系统时间基本一致
2)数据库时间比当前时间慢
如果数据库时间比当前时间慢,这种情况处理起来相对比较简单
查询服务器操作系统时间和当前的时间差
当前时间:
2010-11-1221:20:08
操作系统(数据库)时间:
# date
FriNov 12 20:59:31 CST 2010
可以看到服务器时间比当前时间慢21分钟
关闭数据库
SQL>
shutdown immediate
修改操作系统时间为当前时间
# date -s 21:25:08
直接打开数据库
SQL>startup
验证数据库当前SCN是否与操作系统时间是否一致
SQL>
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') current_time,
to_char(scn_to_timestamp(dbms_flashback.get_system_change_number),'yyyy-mm-ddhh24:mi:ss') scn_time
fromdual;
CURRENT_TIME
SCN_TIME
----------------------------------------------------------------------------
2010-11-1221:26:27
2010-11-1221:26:27
# date
FriNov 12 21:26:41 CST 2010
可以看到当前数据库SCN转换成时间,与数据库时间,和操作系统时间基本一致
时间修改完成 ORACLE靠SCN来标示数据,而SCN的增长跟时间无关。 各位大师,这样的修改方法在生产环境中可行吗? 得实验一下
页:
[1]