给你个定向错误信息的例子: bash-2.03$ bad_cmd bash: bad_cmd: command not found bash-2.03$ bad_cmd 2&>1.log bash-2.03$ more 1.log bash: bad_cmd: command not found bash-2.03$
上面是shell code,而不是perl code,我只是因用它的格式而已
sqlldr userid=%s/%s@%s control=%s log=%s bad=%s \ data=%s discard=%s direct=%s parallel=%s errors=%d rows=%d \ readsize=%d bindsize=%d;echo $?>%s;Use echo $? to print return value of previous command!
有没有类似返回之类的我只要获得返回值就可以了,然后就可以判断是否进行出错处理。
要是没有返回值这样的东西,有没有什么其它的好办法。请大家发表一下意见啊。
sql loader不会返回成功标志位,但是可以指定log和bad参数,
bad文件中会把所有失败的记录写进去也就是说,1000条数据,即使有900条数据不合法,sqlldr仍会把合法的那100条导进去我处理的方法是,如果bad文件中的记录条数与所有记录的条数的比率在5%,
就判断其不合法,并写error文件 (sqlldr这个是不能回退事务的,所以通过一张中间表导入较好)
silent=header,feedback,partitions > sql.log我是想在sqlldr运行过程中隐藏消息(标题,反馈,分区),当出现(错误,废弃)时生成小心,并定向到sql.log中,
现在面临的问题是当出现(错误,废弃)时,信息并不能定向到sql.log中,而是直接打印到屏幕了。
考虑过nohup但我现在有多个sqlldr要执行,若多个sqlldr同时执行时多个sqlldr之间可能会有影响。所以每个sqlldr都有自己单独的 log文件。
请大家继续帮忙啊!
sqlplus $DBID/$DBPASSWORD@$SERVER @update.sql >> $logfile
如果中途网络中断,
是不是可以通过检测log文件是否生成来判断呢 (没有试过)多个log文件的问题,是否可以考虑把文件名设成变量,
用系统时间或一个全局的number来做文件名标识呢
给你个定向错误信息的例子:
bash-2.03$ bad_cmd
bash: bad_cmd: command not found
bash-2.03$ bad_cmd 2&>1.log
bash-2.03$ more 1.log
bash: bad_cmd: command not found
bash-2.03$
data=%s discard=%s direct=%s parallel=%s errors=%d rows=%d \
readsize=%d bindsize=%d;echo $?>%s;Use echo $? to print return value of previous command!