oracle数据库的导入和导出

来源:互联网 发布:ubuntu wine使用教程 编辑:程序博客网 时间:2024/06/06 02:33
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)
原创粉丝点击