最近有个项目需要迁移搭建测试环境,数据库版本oracle11g,在迁移过程中由于存在分区表,clob大字段,变更表空间。有些表无法迁移。针对异常情况调整了迁移方法,成功迁移。先整理比较好的迁移步骤:
1.源库梳理数据库类别
select * from dba_segments t where t.owner='onu_tst';---查看是否存在分区表;
select * from dba_tab_cols t where owner='UCR_EQUIPS';--查看是否存在大字段clob,blob等。
select tablespace_name,sum(Bytes/1024/1024/1024) from dba_segments t where t.owner='onu_tst' group by tablespace_name;---获取表空间大小信息;
2.目标库准备
使用toad创建用户,表空间,由于大字段和分区表的表空间在更换表空间后无法在目标库创建,需要先按照源库的表空间给大字段和分区表创建相应表空间。
创建用户语句:
CREATE USER UCR_EQUIPS
IDENTIFIED BY VALUES 'xxxxxxxxx'
DEFAULT TABLESPACE TBS_O2O_AIOP
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
-- 3 Roles for UCR_EQUIPS
GRANT CONNECT TO UCR_EQUIPS;
GRANT RESOURCE TO UCR_EQUIPS;
-- 6 System Privileges for UCR_EQUIPS
GRANT CREATE TABLE TO UCR_EQUIPS;
GRANT CREATE MATERIALIZED VIEW TO UCR_EQUIPS;
GRANT SELECT ANY TABLE TO UCR_EQUIPS;
GRANT DEBUG CONNECT SESSION TO UCR_EQUIPS;
GRANT UNLIMITED TABLESPACE TO UCR_EQUIPS;
GRANT DEBUG ANY PROCEDURE TO UCR_EQUIPS;
-- 16 Tablespace Quotas for UCR_EQUIPS
ALTER USER UCR_EQUIPS QUOTA UNLIMITED ON TBS_O2O_AIOP;
ALTER USER UCR_EQUIPS QUOTA UNLIMITED ON ONU_DATA;
3.源库导出
编辑onu_tst.par导出参数文件
feedback=100000
file=onu_tst180510data.dmp
log=onu_tst180510data.log
ROWS=Y
owner=onu_tst
执行exp userid=system/xxxxx@oraclesid parfile=onu_tst.par
4.目标库更改表空间
select 'alter table '||table_name||' move partition '||partition_name||' tablespace TBS_O2O_AIOP;'
from dba_tab_partitions where table_name='TF_REUSE_REPORT';---获取更改分区表的表空间语句。
alter table WM_PROC_DEFINE move tablespace TBS_O2O_AIOP lob (define) store as(tablespace TBS_O2O_AIOP);--更改大字段clob的表空间。
DROP TABLESPACE onu_data INCLUDING CONTENTS AND DATAFILES;