前言
建议自查所维护的19c多租户数据库下是否存在此问题。
故障描述
19c版本多租户架构,pdb的统计信息任务执行时间错乱。
此问题为未发布的BUG 30076391,暂时无补丁解决方案,本文为workaround。
故障分析
PDB统计信息任务历史执行时间查看
因为ACTUAL_START_DATE列是TIMESTAMP WITH TIMEZONE类型,需要使用函数to_timestamp_tz转换为北京时间东八区。
select t.log_id,
t.LOG_DATE,
t.JOB_NAME,
t.STATUS,
t.ACTUAL_START_DATE,
to_char((to_timestamp_tz(ACTUAL_START_DATE) at time zone '+08:00'),
'yyyy-mm-dd hh24:mi:ss') "ACTUAL_START_DATE_+8",
t.RUN_DURATION,
t.con_id
from cdb_scheduler_job_run_details t
where job_name LIKE 'ORA$AT_OS%'
and con_id = 3
order by log_date;
PDT(Pacific Daylight Time)太平洋夏令时。
北美的西海岸太平洋沿岸地区,大城市有:温哥华,西雅图,旧金山,洛杉矶,拉斯维加斯,圣迭戈,萨克拉门托,波特兰等在夏时制时用这一时间。
相对应的是PST(Pacific Standard Time )太平洋标准时间。
夏令时制结束后就是PST。
PDT转换成北京时间方法:
PDT从每年3月的第二个星期日到11月的第一个星期日期间和北京时间差15小时,其余月份和北京时间差16小时 。
例如:Oct 02, 2022 at 07:00 PDT = Oct 02, 2022 at 22:00 Beijing Time (7+15=22)
美国夏季始于每年4月的第1个周日,止于每年10月的最后一个周日。夏令时比正常时间早一小时。
PST是太平洋标准时间(西八区),与北京时间(东八区)时差-16个小时,也就是北京时间减去16就是PST时间。而PDT比PST早1个小时,就是说PDT与北京时间时差为-15小时。
也就是说PST8PDT转换成北京时间后,pdb本来晚上22点执行的统计信息采集任务,延迟15/16小时到第二天下午才执行!!!
PDB调度窗口时区检查
select t.CON_ID, t.ATTRIBUTE_NAME, t.VALUE
from CDB_SCHEDULER_GLOBAL_ATTRIBUTE t
where t.ATTRIBUTE_NAME = 'DEFAULT_TIMEZONE'
order by 1;
当前CDB$ROOT调度窗口时区是正确的:PRC(中国标准时间),但是另外两个pdb的调度窗口时区是错误的:PST8PDT太平洋夏令时。
CON_ID ATTRIBUTE_NAME VALUE
---------- ------------------------------ ------------------------------
1 DEFAULT_TIMEZONE PRC
3 DEFAULT_TIMEZONE PST8PDT
4 DEFAULT_TIMEZONE PST8PDT
解决方案
- 检查调度窗口执行时间
select t1.CON_ID,
t1.window_name,
t1.repeat_interval,
t1.duration,
t1.enabled,
t1.next_start_date,
to_char((to_timestamp_tz(t1.next_start_date) at time zone '+08:00'),
'yyyy-mm-dd hh24:mi:ss') "next_start_date_+8"
from cdb_scheduler_windows t1
where t1.enabled = 'TRUE' and t1.con_id=3
order by t1.con_id, t1.duration;
2. 修改调度窗口时区
alter session set container=<pdb_name>;
exec DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('default_timezone','PRC');
修改后检查
CON_ID ATTRIBUTE_NAME VALUE
---------- ------------------------------ ------------------------------
1 DEFAULT_TIMEZONE PRC
3 DEFAULT_TIMEZONE PRC
4 DEFAULT_TIMEZONE PRC
- 确认修改结果,修改后显示窗口时区为PRC,下次执行时间转换到北京时间也是正常期望的时间。
参考文档
Default Scheduler Timezone Value In PDB$SEED Different Than CDB (Doc ID 2702230.1)
订阅号:DongDB手记
墨天轮:https://www.modb.pro/u/231198