物化视图优先迁移大表,缩短逻辑迁移时间
有个项目需要把其中一个用户数据迁移出来,但是这个用户下有一个比较大的表,带lob字段,使用数据泵迁移光这个大表就需要花费五六个小时,超出了停机时间范围,并且迁移后要把大表改造成分区表,所以优先把lob的大表同步过去。
在源库上创建表的mview log
CREATE MATERIALIZED VIEW log on T_EC_EVENT
alter table T_EC_EVENT parallel 8
目标数据库上创建与该表一样的表(分区表),并在该表上创建prebuilt mv
create table T_EC_EVENT
(ID VARCHAR2(50) not null primary key,EVENTID VARCHAR2(50),FWQBH VARCHAR2(8),SENDER VARCHAR2(50),RECEIVER VARCHAR2(50),NODEID VARCHAR2(8) not null,ACTIONTYPE VARCHAR2(100),EVENTSIZE NUMBER(30),MEMO VARCHAR2(2000),MESSAGEID VARCHAR2(50),EVENTTYPE VARCHAR2(2),CLIENTIP VARCHAR2(50),CLIENTOS VARCHAR2(50),MBFWQBH VARCHAR2(8),JHDATE DATE,EVENTCONTENT CLOB,KSSJ TIMESTAMP(6),JSSJ TIMESTAMP(6)
) partition by range (JHDATE)
INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))
(PARTITION MT1 VALUES LESS THAN (TO_DATE('2016-01-01 00:00:00','YYYY-MM-DD hh24:mi:ss'))storage(initial 8Mnext 100Mminextents 1maxextents unlimited)
)storage(initial 8Mnext 100Mminextents 1maxextents unlimited);
目标库创建dblink到源库
create database link CUTEINFO1
connect to 源库用户 IDENTIFIED BY 源库密码
using 'monitor';
创建prebuilt mv物化视图
CREATE MATERIALIZED VIEW T_EC_EVENT
ON PREBUILT TABLE
REFRESH FAST ON DEMAND
AS
SELECT * FROM T_EC_EVENT@CUTEINFO1
执行数据同步
exec dbms_mview.refresh('T_EC_EVENT','COMPLETE',PARALLELISM=>8);
需要注意undo爆掉
查看数据量
select segment_name, partition_name, bytes / 1024 / 1024
from user_segments
where partition_name in
(select partition_name
from user_tab_partitions t
where table_name in
('T_EC_EVENT'
))
order by segment_name, partition_name;
增量刷新
SQL> exec dbms_mview.refresh('T_EC_EVENT','FAST',PARALLELISM=>1);
数据迁移完成整理,删除物化视图
Drop materialized view T_EC_EVENT
修改sequences与主库保持一致
迁移其他数据,排除已同步的表T_EC_EVENT和物化视图日志MLOG$_T_EC_EVENT
impdp 账号/密码 network_link=CUTEINFO1 directory=backup logfile=impdp_cuteinfo.log PARALLEL=2 exclude=table:"in('T_EC_EVENT')" exclude=MATERIALIZED_VIEW_LOG:"in('MLOG$_T_EC_EVENT')" TABLE_EXISTS_ACTION=REPLACE schemas=cuteinfo remap_schema=cuteinfo:cuteinfo