exp" 可传输表空

exp可传输表空间

exp --help帮助中可以看见这样的一个参数

TRANSPORT_TABLESPACE 导出可传输表空间元数据

通过这个选项对一组自包含,只读的表空间只导出元数据,然后在操作系统层将这些表空间的书记文件拷贝到目标平台,并将元数据导入数据字典 这个过程称为插入 plugging 即完成了迁移

对于传输表空间有一个重要的概念:自包含 (self-contained)
在表空间的传输中,要求表空间集为自包含
自包含: 表示用于传输的内部表空间集没有引用指向外部的表空间集
自包含又分为两种:一种自包含表空间集 第二为:完全(严格)自包含表空间集

常见的一下情况是违反自包含原则的
1,索引在内部表空间集,而表在外部表空间集(相反的,如果表在内部表空间集,而索引在外部表空间集,则不违反自包含原则)
2,分区表一部分区在内部表空间集,一部份在外部表空间集(对于分区表,要么全部包含在内部表空间集中,要么全不包含)
3,如果在传输表空间同事传输约束,则对于用完整性约束,约束指向的表在外部表空间集,则违反自包含约束,如果不传输约束,则与约束指向无关。
4,表在内部表空间集,而lob列在外部表空间集,则违反自包含约束。

通常可以通过系统包DBMS_TTS来检查表空间是否自包含,验证可以两种方式执行;非严格方式和严格方式。


eg:做一个简单是实验来证实:

假如test 表空间存在一个表test ,其上存在索引存储在USERS表空间;

SQL>create table test as select rownum id,username from dba_users;
SQL>create index ind_id on test(id) tablespace users;

用 sys用户执行非严格自包含检查(full_check=false)
SQL>connect /as sysdba
SQL>exec dbms_tts.transport_set_check('TEST',TRUE);
SQL>select * from TRANSPORT_SET_VIOLATIONS;
执行严格自包含检查(full_check=true)
SQL>exec dbms_tts.transport_set_check('TEST',TRUE,true);
SQL>select * from TRANSPORT_SET_VIOLATIONS;

对于test表空间来说非严格自包含检查成功通过,执行严格自包含检查无法通过。

我们反过来对users表空间进行非严格自包含检查测试
SQL>exec dbms_tts.transport_set_check('USERS',TRUE);
SQL>select * from TRANSPORT_SET_VIOLATIONS;
非严格自包含检查都无法通过

那么我们来同时对多个表空间进行传输问题是不是能得到解决呢?测试下
SQL>exec dbms_tts.transport_set_check('TEST,USERS',TRUE,true);
SQL>select * from TRANSPORT_SET_VIOLATIONS;
严格自包含检查也可以成功通过


表空间自包含检查完后进行表空间传输就方便了

(1)首先将表空间设置成只读表空间
SQL>alter tablespace users read only;
(2)导出表空间
exp username/password tablesapces=users tranport_tablespace=y file=exp_users.dmp
此时导出的元数据,比较小
(3)转移需要数据,元数据exp_users.dmp,数据文件user01.dbf传输到目标主机,如果通过FTP传输需要注意用BIN二进制传输。
(4)在目标数据库中将表空间插入到数据库中
imp username/password tablesapces=users tranport_tablespace=y file=exp_users.dmp datafiles='user01.dbf'

 

如果表空间包含多个数据文件该怎么办呢?下面是解决办法:

imp transport_tablespace=y datafiles=('数据文件1全路径','数据文件2全路径',...) tablespaces=目标表空间名称 file=dmp文件全路径.dmp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值