一、检查是否满足传输表空间的条件
1、检查源库与目标库的平台支持

源库:
SQL> select d.name,i.version,d.platform_name,endian_format from v$transportable_platform tp,v$database d,v$instance i
  2  where tp.PLATFORM_NAME=d.platform_name;
  
NAME      VERSION           PLATFORM_NAME                                                                    ENDIAN_FORMAT
--------- ----------------- -------------------------------------------------------------------------------- --------------
ORCL      11.2.0.1.0        Microsoft Windows x86 64-bit                                                     Little

目标库:
SQL> select d.name,i.version,d.platform_name,endian_format from v$transportable_platform tp,v$database d,v$instance i
  2  where tp.PLATFORM_NAME=d.platform_name;
NAME      VERSION           PLATFORM_NAME                                                                    ENDIAN_FORMAT
--------- ----------------- -------------------------------------------------------------------------------- --------------
ORCL      11.2.0.1.0        Linux x86 64-bit                                                                 Little

查看哪些平台支持跨平台的传输表空间特性:

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 x86 64-bit                                                     Little
         13 Linux x86 64-bit                                                                 Little
         15 HP Open VMS                                                                      Little
         16 Apple Mac OS                                                                     Big
         17 Solaris Operating System (x86)                                                   Little
         18 IBM Power Based Linux                                                            Big
         19 HP IA Open VMS                                                                   Little
         20 Solaris Operating System (x86-64)                                                Little
         21 Apple Mac OS (x86-64)                                                            Little
20 rows selected

结论:虽然操作系统平台不同,但是数据库版本相同,字节顺序也相同(不需要转换字节),并且支持跨平台传输。

2、检查自包含的表空间集
SQL> exec dbms_tts.transport_set_check('tts',true);
PL/SQL procedure successfully completed

SQL> select * from transport_set_violations;
VIOLATIONS
----------------------------------------------

结果返回0行记录,说明满足自包含条件。即tts表空间中的对象未引用其它未传输表空间中的对象(非严格方式)

SQL> exec dbms_tts.transport_set_check('tts',true,true); --严格方式

PL/SQL 过程已成功完成。

SQL> select * from transport_set_violations;

未选定行

结果返回0行记录,说明待默认的tts表空间中的对象未引用其它未传输表空间中的对象,而且tts表空间中的对象也未被其它未传输的表空间中的对象引用。

二、执行表空间的传输
1、源数据库将要传输的表空间生成可传输表空间集
1.1 将待传输的表空间置为read only状态
SQL> alter tablespace tts read only;

表空间已更改。

1.2 执行data pump export 命令导出表空间集元数据

C:\Users\Administrator>expdp system/RUSKY@orcl dumpfile=tbs_tts.dmp directory=test_tts_dump transport_tablespaces=tts nologfile=y;

Export: Release 11.2.0.1.0 - Production on 星期二 4月 28 00:02:40 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/********@orcl dumpfile=tbs_tts.dmp directory=test_tts_dump transport_tablespaces=tts nologfile=y;
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:
  E:\DUMPDIRECORY\TBS_TTS.DMP
******************************************************************************
可传输表空间 TTS 所需的数据文件:
  G:\TESTDATA\TTS.DBF
作业 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已于 00:03:38 成功完成

1.3 转换字节顺序
两个平台字节顺序一致,不需要转换

1.4 复制传输集到目标数据库
源数据库tts表空间对应的数据文件和expdp生成的该表空间的元数据文件TBS_TTS.DMP
可传输表空间 TTS 所需的数据文件:
G:\TESTDATA\TTS.DBF
转储文件集为:
E:\DUMPDIRECORY\TBS_TTS.DMP

此处将这TBS_TTS.DMP文件上传到目标数据库的/home/oracle/dump_dir/目录
SQL> select * from dba_directories; --目标数据库的dump_dir如下:
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ -----------------------
SYS DUMP_DIR /home/oracle/dump_dir

将源数据文件G:\TESTDATA\TTS.DBF上传到目标数据库的/u01/app/oracle/oradata/orcl/目录

1.5 将源数据库中的表空间tts状态设置为read,write
SQL> alter tablespace tts read write;

表空间已更改。

2、在目标数据库导入表空间集
2.1 检查源数据库和目标数据库的blocksize
SQL> select block_size from dba_tablespaces where tablespace_name='TTS'; --源数据库
BLOCK_SIZE
----------
8192

SQL> show parameter block_size; --目标数据库

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL>

两都相同,不需要设置。如果两者不同,则必须设置相关的DB_nK_CACHE_SIZE初始化参数,否则导入时会报错。
如:ALTER SYSTEM SET DB_8K_CACHE_SIZE=20M;

2.2 目标数据库上导入源数据

[oracle@rhel201 VH-share]$ impdp system/rusky dumpfile=TBS_TTS.DMP directory=dump_dir nologfile=y transport_datafiles=/u01/app/oracle/oradata/orcl/TTS.DBF REMAP_SCHEMA=RUSKY2:RUSKY

Import: Release 11.2.0.1.0 - Production on Mon Apr 27 09:37:38 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** dumpfile=TBS_TTS.DMP directory=dump_dir nologfile=y transport_datafiles=/u01/app/oracle/oradata/orcl/TTS.DBF REMAP_SCHEMA=RUSKY2:RUSKY 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 09:37:46

导入命令中的remap_schema=rusky2:rusky是指在源数据库中的用户rusky2,导入到目标数据库中变为rusky。
因为目标数据库中没有rusky2及rusky用户,所以使用remap_schema来转换。导入完成后新创建的用户rusky需要修改密码,否则无法使用。
transport_datafiles:被传输表空间对应的数据文件新路径,如果需要指定多个数据文件,相互之间以逗号做分隔。


2.3 将刚导入的表空间状态置为read write
alter tablespace tts read write; --在11g,导入的表空间会自动置为read write,10g需要手动修改。

2.4 修改rusky用户的密码及测试
SQL> alter user rusky identified by rusky;

User altered.

SQL> conn rusky/rusky;
Connected.