3

あるデータベース バージョンから別のバージョンにアップグレードしている顧客がいます (具体的には、Oracle 9i から Oracle 10g または 11g に)。あるケースでは、お客様が古いデータベースをエクスポートして新しいデータベースにインポートしましたが、何らかの理由でインデックスと制約が作成されませんでした。彼らはインポート プロセスをスピードアップするために意図的にこれを行った可能性がありますが、その理由はまだ調査中です。

本当の問題は、インポート後にデータベースの構造が完全であることを確認できる簡単な方法があるかどうかです。構造に対して実行できるチェックサムのようなものはありますか? すべてのテーブル、インデックス、エイリアス、ビュー、シーケンスなどが存在するかどうかを確認するために一連のクエリを実行できることはわかっていますが、これを記述して維持するのはおそらく難しいでしょう。

アップデート

商用および/またはGUIツールを使用することを示唆する回答に感謝しますが、製品にパッケージ化できる無料のものが本当に必要です. また、お客様が任意の環境 (unix、linux、windows) で実行できるように、コマンド ラインまたはスクリプト駆動である必要があります。

4

4 に答える 4

3

このような単一のスキーマを想定すると、移行前に USER_OBJECTS をテーブルにダンプします。

 CREATE TABLE SAVED_USER_OBJECTS AS SELECT * FROM USER_OBJECTS

次に、移行後に検証します

 SELECT object_type, object_name FROM SAVED_USER_OBJECTS
 MINUS
 SELECT object_type, object_name FROM USER_OBJECTS

1 つの問題は、バージョン間で意図的にオブジェクトを削除した場合、SAVED_USER_OBJECTS からも削除する必要があることです。また、間違ったバージョンのオブジェクトが存在する場合、これは検出されません。

複数のスキーマがある場合は、スキーマごとに同じことが必要になるか、ALL_OBJECTS を使用して、関連するユーザー スキーマを抽出/比較します。

スキーマ全体の object_type||object_name でハッシュ/チェックサムを実行することもできますが (前に保存/後で比較)、計算のコストはインデックスで 2 つのテーブルを比較する場合とそれほど変わりません。

于 2010-08-26T15:58:16.080 に答える
1

いくらかお金を使う気があるなら、DBDiff はまさに必要なことを行う効率的なユーティリティです。

http://www.dkgas.com/oradbdiff.htm

于 2010-08-26T15:10:35.383 に答える
1

SQL DEVELOPER (無料の Oracle ユーティリティ) には、データベース スキーマの相違点機能があります。試してみる価値があります。

それが役に立てば幸い。

SQL開発者 - ダウンロード

ロニ。

于 2010-08-26T15:23:09.320 に答える
0

チェック スクリプトを作成するのではなく、データベースの特定のバージョンからチェック スクリプトを生成するプログラムを作成します。メタデータを調べてそこにあるものを記録し、それをファイルに書き込んでから、そのファイルの値を顧客のデータベースの値と比較します。制約にシステム生成の名前を使用している場合、これはあまりうまく機能しませんが、物事がそこにあることを確認するだけでおそらく十分です。データベースを移行するときにインデックスと制約を削除することは非常に一般的であるため、あまりチェックする必要さえないかもしれません。2 つまたは 3 つのものが欠落している場合、それらがすべて欠落していると仮定するのは不合理ではありません。また、すべての制約とインデックスを削除して再作成するスクリプトを作成し、移行後の手順として顧客に実行させることもできます。

于 2010-08-26T15:32:26.623 に答える