「データベース '(データベース名)' のファイル '(データベース名)_log' の自動拡張をユーザーが取り消したか、30020 ミリ秒でタイムアウトしました。ALTER DATABASE を使用して、このファイルの FILEGROWTH の値の設定を小さくするか、または新しいファイル サイズを明示的に設定してください。」
のメッセージが表示され、データベースにレコードの追加や編集ができなくなることがあります。
SQL Serverはトランザクションログがいっぱいになると自動的にログのサイズを拡張します。設定を変更していない場合はデフォルトで10%づつ容量を拡張します。トランザクションログの圧縮やバックアップをしない場合、トランザクションログのサイズは10%づつ増え続けます、やがて、10%の拡張に必要な時間がタイムアウト値を超えてしまい、上記のメッセージがログに記録されます。
トランザクションログがいっぱいになっているため、レコードの追加や編集はできなくなります。
トランザクションログの拡張にかかる時間がタイムアウト値より長いことが原因です
といった対策があります。
明示的にトランザクションログのサイズを設定することで上記の現象を回避できます。ただし、レコードの追加や変更が起きるとトランザクションログのサイズは増え、空き領域が徐々に減りますので、一時的な対策となります。
トランザクションログの自動拡張をデフォルトの10%から1%などに下げる、または明示的に指定したサイズ(1000MBなど)で自動拡張することで、タイムアウト時間以内でログの自動拡張が終わるように設定を変更し問題を回避できます。この対策を実施した場合でもレコードの追加や変更が続けば、トランザクションログのサイズは増え続け、いずれ同じ現象が発生します。
となってしまうため、
または
のように変更します。
トランザクションログを圧縮すると、トランザクションログファイルの空き容量が増えます。また、トランザクションログのバックアップでもトランザクションログの空き領域を増やすことができます。定期的にバックアップを取ることでトランザクションログのサイズを小さく保つことができます。手順についてはこちらの記事を参照してください。
高速なサーバーに交換し、タイムアウト値より短い時間でトランザクションログの拡張ができるようにする方法もあります。
完全復旧できなくなりますが、トランザクションログの管理が不要になります(ログ領域が再利用されるため)。
復旧モデルの変更手順は「SQL Server データベースの復旧モデルを変更する」の記事を参照してください。