网络带宽充裕的条件下,用物化视图在线迁移大表是省事办法,后期的维护也比较方便。今天试着采用物化视图对一个300w行记录的表做迁移。
1、主库上为要迁移的表创建物化视图log
要迁移的表test。
create materialized view log on test; --test上需有primary key
2、在备库上创建test表
create table test as select * from test@prdb where 1=2;
-- prdb:到主库的db link;where 1=2 建了一张空表,这个方式很巧妙,也是学以致用:)
3、在备库上创建prebuilt类型的物化视图日志
create materialized view test on prebuilt table refresh fast as select * from test@prdb;
-- 采用prebuilt,物化视图必须和前面在备库创建的表test同名;refrest fast代表创建该视图时对表test(备库上)记录做增量刷新,当时此时视图仍然为空。
4、在备库上对表记录做全量刷新
exec dbms_mview.refresh('TEST','complete'); -- 表记录从主库复制到备库
5、在备库上对表记录做增量刷新
如果主库表test记录不断产生,可以不断对物化视图做增量刷新,直到数据一致。
exec dbms_mview.refresh('TEST');
6、确认数据迁移完成后,可以删除主库上的物化视图LOG和备库上的物化视图
主库:drop materialized view log on test;
1、主库上为要迁移的表创建物化视图log
要迁移的表test。
create materialized view log on test; --test上需有primary key
2、在备库上创建test表
create table test as select * from test@prdb where 1=2;
-- prdb:到主库的db link;where 1=2 建了一张空表,这个方式很巧妙,也是学以致用:)
3、在备库上创建prebuilt类型的物化视图日志
create materialized view test on prebuilt table refresh fast as select * from test@prdb;
-- 采用prebuilt,物化视图必须和前面在备库创建的表test同名;refrest fast代表创建该视图时对表test(备库上)记录做增量刷新,当时此时视图仍然为空。
4、在备库上对表记录做全量刷新
exec dbms_mview.refresh('TEST','complete'); -- 表记录从主库复制到备库
5、在备库上对表记录做增量刷新
如果主库表test记录不断产生,可以不断对物化视图做增量刷新,直到数据一致。
exec dbms_mview.refresh('TEST');
6、确认数据迁移完成后,可以删除主库上的物化视图LOG和备库上的物化视图
主库:drop materialized view log on test;
备库:drop materialized view test; -- 删除视图test不会影响到表test
以上方法未练习,先行记下。感谢原文作者,转载地址:http://blog.sina.com.cn/s/blog_5d8f25920100bjkr.html
有高人传授了一句,既可以建好物化视图又可以把job建的sql语句,记下来以后用得着:
create materialized view mytable on prebuilt table refresh fast start with sysdate next sysdate+1/48 for update as select * from mytable@dblinkname