数据泵表空间传输
检测表空间支持的操作系统以及字节顺序
如果是夸平台的进行表空间传输,需要检查2个平台的是否在oracle的支持列表中,而且他们的字节顺序(ENDIAN_FORMAT)要一致,不然要进行转换(oracle 10g以上才支持)
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.1表空间的自包含有2种标准
A.非严格方式:检查要传输表空间的对象是否有引用其他表空间的对象
B.严格方式:(1)检查要传输表空间的对象是否有引用其他表空间的对象
(2)检查要传输表空间的对象是否被其他表空间引用
2.2 使用DBMS_TTS.TRANSPORT_SET_CHECK检查表空间自包含性
语法:DBMS_TTS.TRANSPORT_SET_CHECK(
Ts_list IN CLOB,
Incl_constraints IN BOOLEAN DEFAULT FALSE,
Full_check IN BOOLEAN DEFAULT FALSE);
其中:
ts_list是要检查的表空间列表,有多个的话,中间用逗号隔开
incl_constraints:是否检查约束,默认为否
full_check:是否执行严格自包含方式的检查,默认为否
例如:
DBMS_TTS.TRANSPORT_SET_CHECK(‘MYTEST’,TRUE);--进行非严格方式的检查
DBMS_TTS.TRANSPORT_SET_CHECK(‘MYTEST’,TRUE,TRUE); ---进行严格方式的检查
2.3 使用视图TRANSPORT_SET_VIOLATIONS检查结果
如果检查的结果是有违反规则的话,在视图中会查询到相关信息,如果没有违反则视图返回为空。
源端生成传输表空间集
3.1 将要传输的表空间置为READ ONLY
SQL> ALTER TABLESPACE MYTEST READ ONLY;
3.2 执行expdp导出表空间集元数据
执行导出的用户必须要有EXP_FULL_DATABASE角色或者DBA角色
expdp system/oracle directory=dump_file_dir dumpfile=mytest.dmp transport_tablespaces=mytest logfile=mytest.log
复制传输表空间的数据文件以及生成的dump文件至目标数据库
(1)数据文件可以自由选择路径存放,后续会在impdp导入的时候用参数进行转换
(2)dump文件要放在目标数据库的directory目录下
将源端数据库的传输表空间置为READ WRITE
SQL>ALTER TABLESPACE MYTEST READ WRITE;
导入传输表空间集到目标数据库
6.1 检查源端和目标端的BLOCK SIZE
源端:
SQL> SELECT BLOCK_SIZE FROM DBA_TABLESPACES WHERE TABLESPACE_NAME='MYTEST';
BLOCK_SIZE
----------
8192
目标端:
SQL> SHOW PARAMETER BLOCK_SIZE;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 16384
由于2者间的BLOCK SIZE不同则需要设置目标数据库对应的源端的DB_Nk_CACHE_SIZE大小
第一次由于没有设置相关的块大小参数导致报错:
C:\Users\Administrator>impdp system/oracle dumpfile=mytest.dmp directory=dump_fi
le_dir logfile=mytest.log transport_datafiles='D:\app\Administrator\oradata\myte
st.ora'
Import: Release 11.2.0.1.0 - Production on 星期二 9月 17 10:03:21 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** dumpfile=mytest.dm
p directory=dump_file_dir logfile=mytest.log transport_datafiles='D:\app\Adminis
trator\oradata\mytest.ora'
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
ORA-39123: 数据泵可传输的表空间作业中止
ORA-29339: 表空间块大小 16384 与配置的块大小不匹配
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 因致命错误于 10:03:29 停止
SQL>ALTER SYSTEM SET DB_16K_CACHE_SIZE=20M;
自动会调整为16的整数倍为32M
6.2 导入元数据
impdp system/oracle dumpfile=mytest.dmp directory=dump_file_dir logfile=mytest.log transport_datafiles='D:\app\Administrator\oradata\mytest.ora'
6.3 将传输表空间置为READ WRITE
SQL> ALTER TABLESPACE MYTEST READ WRITE;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25269462/viewspace-772834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25269462/viewspace-772834/