Sql 创建物化视图时使用ORA-06512
我正在尝试在Oracle中创建mview。它将用于我每天运行的报告,因此我只需要在执行之前按需更新它Sql 创建物化视图时使用ORA-06512,sql,oracle,Sql,Oracle,我正在尝试在Oracle中创建mview。它将用于我每天运行的报告,因此我只需要在执行之前按需更新它 CREATE MATERIALIZED VIEW mv_test REFRESH ON DEMAND AS SELECT zzcode, COUNT(1) c FROM cdc.uap_zufi_t_dca_place@rbip GROUP BY zzcode; BE
CREATE MATERIALIZED VIEW mv_test
REFRESH
ON DEMAND
AS
SELECT
zzcode,
COUNT(1) c
FROM
cdc.uap_zufi_t_dca_place@rbip
GROUP BY
zzcode;
BEGIN
dbms_snapshot.refresh('mv_test', 'f');
END;
但是,出现以下错误:
ORA-06512:在第2行
2341300000-“表“%s”。%s”没有具体化的视图日志
*原因:无法执行快速刷新,因为主表
不包含物化视图日志。
*操作:使用“创建物化视图日志”命令创建
主表上的物化视图日志。您实际上应该使用
dbms\u mview
包,而不是旧的dbms\u快照。在这种情况下,它们也会做同样的事情,但Oracle甚至不再费心记录dbms\u snapshot
包了
的第二个参数是方法
。您正在指定“f”的方法,这意味着您要求快速(增量)刷新。如果需要增量刷新,则需要在远程数据库上创建一个物化视图日志(这几乎肯定不能通过数据库链接完成)。或者,您可以要求完全刷新,而不是每次都通过网络发送每一行
begin
dbms_mview.refresh( 'MV_TEST', 'c' );
end;
错误消息的哪一部分让您感到困惑?它不仅告诉您问题出在哪里,而且还提供必要的操作来修复itTryrefresh on demand complete
此查询返回什么从所有视图中选择refresh\u mode,refresh\u method,其中MVView\u name='MV\u TEST'
?您需要在MV引用的表上创建物化视图日志,而不是mv本身。在你的情况下,这可能是在cdc.uap_zufi_t_dca上_place@rbipI“我猜您需要登录到该源数据库才能创建该日志(或者让具有相应权限的人为您创建该日志)。恐怕我不知道当源表位于另一个DB中时,是否可以在一个DB中创建MV,但我猜如果您阅读Oracle文档,它可能会告诉您。如果您仔细阅读了文档,或者将参数留空以使用默认刷新方法,而不猜测MV是如何设计的,这可能是一个好主意