Oracleには、データベースを分析し、欠落している可能性のあるフィールドの関係を判別するのに役立つツールがありますか?150以上のテーブルを持つレガシーデータベースがあり、多くの関係が欠落しています。手作業で処理することもできますが、自動化されたツールが役立つ場合があります。したがって、外部キーの欠落などを見つけてください。
3 に答える
私はこれを数回しなければなりませんでした。私はそれが非常に人間の知性のようなものだと思います - データ ディクショナリ (EvilTeach のクエリなど) に対して多くのクエリを実行し、列からサンプル データをクエリし、アプリケーションによってデータがどのように作成されるかを調べ、ビジネス要件とユーザー プロセス。
たとえば、多くのレガシー アプリケーションでは、フロントエンド アプリケーションでチェックおよび実装される制約 (参照整合性制約を含む) を見つけます。これは、データが制約に従う (ほぼ 100% :) ことを意味しますが、データベースでは実際には制約されないことを意味します。レベル。楽しい結果がたくさん。
ツールがこれを自動的に実行し、有用な結果をもたらすことができるとしたら、私は驚かれることでしょう。
異なるテーブルで同じ名前とデータ型の列を検索することでPOSSIBLE外部キーrelationshinpを識別できると仮定すると、POSSIBLE外部キーの不在を見つけることができます。1つは主キーであり、もう1つはそのキーへの参照がありません。 。
次のようなクエリを使用できます。
select c1.TABLE_NAME, c1.COLUMN_NAME, c2.TABLE_NAME, c2.COLUMN_NAME
from user_tab_columns c1,
user_tables at1,
user_tab_columns c2,
user_tables at2
where c1.COLUMN_NAME = c2.COLUMN_NAME
and c1.DATA_TYPE = c2.DATA_TYPE
and c1.TABLE_NAME = at1.TABLE_NAME
and c2.TABLE_NAME = at2.TABLE_NAME
and c1.TABLE_NAME != c2.TABLE_NAME
/*and c1.TABLE_NAME = 'TABLE' --check this for one table
and c1.COLUMN_NAME = 'TABLE_PK'*/
and not exists (select 1
from user_cons_columns ucc,
user_constraints uc,
user_constraints uc2,
user_cons_columns ucc2
where ucc.CONSTRAINT_NAME = uc.CONSTRAINT_NAME
and uc.TABLE_NAME = ucc.TABLE_NAME
and ucc.table_name = c1.TABLE_NAME
and ucc.column_name = c1.COLUMN_NAME
and uc.CONSTRAINT_TYPE = 'P'
and uc2.table_name = c2.TABLE_NAME
and ucc2.column_name = c2.COLUMN_NAME
and uc2.table_name = ucc2.table_name
and uc2.r_constraint_name = uc.constraint_name
and uc2.constraint_type = 'R')
これ(スケッチ、ただし、決して最適化されていない)は、列名タイプの同等性のすべてのペアをスキャンし、一方がPKであり、もう一方がそれを参照していないかどうかを検出します。
しかし、ここで私はジェフリーに同意します。それは非常に人間的な知性のようなものであり、これを確実に行うツールはありません。いずれにせよ、あなたはそれを手でしなければならないでしょう。
これは良いスタートかもしれません
select column_name, table_name, data_type
from user_tab_cols
order by column_name, table_name