次のダイアログを使用してSSMSを使用し、トランザクションログの最大サイズ制限を[〜#〜] unrestricted [〜#〜]に設定しようとしています:
実際の設定は2.097.152 MB-ドライブの容量を超える無意味な値に設定されています。
私はそれを他の値に設定しようとしました。 85 GB(実際のTLサイズと最大ドライブ容量の間の何か)および無制限。
これらの設定はどちらも永続化されていません。元の制限設定は何度も戻ります。なぜ変更できないのですか?
(注:すべてのDBはCompat Lvl 80で実行されています)
私はコマンドを実行しました:
ALTER DATABASE myDB
MODIFY FILE ( NAME = N'myDB_Log', MAXSIZE = UNLIMITED)
複数のサーバーに対して。それらのいくつかはその後MAXSIZE = -1を示します。その他は、sys.database_filesでmax_size = 268435456を示します。 -1が付いているものには、ダイアログで選択された正しいラジオボタンも表示されます。
SQL Serverの最大容量指定 を見ると、トランザクションログの最大サイズは2 TBであることがわかります。
SQL Server Database | Maximum sizes/numbers | Maximum sizes/numbers
Engine object | SQL Server (32-bit) | SQL Server (64-bit)
... | ... | ...
File size (log) | 2 terabytes | 2 terabytes
その後、MBに変換されます。
2 TB <=> 2.048 GB <=> 2.097.152 MB
ALTER DATABASE File and Filegroup Options によると、無制限は値が最大ファイルサイズに設定されることを意味します。
MAXSIZE {max_size |無制限}
...
無制限
ディスクがいっぱいになるまでファイルが大きくなることを指定します。 SQL Serverでは、無制限の拡張で指定されたログファイルの最大サイズは2 TBで、データファイルの最大サイズは16 TBです。
これらのクエリのいずれかで無制限に設定する必要があります。
USE [master]
GO
ALTER DATABASE [mydb] MODIFY FILE ( NAME = N'mydb_log', MAXSIZE = 2097152MB)
GO
ALTER DATABASE [mydb] MODIFY FILE ( NAME = N'mydb_log', MAXSIZE = UNLIMITED)
このクエリを使用すると、一度UNLIMITEDに設定されます。
SELECT max_size, max_size/1024*8 FROM sys.database_files
行2(LOG)の出力は次のようになります。
maxsize | maxsize in MB
268435456 | 2097152
最大サイズを負の値に設定することはできませんが、 sys.database_files の最大サイズは-1と表示されることがあります。
無制限のログファイルサイズでアップグレードされたデータベースは、ログファイルの最大サイズとして-1を報告します。
ALTER DATABASE ... MAXSIZE ...
を使用したMAXSIZE
の最大値は2147483647ページ(<=> 16777208 MB => 16 TB)ですが、LOGファイルとサイズが2097152 MBを超えると、次のエラーで失敗します。
メッセージ5150、レベル16、状態2、行1
1つのログファイルのサイズは2 TB以下にする必要があります。
さらに2 TBは [〜#〜] mbr [〜#〜])による古い制限でもある可能性があります :
マスターブートレコード
...ブロックアドレスとサイズは32ビットを使用してMBRのパーティションテーブルに格納されるため、512バイトのセクター(実際またはエミュレートされた)2 TiB-512バイト(2,199,023,255,040バイトまたは4,294,967,295(232-1)セクター×セクターあたり512(29)バイト)を超えることはできません。この容量制限を緩和することは、GPTを開発する主な動機の1つでした。
出典:ウィキペディア