1

Oracleには、データベースを分析し、欠落している可能性のあるフィールドの関係を判別するのに役立つツールがありますか?150以上のテーブルを持つレガシーデータベースがあり、多くの関係が欠落しています。手作業で処理することもできますが、自動化されたツールが役立つ場合があります。したがって、外部キーの欠落などを見つけてください。

4

3 に答える 3

2

私はこれを数回しなければなりませんでした。私はそれが非常に人間の知性のようなものだと思います - データ ディクショナリ (EvilTeach のクエリなど) に対して多くのクエリを実行し、列からサンプル データをクエリし、アプリケーションによってデータがどのように作成されるかを調べ、ビジネス要件とユーザー プロセス。

たとえば、多くのレガシー アプリケーションでは、フロントエンド アプリケーションでチェックおよび実装される制約 (参照整合性制約を含む) を見つけます。これは、データが制約に従う (ほぼ 100% :) ことを意味しますが、データベースでは実際には制約されないことを意味します。レベル。楽しい結果がたくさん。

ツールがこれを自動的に実行し、有用な結果をもたらすことができるとしたら、私は驚かれることでしょう。

于 2010-09-29T03:16:00.460 に答える
1

異なるテーブルで同じ名前とデータ型の列を検索することで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であり、もう一方がそれを参照していないかどうかを検出します。

しかし、ここで私はジェフリーに同意します。それは非常に人間的な知性のようなものであり、これを確実に行うツールはありません。いずれにせよ、あなたはそれを手でしなければならないでしょう。

于 2010-09-29T05:22:18.003 に答える
1

これは良いスタートかもしれません

select column_name, table_name, data_type
from user_tab_cols
order by column_name, table_name
于 2010-09-28T18:44:57.977 に答える