使用imp oracle实用程序截断表或用新数据替换旧数据

时间:2018-04-16 19:56:52

标签: oracle oracle11g

我需要导入实用程序来删除旧数据,然后重新插入新数据。如果不使用数据泵,我怎么能这样做?

我无法使用数据泵的原因是因为我需要在应用服务器上运行此脚本,我没有权限在数据库服务器上运行此脚本。下面是我目前正在尝试解决的脚本

imp < username >/< password >@//< host > fromuser=< schema > touser=< schema > file=exp_$TODAY.dmp  log=exp_import_$TODAY.log ignore=y

1 个答案:

答案 0 :(得分:0)

IMP导入之前不能截断表,所以 - 你在这里运气不好。如果您可以使用数据泵导入,则可以使用TRUNCATE参数集REPLACE(这将删除现有数据)甚至SQL> select 'truncate table ' || tname ||';' from tab; 'TRUNCATETABLE'||TNAME||';' ---------------------------------------------- truncate table BONUS; truncate table DEPT; truncate table EMP; truncate table SALGRADE; truncate table WC; SQL> (删除表,创建表并加载数据) )。要求DBA提供对可用于导入目的的目录的访问权。

或者,由于您似乎正在导入所有内容,请考虑删除目标用户(使用级联选项),然后导入其对象。

或者,如果它不是太复杂,请创建一个截断表的脚本,例如

TRUNCATE TABLE

所以你在导入之前运行那些SQL> select 'alter table ' || table_name || ' disable constraint ' || constraint_name ||';' 2 from user_constraints 3 where constraint_type = 'R'; 'ALTERTABLE'||TABLE_NAME||'DISABLECONSTRAINT'||CONSTRAINT_NAME||';' --------------------------------------------------------------------------------------------- alter table EMP disable constraint FK_DEPTNO; SQL> 语句。

请注意 - 如果存在外键约束 - 除非您禁用它们,否则它们不允许您这样做;如上所述,您可以使用SQL为您创建SQL:

order_of_keys = ["id", "question", "choice1", "choice2", "choice3", "choice4", "solution"]