4

ドキュメントがない Oracle データベースを担当しています。現時点では、テーブルがどのように作成されているかを知る必要があります。

このテーブルがどのプロシージャ、トリガー、またはその他のソースからデータを取得しているかを調べるにはどうすればよいですか?

4

6 に答える 6

8

DBA_DEPENDENCIESまたは、さらに良いことに、テーブル (またはそれに相当するもの)をクエリしますUSER_。どのオブジェクトがそれらに依存しているか、および誰がそれらを所有しているかを確認する必要があります。

select owner, name, type, referenced_owner
from dba_dependencies
where referenced_name = 'YOUR_TABLE'

ええ、INSERT が発生しているかどうかを確認するには、オブジェクトを透視する必要があります。

これも、上記の私のコメントから。

実稼働システムでない場合は、カスタム メッセージを使用して INSERT の前に TRIGGER- でユーザー定義の例外を発生させるか、INSERT からテーブルをロックして、それらに挿入しようとするアプリケーションが失敗するのを監視することをお勧めします。しかし、ええ、多くの怒っている人から電話を受けることもあります.

于 2010-05-18T14:28:27.477 に答える
6

それは非常に簡単です;-)

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 は大文字で記述する必要があります。

于 2010-05-18T14:21:15.277 に答える
2

もう1つの考えは、v $ sqlにクエリを実行して、更新を実行するステートメントを見つけることです。モジュール/アクションから(または10gのprogam_idとprogram_line#で)何かを取得する場合があります。

于 2010-05-19T00:38:15.353 に答える
1

監査したいようですね。

どうですか

AUDIT ALL ON ::TABLE::;

または、テーブルにDBMS_FGAポリシーを適用して、クライアント、プログラム、ユーザーを収集します。コールスタックも利用できる可能性があります。

于 2012-04-24T03:01:36.977 に答える
1

DML の変更は *_TAB_MODIFICATIONS に記録されます。

トリガーを作成しなくても、LOG MINER を使用して、すべてのデータ変更と、どのセッションからの変更を見つけることができます。

トリガーを使用すると、SYS_CONTEXT 変数をテーブルに記録できます。

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions165.htm#SQLRF06117

于 2010-05-19T06:02:51.710 に答える
0

パーティーに遅刻!

v$sql についての Gary の言及も 2 番目です。クエリがフラッシュされていない限り、これにより迅速な回答が得られる場合があります。

現在のインスタンスでそれがわかっている場合は、上記で使用されているものの組み合わせが気に入っています。動的 SQL がない場合、xxx_Dependencies は機能し、うまく機能します。

それを xxx_Source に結合して、厄介な動的 SQL を取得します。

また、SQL*Plus の copy コマンド (注意! 非推奨!) を使用して開発インスタンスにデータを取り込みますが、imp または impdp でもデータを取り込むことができます。データの入出力が許可されているディレクトリについては、xxx_Directories を確認してください。

于 2016-08-31T12:59:36.270 に答える