我们将命名管道与 Sybase bcp 一起使用,以便我们可以即时压缩输出。
Sybase bcp 实用程序不会在其退出代码中返回太多信息。Sybase 文档指导用户检查进程编写的错误消息。
这是我们使用的错误处理习惯用法的释义,脚本的非 bcp 部分中的一些错误检查已被删除以缩短示例。
while :
do
{
rm -f $fifo
mkfifo $fifo
cat $fifo &
CatPid=$!
bcp $db.$owner.$table out $fifo -c $db_creds >$log 2>&1
grep -qi deadlock $log || break
# Must have been a deadlock, clean up.
kill $CatPid
} > $output
done
基本上,如果“死锁”一词出现在 bcp 输出消息中,我们会再试一次。
两个问题
- 这种方法看起来合理吗?
- 除了死锁之外,我们还需要担心哪些其他 bcp 错误?
我对检测瞬时 bcp 错误特别感兴趣,我们可以再试一次。
我们使用复合语句,以便我们可以在压缩之前在 bcp 数据周围插入页眉和页脚,但为了简化示例,我省略了它。