オンザフライで出力を圧縮できるように、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
基本的に、「deadlock」という単語が bcp 出力メッセージに表示される場合、再試行します。
2 つの質問
- このアプローチは合理的に見えますか?
- デッドロック以外に心配する必要がある bcp エラーは何ですか?
特に一時的な bcp エラーの検出に関心があり、再試行できます。
複合ステートメントを使用して、圧縮前に bcp データの周りにヘッダーとフッターを挿入できるようにしていますが、例を簡略化するために省略しています。