質問

テーブルに特定の変更を加えると、データベース内のトリガーの一部が無効になります。しかし、彼らはまだ活動しているようです。唯一の問題は、SQL Developerを使用している場合、トリガーの左側にトリガーが無効であることを示す赤い×印が表示されることです。それは大きな問題ですか?

トリガーを再コンパイルして問題を修正できることはわかっていますが、これが本当に懸念する価値のある問題なのかどうかはわかりません。その場合は、これまでに行った何百もの変更を確認し、問題の原因を突き止める必要があります。ありがとう。

役に立ちましたか?

解決

データベース オブジェクトに変更をデプロイすると、それに依存するコードはすべて無効になります。これは、トリガー、ビュー、ストアド プロシージャに影響します。ただし、次回そのコードが呼び出されるとき、データベースは自動的にそのコードを再コンパイルします。

ですから、これについては心配する必要はありませんね。そうですね、ある程度までは。問題は、トリガー (またはその他) の無効化は、そのトリガーの動作に影響を及ぼし、副作用を伴う可能性のある変更が行われたことを示すフラグであるということです。最も明白な副作用は、トリガーがコンパイルされないことです。さらに微妙なことに、トリガーはコンパイルされますが、操作中に失敗します。

したがって、変更によって根本的に何かが壊れていないことを確認するために、開発環境でトリガーの再コンパイルを強制することをお勧めします。ただし、すべてがオンデマンドで再コンパイルされると確信しているため、実稼働環境に変更をデプロイするときにそのステップをスキップできます。私たちの神経次第です:)

Oracle は、スキーマ内のすべての無効なオブジェクトを自動的に再コンパイルするメカニズムを提供します。

  • 最も簡単なのは、使用することです DBMS_UTILITY.COMPILE_SCHEMA(). 。しかし、これは 8i 以降危険であり (Java ストアド プロシージャのサポートにより循環依存関係が発生する可能性があったため)、すべてのオブジェクトが最初に正常にコンパイルされることは保証されなくなりました。

  • 9i では Oracle がスクリプトを提供してくれました $ORACLE_HOME/rdbms/admin/utlrp.sql これは物事を再コンパイルしました。残念ながら、SYSDBA アクセスが必要です。

  • 10g では、UTL_RECOMP パッケージが追加されました。これは、基本的にそのスクリプトが実行するすべての処理を実行します。これは、多数のオブジェクトを再コンパイルする場合に推奨されるアプローチです。残念ながら、SYSDBA アクセスも必要です。 もっと詳しく知る.

11g では、Oracle はきめ細かい依存関係管理を導入しました。これは、テーブルへの変更がより細かい粒度 (基本的にはテーブル レベルではなく列レベル) で評価され、変更によって直接影響を受けるオブジェクトのみが影響を受けることを意味します。 もっと詳しく知る.

他のヒント

全く大きな問題ではありません。

再コンパイルするためにそれらを右クリックして行くのは良いこと...私は私自身の経験からこれを書いています。

あなたが変更したコードとともにエラーがある場合は、修正することができるように表示されます。エラーが発生した場合に問題(行番号、変数名など)がどこにあるのか、コンパイラが表示されます。

トリガが作動している場合、Oracleはトリガーを起動し、自動的に再コンパイルされた後にトリガを再試行すると、ORA-04068エラーがトラッピングされている可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top