Jav*_*avo 8 timezone dbms-scheduler oracle11g dst job-scheduling
我正在尝试设置一个DBMS_SCHEDULER作业,以便在每年1月1日凌晨1点在Oracle 11g上运行.如何设置其属性以确保它不会在错误的时间执行,因为时区差异或夏令时.
我花了很多时间浏览Oracle文档,但我还没有达到确定性水平.
顺便说一句,以下是我发现并考虑与该主题相关的规则:
工作属性
start_date 此属性指定计划启动此作业的第一个日期.如果start_date和repeat_interval保留为null,则作业将在计划启动后立即运行.对于重复使用日历表达式指定重复间隔的作业,start_date用作参考日期.第一次安排作业运行是当前日期或之后的日历表达式的第一个匹配.调度程序无法保证作业将在准确的时间执行,因为系统可能会过载,因此资源不可用.
repeat_interval此属性指定作业重复的频率.您可以使用日历或PL/SQL表达式指定重复间隔.评估指定的表达式以确定下次运行作业的时间.如果未指定repeat_interval,则作业将仅在指定的开始日期运行一次.有关详细信息,请参阅"日历语法".
Calendaring语法中的规则
我不确定这个答案是否真正通过了该网站上的答案规则,但在花了很多时间谷歌搜索后,我想出了以下解决方案:
start_date => CAST(trunc(sysdate, 'YEAR')+2/24 AS TIMESTAMP) at time zone 'Europe/Berlin'
Run Code Online (Sandbox Code Playgroud)
我相信这是最接近最安全的解决方案,因为:
如果我能绝对清楚何时根据服务器的本地时间、SESSIONTIMEZONE、DBTIMEZONE、start_date 时区和 DBMS_SCHEDULER 时区实际执行作业,我会对解决方案感到更满意。
我对时区规范也不满意,因为它有 4 个与之相关的缩写 - LMT、CET、CEST、CEMT,其中 CEST 在我看来是完全错误的。我的目标是使用 CET 和夏令时(冬季!=夏季)。
归档时间: |
|
查看次数: |
19803 次 |
最近记录: |