♣
题目部分
在Oracle中,数据迁移之可传输表空间(Transportable Tablespaces)是什么?
♣
答案部分
数据迁移也是面试官经常性问的一些问题。最常见的问题是:异构平台迁移有哪些常用的办法?若异构平台迁移可以考虑exp/imp、expdp/impdp、可传输表空间、OGG等,Oracle 11gR2也支持了部分异构平台的数据库。本节着重介绍可传输表空间。
可传输表空间主要用于库对库的表空间复制,要进行传输的表空间必须置于READ ONLY模式。如果生产库不允许将表空间置为READ ONLY模式,那么也可以通过RMAN备份创建可传输表空间。要使用可传输表空间的特性,要求Oracle至少是8i企业版或更高版本。如果是相同操作系统平台相互导入,那么Oracle 8i及以上版本均可支持,但如果是不同操作系统平台,那么数据库版本至少是Oracle 10g,被传输的表空间既可以是字典管理,也可以是本地管理,并且从Oracle 9i开始,被传输表空间的BLOCK SIZE可以与目标数据库的BLOCK SIZE不同。
可传输表空间最大的优势是其速度比exp/imp或unload/load要快得多。因为可传输表空间主要的工作方式是复制数据文件到目标路径,然后再使用exp/imp或expdp/impdp等工具来导出导入表空间对象的元数据到新数据库。
从Oracle 10g开始,可以实现跨平台传输表空间了。尽管不能支持所有的平台,但已经有很多平台可以支持跨平台的传送。可以通过查询V$TRANSPORTABLE_PLATFORM视图来确认哪些平台可以支持,该视图同时也可以获取各平台的ENDIAN_FORMAT(字节序)。
1SYS@lhrdb> col PLATFORM_NAME for a35
2SYS@lhrdb> SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;
3PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
4----------- ----------------------------------- --------------
5 1 Solaris[tm] OE (32-bit) Big
6 2 Solaris[tm] OE (64-bit) Big
7 3 HP-UX (64-bit) Big
8 4 HP-UX IA (64-bit) Big
9 5 HP Tru64 UNIX Little
10 6 AIX-Based Systems (64-bit) Big
11 7 Microsoft Windows IA (32-bit) Little
12 8 Microsoft Windows IA (64-bit) Little
13 9 IBM zSeries Based Linux Big
14 10 Linux IA (32-bit) Little
15 11 Linux IA (64-bit) Little
16 12 Microsoft Windows x86 64-bit Little
17 13 Linux x86 64-bit Little
18 15 HP Open VMS Little
19 16 Apple Mac OS Big
20 17 Solaris Operating System (x86) Little
21 18 IBM Power Based Linux Big
22 19 HP IA Open VMS Little
23 20 Solaris Operating System (x86-64) Little
24 21 Apple Mac OS (x86-64) Little
2520 rows selected.
在执行可传输表空间之前,需要注意以下几点内容:
① 源库和目标库的字符集和国家字符集必须相同。
② 要传输的表空间不能与目标服务器现有表空间名称重复。
③ 有关联关系的对象(例如物化视图)或包含对象(例如表分区)一般情况下不能被传送,除非所有的关联对象都在表空间集(tablespace set)中。
④ 从Oracle 10gR2开始,可以传输含XMLTypes的表空间,不过必须使用imp/exp而不能选择数据泵(impdp/expdp),并确保imp/exp命令的CONSTRAINTS和TRIGGERS参数设置为Y。
下列脚本可以列出数据库中哪些表空间含XMLTypes:
1SELECT DISTINCT P.TABLESPACE_NAME
2FROM DBA_TABLESPACES P, DBA_XML_TABLES X, DBA_USERS U, ALL_ALL_TABLES T
3WHERE T.TABLE_NAME = X.TABLE_NAME
4AND T.TABLESPACE_NAME = P.TABLESPACE_NAME
5AND X.OWNER = U.USERNAME;
可传输表空间在功能方面有如下的限制:
① 高级队列(Advanced Queues):可传输表空间的特性并不支持高级队列。
② 系统表空间(SYSTEM Tablespace Objects):不能传输SYSTEM表空间或者SYS用户拥有的对象(使用SYS用户可以导入的)。
③ 映射类型(Opaque Types):由应用指定并且映射到数据库(如RAW,BFILE等)的类型可以被传输,但是它们并不会被作为跨平台转换的一部分。其实际类型是什么只有指定它的应用清楚,所以,必须保证这个应用能解决读取各种ENDIAN问题后再考虑将其传输到新平台。
④ 浮点数据(Floating-Point Numbers):BINARY_FLOAT和BINARY_DOUBLE类型可以使用数据泵导入导出,但不支持exp。
从Oracle 10g开始,无论目标库运行在相同或不同的平台,利用传输表空间都可以将一个表空间传输到相同或更高版本的Oracle库。但是,如果目标库的版本比源库低的话,那么就不能利用可传输表空间了。
& 说明:
有关可传输表空间的具体的实验过程案例可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-1987949/、http://blog.itpub.net/26736162/viewspace-1987953/、http://blog.itpub.net/26736162/viewspace-1987957/、http://blog.itpub.net/26736162/viewspace-1987961/、http://blog.itpub.net/26736162/viewspace-1987971/、http://blog.itpub.net/26736162/viewspace-1987974/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗