2016-08-24 4 views
0

DB2テーブルの1つにトリガーがあります。私は必要なのは、トリガが実行されるたびに、それはLinuxのシェルスクリプトを呼び出す必要があります。Linuxシェルスクリプト用のDB2関数の記述方法

これを行う方法 - 他のプロセスと同じですか?私のトリガーがシェルスクリプトの代わりにJavaプロセスを呼び出すのであれば、そのプロセスのバイトコード(.classファイル)を..SQLLIB/functionに置き、関数を定義することでジョブが実行されます。

これはLinuxスクリプト、微妙な違いはありますか? 私は数日はLinuxを持っていませんが、配備はすぐ近くにあり、ちょっと変わっています。

TIA。

答えて

1

Making Operating System Calls from SQL については、サンプルコードを含む良い記事があります。

+0

私が今作成したものが今実行されているかどうかを確認します。有用な情報源です。これまでにLinux Redhatでこれをやったことはありますか? DB2は10.5です。 – user6401178

+0

Javaを使用していませんが、データがテーブルに挿入されたときにETLプロセスを呼び出すために使用します - はい – MichaelTiefenbacher

+0

これまでに..SQLLIB /関数の周りを回りましたか?それは私のためにそれを台無しにするものです。リソースがそのディレクトリになければならない場合は、多くのことが容易になります – user6401178

2

トリガーを含むSQLからシェルスクリプトを呼び出すことはできません。あなたが説明できる方法でJava UDFを作成し、次にRuntime.exec()を使用してスクリプトを呼び出すことができます。

セキュリティリスクを導入する以外に、データの一貫性に影響を与える可能性があることに注意してください(トランザクションはロールバックできますが、スクリプトを "アンランニング"できません)あなたのスクリプトが戻るまで)。

非同期プロセスを使用して外部アクションをデータベーストランザクションから切り離す方がよい場合があります。例として、トリガーによってログ表にレコードが挿入され、外部プロセスがそのログ表をスケジュールどおりに読み取り、新しいレコードが見つかったときに必要なアクションを実行してから、処理されたレコードを削除します。

+0

共同サイン。私は、データベースが外部プロセスをフォークするのをやめさせることをどれだけ避けるべきかを強調することはできません。デーモンを実行してイベントをポーリングするか、メッセージキューソリューションを使用するほうがはるかに優れています。 DB2には、Websphere MQ(または現在呼び出されているもの)に直接書き込むことができる関数が含まれています。 –

関連する問題