使用迁移表空间迁移数据--Transportable Tablespaces

        今天又一同事让我帮忙说现在服务器的主板换了,说想把oracle的数据迁移到别人服务器上,让我帮忙,使用imp/exp或者是impdp/expdp这种效率有点低,所以研究下传输表空间做数据的迁移,先将研究过程记录如下:

        一、实现原理:

                1、使用export或者是Pump export数据泵将需要操作的表空间中的对象的元数据导出(Metadata);

                2、将表空间对应的数据文件和刚刚导出的文件复制到目标服务器上;

                3、再将表空间的对象元数据imp/impdp导入到目标数据库上;

               注:我自己觉得,没查找资料,元数据应该是类似对象的一些定义,那么我们做数据迁移,不关要做数据对象的迁移,还有数据,那么数据是存放到数据文件中的,定义是存放在system下的,所以,我们导出元数据是导出数据对象,导出数据是复制数据文件,因为元数据只还有对象的定义,所以应该很小,所以导出很快,这样tts的速度上可以提升不少;

 

       二、使用条件:

               1、跨系统的要求;

                从oracle10g版本以后,传输表空间可以跨系统,可以同过v$transportable_platform视图查询,例如:

使用迁移表空间迁移数据--Transportable Tablespaces_第1张图片

 

其中endian_format是自己顺序,及处理和存储的顺序,要想传输表空间,要两个系统的endian_format相同,否则要转化endian_format;

         2、在传输表空间前,要被传输的表空间必须处于read only的状态,如果是生产库可以使用RMAN,这里不研究;alter tabespace *** read only;

         3、源库和目标库的本地字符集和国家字符集必须相同;

         4、被传输的表空间如果还有XMLTypes,在导出元数据的时候必须使用exp,不能使用expdp,且constraints和triggers参数必须设置成Y;

               可以使用

                              select distinct p.tablespace_name from dba_tablespaces p,dba_xml_tables x,dba_users u,
                              all_all_tables t where t.table_name=x.table_name and
                              t.tablespace_name=p.tablespace_name and x.owner=u.username;查询哪些表空间中还有XMLTypes

         5、不能传输system和sys拥有的默认表空间;

         6、表空间为自包含表空间;

  

         三、实战操作:     

              1、确定平台是否支持,及endian format,我们可以使用

                    select d.name,i.version,d.platform_name,endian_format from
                               v$transportable_platform tp,v$database d,v$instance i
                    where tp.platform_name=d.platform_name and d.name=upper(i.instance_name);

                   --怎么转化字节顺序

               2、选择自包含表空间集

                    如何判断表空间是否是自包含的呢,我们可以使用DBMS_TTS包来验证,使用DBMS_TTS必须拥有execute_catalog_role或者是DBA的权限;

                   表空间的自包含有两种检验方式:

                   1、非严格方式:检查待传输表空间中对象,是否引用了其他未被传输的表空间中的对象;

                   2、严格方式:在非严格的基础上,还要检查是否被其他未传输的表空间的对象引用,

                   使用DBMS_TTS的默认情况下是非严格方式, 执行完之后可以使用transport_set_violations视图查看是否有引用的对象,例如:

                  

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

                              PL/SQL 过程已成功完成。

                   SQL> select * from transport_set_violations; 

                              未选定行

               3、生成可传输表空间

                    1、将表空间至于read only状态下:alter tablespace oacms_space read only;

                    2、导出表空间元数据,可以使用exp/expdp 根据本人习惯使用exp

                         这里不详细些了  因为本人的测试服务器连接不上了,注意,一定要用sys/system身份;

                    3、将表空间的数据文件传输到目标数据库中,将导出的dmp文件也传输到目标文件中,使用imp把元数据导入到目标数据库,成了,完成;

               

                      写到最后细节不愿意写了,哪天在做的时候截图出来,见谅!

你可能感兴趣的:(oracle)