こんにちは。今日は、SQL Serverのバックアップについて調べてみていたので、分かったことを簡単にまとめておきたいと思います。
それではまいります。
Contents
データベースの復旧モデル
データベースのバックアップ戦略を考える上では、最初にビジネス要件に基づいてRTO、RPOを定め、それを実現するための復旧モデルを検討するところからスタートします。
SQL Serverでは、以下の3つの復旧モデルがあります。
復旧モデル (SQL Server) – SQL Server | Microsoft Docs
- 単純
- 完全(規定)
- 一括ログ
それぞれの解説は以下が分かりやすかったです。
SQL Server:バックアップとリストアの基本 – Qiita
一括ログは名前が直感的でなく分かりづらく感じますが、完全復旧モデルを補完するためのモデルとなります。また、完全復旧モデルと一括ログ復旧モデルを実現するためには、トランザクションログのバックアップが必須となる点がポイントです。
どの復旧モデルを取るべきかについては、要件次第です。
データベースに対する復旧モデルの最善の選択は、ビジネス要件によって異なります。 トランザクション ログの管理を不要にし、バックアップと復元を簡単にするには、単純復旧モデルを使用します。 作業損失の可能性を最小に抑えるには、管理のオーバーヘッドが発生するという犠牲を払っても、完全復旧モデルを使用します。 一括ログ記録操作中にログ サイズへの影響を最小限に抑えるのと同時にこれらの操作の復旧を可能にするには、一括ログ復旧モデルを使用します。
SQL Server データベースのバックアップと復元 – SQL Server | Microsoft Docs
データベースのバックアップオプション
復旧モデルが定まったら、次にそれを実現するためのバックアップ方法を検討していきます。
データベースのバックアップオプションについては、公式ドキュメントを読んで以下のようにいくつかの観点から整理できるのかなと思いました。
何をバックアップするか?
バックアップの概要 (SQL Server) – SQL Server | Microsoft Docs
- データベース全体(データ+ログ)
- データ
- ログ(トランザクションログ)
どれをバックアップしておくとよいかは、結局のところ目指す復旧モデルによって決まってくる。単純復旧モデルであればデータがあれば事足りるが、完全復旧モデルやログ一括復旧モデルであれば、データだけでなくトランザクションログのバックアップも取得しておく必要がある、等。
どうやってバックアップするか?
バックアップの概要 (SQL Server) – SQL Server | Microsoft Docs
上記バックアップしたい対象によって、以下のバックアップ方法(機能)が用意されている。
データベース全体(データとログ)のバックアップ
- 完全バックアップ
- コピーのみのバックアップ
データベースの完全バックアップ (SQL Server) – SQL Server | Microsoft Docs
完全バックアップ機能を使うと、データベース全体のバックアップが取得され、これにはデータファイル(.mdfや.ndf)、トランザクションログファイル(.ldf)がすべて含まれる。
コピーのみのバックアップ – SQL Server | Microsoft Docs
これは、完全バックアップと差分バックアップを組み合わせて運用していて、計画外の完全バックアップを取得する必要があったときに後続の差分バックアップのベースを変えないようにする機能っぽい。以下のブログ記事が分かりやすかったです。
SQL Server 2005 以降で計画外バックアップを取得 at SE の雑記 (engineer-memo.com)
データのバックアップ
- 差分バックアップ
差分バックアップ (SQL Server) – SQL Server | Microsoft Docs
差分バックアップ機能は完全バックアップをベースとして、そこからの更新差分データだけを保持するバックアップ。差分だけなので完全バックアップと比較して高速にバックアップできる。
差分バックアップはデータのみを含むため、完全復旧モデルを目指すのであればログのバックアップも別途必要。
ログのバックアップ
- ログバックアップ
- ログ末尾のバックアップ
トランザクション ログのバックアップ (SQL Server) – SQL Server | Microsoft Docs
ログバックアップは、その名の通りトランザクションログをバックアップすることができる機能。具体的にはこのBACKUP LOG~ T-SQLで実行できる。
ログ末尾のバックアップ (SQL Server) – SQL Server | Microsoft Docs
これは、まだバックアップされていないすべてのログレコード(ログの末尾)をキャプチャし、操作内容の消失を防ぐための機能とのこと。復旧目標ポイントが、最後にログバックアップを取得した時点よりも前であれば不要だが、直前の状態に復旧する必要がある場合などは、このバックアップが追加で必要になってくる。
また、上記各機能に加えて、以下のオプションもある。
- ファイルのバックアップ
- 部分バックアップ
ファイルの完全バックアップ (SQL Server) – SQL Server | Microsoft Docs
ファイルを個別にバックアップする方法もある。これは個別のファイルが損傷した場合に、そのファイルだけを復旧できる(=データベース全体のバックアップから復旧するより迅速)、といったメリットもある一方、整合性を保つため管理が複雑になったり、目指す復旧モデルによっては結局データベース全体のファイルをバックアップしておく必要があったり(=データベースのバックアップと同じ)するデメリットもあるよう。
部分バックアップ (SQL Server) – SQL Server | Microsoft Docs
これは、ファイルバックアップよりももう少し広範な部分毎にバックアップをとる、という用途に対応しているのかな・・?
どこにバックアップするか?
バックアップ デバイス (SQL Server) – SQL Server | Microsoft Docs
- ディスク(ローカル or ファイル共有)
- テープデバイス(将来サポートされなくなる予定のため非推奨)
- クラウド(Azure Blob Storage)(SQL Server 2012以降サポート)
その他のオプション
その他の検討項目としては、以下もあります。
- バックアップを圧縮するか
- バックアップを暗号化するか
Backup compression (SQL Server) – SQL Server | Microsoft Docs
圧縮は規定で無効だが、バックアップ時のT-SQLでオプション指定可能。圧縮することでI/O削減によるバックアップ高速化や、ストレージ領域の節約が見込める一方、バックアップ時の圧縮や復元時の展開で、CPUリソースを消費するようになるトレードオフがある。
バックアップの暗号化 – SQL Server | Microsoft Docs
バックアップの暗号化によって、よりセキュアにできる。
バックアップ戦略
ここまでで、復旧モデルと、それを実現するバックアップ方法のオプションを整理したので、最後にそれらを活用した実際運用上のバックアップ戦略についてもまとめておきたいと思います。
と思いましたが、既にいろいろな記事でまとめられているようだったので、それらのリンクを紹介させていただこうと思います。
SQL Server ログ バックアップと差分バックアップの比較 – matu_tak’s blog (hatenablog.com)
Sql server のバックアップとリストアの基礎 (slideshare.net)
以上、SQL Serverのバックアップ戦略についてのまとめでした。
おしまい
コメントを残す