2

私は少し混乱しており、あなたの助けが必要です. 150 を超えるテーブルを持つデータベースがあります。Unicode をサポートする必要があるいくつかのフィールドがありますが、現在はサポートしていないため、このプロセスで列のデータ型を ntext および nvarchar に変更したいので、制約を削除してから再度作成する必要があります。制約を削除して再度作成しても安全ですか。

*変更する列が 286 ありますが、このプロセスで多くの制約を削除して作成する必要があることを知りません。

*私が知りたいのは、完全に成長したプロジェクトの列のデータ型を変更しても安全かということだけです。

4

5 に答える 5

1

データベースが稼働していなくてもこれを行うことができれば、安全です。留意すべき重要なことは、すべての制約が文書化されていること、列の型の変更によってそれらの制約が影響を受けないこと (または制約が軽減されている場合)、および依存関係が明確であることを確認することです。それらの制約の間。

明確なプロセスがあり、それに従っていることを確認してください。

于 2009-04-21T11:15:31.130 に答える
1

しかし、より良い方法があります。インデックスを無効にすることができます。 msdn を参照してください。これにより、インデックスの定義が保持されます。

これを顧客のマシンで実行する場合 (例: インストーラーを使用)、その間にアプリケーションがデータを挿入しないように、データベースをシングル ユーザー モードにする必要があります。これにより、一貫性のないデータが許可され、インデックスを作成/有効にすることができなくなります。

編集:(gbnによるコメントの後)

無効にすることは、おそらくあなたのケースでは機能しません。

データベースをアップグレードするときの制約も取り除きます。一般的には保存されます。他の側面はすでに他の人によって言及されています。それらを作成するには、それらすべてを知る必要があります。既存のデータベースからスクリプトを作成するツールがありますが、自分で作成することもできます。すべての情報は実際にはデータベースにあるはずです。たとえば、スクリプトは管理スタジオから入手できますが、1 つずつしか入手できません (私が知っているように)。

これを実稼働環境で行う場合は、データベースをシングル ユーザー モードにして、アプリケーションがデータベースを使用しないようにすることができます。

于 2009-04-21T11:39:07.470 に答える
1

これはすべて、サードパーティの比較ツールを使用してトランザクション (すべて完了またはすべてロールバック) で実行できます。

つまり、開発中に個別に変更を行うことができます (SSMS を使用して変更を行います) が、「安全な」変更およびロールバック スクリプトを生成します (ただし、常にバックアップを保持します)。

それ以外の場合は安全です。誰かがその時点でデータベースを使用していて、間違ったデータを入力したり、インデックスなしでクエリを実行したりすると、問題が発生する可能性があります。

サードパーティのツールを使用するトランザクション アプローチでは、変更全体の間、オブジェクトがロックされます。

もちろん、ビッグバンではなく一度に 1 つずつ実行することもできますが、これらのツールは依然として有用です。

于 2009-04-21T11:39:29.090 に答える
0

制約を削除して再作成する代わりに、制約を無効にして有効にするアプローチを試すことができます。その間に列タイプを変更した場合にこれが機能するかどうかはわかりませんが、列名を変更しない限り、テストする価値があります。

于 2009-04-21T14:18:10.833 に答える
0

私たちは常にスキーマを変更します。一般的な手順は次のとおりです。

各テーブルについて:

  • SQL Server Management Studio 内で変更を行うと、これらのスクリプトが問題なく常に制約を削除および再作成することがわかります。

  • スクリプトを生成し、それらをファイルにコピーします

  • 変更をキャンセルします (データベースに適用しないでください)。

本番環境とまったく同じスキーマを持つテスト/開発データベースに移動し、スクリプトを実行します

エラーがある場合は、それらを解決し、テスト/開発を復元して再テストします

エラーがなければ

  • 必要に応じてバックアップを作成する

  • 必要に応じて、ユーザーと一緒にアプリケーションを停止するようにスケジュールします

  • データベースをシングル ユーザー モードにします。これにより、制約がない場合にデータが変更されなくなります。

  • スクリプトファイルを実行する

  • データベースをシングル ユーザー モードから解放する

于 2009-04-21T13:34:25.743 に答える