最近偶尔会收到一个报警,提示一个Scheduler Job运行失败了。这是一个12c的环境,启用了容器选件,所以一个CDB会含有多个PDB。
如果你要说这个CDB,PDB的区别和联系,那我就直接上一张图。
这个图我们以往看到的体系结构图不大一样,可以理解是在Oracle的地基上做了较大的改动,就好比一个家大业大的豪门,现在要把资产分开管理,也就是多个PDB,里面CDB还是核心的容器,但是不负责具体的数据,只是统筹管理。
以往我们说数据字典分为两类,数据字典表和动态性能视图,数据字典表按照层级可以分为DBA_XXX,ALL_XXX,USER_XXX这三个层级,在12c里面这个地方又有了变化,那就是有了更高级的CDB_XXX这个层级的数据字典表。
好了,基础的部分就先说到这里,问题来了,我们现在的环境融合了多套测试环境,也就是含有多个PDB,这个时候知道Scheduler Job出现问题,我们怎么进一步定位呢,一个很自然的思路就是查看CDB_XXX的数据字典表。
我们来看看具体的表现,环境是12.1.0.2。
可以查看cdb_scheduler_job_run_details来得到详细的信息。
SQL> select status,count(*) from cdb_SCHEDULER_JOB_RUN_DETAILS where log_date>sysdate-1 group by status;
STATUS COUNT(*)
------------------------------ ----------
SUCCEEDED 2984
FAILED 4
我们继续查看,怎么这么奇怪。
SQL> select *from cdb_SCHEDULER_JOB_RUN_DETAILS where status='FAILED';
ERROR:
ORA-00942: table or view does not exist
我们继续换个姿势来看看。
SQL> select count(*)from cdb_SCHEDULER_JOB_RUN_DETAILS where log_date>sysdate-1 and status='FAILED';
COUNT(*)
----------
4
这样就没问题了,我们更进一步看看。
SQL> select *from cdb_SCHEDULER_JOB_RUN_DETAILS where status='FAILED';
ERROR:
ORA-00942: table or view does not exist
由此来看,CDB_XXX的数据字典还是存在着一些小问题。怎么进一步去细分呢。我们可以借助于容器ID,CON_ID,然后结合DBA_SCHEDULER_JOB_RUN_DETAILS。
如果想把这个问题刨一刨,其实也能发现一些信息,本身在CDB的数据字典上还是存在着一些小问题,我想这些数据字典可能使用的不是特别频繁,可能这个问题被遗漏了,所以在一个成熟的架构上做改动,那是迫不得已,而在改动上面希望做到无缝切换,那更是难上加难。我想12.2应该会修复了吧。
12.2已经做出了太多的改变,很多不可以的事情都实现了。不过相对来说,这个cloud推出的是比较吃力,让一大批死忠粉等待的时间有些太长了。战略上的布局要掷地有声,而市场上的成功更要需要花费不少的时间,错一步,步步错,所以我可以感觉Oracle也在很谨慎的在生态中布局。