1、概述
需要将一台linux主机上10g数据库表空间ts_bill迁移到另一台solaris主机数据库中,为加快速度,准备采用传输表空间方式。
1、平台环境
1) 源库:
版本:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
平台:
SQL> select t.platform_name,t.endian_format from v$transportable_platform. t,v$database d
where t.platform_name=d.platform_name;
PLATFORM_NAME ENDIAN_FORMAT
------------------------- --------------
Linux IA (32-bit) Little
2) 目标库
版本:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0
平台:
SQL> select t.platform_name,t.endian_format from v$transportable_platform. t,v$database d
where t.platform_name=d.platform_name;
PLATFORM_NAME ENDIAN_FORMAT
------------------------- --------------
Solaris[tm] OE (64-bit) Big
结论:两台数据库平台endian(字节顺序)不一样,传输表空间方式,需要做转换。
2、源库上做数据导出
1) 检查表空间自包含情况
如要传输的表空间存在以下情况,将不能进行传输:
a、表的索引在传输表空间上,而表在其他表空间上;
b、表在传输表空间上,而其LOB列在其他表空间;
c、分区表一些分区在传输表空间,另一些在其他表空间;
可以通过dbms_tts包来检查传输表空间上,是否存在违反规则的情况:
检查规则:
sql> exec dbms_tts.transport_check_set('TS_BILL',true);
查看结果:
sql> select * from transport_set_violations;
根据结果进行对象的删除或调整。
2) 通过数据泵导出传输表空间元数据
注:传输表空间的原则是只从数据库导出表空间元数据,然后将元数据导出文件和表空间数据文件传输到目标数据库上进行导入。
设置表空间只读:
sql> alter tablespace ts_bill read only;
导出元数据:
expdp \'/ as sysdba\' directory=dir dumpfile=ts_bill.dmp transport_tablespaces=ts_bill
3) 对数据文件实施字节顺序转换
由于源库平台和目标库平台字节顺序不同,源库数据文件传输到目标库后,将无法被识别,所以导入前需要实施转换。转换的方法有两种:在源库平台上转换( rman> convert tablespace) ;在目标库平台上转换( rman> convert datafile)。 本文介绍在源库平台上实施转换的方式,在目标库上转换将在下一篇介绍。
在源库上执行convert tablespace转换命令格式为:
rman> convert tablespace 表空间名 to platform. '目标平台型号'
db_file_convert_name '源平台数据文件目录','目标平台数据文件目录' # (如果源、目标库数据文件路径不同)
执行转换:
rman > convert tablespace ts_bill to platform. 'Solaris[tm] OE (64-bit) ' db_file_nae_convert '/u01/app/oracle/oradata','/opt/app/oracle/oradata';
rman提示转换后文件名为ts_bill_1.dbf
3、目标库上导入数据
1) 文件传输
将源库平台上生成的元数据导出文件ts_bill.dmp和转换后的数据文件ts_bill_1.dbf复制到目标库平台。
2) 导入数据
通过数据泵以transport_datafiles方式,将传输表空间导入目标数据库。
$ impdp \' / as sysdba\' directory=dir dumpfile=ts_bill.dmp transport_datafiles=ts_bill_1.dbf
表空间成功导入。
3) 表空间置为读写
表空间导入后仍为只读状态,置为读写。
sql> alter tablespace ts_bill read write
至此,整个传输表空间工作完成。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25438353/viewspace-688271/,如需转载,请注明出处,否则将追究法律责任。