oracle触发器批量禁用,禁用trigger的问题:脚本批量导入多个dmp文件时,能否将trigger一直禁用...

如果constraint=n,这样的话,数据就会乱了,可能会出现大量重复导入的重复数据,还有可能会出现因为sequence造成的id(主键)已经存在了的,但相同id的数据就导不进来了(由于sequence的原因,这些数据实际上并不是和已经存在的id相同内容的记录)。

我试了通过在脚本中加入alter  table table_name disable all triggers;

对于少量的导入可以解决了这个问题,但是我脚本中写了个for循环,可能是每次执行的任务多些,总会有少量的文件导入时报错了:

IMP-00058: ORACLE error 4098 encountered

ORA-04098: trigger ZHANGSAN.TABLENAME_TRIG' is invalid and failed re-validation

Import terminated successfully with warnings.

脚本内容如下:

#!/bin/bash

#

filepath='/data/expdb/';export filepath

scripfile='/home/oracle/tools/impdb/';export scripfile

#get imp date from date.txt

logdates=`awk ' { print $1 } ' $scripfile'date.txt'`

for logdate in $logdates

do

tables='tablename'

sqlplus username/username<

spool trigger_status_1.txt

select trigger_name,status from user_triggers;

spool off

alter trigger TABLENAME_TRIG disable;

spool trigger_status_2.txt

select trigger_name,status from user_triggers;

spool off

exit

EOF

cd $filepath

tar -zxvf $tables$logdate'.dmp.tgz'

cd $ORACLE_HOME/bin/

./imp username/password buffer=2048000 file=$filepath$tables$logdate'.dmp' ignore=y commit=y indexes=n statistics=none filesize=1G tables=$tables log=$filepath'/log/imp_'$tables$logdate'.log' fromuser=username touser=username

done

下面是其中的date.txt文件内容:

20061201

20061202

20061203

20061204

20061205

20061206

20061207

20061208

20061209

20061210

20061211

20061212

20061213

20061214

20061215

20061216

20061217

20061218

20061219

20061220

20061221

20061222

20061223

20061224

20061225

20061226

20061227

20061228

20061229

20061230

20061231

我的理解是,每个dmp文件大小不一样,在一个dmp文件执行时,先将触发器状态变为disable,但是就在执行imp导入语句时,更小的dmp文件imp动作结束,create触发器的动作将trigger状态又变为了enable,此时再执行该imp动作就会报出上述错误。

呵呵,不知道上面描述的够不够清楚,我想请教各位,这种情况有没有办法避免总是将trigger状态变为enable,从而影响正在执行的其它imp动作。因为文件比较多,不太可能一个一个的手工执行,请大侠们指点一下,如果上面我的理解不正确,也请不吝赐教,多谢哈。。。

[本帖最后由 okayleo 于 2008-11-2 00:25 编辑]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值