二、关于跨平台传输表空间
从oracle10g开始,你终于可以实现跨平台传输表空间了。无数的dba欢呼着,雀跃着。。。。
尽管仍非全部,但已经有很多平台可以支持跨平台的传送。可以通过查询V$TRANSPORTABLE_PLATFORM视图来确认哪些平台可以支持,该视图同时也可以获取各平台的ENDIAN_FORMAT(字节顺序byte ordering)
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 17 Solaris Operating System (x86) Little 18 IBM Power Based Linux Big
已选择17行。
提示:关于字节顺序(byte ordering)
一些操作系统(包括 Windows)在低位内存地址中用最低有效字节存储多字节二进制数据;因此这种系统被称为低地址低字节序。相反,其它的操作系统(包括 Solaris)将最高有效字节存储在低位内存地址中,因此这种系统被称为低地址高字节序。当一个低地址高字节序的系统试图从一个低地址低字节序的系统中读取数据时,需要一个转换过程— 否则,字节顺序将导致不能正确解释读取的数据。不过,当在相同字节顺序的平台之间传输表空间时,不需要任何转换。
如果平台间的endian不同,那么在执行导入操作之之前必须首先转换源平台的表空间到目标格式,如果平台间endian format相同,则可以跳过转换的步骤,即使是不同平台。当然前提是各平台的数据库版本都不低于10g。
在表空间可被传输到不同平台之前,数据文件的文件头必须能够识别其所属的原平台是什么,对于oracle数据库初始化参数中COMPATIBLE置为10.0.0或更高之后,你必须至少将表空间置为read-write一次,这点非常重要,你现在还不知道我在说什么?没关系,很快就会知道的。
1、当你计划进行传输表空间之前,你有必要了解下列的一些信息:
源库和目标库的字符集和国家字符集必须相同。
要传输的表空间不能与目标服务器现有表空间名称重复。
有关联关系的对象(比如物化视图)或包含对象(比如表分区)一般情况下不能被传送,除非所有的关联对象都在表空间集(tablespace set)中。
自oracle10gR2开始,可以传输含XMLTypes的表空间,不过必须使用imp/exp而不能选择数据泵(impdp/expdp)。并确保imp/exp命令的CONSTRAINTS和TRIGGERS参数设置为Y。
下列脚本可以列出数据库中哪些表空间含XMLTypes:
select distinct p.tablespace_name from dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t where t.table_name = x.table_name and t.tablespace_name = p.tablespace_name and x.owner = u.username
2、传输表空间的特性并非功能较多的,还有些其它方面的限制:
高级队列(Advanced Queues):可传输表空间的特性并不支持8.0兼容的高级队列
系统表空间(SYSTEM Tablespace Objects):不能传输SYSTEM表空间或者SYS用户拥有的对象。
映射类型(Opaque Types):由应用指定并且映射到数据库(如RAW,BFILE等)的类型可以被传输,但是它们并不会被做为跨平台转换的一部分。其实际类型是什么只有指定它的应用清楚,所以必须保证这个应用解决读取各种endian问题后再考虑将其传输到新平台。
浮点数据(Floating-Point Numbers):BINARY_FLOAT和BINARY_DOUBLE类型可以使用数据泵导入导出但不支持EXP。
3、兼容性
从oracle10g开始,不论目标库运行在相同或不同的平台,表空间都可以传输到相同或更高版本的oracle库。但是如果生成传输表空间集oracle版本比目标库oracle版本高的话,数据库就会提示错误。
下表列出了源表空间和目标表空间之间在不同传输情况下oracle最低兼容版本。
|
传输条件
|
源表空间数据库
|
目标表空间数据库
|
|
数据库在相同平台
|
8i
|
8i
|
|
源库与目标库的block size不同
|
9i
|
9i
|
|
数据库在不同平台
|
10g
|
10g
|