【问题标题】:Enabling fast refresh on materialized view with geometry启用几何实体化视图的快速刷新
【发布时间】:2016-06-05 22:09:24
【问题描述】:

我有一个看似简单的问题,物化视图似乎是理想的解决方案,但是我没有让它有效地工作,也许答案很简单:“Oracle 根本不允许”,但我我希望我忽略了一些愚蠢的事情。

问题:由于某些历史性决定,我有一个包含来自两个国家的几何图形的表格,存储在一个国家的坐标系中。我现在想使用共享坐标系创建物化视图。所以实际上,实现这一点的最简单查询是:

select thr_ident, thr_status, geom from 
  ((
     select thr_ident, thr_status, sdo_cs.transform(sdo_cs.transform(thr_geometry, 327680), 8307) as geom
     from th_threat 
     where thr_origin in (6,61, 11, 9) 
   ) 
   union all 
   (
     select thr_ident, thr_status, sdo_cs.transform(thr_geometry, 8307) as geom
     from th_threat 
     where thr_origin not in (6,61,11,9) 
  ))

几何图形只创建一次,但我想保持状态同步(出于可视化目的)。于是我在thr_identthr_status上添加了物化视图日志:

create materialized view log on th_threat 
with sequence, rowid (thr_ident, thr_status)
including new values;

并创建了物化视图,并希望只要原始源数据发生更改(“提交时”),它就会自动保持同步。

但显然refresh on commit 在使用对象时是不可能的,但如果它足够高效/足够快,拥有fast refresh 就足够接近了。

我假设假设 union all 没有真正帮助,我将其重写为单个查询,如下所示:

create materialized view th_threat_mv 
--  refresh fast on demand
as  
select 
  rowid rid, thr_ident, thr_status, 
  case 
    when thr_origin in (6,61, 11, 9) then 
      sdo_cs.transform(sdo_cs.transform(thr_geometry, 327680), 8307)
    else   
      sdo_cs.transform(thr_geometry, 8307)
  end as geom    
from th_threat; 

但仍然没有启用快速刷新。

explain_mview 的结果显示只有完全刷新是可能的,而其他的都被禁用(对我来说有点难以阅读/推断,如果需要我可以转储它,但它会重复三次 object data types are not supported in this context)。

mtune_view 给了我以下错误:

QSM-03113: Cannot tune the MATERIALIZED VIEW statement

QSM-02083: mv references PL/SQL function that maintains state

所以现在我猜这是由 SDO_CS.TRANSFORM 引起的?

理论上我会假设快速刷新是可能的/简单的:

  • 在插入时创建行(使用适当的转换)
  • thr_status改变时更新状态(或者计算单行的整体

但是要么我没有正确实现它,要么 Oracle 无法推断出它实际上是一个简单的 1-1 物化视图(因为它包含一个几何图形?一个 case 语句?)。

我总是可以使用触发器来酿造自己的解决方案,但我想知道我是否忽略了一些明显的东西以使材料视图有效地工作(因为它似乎非常合适)。非常感谢任何帮助/见解/cmets。

【问题讨论】:

    标签: oracle materialized-views oracle-spatial


    【解决方案1】:

    你是对的。 Oracle 认为这是一个复杂的查询,因为几何功能和快速刷新在复杂查询上是不可能的。 您将需要完全刷新。 谢谢

    萨比哈

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 2013-12-04
      • 2016-12-11
      • 2013-02-05
      • 2020-03-13
      • 2015-06-13
      • 2014-02-19
      • 1970-01-01
      相关资源
      最近更新 更多