【发布时间】:2015-07-31 14:25:37
【问题描述】:
我希望有多个物化视图在提交时快速刷新。
对于“提交时快速刷新”,您需要一个物化视图日志。显然,提交时快速刷新需要日志。问题是我能否有多个物化视图访问日志。
显然我仍然需要日志来满足正常的先决条件(在所有视图中): http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm
提前为任何帮助干杯。
【问题讨论】:
我希望有多个物化视图在提交时快速刷新。
对于“提交时快速刷新”,您需要一个物化视图日志。显然,提交时快速刷新需要日志。问题是我能否有多个物化视图访问日志。
显然我仍然需要日志来满足正常的先决条件(在所有视图中): http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm
提前为任何帮助干杯。
【问题讨论】:
绝对的。
create table data_table as (
select *
from dba_users
);
alter table data_table
add constraint data_table_test_pk PRIMARY KEY (user_id);
select * from data_table;
所以现在我们有一个看起来像dba_users 的表,带有PRIMARY KEY 约束。
create materialized view log on data_table;
create materialized view mat_view_one
refresh fast on commit
as
select username, user_id
from data_table
;
create materialized view mat_view_two
refresh fast on commit
as
select user_id, username, account_status
from data_table;
我们的日志和 2 个视图创建成功。
测试表中的SYS记录:
select * from mat_view_one
where user_id=0;
USERNAME USER_ID
------------------------------ ----------
SYS 0
select * from mat_view_two
where user_id=0;
USER_ID USERNAME ACCOUNT_STATUS
---------- ------------------------------ --------------------------------
0 SYS OPEN
现在让我们更新SYS 的名称并提交,看看我们的视图显示了什么:
update data_table
set username='WALTERWHITE'
WHERE USER_ID=0
;
COMMIT;
USERNAME USER_ID
------------------------------ ----------
WALTERWHITE 0
USER_ID USERNAME ACCOUNT_STATUS
---------- ------------------------------ --------------------------------
0 WALTERWHITE OPEN
所以是的,绝对的。只要保持适当的约束,1 个物化视图日志就可以提供尽可能多的物化视图。
【讨论】:
是的。物化视图日志可以支持任意数量的物化视图。
支持多个物化视图可能会导致日志比它支持单个物化视图时更大,尽管这在这里可能不是非常重要,因为您的日志可能不会长时间存储数据。如果您将数据复制到远程数据库(根据定义,您不能使用快速刷新的物化视图来做到这一点),如果其中一个远程物化视图停止刷新或消失而源不知道,这可能会有点棘手,因为它可能导致数据在日志中无限期地排队。但是,再一次,这听起来不像您所面临的情况。
【讨论】: