1

手元にあるこのタスクを探しましたが、役立つものは何も見つかりませんでした。私は主に、ソフトウェア開発の観点からデータベースの十分な知識を持つ Java の人間です。私はDBA機能について、できることとできないことについてある程度の知識を持っていますが、良い解決策を思いつくことはできません。

私の仕事は、アプリケーション インストーラーによって SQL Server と Oracle で作成されたデータベースを比較することです。

スキーマ内のテーブルの数、データ型とインデックスを持つ各テーブルの列、さまざまな種類の制約などを提供する SQL Server でいくつかのクエリを (もちろん、オンラインで検索して) 思いつくことができたと思います。これらのテーブルごとに作成されたトリガーなど(そのカウントとともに)。誰かが興味を持っていれば、それらの SQL を提供できます。しかし、Oracle はもっとトリッキーなようです。誰かが助けてくれるか、正しい方向に向けてくれれば幸いです。

私は次のようなものを見つけようとしています:

  1. 作成されたテーブルの数
  2. これらの各テーブルのインデックス、制約 (およびそのタイプ)、トリガーの数
  3. 作成されたストアド プロシージャ/関数の数
  4. 作成されたビューの数

どんな助けでも大歓迎です。

ありがとうございました。

4

1 に答える 1

0

まず最初に、Java コードの作成に慣れている場合、この比較を行うために大量の SQL を作成することになるかどうかはわかりません。JDBC には、すべてのテーブルを取得するようなメソッドを持つDatabaseMetaDataクラスが既にあります。getTablesこれにより、使用する 1 つの API が提供され、JDBC ドライバーを作成した人々が、使用しているデータベースのデータ ディクショナリ テーブルをクエリするためのすべてのコードを既に作成しているという事実を活用できます。これにより、インストーラーが作成したオブジェクトがアプリケーションによってどのように認識されるかの違いに注目することもできます。

特定の SQL を作成する場合、Oracle データ ディクショナリ テーブルは非常に簡単に操作できます。あなたが気にするものは、パターンに従うつもり[user|all|dba]_<<type of thing>>です。[user|all|dba]プレフィックスは、自分が所有するオブジェクト ( ) user、アクセスできるオブジェクト ( all)、またはデータベース内のすべてのオブジェクト( ) のいずれを検索するかを示しますdba。通常のユーザーは、セキュリティ上の問題が発生する可能性があるため、ビューにアクセスできないことがよくありますdba。一般に、オブジェクトにアクセスできない場合、そのオブジェクトが存在することを人々に知られたくないでしょう。私の例でallは、オブジェクトのバージョンを使用しますが、目的に応じて変更allするuserことができます。dba

  • all_tablesアクセスできるすべてのテーブルに関する情報が表示されます。ownerアプリケーションの一部ではないテーブルにアクセスできる可能性があるため、インストーラーが触れるスキーマに対してフィルターを追加することをお勧めします。
  • all_indexesall_constraints、およびall_triggersは、インデックス、制約、およびトリガーに関する情報を表示します。ownerここでも、関心のあるスキーマに限定するために述語を追加することができます。
  • all_proceduresスタンドアロンとパッケージの両方のプロシージャと関数に関する情報が表示されます。
  • all_viewsすべてのビューに関する情報が表示されます。

all_objects本当にカウントだけに興味がある場合は、単純に に移動して、 によるカウントのグループ化を実行できる場合がありますobject_type。さまざまなオブジェクトの属性を表示したいので、さまざまなオブジェクト固有のビューに移動したいと思うでしょう。

于 2016-09-28T18:35:01.127 に答える