OS の処理を行っている sh ファイルにアクセスしたい場合はどうすればよいでしょうか。
データベース内から OS を実行するには 3 つの方法があります。
CまたはJavaで記述されたOSライブラリへのPL/SQLラッパーである外部プロシージャ。Oracle 8.0 以降で使用できます。 詳細をご覧ください。
host
コマンドをエミュレートする Java ストアド プロシージャ。これは Java の手巻きラッパーですRuntime
。このコマンドは、oracle
OS ユーザーの強力な権限で実行されるため、この手順を一般的な用途に公開しないでください。代わりに、安全なユーザーに所有させ、ストアド プロシージャを記述して、OS 機能の特定の部分 (たとえば、実行するプロシージャ、実行するmkdir
関数ls
) を公開します。Oracle 8i 以降で可能です。 詳細をご覧ください。
DBMS_SCHEDULER。バックグラウンド データベース ジョブと同様に、スケジュールされた を使用して OS ジョブを実行できます。Oracle 10g 以降で使用できます。 詳細を見る
これら 3 つのオプションのうち、DBMS_SCHEDULER がおそらく最も安全なオプションです。その名前が示すように、時間に基づいてプログラムを実行することを目的としているcron
ため ( unix など)、オンデマンドで実行する (たとえば、トリガーを介して) には適していません。ただし、トリガーがなくてもビジネス ロジックを満たすことができる場合があります。外部プロシージャは、シェル スクリプトを実行するためのものではありません。
外部プログラムは外部であるため、データベース コンポーネントとの調整にはより多くの労力が必要です。これは、アプリケーションの新しいバージョンをリリースし、バックアップを行うときに適用されます。また、(たとえば) 開発環境とライブ環境が異なるプラットフォーム上にある場合にも問題になる可能性があります。
データベースに任意のコードを実行させるのは非常に悪い考えです。ほとんどのシナリオで必要なのは、パラメーターを実行可能ファイルに渡すためのメカニズムだけです。