ドキュメントがない Oracle データベースを担当しています。現時点では、テーブルがどのように作成されているかを知る必要があります。
このテーブルがどのプロシージャ、トリガー、またはその他のソースからデータを取得しているかを調べるにはどうすればよいですか?
DBA_DEPENDENCIES
または、さらに良いことに、テーブル (またはそれに相当するもの)をクエリしますUSER_
。どのオブジェクトがそれらに依存しているか、および誰がそれらを所有しているかを確認する必要があります。
select owner, name, type, referenced_owner
from dba_dependencies
where referenced_name = 'YOUR_TABLE'
ええ、INSERT が発生しているかどうかを確認するには、オブジェクトを透視する必要があります。
これも、上記の私のコメントから。
実稼働システムでない場合は、カスタム メッセージを使用して INSERT の前に TRIGGER- でユーザー定義の例外を発生させるか、INSERT からテーブルをロックして、それらに挿入しようとするアプリケーションが失敗するのを監視することをお勧めします。しかし、ええ、多くの怒っている人から電話を受けることもあります.
それは非常に簡単です;-)
SELECT * FROM USER_SOURCE WHERE UPPER(TEXT) LIKE '%NAME_OF_YOUR_TABLE%';
出力には、NAME_OF_YOUR_TABLE という名前のテーブルを本体で呼び出すすべてのプロシージャ、関数などが含まれます。
Name_Of_Your_Table、NAME_of_YOUR_table、NaMe_Of_YOUR_TaBlE などとして結果を取得するために UPPER(TEXT) を使用しているため、NAME_OF_YOUR_TABLE は大文字で記述する必要があります。
もう1つの考えは、v $ sqlにクエリを実行して、更新を実行するステートメントを見つけることです。モジュール/アクションから(または10gのprogam_idとprogram_line#で)何かを取得する場合があります。
監査したいようですね。
どうですか
AUDIT ALL ON ::TABLE::;
または、テーブルにDBMS_FGAポリシーを適用して、クライアント、プログラム、ユーザーを収集します。コールスタックも利用できる可能性があります。
DML の変更は *_TAB_MODIFICATIONS に記録されます。
トリガーを作成しなくても、LOG MINER を使用して、すべてのデータ変更と、どのセッションからの変更を見つけることができます。
トリガーを使用すると、SYS_CONTEXT 変数をテーブルに記録できます。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117
パーティーに遅刻!
v$sql についての Gary の言及も 2 番目です。クエリがフラッシュされていない限り、これにより迅速な回答が得られる場合があります。
現在のインスタンスでそれがわかっている場合は、上記で使用されているものの組み合わせが気に入っています。動的 SQL がない場合、xxx_Dependencies は機能し、うまく機能します。
それを xxx_Source に結合して、厄介な動的 SQL を取得します。
また、SQL*Plus の copy コマンド (注意! 非推奨!) を使用して開発インスタンスにデータを取り込みますが、imp または impdp でもデータを取り込むことができます。データの入出力が許可されているディレクトリについては、xxx_Directories を確認してください。