清空用户下所有表的数据及约束!
数据库版本:ORACLE 10.2.0.4 有两个数据库,库A,库B,两库的结构一样,
库A的数据在不断更新,库B的数据不动,其它的数据库对象不变。 现要将库B中的表数据清空,但存储过程、触发器、包、包体不动,重新将库A的数据灌入库B。 现在碰到的第一个问题是:怎么清空用户下所有表的数据及约束,而存储过程、触发器、包、包体不动? 清空后库B的数据后,imp时,不使用“tables”选项(注:一个用户下有上千张表,如果将表名写到此选项中,会死人的,也不现实),
又要怎么操作,才能只将表的数据导入,而不覆盖存储过程、触发器、包、包体,注:数据库里有15个数据库用户。 附:我知道“drop user username cascade”可以清空用户下所有对象,然后再以用户模式,将被drop掉的用户的数据重imp,但这样作的话,存储过程、触发器、包、包体都被覆盖,现有我只想替换表中的数据,而其它的保持不变。哪位兄弟帮忙解释一下,谢谢!
数据库版本:ORACLE 10.2.0.4 有两个数据库,库A,库B,两库的结构一样,
库A的数据在不断更新,库B的数据不动,其它的数据库对象不变。 现要将库B中的表数据清空,但存储过程、触发器、包、包体不动,重新将库A的数据灌入库B。 现在碰到的第一个问题是:怎么清空用户下所有表的数据及约束,而存储过程、触发器、包、包体不动? 清空后库B的数据后,imp时,不使用“tables”选项(注:一个用户下有上千张表,如果将表名写到此选项中,会死人的,也不现实),
又要怎么操作,才能只将表的数据导入,而不覆盖存储过程、触发器、包、包体,注:数据库里有15个数据库用户。 附:我知道“drop user username cascade”可以清空用户下所有对象,然后再以用户模式,将被drop掉的用户的数据重imp,但这样作的话,存储过程、触发器、包、包体都被覆盖,现有我只想替换表中的数据,而其它的保持不变。哪位兄弟帮忙解释一下,谢谢!
解决方案 »
- oracle where and or问题
- hibernate对oracle进行分页查询问题
- 急求答案分不够可以再给 在workbench 从sqlserver2000 导入到Oracle 的问题
- 动态执行SQL语句出现“并非所有变量都已关联”的错误,详情内有介绍
- #########关于CONNECT的简单问题#########
- 谁有关于pl/sql的电子书?高分想送!谢谢啦!(在线等)
- 求助!jdbc访问oracle客户端的问题
- SOS,在线等候!!!请问在表中添加一个新列为ID,是要作为此表的唯一表示的,现在怎么给已有的记录来编号呢?
- 请问:使外键的约束失效的sql语句如何写啊?
- 急,急,,急:关于在ORACLE8i中表的导入导出问题?
- linux下怎么导入从windows导出的oracle的dmp,用sql plus
- 求一本ORACLE的经典教材
可得到一堆truncate语句,在A中执行即可清除某个用户下所有表的数据;至于导入数据,看数据量大不大,不大的话都导出为insert语句也可以。大的话还是用dmp,可以用windows的工具,如pl/sql developer, 因为这样导出选表很容易,有上千张表也不怕,全选即可。想不出什么好办法,供参考。
如果表间数据有约束,就先disable约束,再删除数据,或直接drop约束,再truncate数据2.导入时只是导所有表,那么你在exp时选择加部分参数:
constraints=n --不导出约束
triggers=n --不导出触发器
对于包和存储过程不好处理。不过你用的是10g,则推荐用expdp和impdp:
加参数:exclude=procedure,package,trigger --导出时排除包和过程、触发器
set trimspool on
set pagesize 0
spool c:\dis_all.sqlselect 'alter table ' || table_name || ' disable all triggers;' from user_tables;--先禁用外键,才能禁用相应的主键或唯一键。
select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type = 'R';select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type != 'R';select 'truncate table '|| table_name || ';' from user_tables;
spool off@c:\dis_all.sql*//* 导入之后执行以下部分,恢复触发器和约束。set trimspool on
set pagesize 0
spool c:\ena_all.sqlselect 'alter table ' || table_name || ' enable all triggers;' from user_tables;--先启用主键或唯一键,才能启用外键
select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type != 'R';select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type ='R';spool off@c:\ena_all.sql*/