迁移data or index from a OLTP db to a DATA Warehouse。
2、限制
10g前只能同平台,10g(含)以后可以跨平台,且function、procedure、sequence等存储在系统表空间的东西无法传输。
在 Oracle 数据库 10g 中,这个局限消失了:只要操作系统字节顺序相同,您就可以在平台之间传输表空间。不过,当在相同字节顺序的平台之间传输表空间时,不需要任何转换。
您怎么知道哪一种操作系统采用哪一种字节顺序?不需猜测或搜索互联网,相反只需简单地执行以下查询:
SQL> select * from v$transportable_platform order by platform_id;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ----------------------------------- --------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
5 HP Tru64 UNIX Little
6 AIX-Based Systems (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
12 Microsoft Windows 64-bit for AMD Little
13 Linux 64-bit for AMD Little
15 HP Open VMS Little
16 Apple Mac OS Big
3、注意事项
1)使用sysdba权限进行 2)若换schema的话需要tts_owners=test fromuser=test touser=test
4、操作步骤:
使用EXP/IMP等方法很慢,可能通过传输表空间快速安全的实现。此操作需要在SYSDBA的权限下进行,具体步骤如下:
1.检查所要迁移的表空间是否自包含就是检测是否符合传输表空间的基本条件)
exec sys.dbms_tts.transport_set_check('tablespace_name',true);
select * from sys.transport_set_violations;
如果无记录返回,则说明符合传输表空间的条件,如果有记录返回则不符合
2.设置所要传输表空间为只读:
alter tablespace tablespace_name read only;
3.使用exp工具导出所要传输表空间的元数据(metadata)
exp userid=\'sys/lclsys2008 as sysdba\' file=/opt/test.dmp log=/opt/test.log transport_tablespace=y tablespaces=tablespace_name
注意:这里使用SYSDBA时需要转义字符,在LINUX下用\',WINDOWS下使用单引号就可以
4.使用RMAN转换所要传输表空间的数据文件头为目标系统文件
登陆RMAN: connect target /
rman>convert tablespace "TABLESPACE_NAME" to platform 'Linux IA (32-bit)' format 'D:\xxx.dbf'
注意:TABLESPACE_NAME为传输表空间的名称,需要使用双引号且大写,Linux IA (32-bit)为目标平台的名称,可以在目标平台数据库中通过select platform_name form v$database来查询。
5.复制表空间转换后的数据文件及导出文件到目标平台
6.使用IMP工具加载数据库文件到目标平台:
imp userid=\'sys/ad as sysdba\' file=expdat.dmp transport_tablespace=y datafiles=('D:\xx.dbf') tablespaces=tablespace_name
注意在使用IMP和EXP时尽量使用相同的版本,以避免操作失败。