バックアップとトランザクションログの関係に気を付けよう
モデルの違いでトランザクションログの扱いが変わるのにそれに気づかず、トランザクションログが一杯になってしまうということがありましたのでその備忘録となります。
単純復旧モデルと完全復旧モデル
単純復旧モデル
ログバックアップはありません。バックアップを取るとバックアップを取った時点までのトランザクションログを切り捨てるため、トランザクションログの管理の必要がありません。
SQL Server Expressなどでデフォルトとなっています。(のはず)
完全復旧モデル
ログバックアップがあります。トランザクションログの管理も必要です。
もしログバックアップをしてトランザクションログを切り捨てていないと溜まってしまい、トランザクションログが一杯になってしまうリスクがあります。
完全復旧モデルでトランザクションログの管理もする
以下のようにデータベースのバックアップのあとにログバックアップを取ります。ログバックアップにはLogTruncationTypeをTruncateとしてあり、ログバックアップを取った後ログを切り捨ててくれます。タスクスケジューラなどで定期的に処理させておくことでトランザクションログが一杯になるのを防ぐことができます。
$BackupPath = "データベースのバックアップの場所"
$LogBackupPath = "ログバックアップの場所"
Backup-SqlDatabase -ServerInstance dev-SQLserver -Database "myDB" -BackupFile $BackupPath -ErrorAction Stop
Backup-SqlDatabase -ServerInstance dev-SQLserver -Database "myDB" -BackupFile $LogBackupPath -BackupAction Log -LogTruncationType Truncate -ErrorAction Stop