表空间传输
来源:互联网 发布:关于网络信息收集 编辑:程序博客网 时间:2024/05/29 09:30
TRANSPORT_TABLESPACE 导出可传输表空间元数据,通过这个选项对一组自包含,只读的表空间只导出元数据,然后在操作系统层将这些表空间的文件拷贝到目标平台,并将元数据导入数据字典 这个过程称为插入 plugging 即完成了迁移
1、可移植表空间的应用场景 :
把数据从源数据库移动到数据仓库
把数据从升级数据库移动到数据集市
把数据从数据仓库移动到数据集市
执行表空间时间点恢复 (PITR)
归档历史数据
1) 确定平台的 Endian 格式
2) 检测
2) 确保表空间为自包含并使其只读
3) 用 exp、expdp等实用程序导出元数据
4) 转换数据文件以匹配 Endian 格式 ( 若一致可跳过)
5) 拷贝文件到目标系统
6) 使用 imp导入实用程序导入元数据
源端数据库: linux 32位 oracle10g
目标数据库: window 32 oracle11g
3、创建测试表空间
create tablespace test datafile '/u01/oracle/oradata/ora10g/test01.dbf' size 10m autoextend on maxsize 100m;
----------- ----------------------------------------------------------------------------------------------------- --------------
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
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
12 Microsoft Windows 64-bit for AMD Little
13 Linux 64-bit for AMD Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big
2)检测自包含
自包含: 表示用于传输的内部表空间集没有引用指向外部的表空间集
自包含又分为两种:一种自包含表空间集 第二为:完全(严格)自包含表空间集
SQL> desc dbms_tts
PROCEDURE TRANSPORT_SET_CHECK
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
TS_LIST CLOB IN
INCL_CONSTRAINTS BOOLEAN IN DEFAULT
FULL_CHECK BOOLEAN IN DEFAULT
部分输出
常见的以下情况是违反自包含原则的
1,索引在内部表空间集,而表在外部表空间集违反了自保护(相反的,如果表在内部表空间集,而索引在外部表空间集,则不违反自包含原则)
2,分区表一部分区在内部表空间集,一部份在外部表空间集(对于分区表,要么全部包含在内部表空间集中,要么全不包含)
3,如果在传输表空间同时传输约束,则对于用完整性约束,约束指向的表在外部表空间集,则违反自包含约束,如果不传输约束,则与约束指向无关。
4,表在内部表空间集,而lob列在外部表空间集,则违反自包含约束。
通常可以通过系统包DBMS_TTS来检查表空间是否自包含,验证可以两种方式执行;非严格方式和严格方式。
非严格自包含检查,下面的检查时通过的
conn /as sysdba
EXEC dbms_tts.transport_set_check('TEST',TRUE)
PL/SQL procedure successfully completed.
EXEC dbms_tts.transport_set_check('表空间',TRUE)
严格自包含检查,但是严格检查时不通过的,因为索引不再同一个表空间
PL/SQL procedure successfully completed.
SQL> select * from transport_set_violations;
no rows selected
例如表在A表空间,索引在B表空间,如果只传输A的话,就会违反自包含约束条件,表上的索引就会失效,传输不完整,解决方法:同时传输A和B两个表空间。在此我们只传输test表空间,索引在后面重建
3) 确保表空间为自包含并使其只读
RMAN>transport tablespace test tablespace destination '/export/home/oracle/oradata/users' auxiliary destination '/export/home/oracle/oradata/test_5 ';
使用exp或expdp的transport_tablespace=y参数导出表空间的元数据 即结构信息Exp方式:
exp userid=\'/ as sysdba\' transport_tablespace=y tablespaces=test file=/home/oracle/test.dmp
使用SYS用户只导出tsport表空间的元数据(结构信息),而不是真实数据,因此容量比较小
expdp方式:
create directory dir_dump as '/home/oracle';
grant read,write on directory dir_dump to public;
expdp system/oracle directory=dir_dump dumpfile=test.dmp transport_tablespaces=test transport_full_check=y
transport_full_check=y 是完全(严格)自包含表空间集检测
6) 拷贝文件到目标系统
使用 imp导入实用程序导入元数据
如果Endian格式不一致 ,将第4步/tmp/test_5 文件进行恢复,
3> '/u01/oracle/oradata/ora10g/TRANS_5','/u01/oracle/oradata/ora10g/test01.dbf ';
Imp方式:
convert datafile 'D:\oradata\EYGLE\DATAFILE\TRANS_5'
2> db_file_name_convert
3> 'D:\oradata\EYGLE\DATAFILE\TRANS_5','D:\oradata\EYGLE\DATAFILE\TRANS01.DBF';
使用imp导入方式 默认以追加方式插入表空间元数据+数据文件
imp userid=\'/ as sysdba\' file=/home/oracle/exp_tsport.dmp fromuser=tsport touser=tsport transport_tablespace=y tablespaces=tsport datafiles=/u01/app/oracle/oradata/LEO2/tsport01.dbf
create directory dir_dump as 'D:\app\Administrator\oradata\ora11g\';
grant read,write on directory dir_dump to public;
impdp system/oracle directory=DIR_DUMP dumpfile=test.dmp transport_datafiles='D:\APP\ADMINISTRATOR\ORADATA\ORA11G\TEST01.DBF
C:\Users\Administrator>impdp system/oracle directory=DIR_DUMP dumpfile=test.dmp transport_datafiles='D:\APP\ADMINISTRATOR\ORADATA\ORA11G\TEST01.DBF'
Import: Release 11.2.0.1.0 - Production on Mon May 19 20:30:10 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
UDI-28002: operation generated ORACLE error 28002
ORA-28002: the password will expire within 2 days
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 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/******** directory=DIR_DUMP dumpfile=test.dmp transport_datafiles='D:\APP\ADMINISTRATOR\ORADATA\ORA11G\TEST01.DBF'
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
ORA-39123: Data Pump transportable tablespace job aborted
ORA-29345: cannot plug a tablespace into a database using an incompatible character set
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" stopped due to fatal error at 20:30:12
源端:
SQL> select * FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET%';
PARAMETER VALUE
------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
目标端:
SQL> select * FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET%';
PARAMETER VALUE
---------------------------------------------------------------- -----------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
导入成功后
select tablspace_name,status from dba_tablespace;
alter tablespace test read write;
解决办法:修改目标数据库的字符集
由于源和目标数据库的字符集不一致或者不是子集的关系,所以造成的不能导入表空间字符集
通过
修改字符集 http://www.xifenfei.com/2237.html
安装csscan相关数据字典
SQL> @?/rdbms/admin/csminst.sql
csscan userid="'"sys/oracle as sysdba"'" full=y fromchar=ZHS16GBK tochar=AL32UTF8 log=/tmp/check.log capture=y array=1000000 process=4
通过查看/tmp/check.log.txt 因为检测结果没有Truncation(截断数据)
/Lossy
(丢失数据)都不存在记录,所以不用查看错误日志,
如果发现不为0,需要检查err日志,然后先处理丢这些记录,然后再转换
startup mount
alter system enable restricted session;
alter system set job_queue_processes=0 scope=memory;
alter system set aq_tm_processes=0 scope=memory;
alter database open;
alter database character set internal_use ZHS16GBK;
shutdown immediate;
startup;
select value$ from props$ where name='NLS_CHARACTERSET';
SQL> select * FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET%'
2 ;
PARAMETER VALUE
------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
字符集转换后,目标端和源端的字符集一样
[oracle@dba ~]$ expdp system/oracle directory=dir_dump dumpfile=test.dmp transport_tablespaces=test transport_full_check=y
C:\Users\Administrator>impdp system/oracle directory=DIR_DUMP dumpfile=test.dmp transport_datafiles='D:\APP\ADMINISTRATOR\ORADATA\ORA11G\TEST01.DBF'
Import: Release 11.2.0.1.0 - Production on Tue May 20 08:18:48 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
UDI-28002: operation generated ORACLE error 28002
ORA-28002: the password will expire within 1 days
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 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/******** directory=DIR_DUMP dumpfile=test.dmp transport_datafiles='D:\APP\ADMINISTRATOR\ORADATA\ORA11G\TEST01.DBF'
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 08:18:56
目标端:
SQL> select name,enabled from v$datafile;
NAME ENABLED
-------------------------------------------------- ----------
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\SYSTEM01.DBF READ WRITE
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\SYSAUX01.DBF READ WRITE
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\UNDOTBS01.DBF READ WRITE
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\USERS01.DBF READ WRITE
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\COMPRESS01.DBF READ WRITE
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\COMPRESS02.DBF READ WRITE
D:\APP\ADMINISTRATOR\ORADATA\ORA11G\TEST01.DBF READ ONLY
已选择7行。
SQL> alter tablespace test read write;
Tablespace altered.
总结:
注意:
1源端和目标的的字符集必须一致或者是子集和超级的关系
2、在导入前目标全的用户必须存在
3、到出前必须将传输的表空间设置为read only
4、需要以sysdba权限来完成迁移工作
5 源端和目标端block 大小要一致
6 TTS 要求source 和 Target 数据库版本一致,否则就出出现Time zone 的问题,导致impdp 无法成功进行。
报错如下:
Oracle TTS ORA-39322: Cannot use transportable tablespace with different timezone version 说明
http://blog.csdn.net/tianlesoftware/article/details/7298547
7表空间需要“自包含”,不符合“自包含”的情况如下
(1)【索引】表空间里的表上存在索引,但是这个索引的基表在另外一个表空间上(后面的实验将会演示违反这种约束的情况);
(2)【LOB】 表空间里存在lob列,但是表上的LOB字段存储在其他表空间上;
(3)【约束】表空间中的表上有约束,但是其他的约束在另外的表空间上;
(4)【分区表】表空间上存在一些分区,但是其他的其他的分区在另外的表空间上;
小结:
(1)源和目标数据库的COMPATIBLE初始化参数必须>=8.1,且必须是企业版
(2)如果被传输的表空间的block size和目标库的标准块size不一样,那么目标库的COMPATIBLE必须>=9.0
(3)从Oracle 8i开始,TTS就可以向后跨版本(比如8i-->9i)
(4)从Oracle 10g开始,TTS可以跨平台,如果源和目标的平台字节序(endianness)相同就不需要额外的步骤,否则还需要进行字节序转换
(5)源和目标数据库必须具有相同的character set andnational character set.
(6)TTS支持RAW device file system.
(7)10g前如果目标库存在同名的表空间,则不能TTS,从10g(COMPATIBLE>=10.0.0)开始,借助tablespace rename特性可以解决这一问题
(8)TTS不能处理system表空间及system表空间里的Objects
(9)自包含检查
SQL> EXEC sys.DBMS_TTS.TRANSPORT_SET_CHECK('data, indx',TRUE);
SQL> SELECT * from sys.transport_set_violations;
(10)cannot transport objects owned bythe user SYS.
SQL> SELECT segment_type, owner||'.'||segment_name"OWNER.SEGMENT_NAME",partition_name
FROM dba_segments
WHERE owner = 'SYS' AND tablespace_name IN ('DATA', 'INDX')
ORDER BY owner, segment_type, segment_name;
(11)Database entities
在Oracle 10g版本前,TTS不支持
– Materialized views/replication
– Function-based indexes
– Scoped REFs
– 8.0-compatible advanced queues with multiple recipients
(12)source 和 target 的time zone version 要一致,否则在import时会报ORA-39322 的错误。
http://blog.csdn.net/tianlesoftware/article/details/7267582
- 可传输表空间
- 传输表空间
- 传输表空间
- oracle表空间传输
- 传输表空间
- 传输表空间简介
- 表空间的传输
- oracle 传输表空间
- 表空间的传输
- 传输表空间
- 可传输表空间
- 表空间传输
- oracle 传输表空间
- RMAN传输表空间
- mysql传输表空间
- 传输表空间
- 传输表空间
- 使用RMAN传输表空间!
- 多媒体类 java
- LeetCode: Count and Say [037]
- ProtoBuffer
- 《C++ Primer第四版》学习笔记(四)变量和基本类型 - 字面值常量
- [leetcode] python Remove Duplicates from Sorted Array II
- 表空间传输
- JAVA顺序读取Properties文件
- OCP-1Z0-051 第150题 集合运算MINUS,INTERSECT
- 装逼第一弹——Fourier变换的意义(答强哥问)
- 黑马程序员---空中网面试题
- TCP协议3次握手/4次握手
- 绽放青春,播撒希望
- VC++常用代码段
- 游泳的呼吸技术