跨平台 跨版本 大规模数据迁移

昨天在 pub 上看到一个问题,

oracle 9i 如果600G 的资料库需要进行最短时间的跨平台(windows 到unix) 停机(12 小时)迁移,该如何进行数据迁移 ?

请教了 biti

作了一下测试

[@more@]

prebuilt mv 做大表,

小表直接 dblink insert ,数据库30分钟足够了

利用prebuilt mv实现跨平台,跨版本数据迁移

该方法的实现原理是对于要迁移的表对象,需要有一个主键,用于mv的刷新,对于符合该要求的表,在源表上创建mv日志,再在目标数据库上创建结构一样的表,然后在目标表上采用prebuilt方式创建mv,第一次采用完全刷新,之后采用增量刷新,等真正要切换的时候,只需要刷新完增量的日志,删除mv,保留目标表即可。需要刷新的表都加上主键

基本思路的例子:
--1.在源库上创建表和mview log
SQL> create table big_t1 as select * from dba_objects;
Table created.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL> create materialized view log on big_t1;
Materialized view log created.
--2.在目标数据库上创建与该表一样的表,并在该表上创建prebuilt mv
SQL> create table big_t1 as select * from big_t1@crbtfdb_C where 1=2;
Table created.
SQL> select count(1) from big_t1;
COUNT(1)
----------
0
SQL> create materialized view big_t1 on prebuilt table refresh fast as select * from big_t1@crbtfdb_c
Materialized view created.
--3.做完全刷新和增量刷新
SQL> exec dbms_mview.refresh('BIG_T1','complete');
PL/SQL procedure successfully completed.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170
SQL>
--/*此时模拟在做完全刷新过程中,源库的表又发生了变化
SQL> insert into big_t1(object_id,owner) values(99991,'test');
1 row created.
SQL> commit;
Commit complete. */
--再做增量刷新
SQL> select count(1) from big_t1;
COUNT(1)
----------
6170

SQL> exec dbms_mview.refresh('BIG_T1');
PL/SQL procedure successfully completed.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6171

--4.停机切换,做最后一次刷新,然后删除源库的mview log和目标库的mview

SQL> exec dbms_mview.refresh('BIG_T1');
PL/SQL procedure successfully completed.
SQL> drop materialized view big_t1; -----目标库上
Materialized view dropped.
SQL> select count(1) from big_t1;
COUNT(1)
----------
6171

drop materialized view big_t1; -----目标库上
drop materialized view big_t1 log on big_t1; -----目标库上

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/66233/viewspace-1010190/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/66233/viewspace-1010190/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值