2

データベースに多くの変更を適用するツールがあります。多くの変更は、列の型、サイズなどの変更に関するものです。指定されたALTER TABLE変更が成功し、値が長すぎる、関数インデックスなどのために失敗しないかどうかを事前に確認する (おそらく Oracle 固有の) 方法はありますか?

非 DDL 変更の場合、これは簡単です。トランザクションを開始し、変更を実行してロールバックします。答えは、例外が発生するかどうかでわかります。ただし、DDL の変更をトランザクションの一部にすることはできないため、ここで同じ手順を実行することはできません。

4

3 に答える 3

0

2 つのアプローチが思い浮かびますが、どちらも実際に必要なものを提供するものではありません。

1つ目は、実際に何を望んでいるのかを説明するためだけにこれを言及し、実用的ではないため、SQLスクリプトの変更を解析し、Oracleと同じルールをオブジェクトに適用するツールを作成することです。 column - 列の値が新しい長さを超えていないかどうかを確認します。これは大変な作業であり、変更がカスケード/複合されることを考えると、それにも対応する必要があります。私もそれが速いとは思っていません.x百万行のテーブルでインデックスのない列を変更すると、ツールは変更が失敗する原因となるデータをスキャンする必要があります. オラクルがこれを決定するために使用する内部マジックは、このツールでは使用できません。

私が使用するアプローチは、あなたが望むものとはまったく異なりますが、本番環境からデータベースを複製し、データを削減することです。私は主にスクリプトを介してこれを行い、制御できるようにし、特別な権限/dba アクセスに依存しません。次に、これに対して展開スクリプトをテストし、クリーンなビルドができるまでこれを繰り返します。再起動機能を備えた構築済みの展開フレームワークを使用しているため、展開がステップ 121 の 63 で失敗した場合は、再試行/スキップ/中止オプションが表示され、中止した場合は失敗したステップから再開できます。開発ビルドに満足したら、本番環境と同期されたデータベースでテストします。これにより、データやパフォーマンスの問題が解決される傾向があります。

さて、別の考えられる方法は、フラッシュバックを見ることです。フラッシュバックが DDL も処理するかどうかはわかりませんが、処理する場合は、開発/テスト データベースで有効になっていると仮定すると (大きな場合)、検討する価値のある手段になる可能性があります。

于 2015-06-03T08:57:37.910 に答える
0

ツール CORT を試す - www.softcraftltd.co.uk/cort

無料でオープンソースです。必要なものがそこにあるかもしれません。

于 2015-06-03T11:59:27.810 に答える