我正在使用物化视图,我无法将其设置为快速刷新,因为某些表来自远程数据库,它没有物化视图日志.
当我创建物化视图时,花费了大约20 30秒.但是当我试图刷新它时.
花了超过2个3小时.记录总数仅为460,000左右.
有没有人知道它会如何发生?
谢谢
代码如下所示
create materialized view MY_MV1 refresh force on demand start with to_date('20-02-2013 22:00:00','dd-mm-yyyy hh24:mi:ss') next trunc(sysdate)+1+22/24 as ( SELECT Nvl(Cr.Sol_Chng_Num,' ') AS Change_Request_Nbr,Nvl(Sr.Sr_Num,' ') AS Service_Request_Nbr,Nvl(Sr.w_Org_Id,0) AS Org_Id,Fcr.rowid,Cr.rowid,Bsr.rowid,Sr.rowid,SYSDATE FROM Dwadmin.f_S_Change@DateWarehouse.World Fcr INNER JOIN Dwadmin.d_S_Change@DateWarehouse.World Cr ON Fcr.w_Sol_Chng_Id = Cr.w_Sol_Chng_Id INNER JOIN Dwadmin.b_S_Change_Obl@DateWarehouse.World Bsr ON Fcr.w_Sol_Chng_Id = Bsr.w_Sol_Chng_Id INNER JOIN Dwadmin.d_S_Rec@DateWarehouse.World Sr ON Sr.w_Srv_Rec_Id = Bsr.w_Srv_Rec_Id WHERE Sr.Sr_Num <> 'NS' );
我试过使用dbms_mview.refresh(‘MY_MATVIEW’,’C’,atomic_refresh => false)
但是它仍然需要141分钟才能运行… vs 159分钟没有atomic_refresh => false
解决方法
我个人不会使用内置于mat视图CREATE语句中的调度程序(以…开头的子句).
主要原因(对我而言)是你不能以这种方式声明刷新非ATOMIC(至少我在CREATE时没有找到这个的语法).根据您的刷新要求和大小,这可以节省大量时间.
我会使用dbms_mview.refresh(‘MY_MATVIEW’,atomic_refresh => false).这个会:
>截断MY_MATVIEW快照表
>在MY_MATVIEW表中插入附加内容
如果在create语句中使用next子句,它将设置一个原子刷新,这意味着它将:
>从MY_MATVIEW中删除*
>插入MY_MATVIEW
>承诺
这将更慢(有时慢得多),但其他人仍然可以在刷新过程中从MY_MATVIEW查询.所以,取决于你的情况和需求.