夏令时导致预定作业时间问题

时间:2016-10-07 07:33:09

标签: oracle oracle11g scheduled-tasks

我有一个物化视图MVIEW_MY_AU,它将从名为REFRESH_MVIEWS_VIA_PRC的存储过程中刷新。该SP包含以下声明:

dbms_mview.refresh('MVIEW_MY_AU');

在all_scheduler_jobs表中创建作业REFRESH_MVIEWS_VIA_SCH以执行此存储过程。

查询:

select job_name, last_start_date,next_run_date,job_action from all_scheduler_jobs 
where job_name = 'REFRESH_MVIEWS_VIA_SCH'

输出:

enter image description here

根据预定的工作,我希望这个物化视图能够在澳大利亚时间凌晨3:30获得更新。但是当它在澳大利亚时间凌晨4:30得到刷新时,按照以下查询:

查询:

SELECT LAST_REFRESH              
,TO_CHAR(last_refresh, 'MM/DD/YYYY HH24:MI:SS A.M.') as LAST_REFRESH_TIME 
FROM user_mview_refresh_times
where name like 'MVIEW_MY_AU'

输出:

enter image description here

2016年10月2日澳大利亚的夏令时开始后,我开始面对这个问题了。有没有办法安排工作,考虑到白天的节电时间?

1 个答案:

答案 0 :(得分:0)

Oracle将考虑夏令时的几种方式。

输入参数TIMESTAMP WITH TIME ZONE的{​​{1}}值,例如start_timeSYSTIMESTAMP

来自DBMS_SCHEDULER Documentation

  

当start_date为NULL时,Scheduler确定时区   重复间隔如下:

     
      
  1. 检查会话时区是否为区域名称。会话时区可以通过以下任一方式设置:      
        
    • 发出ALTER SESSION语句,例如:   SQL> CURRENT_TIMESTAMP
    •   
    • 设置ALTER SESSION SET time_zone = 'Asia/Shanghai';环境变量。
    •   
  2.   
  3. 如果会话时区是绝对偏移而不是区域名称,则调度程序使用ORA_SDTZ调度程序的值   属性。
  4.   
  5. 如果DEFAULT_TIMEZONE属性为NULL,则调度程序在启用作业或窗口时使用systimestamp的时区。
  6.   

最重要的是:时区必须作为地区提供,例如DEFAULT_TIMEZONE,而不是像Australia/Sydney

那样的UTC偏移量

关于您的查询:

视图+08:00的列LAST_REFRESH是user_mview_refresh_times数据类型,因此根据定义它不包含任何时区信息。最有可能在您的数据库操作系统服务器时区提供列DATE(即时区值LAST_REFRESH)。数据库操作系统服务器的时区是什么?您可以直接在OS上或通过

确定
SYSDATE