使用copy 数据文件+导入metadata的方式迁移数据
可以实现跨平台传输表空间
COLUMNPLATFORM_NAME FORMAT A36
SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_NAME;
如果发现源、目标数据库的endian不相同,需要使用rman convert 转换,否则不需要
源、目标数据库必须拥有兼容的字符集。
字符集相同
源数据库的字符集必须是目标数据库的子集。(下面必须全部满足)
(1) 源数据库版本必须大于10.1.0.3
(2) 表中的列不包含semantics的定义信息,最大字符长度限制和目标数据库相同。
(3) 不包含clob数据类型,或者两个数据库的字符集同为single-byte orboth multibyte.
两个数据库必须拥有兼容的国家字符集
必须满足下面其中之一
(1)国家字符集相同
(2)source databaseis in version 10.1.0.3 or higher,并且没有NCHAR, NVARCHAR2, or NCLOB类型的数据
目标数据库中不能有相同名称的表空间。(传输之前rename一下)
底层依赖的对象必须全部包含在表空间集合中。
1.tablespace+partition
2. 备份数据到cd中
3. 拷贝只读表可能关键到多个数据库
4. 归档历史数据
5. 执行spitr 基于时间点的表空间恢复
1. 检查endian format,查看是否需要使用rman convert 转化endian(如果是相同平台可以忽略这一步)。
2. 选择一个自包含的表空间集合。
3. 在源库端,将表空间置为read only模式,并且生成可传输的表空间集合。(export metadatawith transportable tablespace)
4. 传输表空间集合(使用scp或者其他的传输方式将expdp导出的元数据以及数据文件发送到目标服务器上)
5.恢复表空间为read write模式(可选)
6.在目标端,导入表空间结合(import metadata)
test@ORCL>
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
-------------------------------------------------------------------------------------------------------------------
Linux x8664-bit Little
test@ORCL>
SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BYPLATFORM_NAME;
PLATFORM_IDPLATFORM_NAME ENDIAN_FORMAT
------------------------------------------------------------------------------------------------------------------------------
6 AIX-Based Systems(64-bit) Big
16 Apple MacOS Big
19 HP IA OpenVMS Little
15 HP OpenVMS Little
5 HP Tru64UNIX Little
3 HP-UX (64-bit) Big
4 HP-UX IA(64-bit) Big
18 IBM Power BasedLinux Big
9 IBM zSeries BasedLinux Big
10 Linux IA(32-bit) Little
11 Linux IA(64-bit) Little
13 Linux x8664-bit Little
7 Microsoft Windows IA(32-bit) Little
8 Microsoft Windows IA(64-bit) Little
12 Microsoft Windows x8664-bit Little
17 Solaris Operating System(x86) Little
20 Solaris Operating System(x86-64) Little
1 Solaris[tm] OE(32-bit) Big
2 Solaris[tm] OE(64-bit) Big
19 rows selected.
这里都是用Linux x86 64-bit 都是little endian 所以不需要使用rman convert 转换
(记得转换前先设置 表空间 read only 状态,保证数据文件在一个一致性的状态)
test@ORCL>
select t.name , d.name from v$tablespace t,v$datafile d where t.ts#=d.ts# ;
NAME NAME
------------------------------------------------------------------------------------------------------------------------
SYSTEM /u01/apps/oracle/oradata/orcl/system01.dbf
UNDOTBS1 /u01/apps/oracle/oradata/orcl/undotbs01.dbf
SYSAUX /u01/apps/oracle/oradata/orcl/sysaux01.dbf
USERS /u01/apps/oracle/oradata/orcl/users01.dbf
EXAMPLE /u01/apps/oracle/oradata/orcl/example01.dbf
IOTTBS /u01/apps/oracle/oradata/orcl/iottbs01.dbf
IOTEXTBS /u01/apps/oracle/oradata/orcl/iotextbs01.dbf
UNDOTBS1 /u01/apps/oracle/oradata/orcl/undotbs02.dbf
DEXTBS /u01/apps/oracle/oradata/orcl/dextbs01.dbf
SQLTDBS /u01/apps/oracle/oradata/orcl/sqlttbs01.dbf
10 rows selected.
传输iotextbs 表空间对应数据文件
/u01/apps/oracle/oradata/orcl/iotextbs01.dbf
如果没有输出,表示是自包含的表空间
sys@ORCL> EXECUTEDBMS_TTS.TRANSPORT_SET_CHECK('iotextbs',true) ;
PL/SQL procedure successfully completed.
sys@ORCL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
no rows selected