我有一个物化视图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'
输出:
根据预定的工作,我希望这个物化视图能够在澳大利亚时间凌晨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'
输出:
2016年10月2日澳大利亚的夏令时开始后,我开始面对这个问题了。有没有办法安排工作,考虑到白天的节电时间?
答案 0 :(得分:0)
Oracle将考虑夏令时的几种方式。
输入参数TIMESTAMP WITH TIME ZONE
的{{1}}值,例如start_time
或SYSTIMESTAMP
来自DBMS_SCHEDULER Documentation:
当start_date为NULL时,Scheduler确定时区 重复间隔如下:
- 检查会话时区是否为区域名称。会话时区可以通过以下任一方式设置:
- 发出ALTER SESSION语句,例如: SQL>
CURRENT_TIMESTAMP
- 设置
ALTER SESSION SET time_zone = 'Asia/Shanghai';
环境变量。- 如果会话时区是绝对偏移而不是区域名称,则调度程序使用
ORA_SDTZ
调度程序的值 属性。- 如果
醇>DEFAULT_TIMEZONE
属性为NULL,则调度程序在启用作业或窗口时使用systimestamp的时区。
最重要的是:时区必须作为地区提供,例如DEFAULT_TIMEZONE
,而不是像Australia/Sydney
关于您的查询:
视图+08:00
的列LAST_REFRESH是user_mview_refresh_times
数据类型,因此根据定义它不包含任何时区信息。最有可能在您的数据库操作系统服务器时区提供列DATE
(即时区值LAST_REFRESH
)。数据库操作系统服务器的时区是什么?您可以直接在OS上或通过
SYSDATE