我们有一个为远程数据库视图(db link)创建的Materialized视图。 mt视图每晚都会刷新(完成)。我们要求为客户提供刷新成功与否的每日电子邮件状态(出于任何原因)。目前,刷新是通过DBMS_JOB进行的。系统如何自动检查刷新状态并对其进行操作?如果我创建一个调用DBMS_MVIEW.REFRESH(我的mt视图,'C')的过程,如果刷新调用不成功(例如网络问题),它会失败吗?我能在EXCEPTION中捕获它并记录错误吗?另外,DBMS_ERRLOG.CREATE_ERROR_LOG在刷新MT视图时有用吗?
谢谢
答案 0 :(得分:0)
一些事情:
你真的应该使用dbms_scheduler而不是dbms_job,因为dbms_job已经被弃用了10g(如果你至少有10g ......如果没有,你可能要考虑升级)。
虽然您可以使用dbms_scheduler来安排mview刷新,但mviews已经内置了该功能。以下命令将安排mview每天凌晨1点刷新(完成):
ALTER MATERIALIZED VIEW <mviewname>
REFRESH COMPLETE
NEXT (TRUNC (SYSDATE+1) + 1/24);
间隔的语法可能有点棘手,直到你习惯它...我会从Oracle docs开始。
检查mview上次刷新的时间:
select owner, mview_name, last_refresh_date from dba_mviews;
因此,如果您每天早上刷新mview,则可以设置一个调度程序作业,以便在当天早上刷新或未刷新mview时发送电子邮件(基于上述查询的结果)。