前言
建议自查所维护的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