0
点赞
收藏
分享

微信扫一扫

How to Create Transportable Tablespaces Where the Source and Destination are ASM-Based


 

       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 行

 

 

 


举报

相关推荐

0 条评论