Oracle传输表空间
这两天一直在看文档当中的传输表空间部分。说起来十分惭愧,经过不断的尝试,总算完成了一次不太完美的传输表空间的实验。
一、传输表空间概述
首先来认识一下什么是传输表空间,传输表空间技术始于Oracle9i,不论是数据字典管理的表空间还是本地管理的表空间,都可以使用传输表空间技术;传输表空间不需要在源数据库和目标数据库之间具有同样的DB_BLOCK_SIZE块大小;使用传输表空间迁移数据比使用数据导入导出工具迁移数据的速度要快,这是因为传输表空间只是复制包含实际数据的数据文件到目标数据库的指定位置,而使用数据导入导出工具则是传输表空间对象的元数据到目标数据库。
二、传输表空间的方法
1、使用SQL*PLUS,RMAN,Data Pump工具实现手动的传输表空间。
2、使用EM工具中的传输表空间向导实现传输表空间。
三、跨平台传输表空间
从oracle 10g开始,oracle实现了跨平台的表空间传输,跨平台的意味着数据库可以从一种类型的平台迁移到另一中类型的平台上,大多数(但不是全部)的平台都支持传输表空间。首先必须通过查看v$transportable_platform视图查看oracle支持的平台,并确定每种平台的字节存储次序,注意:这一点非常重要。以下查询为oracle支持的各种平台及字节存储次序(版本为10.2.0.4),在跨平台表空间传输时,需要通过查询该视图进行平台和字节存储次序的比对。
SQL> select * from v$transportable_platform order by platform_name;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ------------------------------------ --------------
6 AIX-Based Systems (64-bit) Big
16 Apple Mac OS Big
19 HP IA Open VMS Little
15 HP Open VMS Little
5 HP Tru64 UNIX Little
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
18 IBM Power Based Linux Big
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
13 Linux x86 64-bit Little
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
12 Microsoft Windows x86 64-bit Little
17 Solaris Operating System (x86) Little
20 Solaris Operating System (x86-64) Little
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
19 rows selected.
四、两个数据库之间进行传输表空间的过程
1、如果是跨平台的表空间传输,需要检查两个平台支持的字节存储顺序,检查方法见如上文所述,如果可以确定源数据库和目标数据库属于同一平台,可以省略此步骤;
2、选择自包含的(self-contained)表空间,这里的限制相对于使用数据泵来说比较变态,实验中将会有一些粗略的介绍。
3、将源数据库上的选定表空间修改为read-only状态,使用expde工具生成传输表空间(集)。 //在这一步,如果两个平台间的字节存储次序不同,还需完成字节存储次序的转换
4、传输表空间及与表空间对应数据文件 (使用操作系统命令、ftp命令等方式)到目标数据库。 //字节存储次序的转换也可以在这一步完成
5、将源数据库的表空间恢复为read-write状态(可选)
6、在目标数据库,使用impdp工具导入表空间(集)
五、本次实验记录
本来设计的实验过程为:通过转换字节存储次序,实现跨平台的表空间传输。但是通过查询v$transportable_platform视图发现所拥有的平台(windows 64bit和Linux x86-64)的字节存储次序相同,并且在测试过程中出现了字符集不兼容的错误。由于条件不具备,无奈之下只好选择了两个Linux平台数据库(10.2.0.4和11.2.0.1)之间的表空间传输。
实验限制一:Windows 64bit和Linux x86-64的字节存储次序相同
SQL> select * from v$transportable_platform where platform_name like 'Microsoft%64%' or platform_name like 'Linux%64%';
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ------------------------------------ --------------
11 Linux IA (64-bit) Little
8 Microsoft Windows IA (64-bit) Little
13 Linux x86 64-bit Little
12 Microsoft Windows x86 64-bit Little
实验限制二:表空间导入时,由于字符集不兼容出现的保存信息
C:\Users\Manganese>impdp system/oracle dumpfile=expdat.dmp directory=dump_dir transport_datafiles=D:\app\Manganese\oradata\orcl\test01.dbf logfile=tts_import.log
Import: Release 11.2.0.1.0 - Production on 星期一 3月 17 22:08:29 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** dumpfile=expdat.dmp directory=dump_dir transport_datafiles=D:\app\Manganese\oradata\orcl\test01.dbf logfile=tts_import.log
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
ORA-39123: 数据泵可传输的表空间作业中止
ORA-29345: 无法使用不兼容的字符集将表空间插入到数据库中
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 因致命错误于 22:08:30 停止