平台必须支持表空间迁移(v$transportable_platform)
convert tablespace只能在源端执行
convert datafile :只要能连接到源端就可以
convert database :必须在源端,且源端数据库必须出于read only,此为源端和目标端endian format必须一致。
convert:不会传输用户自定义类型
前提:
目标库安装好数据库软件及实例。
源库oracle版本低于或等于目标库。
源库和目标库字符集限制
1、检查需要迁移的表空间是否支持表空间迁移
SQL> exec
sys.dbms_tts.transport_set_check('TEST_TB',true);
SQL> select * from
sys.transport_set_violations;
no rows selected
--如果查询不到数据,则该表空间支持表空间迁移,否则不支持。
比如有一个table在表空间A里,其上的一个index在表空间B里。
那么对于表空间A,其中的对象不依赖表空间外的对象,所以是个自包含,但是表空间以外的index却依赖表空间内的对象,不是一个完全自包含。再表空间迁移表空间可以完全,但是index在表空间迁移会丢失,反过来,对于表空间B,表空间里的对象INDEX是依赖表空间A里的TABLE对象的。所以这里不满足自包含条件。表空间迁移也就会出现问题。
2、检查源平台与目标平台信息支是否支持传输操作
SQL> select platform_name,endian_format
from v$transportable_platform;
SQL> select
d.platform_name,endian_format from v$transportable_platform tp,v$database d
where tp.platform_name=d.platform_name ;
如果2端平台字节顺序不一致,则在传输时需要转换字节顺序。
3、表空间设置为只读模式
SQL> alter tablespace test_tb read only;
4、源端创建数据泵目录
SQL> create directory dmp as
'/home/oracle/dir_dmp/';
SQL> grant read ,write on directory dmp
to test;
5、创建传输表空间的元数据dump文件
[oracle@db ~]$ expdp \'sys/310012 as
sysdba\' directory=dmp dumpfile=test_tb.dmp logfile=test_tb.log
transport_tablespaces=test_tb
6、如跨平台需转换字节顺序,则先转换数据文件
注意:如果字节顺序一致,可跳过此步。
[oracle@db ~]$ rman
target /
RMAN> convert
tablespace test_tb to platform 'Microsoft Windows IA (64-bit)' format
'/home/oracle/backup/%U';
7、拷贝表空间元数据dump文件和数据文件到目标端
操作系统拷贝文件(可使用scp或者ftp)
8、目标端创建数据泵目录
SQL> create directory dmp as
'/OracleBackup/dir_dmp/';
9、传输的表空间附加到目标数据库
创建表空间所需要附加到的用户
create user u1 identified by u1;
[oracle@zytk35 ~]$ impdp \'sys/310012 as
sysdba\' directory=dmp dumpfile=test_tb.dmp transport_datafiles=/OracleBackup/dir_dmp/test_tb.266.887909987,/OracleBackup/dir_dmp/test_tb.267.887913297
remap_schema=test:u1
注意:数据文件名称和路径即为这边的文件名,这边可通过RMAN进行修改调整
10、验证源库和目标库数据一致性
SQL> select
owner,segment_name,segment_type,tablespace_name from dba_segments where tablespace_name
= 'TEST_TB';
SQL> select
owner,segment_name,segment_type,tablespace_name from dba_segments where owner =
'TEST';
分析源库和目标库中表的数据
由于:T1表的索引对象再表空间USERS中,表空间迁移后丢失了索引对象,需要重建。
11、把表空间改为读写模式
SQL> alter tablespace test_tb read
write;