「ニキータ」が示唆したように、リカバリ モデルをシンプルに変更して、変更がトランザクション ログで追跡されないようにすることもできます。 ???、別のサーバーに変更をレプリケートするためにトランザクション ログを使用する必要があります...その場合、トランザクション ログがいっぱいになる原因と、トランス ログを無効にせずにそれを修正する方法を理解する必要があります。 .
SSMS を使用して変更を行っているようですが、変更の性質上、SSMS は次のことを行う必要があります。
- 変更されたテーブルからすべての外部キー、インデックスなどを削除します
- テーブルのすべてのデータを #temp テーブルにコピーします
- 提案された変更を含む新しいテーブルを作成します
- #temp テーブルから新しく作成されたテーブルにすべてのデータをコピーします
- 古いテーブルをドロップ
- 新しいテーブルの名前を古いテーブルの名前に変更します
- すべてのインデックス、外部キーなどを再作成します。
SSMS スクリプトはスクリプト全体にBEGIN TRANSACTION
andを挿入COMMIT TRANSACTION
するため、何かが失敗した場合でも、テーブルとデータが台無しにならないようにします。GO
ただし、スクリプト全体にも挿入されるため、エラーが問題を引き起こす可能性があります。特に、最後の操作の 1 つで元のテーブルが削除され、新しく作成されたテーブルの名前が元のテーブル名に変更されるためです。
スクリプトの実行が完了する前に、トランザクション ログがいっぱいになるようです。運用データベースを単純な復旧モデルに変更できない場合 (たとえば、ログ配布が中断されるなどの理由で)、トランザクション ログがいっぱいにならないようにスクリプトを実行する必要があります。
私はお勧め:
- 最初に 150 万行を持たない開発/テスト サーバーでスクリプトをビルドしてテストし、スクリプトが意図したとおりに動作することを確認します。
- スクリプトを変更し
COMMIT
、重要な場所に追加して、スクリプトの実行を継続するときにトランザクション ログのスペースを再利用できるようにします。
- #temp テーブルから一度に 100,000 レコードをコピーして、
COMMIT
各ブロック間に を使用して新しく作成されたテーブルに戻します。
- 本番環境で実行する前に、変更したスクリプトを開発/テスト サーバーで再度テストします。
- スクリプトを実行する前に、本番データベースをバックアップしてください...