SQL>create materialized view log on table_name; SQL>create materialized view table_name [on prebuilt table] refresh fast as select * from table_name@lnk_db_master; SQL>exec dbms_mview.refresh('table_name',method => 'Complete'); SQL>exec dbms_mview.refresh('table_name'); SQL> declare jobid number; begin sys.dbms_job.submit(job => jobid, what => 'dbms_mview.refresh(''table_name'');', next_date => sysdate, interval => 'sysdate+5/1440'); commit; end; /
SQL>select t.log_owner,t.master,t.log_table,t.current_snapshots, r.owner,r.name,r.snapshot_site from dba_snapshot_logs t,dba_registered_snapshots r where t.snapshot_id= r.snapshot_id(+);删除mv的时候,需要先删除mv,再删除mv日志
SQL>drop materialized view table_name;主站点:
SQL>drop materialized view log on table_name;注意,删除mv的时候,如果主站点需要分发到多个远程站点,只有当所有远程站点的MV删除完成后,才可以删除MV日志。
SQL>exec DBMS_SNAPSHOT.PURGE_SNAPSHOT_FROM_LOG (snapshot_id);三、故障处理与维护
SQL>alter table mlog$_table_name move;如果要对有mv复制的表增加字段,最好在停机情况下进行,因为这样不会产生mv log,而且最好采用prebuild模式,因为这种模式下,删除mv的定义将保留表(也就是不删除表与相关数据)。相关步骤:
SQL>drop materialized view mv_table; --这里删除mv,保留原表
2、主站点:
SQL>alter table master_table add new_field number;3、远程站点:
SQL>alter table mv_table add new_field number;4、远程站点:
SQL>create materialized view mv_table on prebuilt table refresh fast as select * from master_table@lnk_db;5、建立快速刷新的作业,这个时候不需要全刷新了,因为数据都在
为什么要停机操作,是因为创建快速刷新的mv的时候,将删除主站点上创建mv时间点之前的相关log,所以在删除mv与重新创建mv之前,不能对主表有任何dml产生新的日志,否则将可能引发数据的不一致。