ITPub博客

首页 > 数据库 > Oracle > Oracle 表空间迁移

Oracle 表空间迁移

原创 Oracle 作者:xiao8731 时间:2015-09-23 22:26:38 0 删除 编辑

平台必须支持表空间迁移(v$transportable_platform)

convert tablespace只能在源端执行

convert datafile : 只要能连接到源端就可以

convert database :必须在源端,且源端数据库必须出于read only,此为源端和目标端endian format必须一致。

 

convert :不会传输用户自定义类型

 

前提:

         目标库安装好数据库软件及实例。

         源库oracle版本低于或等于目标库。

         源库和目标库字符集限制

1、检查需要迁移的表空间是否支持表空间迁移

SQL> exec sys.dbms_tts.transport_set_check('TEST_TB',true);

SQL> select * from sys.transport_set_violations;

no rows selected

--如果查询不到数据,则该表空间支持表空间迁移,否则不支持。

 

比如有一个table在表空间A里,其上的一个index在表空间B里。

那么对于表空间A,其中的对象不依赖表空间外的对象,所以是个自包含,但是表空间以外的index却依赖表空间内的对象,不是一个完全自包含。再表空间迁移表空间可以完全,但是index在表空间迁移会丢失,反过来,对于表空间B,表空间里的对象INDEX是依赖表空间A里的TABLE对象的。所以这里不满足自包含条件。表空间迁移也就会出现问题。

2、检查源平台与目标平台信息支是否支持传输操作

SQL> select platform_name,endian_format from v$transportable_platform;

SQL> select d.platform_name,endian_format from v$transportable_platform tp,v$database d where tp.platform_name=d.platform_name ;

 

如果2端平台字节顺序不一致,则在传输时需要转换字节顺序。

3、表空间设置为只读模式

SQL> alter tablespace test_tb read only;

4、源端创建数据泵目录

SQL> create directory dmp as '/home/oracle/dir_dmp/';

SQL> grant read ,write on directory dmp to test;

5、创建传输表空间的元数据dump文件

[oracle@db ~]$ expdp \'sys/310012 as sysdba\' directory=dmp dumpfile=test_tb.dmp logfile=test_tb.log transport_tablespaces=test_tb

 

6、如跨平台需转换字节顺序,则先转换数据文件

注意:如果字节顺序一致,可跳过此步。

[oracle@db ~]$ rman target /

RMAN> convert tablespace test_tb to platform 'Microsoft Windows IA (64-bit)' format '/home/oracle/backup/%U';

7、拷贝表空间元数据dump文件和数据文件到目标端

操作系统拷贝文件(可使用scp或者ftp)

8、目标端创建数据泵目录

SQL> create directory dmp as '/OracleBackup/dir_dmp/';

9、传输的表空间附加到目标数据库

创建表空间所需要附加到的用户

create user u1 identified by u1;

 

[oracle@zytk35 ~]$ impdp \'sys/310012 as sysdba\' directory=dmp dumpfile=test_tb.dmp transport_datafiles=/OracleBackup/dir_dmp/test_tb.266.887909987,/OracleBackup/dir_dmp/test_tb.267.887913297  remap_schema=test:u1

 

注意:数据文件名称和路径即为这边的文件名,这边可通过RMAN进行修改调整

10、验证源库和目标库数据一致性

SQL> select owner,segment_name,segment_type,tablespace_name from dba_segments where tablespace_name = 'TEST_TB';

SQL> select owner,segment_name,segment_type,tablespace_name from dba_segments where owner = 'TEST';

 

分析源库和目标库中表的数据

 

由于:T1表的索引对象再表空间USERS中,表空间迁移后丢失了索引对象,需要重建。

11、把表空间改为读写模式

SQL> alter tablespace test_tb read write;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9515241/viewspace-1807661/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2015-06-04

  • 博文量
    5
  • 访问量
    9055