解除约束的oracle的数据库备份方法

oracle的数据库备份功能,exp和imp看起来很简单,实际上还是很麻烦的。
因为表与表之间有复制的约束关系,要导入的话,肯定先后顺序的,但是imp并不能做到先后顺序。所以你必须
步骤1:exp表结构,实现如下:
exp sys/sys file=e:/new.dmp ignore=y rows=n
注意rows=n,这样只导出表结构,而不导出任何数据.
步骤2:imp将表结构导入
步骤3:然后将表结构的约束条件全部disable,还有,把trigger也得disable掉!具体如下:
select 'alter table ' || table_name || ' disable constraint ' || constraint_name  || ';' from user_constraints where constraint_type='R';
constraint_type为R代表外键约束,为P代表主键约束
结果要点击全搜索按钮,再点击第一栏的列标题全选中。复制
new一个command windows,粘贴命令,不行的话,回车一下,在粘贴。然后:
select 'truncate table ' || table_name||';' from user_all_tables ,再重复上面步骤。
将表的数据全部删除干净。否则重新导入的时候很可能数据冲突。
步骤4:exp sys/sys file=e:/new.dmp ignore=y full=y (注意:如果普通用户不能full=y,只有sys用户权限能)
步骤5:imp sys/sys file=e:/new.dmp log=dible_db ignore=y
步骤6:再select 'alter table ' || table_name || ' enable constraint ' || constraint_name  || ';' from user_constraints where constraint_type='R';重复上面的动作把约束又加回去。
本来这样就OK了,但是却发现很多表的约束加不回去!查找发现加不回去的表都是它的父表没有字表对应的数据!才进一步发现是步骤4和步骤5很多表导出的数据个数和导入的数据个数不一致!尤其是数据多的表。见鬼了。怎么办?
于是产生了步骤7:
步骤7:将问题表的父表一一找出。单独导入和导出
exp
dcs_sys/aaa@newapp file=d:/new2.dmp tables=(ta_psrbasicinfo,fdc_flightinfo,ta_class)
imp
dcs_sys/aaa@newapp file=d:/new2.dmp
ignore=y fromuser=dcs_sys touser=dcs_sys tables=(ta_psrbasicinfo,fdc_flightinfo,ta_class)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值