0

Web サーバーで開発およびテストの目的で使用されるデータベースがあります。私がやりたいことは、約 50,000 レコードを含むテーブルに 1 つの列を追加することです (私はデータベース管理者ではないことに注意してください)。プロバイダーから提供された資格情報を使用して SSMS 経由で接続し、次のクエリを実行しています

ALTER TABLE MyTable
ADD MyCol BIT
CONSTRAINT MyConstraint DEFAULT 1 NOT NULL

私が得るエラーは次のとおりです。

メッセージ 9002、レベル 17、状態 4、行 2
データベース 'my_db' のトランザクション ログがいっぱいです。ログ内のスペースを再利用できない理由を調べるには、sys.databases の log_reuse_wait_desc 列を参照してください。

私が実行すると

SELECT log_reuse_wait_desc, * 
FROM sys.databases WHERE name ='my_db'
GO

Add MyCol と一緒のバッチでは、log_reuse_wait_desc は ACTIVE_TRANSACTION になります。別のコマンドとして実行すると、CHECKPOINTになります

データベースの復旧モードはシンプルに設定されています。私はインターネットで解決策を探しましたが、回復モードをシンプルに設定するか (すでにそうです)、ログ ファイルをバックアップしてから圧縮することを提案している人もいますが、これは非常に悪い習慣だと考える専門家もいます。

では、データを含むテーブルに単純な NOT NULL 列を追加するにはどうすればよいでしょうか?

編集:誰かがすべての回答を読みたくない場合の解決策は次のとおりです。

トランザクション ログのサイズを取得するには、次のようにしました。

sp_helpdb 'YouDatabaseName'

結果ウィンドウにログ ファイルのサイズが表示されます (私の場合は 8MB でした)。値を大きくするには、次のクエリを使用します。

ALTER DATABASE YourDatabaseName
MODIFY FILE(NAME = YourDatabaseLogName, SIZE=128MB);
GO

そして、エラーはなくなります。

4

4 に答える 4

1

このメッセージが表示されないように、ログのサイズを大きく指定できます。ログを autogrowth (またはその両方) に増やして、SQL Server がトランザクションを実行するスペースを増やすことができます。

このリンクを参照してください: データベースのトランザクション ログがいっぱいです。ログ内のスペースを再利用できない理由を調べるには、sys.databases の log_reuse_wait_desc 列を参照してください。

次のコマンドを使用してサイズを拡大できます。

ALTER DATABASE YourDatabaseName

MODIFY FILE

(NAME = YourDatbase_log,

SIZE = 1500MB);

ログ ファイルのサイズを確認できます。

SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name, (size*8)/1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'DBName'
于 2013-05-24T10:49:36.947 に答える
1

これは、ログ ファイルが小さすぎて大きくできないことを意味します。

この列を追加するには (この場合、必ずしもbit列ではありません)、ロールバックできるようにログ エントリを生成するディスク上の構造をシャッフルする必要があります。ログ ファイルをバックアップして圧縮することは、ほとんどの場合、決して良い解決策ではありません。ここでは既に実行されているように思われるため、サイズが小さすぎます。50,000 行は小さいため、非常に小さいという意味です。

SQL または GUI を使用して、スペースや拡張を増やすことができます。この回答で詳細が説明されています: SQL Server: トランザクション ログのサイズを増やすにはどうすればよいですか?

于 2013-05-24T10:49:44.617 に答える
1

ログ ファイルのサイズの制限を削除するか、ログ ファイルを増やします。

ログ

于 2013-05-24T10:50:12.067 に答える