1、 问题描述:用户反馈之前定时刷新的物化视图现在不能正常刷新,导致用户查询物化视图的数据存在差异并影响集团考核,物化视图是通过scheduler job来调用的,scheduler job的状态是BROKEN,手动enable拉起之后到了调度时间点又会BROKEN,最后查询原因是由于用户提单删除了一批不用的账号导致scheduler job的创建者被删除引起的,这种情况一般很少遇到,举例来说,存在两个用户A、B,现在需要创建一个JOB并且JOB的OWNER是B,但是是通过A用户来创建的,也就是在A用户下创建B用户的JOB,代码为dbms_scheduler.create_job(JOB_NAME=>'B.JOB_TEST'。 如果这个时候删除B用户,那么B用户对应的对象也都会级联删除,但是如果这个时候删除A用户,B.JOB_TEST这个job是不会被删除的,但是这个JOB也不会正常执行了,scheduler job的状态会变为BROKEN。
演示案例如下:
2、在B用户下创建表QXY,并创建物化视图MV_QXY_ROWID
3、切换到A用户,并在A用户下创建属于B用户的任务JOB_TEST,10s一次执行快速刷新物化视图MV_QXY_ROWID
4、查询JOB的运行情况,可以看到JOB_TEST的创建者是A,OWNER是B,enabled的状态是true,state是SCHEDULED也就是正常调度,JOB_ACTION就是刷新物化视图
5、测试SHCHEDULER JOB是否正常运行
6、删除创建者用户A
7、重新查询JOB_TEST的运行状态发现,enabled列从之前的true变成了false, state从原来正常的SCHEDULED变成了BROKEN
8、由于scheduler job不能正常刷新,物化视图也就不能定时刷新