gpt4 book ai didi

oracle11g - 如何安全地安排 Oracle dbms_scheduler 作业时区和 DST

转载 作者:行者123 更新时间:2023-12-01 21:13:12 28 4
gpt4 key购买 nike

我正在尝试将 DBMS_SCHEDULER 作业设置为每年 1 月 1 日凌晨 1 点在 Oracle 11g 上运行。如何设置其属性以绝对确保它不会由于时区差异或夏令时而在错误的时间执行。

我花了很多时间浏览 Oracle 文档,但仍然没有达到确定的程度。

顺便说一句,以下是我发现并认为与该主题相关的规则:

职位属性

start_date 此属性指定此作业计划开始的第一个日期。如果start_date 和repeat_interval 保留为空,则该作业将在启用作业后立即运行。对于使用日历表达式指定重复间隔的重复作业,start_date 用作引用日期。作业首次计划运行的时间是当前日期或之后的日历表达式的第一个匹配项。Scheduler 无法保证作业会在准确的时间执行,因为系统可能会过载,从而导致资源不可用。

repeat_interval 此属性指定作业重复的频率。您可以使用日历或 PL/SQL 表达式指定重复间隔。对指定的表达式进行求值以确定作业下次运行的时间。如果未指定repeat_interval,则作业将仅在指定的开始日期运行一次。有关详细信息,请参阅“日历语法”。

日历语法规则

  • 日历语法不允许您指定时区。相反,调度程序从 start_date 检索时区争论。如果工作必须遵循夏令时调整,您必须确保您指定的时区的区域名称开始日期。例如,将 start_date 时区指定为纽约的“美国/东部”将确保夏令时自动应用调整。如果改为时区start_date 设置为绝对偏移量,例如 '-5:00',未遵循夏令时调整并且您的作业执行一年半会休息一个小时。
  • 当 start_date 为 NULL 时,调度程序将确定重复间隔的时区,如下所示:
  • 它将检查 session 时区是否是区域名称。 session 时区可以通过以下任一方式设置:发出 ALTER SESSION 语句,例如: SQL> ALTER SESSIONSET time_zone = '亚洲/上海';设置ORA_SDTZ环境变量。
  • 如果 session 时区是绝对偏移量而不是区域名称,则调度程序将使用 DEFAULT_TIMEZONE 调度程序属性的值。有关详细信息,请参阅 SET_SCHEDULER_ATTRIBUTE 过程。
  • 如果 DEFAULT_TIMEZONE 属性为 NULL,则调度程序将在启用作业或窗口时使用 systimestamp 时区。

最佳答案

您可以使用它来确保传递带有时区的时间戳,并且开始日期将具有时区名称(美国/东部)而不是偏移量(例如:+5:00)。这样,正如 Oracle 文档中提到的上述片段,调度程序将跟踪 DST。

-- 创建一个时间表

declare 
v_start_date timestamp with time zone;
BEGIN

select localtimestamp at time zone 'US/Eastern' into v_start_date from dual; --US/Eastern

DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'SAMPLE_SCHEDULE',
start_date => v_start_date,
repeat_interval => 'FREQ=DAILY; BYHOUR=10; BYMINUTE= 15',
comments => 'Runs daily at the specified hour.');
END;

为了确保您已正确设置它,您可以运行以下命令:更改 session 设置 nls_timestamp_tz_format = 'MM-DD-YYYY HH24:MI:SS tzr tzd';

现在,创建两个计划,一个如上,另一个使用 sysdate 作为 start_date 参数,并执行下面的查询。

-- Check the TIMEZONE 
select * from USER_SCHEDULER_SCHEDULES;


v1:
27-MAR-14 11.44.24.929282 AM **US/EASTERN**

v2:

27-MAR-14 05.44.54.000000 PM **+05:00**

关于oracle11g - 如何安全地安排 Oracle dbms_scheduler 作业时区和 DST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21141418/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com