导出与导入后对象采用不同表空间的实现方法

如果是整个表空间的 导出导入,则可直接采用可传输的表空间特性,具体步骤如下:

1.先检测要导出的表空间:即检查该表空间的所有对象是否都在这个表空间中,如果有部分对象在别的表空间,则无法导出该表空间。

  采用sys.dbms_tts.transport_set_check过程进行检测

    BEGIN sys.dbms_tts.transport_set_check('bgmapdata',TRUE);END;

  执行好后,查看表transport_set_violations是否有记录,若有则表明有对象存在于别的表空间中

    select * from sys.transport_set_violations;

总结:如果该表有记录,则必须对该表指出的这些对象重新置于本表空间中,否则会提示ora-29341:可传送集不是自包含的。

 检测成功后,在执行第二步

2.将表空间置于只读状态

 

alter tablespace bgmapdata READ only;
3.执行导出操作

 

 

EXP transport_tablespace=y tablespaces=(bgmapdata) file=d:\dd.dmp

执行后提示输入用户,此时输入:sys/change_on_install@fd as sysdba

注:1)执行可传输的表空间导出,必须采用sys用户,否则提示:

          EXP-00044: 必须以 'SYSDBA' 身份连接, 才能进行时间点恢复或可传输的表空间导入
          EXP-00000: 导出终止失败

      2)sys/change_on_install@fd as sysdba 该用户名密码不能直接在exp导出语句中写,如果写成          

         EXP userid=\'sys/change_on_install@fd as sysdba\' transport_tablespace=y tablespaces=(bgmapdata) file=d:\dd.dmp

         则提示 LRM-00112: 参数 'userid' 不允许有多个值

4.拷贝dmp文件到需要导入的机器,如放在d盘下

5.执行导入

   imp file=d:\dd.dmp  transport_tablespace=y datafiles=/home/oradba/ff.dbf

   同样会提示输入用户名,与导出的一样,采用sys用户

 

但如果只是想导出表空间某几个表,而表空间又不一样,则执行步骤如下

1.导出

  exp username/password@sid file=d:\xx.dmp tables=(table1,table2)

 

2.拷贝dmp文件到目的机器

3.在准备导入的库上先创建好要导入的表

   可以采用将源库上的创建表脚本导出后修改下表空间先创建好

4.执行导入,导入时将错误忽略 ignore=y

  imp username/password@sid fromuser=username touser=username file=d:\xx.dmp ignore=y

 

 

 

 


 

posted on 2012-03-26 14:56  蓝紫  阅读(14392)  评论(2编辑  收藏  举报