0

SQL Server 2000 を使用しており、国際文字を処理できるように、フィールドのデータ型を varchar から nvarchar に変更しようとしています。ただし、そのテーブルには既に大量のデータがあり、変更を保存しようとすると、次のエラーが発生します。

テーブルを変更できません。ODBC エラー: [Microsoft][ODBC SQL Server Driver][SQL Server] データベース 'AppTest_Apps' のログ ファイルがいっぱいです。データベースのトランザクション ログをバックアップして、ログ領域を解放します。

これは 1 回限りの更新です。エラーを回避するにはどうすればよいですか?

4

3 に答える 3

1

ログ ファイルが大きくなるのを許可するか (ログ ファイルのオプションを参照)、バックアップして圧縮する必要がある場合があります。 http://support.microsoft.com/kb/272318

于 2009-11-06T05:07:50.690 に答える
1

n 個のレコードごとにコミットするトランザクション ループを実行してみてください。そのため、現在のテーブルの名前を X から Y に変更できます。これは、コマンド sp_RENAME '[OldTableName]' , '[NewTableName]' で実行できます。

新しいデータ型列セットで X を再作成し、Y から X にバッチ挿入して、すべてのループをコミットします。トランザクション バッチで挿入することにより、挿入された n 個のレコードごとにコミットすることで、ログの増加を制御できます。

擬似コード

Get @max_id from Y int @max_id 
Get min_id from Y into @current_value
Loop until @current_value <= @max_id

BEGIN TRAN
INSERT INTO Y
FROM X
WHERE seq_id >= @current_value and less than @batchsize + @current_value
COMMIT TRAN
于 2009-11-06T05:43:22.957 に答える
0

一見すると、次の 2 つの方法があります。

  1. トランザクションログをバックアップするだけです。BACKUP LOG dbanme TO DISK='c:\dblog.bak' のようなもの
  2. データベースを SIMPLE リカバリ モードにします (たとえば、Enterprise Manager で、データベース -> オプション -> リカバリ モデルで [シンプル] を選択します)。
于 2009-11-06T05:04:40.510 に答える