配管の際にawkは私のDB2セッションを切断するように見えます
質問
私はKornシェル(ksh)の場合には、次のコマンドを実行しようとしています:
set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`
私は何を達成しようとしています、私は後で繰り返し処理できる配列に特定のテーブルの上にインデックスのリストを置いている。
問題は、私は上記のコマンドを実行すると、配列の内容は、(データベース接続が存在しないことを私に言っている)「SQL1024N」のエラーメッセージで始まり、である。
しかし、私はように文の終わりにawk
を削除する場合:
set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`
これは(まあ、それはデータを返している限り。もちろんawk
せずに、私は正しいデータをキャプチャするわけではない)だけで正常に動作します。
awk
はこれが影響したされた理由を誰もが知っていますか?
私は、このデータを取得する方法が複数ある感謝が、それはこれが起こっている理由として、私をバッフルます。
事前に感謝します。
解決
この場合、それはです処理する。それは、新しく作成されたシェルプロセス(およびそれに付随はdb2bpプロセス)が作成されていますが、データベースに接続するように言われていないことだ、切断になっていること何かではありません。 データベースへのこれは、明示的に接続(または再接続)することで解決する一つの方法は、あなたがそれらのいずれかの状況でいる知っている。
set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`
私はこの質問にはシステムカタログ約DB2とスクリプティングやawkの詳細であることを認識し、または他の私は、同じ結果を生成するために、いくつかの簡単なカタログ照会を推奨しているでしょう。
他のヒント
私はそれがawkのそれ自体だ疑い。標準出力がttyまたはコンソールに接続されている約たぶん、DB2は、特定のでしょうか?あるいは、少なくとも、それがパイプに接続したときに好きではありません。
これは珍しいものであり、ペッツが言うように、それはおそらく、DB2の癖です。
私は同様の問題、例えばを見てきましたDB2は、定義されたデータベースを持っていない、DB2コマンド文字列、前の時間またはTIMEXを使用してに接続します。
は、暗黙的な接続のデフォルトのデータベースを設定し、環境変数DB2DBDFTがあります。私は、この変数は(あなたは、アプリ開発者の方仮定)非DBAユーザに利用可能であるならば、私はよく分からないことを言って申し訳ありません。
:経由でこの変数を設定するかどうかは調べてみる価値ありのdb2set DB2DBDFT = $ {your_db_name}
再試行クエリます。
あなたが複数のデータベースを持っている場合は、あなたの作業を完了したら、は、ご使用の環境がDB2DBDFT変数の設定を解除することができますに接続することができます。
-xスイッチでdb2コマンドを試してみてください。
db2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"
...
私は、これはAWKにパイプ出力に私のできないことを硬化したインスタンスを持っていた。