expdp/imp 的Transport_datafiles 在 之前的Blog里有实例,参考下面blog的3.12小节:
Oracle expdp/impdp 使用示例
http://www.cndba.cn/Dave/article/1411
本说明的目的是描述创建可传输表空间 (TTS) 的方法,其中源数据库和目标数据库是基于 ASM 的。此方法使用标准实用程序,例如;数据泵和数据库包dbms_file_transfer。
本说明将说明在可传输表空间中创建和插入的工作示例。在示例中,两台服务器 host1 和 host2 位于不同的位置,每台服务器位于独立的 Hitachi 存储阵列上。服务器 host1 是源数据库,将容纳名为 db1 的数据库。服务器 host2(被视为目标服务器并将预订可传输表)将容纳名为 db2 的数据库。
示例如下:
本说明将说明在可传输表空间中创建和插入的工作示例。在示例中,两台服务器 host1 和 host2 位于不同的位置,每台服务器位于独立的 Hitachi 存储阵列上。服务器 host1 是源数据库,将容纳名为 db1 的数据库。服务器 host2(被视为目标服务器并将预订可传输表)将容纳名为 db2 的数据库。
TTS 实现图
设置 TTS 1 的
初步工作。在源数据库上创建或使用两个现有表空间。尽管没有必要有两个表空间,但这里只是为了执行对象依赖关系而显示的。请注意,此图中采用了 OMF,因此请将 init.ora 参数DB_CREATE_FILE_DEST设置为相应的磁盘组名称。
SQL>db_create_file_dest
字符串 +DATA
SQL db_create_file_dest显示参数
名称类型值
---------------------- ----------- ------------------------------>创建表空间tts_1;
SQL>创建表空间tts_2;
2. 在 TTS_1 中创建一个表,在 TTS_2 中创建一个索引,以确保表空间具有对象依赖关系:
SQL>连接 scott/tiger
Connected。
SQL>创建表emp_copy表空间tts_1从 emp 中选择 *;
从emp_copy中选择计数(*);
返回 SQL 的
10 行>在 emp_copy (empno)
2 表空间tts_2上创建索引emp_copy_i;
3. 检查以确保您有一个独立的可运输套件。Oracle提供了一个PLSQL包来帮助进行此检查。
SQL> 执行DBMS_TTS。TRANSPORT_SET_CHECK('tts_1,tts_2' TRUE);
然后查询TRANSPORT_SET_VIOLATIONS视图,以查看是否存在任何
依赖项冲突。
SQL> 从TRANSPORT_SET_VIOLATIONS中选择 * ;
没有行返回
4。创建一个新的服务名称条目,该条目将指向将传输表空间的目标数据库。例如,将以下行添加到 tnsnames.ora:
DB2 = (DESCRIPTION =
(ADDRESS_LIST = (ADDRESS =
(PROTOCOL = (PROTOCOL)(HOST = host2)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = host2.us.oracle.com)
(INSTANCE_NAME = db2)
)
5. 作为 SYSTEM,在两个数据库之间创建一个数据库链接。这是必需的,因为我们将使用DBMS_FILE_TRANSFER包在两个数据库之间移动元数据。
SQL>创建数据库链接 db2 连接到管理器 1 使用 'db2' 标识的系统;
5. 在源数据库 db1 中创建一个目录对象,以保存转储文件。由于我们使用的是ASM,因此这需要是一个ASM对象:
确保目录路径以“/”
SQL结尾>创建目录tts_dump为“+DATA/”;
6. 在源数据库中创建另一个目录对象,该对象指向操作系统 path,对于日志文件:
SQL>将目录tts_dump_log创建为“/export/home/tts_log/”;
7. 在源数据库中创建指向数据文件的目录对象。
SQL>目录tts_datafile创建为'+DATA/db1/datafile/';
8. 授予用户读/写访问权限,您将执行导出(仅当使用非特权用户时才需要):
SQL>授予对系统的目录tts_dump读、写;
SQL>授予对系统的目录tts_dump_log的读取、写入权限;
SQL>授予对系统的目录tts_dump_datafile的读取、写入权限;
9. 在目标数据库 db2 上重复最后四个步骤 (5-8)。
10. 将可传输集中的所有表空间设置为只读。
SQL> ALTER TABLESPACE tts_1只读;
SQL>更改表空间tts_2只读;
11. 检查源数据库
SQL上表空间的状态>从dba_tablespaces中选择tablespace_name、状态;
TABLESPACE_NAME状态
------------------------------ ---------
系统联机
撤消TBS1 联机
SYSAUX 联机
临时联机
用户联机
联机 撤消TTS_1联机
只读
TTS_2 只读
导出元数据
12.导出两个表空间
的元数据 [ora10g@host1]$ expdp system/manager1 directory=tts_dump dumpfile=tts1_db1.dmp logfile=tts_dump_log:tts.log
transport_tablespaces=tts_1,tts_2 transport_full_check=y
开始“SYSTEM”。SYS_EXPORT_TRANSPORTABLE_02“: system/******** 目录=tts_datafile dumpfile=tts1.dmp logfile=tts_dump_log:tts.log 传输
_tablespaces=tts_1,tts_2 transport_full_check=y
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/INDEX
处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
主表“SYSTEM”。SYS_EXPORT_TRANSPORTABLE_02“已成功加载/卸载
系统.SYS导出_可传输_02 的转储文件集为:
+DATA/tts1.dmp
作业”系统”。SYS_EXPORT_TRANSPORTABLE_02“于 14:00:34
成功完成 数据移动并启用 TTS
13。使用 DBMS_FILE_TRANSFER 将转储文件发送到目标
[ora10g@host1]$ sqlplus system/manger1
SQL>开始
2 dbms_file_transfer.put_file
3 (source_directory_object => 'tts_dump',
4 source_file_name => 'tts1_db1.dmp',
5 destination_directory_object => 'tts_dump',
6 destination_file_name => 'tts1_db1.dmp',
7 destination_database => 'db2');
8结束;
9 /
14.检查源数据库上正在传输的两个表空间的文件名。
SQL>从dba_data_files 2 中选择file_name
,其中tablespace_name如“TTS%”;
FILE_NAME
-------------------------------------------------+DATA/DB2/datafile/tts_1.294.590721319
+DATA/DB2/datafile/tts_2.295.586721335
15.使用DBMS_FILE_TRANSFER将两个数据文件传输到目标数据库。
TTS1 数据文件
SQL> 开始
2 dbms_file_transfer.put_file
3 (source_directory_object => 'tts_datafile',
4 source_file_name => 'tts_1.294.570721319',
5 destination_directory_object => 'tts_datafile',
6 destination_file_name => 'tts1_db1.dbf',
7 destination_database => 'db2');
8结束;
9 /
TTS2 数据文件
SQL> 开始
2 dbms_file_transfer.put_file
3 (source_directory_object => 'tts_datafile',
4 source_file_name => 'tts_2.295.586721335',
5 destination_directory_object => 'tts_datafile',
6 destination_file_name => 'tts2_db1.dbf',
7 destination_database => 'db2');
8结束;
9 /
16.在 host2(目标服务器)上,使用 DataPump 导入数据文件元数据。
imp.par 包含以下内容:
directory=tts_dump
dumpfile=tts1_db1.dmp
logfile=tts_dump_log:tts1.log
TRANSPORT_DATAFILES='+DATA1/tts1_db1.dbf','+DATA1/tts2_db1.dbf'
keep_master=y
注意,对于 TRANSPORT_DATAFILES 参数,您可以使用别名(dbms_file_transfer中的文件名),也可以使用系统生成由DBMS_FILE_TRANSFER生成的名称(这些名称以名称“File_Transfer.xxxx.xxxxxx'开头)。要确定名称系统生成的名称,只需执行
“cd +DATA/db2/datafile”,然后执行 ls –l 命令,即可使用 asmcmd 行工具。
[ora10g@host2]$ impdp system/oracle parfile=imp.par
Master table “SYSTEM”.”已成功加载/卸载SYS_IMPORT_TRANSPORTABLE_03“开始
”系统”。SYS_IMPORT_TRANSPORTABLE_03“: system/******** parfile=impdp.par
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/INDEX
处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
工作“系统”。SYS_IMPORT_TRANSPORTABLE_03“于15:05:00
17成功完成。将表空间切换回读写模式。
SQL>tts_1读写更改表空间;
SQL> ALTER TABLESPACEtts_2 读写;
18. 验证数据文件是否已成功插入。
SQL>从 v$datafile 中选择名称;
NAME
--------------------------------------------------
+DATA/DB2/datafile/system.271.599658207
+DATA/DB2/datafile/undotbs1.268.599658207
+DATA/db2/datafile/sysaux.270.599658207
+DATA/db2/datafile/users.267.599658209
+DATA/db2/datafile/example.262.599658459
+DATA/db2/datafile/tts2_db1.dbf
+DATA/db2/datafile/
tts1_db1.dbf 19.通过选择所需的表来验证到达那里的数据。
SQL>创建表emp_copy表空间tts_1为从 emp 中选择 *;
SQL> 从emp_copy中选择 count(*);
返回 10 行