データベースの接続に失敗しました
SQL Server 利用時に「データベースの接続に失敗しました。」のメッセージが表示されることがある。
SQL Server が稼動しているマシンを再起動したり、
SQL Server サービスの再起動で回避することもあるが、
このメッセージにはもっと重大な危険性が潜んでいる。
実はトランザクションログファイルの拡張に時間がかかり、
タイムアウトが発生しているのだ。
このまま放置しておくと大変な事になりかねない。
データベースの自動拡張時にタイムアウトが発生する
トランザクションログの強制切り捨て
SQL Server 2008 以降では、
BACKUP LOG WITH TRUNCATE_ONLYによる、
トランザクションログの強制切り捨ては使用できなくなっている。
そのため、
データベースの復旧モデルが「完全」「一括ログ」を使用している場合、
定期的にトランザクションログのバックアップを取得し、
トランザクションログを切り捨てる必要がある。
ただし、
データベースを配置しているディスク領域が枯渇していると、
バックアップもできなくなる。
このような場合は、
復旧モデルを「単純」に変更することで、
トランザクションログを切り捨てることができる。
もし、復旧モデルを変更したくないという場合は、
バックアップをNULLデバイスに取得すれば、
トランザクションログを切り捨てることができる。
BACKUP LOG [データベース名] TO DISK = N'NUL'
ログの切り捨てができたので、
後はトランザクションログの圧縮を行う。
USE [データベース名];
DBCC SHRINKFILE (論理ファイル名, TRUNCATEONLY);
トランザクションログを肥大化させる方法
上記で説明したように、
「データベースの自動拡張時にタイムアウトが発生する」ことで、
データベースへの接続ができなくなる事がある。
例えば、システム納入先で不具合が生じている場合など、
手元のマシンで再現させ、どのように対処すべきかを検討するべきであろう。
そこで必要となるのは、
トランザクションログを肥大化させる方法。
トランザクションログを肥大化させるには ALTER DATABASE を実行するのが手っ取り早い。
ALTER DATABASE [データベース名]
MODIFY FILE
(
NAME = 論理ファイル名,
FILENAME = '○○○.ldf',
SIZE = ○○○MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 増分サイズまたは比率 (0 以外を指定する)
)
Microsoft Japan SQL Server Support Team のブログもご参考に!!
HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法