More Related Content Similar to Sql server のバックアップとリストアの基礎 Similar to Sql server のバックアップとリストアの基礎 (20) More from Masayuki Ozawa (20) Sql server のバックアップとリストアの基礎4. なぜバックアップの前にこの章が?
SQL Server バックアップとリストアの基礎
バックアップとリストアを勉強するためには SQL
Server のデータベースの構成を理解しておく必要が
あります。
データベースの構成とバックアップの取得単位には密接
な関わりがあります。
データ更新の流れを理解することでバックアップ /
リストアに影響のある設定の理解が深まります
なぜ、そのバックアップを取得する必要があるかの理解
につながります。
4
6. 各構成要素の役割
SQL Server バックアップとリストアの基礎
構成要素 説明
データベース
データ
ファイルグループ
データファイルを束ねるための論理名
PRIMARY というファイルグループが必ず作成される
プライマリデータファイルは PRIMARY ファイルグループに配置
データファイル
実際にデータが格納される領域
データファイルは必ず一つのファイルグループに所属する
(複数のファイルグループには所属できない)
デフォルトは ~.mdf (プライマリデータファイル)
2 個目以降は ~.ndf (セカンダリデータファイル)
複数のファイルを用意することで書き込みが分散される
ログ
ログファイル
データベースの変更に対してのログ (履歴) を格納する領域
デフォルトは ~.ldf
2 個目以降も ~.ldf
ログはシーケンシャル (順次) 書き込みされるため、複数の
ファイルを用意しても書き込みは分散されない
6
8. データ変更の基本動作
SQL Server バックアップとリストアの基礎
クライアント
SQL Server①データ更新
データベース メモリ
データファイル
(mdf)
ログファイル
(ldf)
②更新内容を
ログに先行書き込み
③メモリ上のデータを更新
(ダーティーページが発生)
⑤チェックポイント発生時に
ダーティーページを
データファイルに書き込み
④クライアントからみて
処理完了
ダーティー (汚れた) ページ:
物理書き込みが行われていない
メモリ上のページ
チェックポイント:
メモリ上のダーティーページを
ディスク上のデータファイルに反映
8
9. データ変更時の流れのおさらい
SQL Server バックアップとリストアの基礎
1. 変更内容は最初にログファイルに書き込まれる
ログレコードを先行書き込みする
2. データの変更は最初にメモリ上のデータに対して変更が行われる
ログファイルに書き込まれた内容が不要になるのは、メモリ上でのみ変
更されているデータの内容 (ダーティーページ) がデータファイルにも反
映されたタイミング
3. チェックポイントというプロセスが発生すると、メモリ上のダー
ティーページがデータファイルに書き込まれ、物理データファイ
ルの内容が更新される
チェックポイントが自動的に発生する頻度を制御するのが「復旧間隔」
という設定
復旧間隔 = インスタンス開始時のロールバック / ロールフォワードによる復
旧に必要となる時間の上限 (厳密ではなく目安としてとらえておく)
デフォルトの設定「0」だと、復旧に必要な時間を 1 分未満を目標とし、約 1
分間隔のタイミングでチェックポイントが発生する
CHECKPOINT を実行することで手動でチェックポイントを発生させる
ことも可能
9
10. 参考) 復旧間隔の設定画面
SQL Server バックアップとリストアの基礎
データベースを復旧するのに必要な時間の最大値を分単位で設定
インスタンスに対しての設定のため、全データベースに共通の復旧間隔となる
SQL Server 起動時にデータベースの復旧 (ロールバック / ロールフォワード)にかかる時間を設
定する
設定値が大きいとチェックポイントの発生頻度が低くなるためデータファイルへのディスク負荷
が下がるが、更新料によっては、SQL Server 起動時の復旧時間が長くなる
10
11. 参考)間接チェックポイント
SQL Server バックアップとリストアの基礎
SQL Server 2012 以降ではデータベース単位に「間接チェックポイント」を設定可能
Indirect Checkpoints
https://technet.microsoft.com/ja-jp/library/ms189573(v=sql.110).aspx#IndirectChkpt
バックグランドプロセスとして動作し、REDO のI/O コストを考慮してチェックポイントを発生
させるため、通常のチェックポイントとは異なり、特定のタイミングで書き込みの I/O がスパイ
クする頻度は少なくなる (なだらかな書き込みになる傾向となるが、スパイクする可能性はある)
11
13. 復旧モデルの種類と利用可能なバックアップ
SQL Server バックアップとリストアの基礎
復旧モデル 復旧可能タイミング 取得可能なバックアップ 作業の損失の可能性
単純 バックアップの終了時点 - 完全バックアップ
- 差分バックアップ
ログのバックアップは取得できない
最新のバックアップ以降の変更は保
護されない
チェックポイント発生時にログの切
り捨てが自動で行われる
一括ログ バックアップの終了時点
特定の時点への復旧はサポート
されていない
(特定の条件を満たしていれば
特定の時点に復旧も可能)
- 完全バックアップ
- 差分バックアップ
- トランザクションログバックアップ
ログバックアップを取得しないと
ログは切り捨てられない
ログ末尾のバックアップが取得でき
れば障害発生の直前まで復元可能
ただし、時間指定の復元はできない
場合もある
完全
(デフォルト)
特定の時点に復旧 - 完全バックアップ
- 差分バックアップ
- トランザクションログバックアップ
ログバックアップを取得しないと
ログは切り捨てられない
ログ末尾のバックアップが取得でき
れば障害発生の直前まで復元可能
13
14. どの時点のデータまで戻しますか?
SQL Server バックアップとリストアの基礎
バックアップ終了時点までのデータを担保すればよいの
であれば [単純] で本番運用も可
SQL Server のバックアップはバックアップ取得中に発生した
変更点のログをバックアップの最後に取得するためバックアッ
プの開始時点のデータには戻らない
それより細かい粒度でリストアをするのであれば、[一括
ログ] [完全] を使用
一括ログと完全の使い分けは最小ログ記録に該当する操作をす
るかどうか
インデックスの再構築 / 一括インポート (BCP ツールや BULK
INSERT) は最小ログ記録に該当する操作
[一括ログ] の場合は、最小ログ記録に該当する操作を実施し
た場合、ログの記録量を抑えることができる
ただし、最小ログ記録の操作を行った時間帯のログのバックアッ
プからは、特定の時間帯に戻すことはできない
14
15. どの単位で戻しますか?
SQL Server バックアップとリストアの基礎
SQL Server では以下の単位でリストアを実施可能
データベース
https://msdn.microsoft.com/ja-jp/library/ms177429(v=sql.120).aspx
ファイル / ファイルグループ
https://msdn.microsoft.com/ja-jp/library/aa337540(v=sql.120).aspx
ページ
https://msdn.microsoft.com/ja-jp/library/ms175168(v=sql.120).aspx
一般的にはデータベース単位でのリストアを実施
ファイル / ファイルグループのリストア :
大量のデータをファイルグループを分割し、格納した際に、特定のファイルグループのみをリストアしたい場合に
使用
(例 : パーティショニング / インデックスとデータのファイルグループの分割)
ページのリストア
DBCC CHECKPAGE で破損ページが検出された際に、該当のページのみをリストアしたい場合に使用
データベースミラーリングや AlwaysOn 可用性グループには、プライマリで検出された破損ページをセカンダリの
データベースから復旧する機能があるため、このような機能での代替も検討
データベース単位以外のリストアのメリット
復元するデータが少なくなるので、リストア時間を短縮できる
Enterprise Edition の場合はオンライン復元により、他のデータにアクセスできる状態でリストアできる
データベース単位以外のリストアは、リストア手順が複雑になるため、利用する場合は十分に手順の整理をしてか
ら利用する
復元と復旧の概要 (SQL Server)
https://msdn.microsoft.com/ja-jp/library/ms191253(v=sql.120).aspx
15
16. 最小ログ記録について
SQL Server バックアップとリストアの基礎
最小ログ記録の操作をするときに、復旧モデルを 「単
純」または「一括ログ」にすることでログに記録される
内容を最小限にすることができる
一括インポート操作 (BCP ツールや BULK INSERT) について
は特定の条件を満たす必要がある
一括インポートで最小ログ記録を行うための前提条件
http://msdn.microsoft.com/ja-jp/library/ms190422.aspx
データ ローディング パフォーマンス ガイド
http://technet.microsoft.com/ja-jp/library/dd425070(SQL.100).aspx
最小ログ記録で操作をした場合、一括インポート操作の変更操
作については、特定の時間帯を指定してリストアすることはで
きないことを意識しておく
通常は復旧モデルを「完全」で運用し、最小ログ記録操作を行うときに
「一括ログ」に変更することでログへの書き込みを最適化することも可能
完全復旧モデルまたは一括ログ復旧モデルからの切り替え
http://msdn.microsoft.com/ja-jp/library/ms190203.aspx
16
18. 初回バックアップ前後の動作の違い
SQL Server バックアップとリストアの基礎
SQL Server では「初回のバックアップを取得する
までは復旧モデルの設定によらずトランザクション
ログの切り捨てが実施される」動作になる
初回バックアップを取得するまで、トランザクションロ
グのバックアップは取得できないため、ログのバック
アップが意味をなさないため
そのため、「完全」「一括ログ」に設定していても、
初回バックアップ前までは、トランザクションログ
が蓄積されない動作となるため、初回バックアップ
前後のログの蓄積量の違いは意識をしておく
Transaction Log size does not match the size of the data being loaded.
http://blogs.msdn.com/b/sqlcat/archive/2010/10/29/transaction-log-size-does-not-
match-the-size-of-the-data-being-loaded.aspx
18
20. バックアップの種類
SQL Server バックアップとリストアの基礎
バックアップの種類 バックアップの特徴
完全バックアップ 特定のデータベース、またはファイル グループやファイルのデータがすべて含まれる
バックアップには使用済みの領域のみ含まれるため、未使用の領域はバックアップには含ま
れない
データを復旧するために必要なログも含まれる
(データを復旧するために必要でないログは含まれていないためバックアップのサイズはデー
タファイルの使用領域+ログファイルの使用領域とはならない)
差分バックアップ 差分バックアップには、最後に実施した完全バックアップ以降に変更されたデータのみが含
まれる
(前回の差分バックアップからの差分を取得する機能がない)
時間の経過と共にデータベースが更新されるにつれて、差分バックアップに含まれるデータ
量が増える
(全データが更新された場合は完全バックアップと同等のサイズになる)
復元時には、完全バックアップを先に復元し、続いて最新の差分バックアップを復元する
トランザクションログ
バックアップ
完全復旧モデルまたは一括ログ復旧モデルでは、トランザクション ログ バックアップ (ログ
バックアップ) が必要になる。
トランザクション ログは、通常のログ バックアップ後に毎回切り捨てられる
(バックアップを取らないとログは切り捨てられない)
完全復旧モデル、および一括ログ復旧モデル (条件あり) では、ログ チェーン (ログの連続
性) が途切れていなければデータベースを任意の時点に復元できる。
20
21. 参考) バックアップのクエリ
SQL Server バックアップとリストアの基礎
完全バックアップ
BACKUP DATABASE [DB 名] TO [取得先]
差分バックアップ
BACKUP DATABASE [DB 名] TO [取得先]
WITH DIFFERENTIAL
トランザクションログ バックアップ
BACKUP LOG [DB 名] TO [取得先]
完全 / 一括ログでは定期的なトランザクションログのバック
アップは必須
21
23. バックアップの取得先
SQL Server バックアップとリストアの基礎
ディスク
一般的なバックアップ取得先
SQL Server のサービスアカウントがアクセスできるディレクトリの必要がある。
NULL デバイスに取得することも可能
共有フォルダ
取得先は SQL Server のサービスアカウントがアクセスできる共有ディレクトリ
の必要がある
テープ
テープ バックアップ デバイスは、将来のバージョンの SQL Server でサポートさ
れなくなる予定
Azure BLOB ストレージ (SQL Server Backup to URL)
Azure の BLOB ストレージにバックアップを取得
SQL Server 2012 SP1 CU2 以降で標準機能として利用可能
https://msdn.microsoft.com/ja-jp/library/jj919148(v=sql.120).aspx
それ以前のバージョンでは、以下のツールを使う必要がある
https://www.microsoft.com/ja-jp/download/details.aspx?id=40740
BLOB ストレージへの資格情報を設定しアクセス
BLOB へのバックアップは、SQL Server 2014 までは複数のバックアップファイ
ルにストライプして取得できないため、処理性能には注意する
SQL Server 2016 ではストライプして取得できるようになる (予定)
23
24. 参考) バックアップの取得先
SQL Server バックアップとリストアの基礎
ディスク
BACKUP DATABASE [DB 名] TO DISK=N'E:BACKUPmaster.bak'
NULL デバイス
BACKUP DATABASE [DB 名] TO DISK=N'NUL' (NUL: でも可)
NULL デバイスへのバックアップ取得は「トランザクションログバックアップと
併用して、実ファイルとしては取得しないログの切り捨て」「実ファイルとして
は取得しない初回バックアップ」等で使用することができる
共有フォルダ
BACKUP DATABASE [DB 名] TO DISK=N'ServerSharemaster.bak'
テープ
BACKUP DATABASE [DB 名] TO TAPE= '.tape0'
Azure BLOB ストレージ
BACKUP DATABASE [DB 名] TO URL= 'https://<ストレージ情報>'
24
25. 3 種類のバックアップを利用した基本設定例
SQL Server バックアップとリストアの基礎
日 月 火 水 木 金 土
0:00
完全
バックアップ
(上書き)
0:00
差分
バックアップ
(上書き)
0:00
差分
バックアップ
(上書き)
0:00
差分
バックアップ
(上書き)
0:00
差分
バックアップ
(上書き)
0:00
差分
バックアップ
(上書き)
0:00
差分
バックアップ
(上書き)
1時間毎
ログ
バックアップ
(追記)
1時間毎
ログ
バックアップ
(追記)
1時間毎
ログ
バックアップ
(追記)
1時間毎
ログ
バックアップ
(追記)
1時間毎
ログ
バックアップ
(追記)
1時間毎
ログ
バックアップ
(追記)
1時間毎
ログ
バックアップ
(追記)
1 週間前の
バックアップ
削除
25
27. 臨時のバックアップを取るためには
SQL Server バックアップとリストアの基礎
完全 → 差分 → ログバックアップは基本的には相互
に関連した一連のバックアップとなる
運用で一連のバックアップとは異なる臨時のバック
アップを取得したい場合には [COPY_ONLY] のオプ
ションを設定してバックアップを取得する
COPY_ONLY は [完全] または [トランザクションログ]
のバックアップでのみ使用可能
差分バックアップには COPY_ONLY オプションは使用で
きない
27
29. COPY_ONLY を使用した場合
SQL Server バックアップとリストアの基礎
完全バックアップ 1
差分バックアップ 1
差分バックアップ 2
COPY_ONLY バックアップ
完全バックアップ 1
からの差分
完全バックアップ 1
からの差分
COPY_ONLY 既存のバックアップの関係を崩さないので
途中でバックアップを取得しても差分バックアップ 2 は
完全バックアップ 1 からの差分
29
31. そのバックアップ本当に大丈夫?
SQL Server バックアップとリストアの基礎
壊れた状態のデータベースのバックアップを取得し
ても壊れたまま
壊れていない状態のデータベースでバックアップを取得
することが重要
壊れている状態のデータベースのバックアップをリスト
アしてもデータベースは壊れたまま
バックアップの取得前に [DBCC CHECKDB] を実施、
または、バックアップ取得時にチェックサムの確認
を行い、取得するデータベースが破損していないか
を確認することが重要
31
32. 破損しているデータベース
SQL Server バックアップとリストアの基礎
メッセージ824、レベル24、状態2、行1
SQL Server で、一貫性に基づいた論理I/O エラーが検出されました: 正しくないチェック
サム(必要なチェックサム: 0xc9b63224、実際のチェックサム: 0x4996b23e)。このエラー
は、ファイル'E:SQL2008R2BROKEN.mdf' のオフセット0x00000000266000 にある
データベースID が14 のページ(1:307) の読み取り中に発生しました。SQL Server エ
ラーログまたはシステムイベントログ内の別のメッセージで詳細情報が報告されることも
あります。このエラー状態は深刻で、データベースの整合性を損なう可能性があるので、
すぐに解決する必要があります。完全なデータベース一貫性確認(DBCC CHECKDB) を
実行してください。このエラーには多くの要因があります。詳細については、SQL Server
オンライン ブックを参照してください。
msdb の suspect_pages テーブル
※最大 1,000 件
32
35. 障害発生時のバックアップ
SQL Server バックアップとリストアの基礎
障害が発生している状態のデータベースでログ末尾のバック
アップ (現状のログのバックアップ) が取得できれば障害発生
直前まで復元が可能
ログ末尾のバックアップが取得できない場合は最新のログ
バックアップまでしか復元できない
正常稼働 障害発生
完全
バックアップ
差分
バックアップ
ログ
バックアップ
ログ末尾の
バックアップ
35
36. 参考) ログ末尾のバックアップ
SQL Server バックアップとリストアの基礎
BACKUP LOG [DB 名] TO [取得先]
WITH NO_TRUNCATE
NO_TRUNCATE で取得できない場合は、
CONTINUE_AFTER_ERROR を使用する
36
37. バックアップの時間を減らすために
SQL Server バックアップとリストアの基礎
SQL Server 2008 以降はバックアップ圧縮を実装
SQL Server 2008 では Enterprise Edition の機能であったが、
SQL Server 2008 R2 では、Standard Edition から使用可能
に
暗号化 / 圧縮されているデータベースに対してはサイズが大
幅に減少しない傾向があるため、圧縮による効果があるかは事
前に検証をしておく
(行圧縮のテーブルに対しては効果があることも)
バックアップ実行時の CPU 使用率が非圧縮と比較して
上昇することを把握しておく
リソース ガバナー (CPU / メモリリソースの利用調整機能) を
使用することで CPU 使用率を制限することも可能
ただし、リソース ガバナーは Enterprise Edition 以上の機能
37
39. 完全バックアップのリストア
SQL Server バックアップとリストアの基礎
単体でリストア可能
(mdf / ndf / ldf ファイルを復元)
リストア時にファイルを作成してくれる
瞬時初期化という設定はデータのリストア時にも有効
(今回は紹介のみ)
SQL Server におけるバックアップと復元のパフォーマンスの最適化
http://msdn.microsoft.com/ja-jp/library/ms190954.aspx
バックアップに含まれるデータをログを含めてリストア
バックアップ中の変更は含まれているログを使用してロールフォワード
データ
ログ
バックアップ開始時点のデータ
バックアップ中の変更
39
40. 差分バックアップのリストア
SQL Server バックアップとリストアの基礎
単体でリストア不可。
差分バックアップ取得前の完全バックアップと組み
合わせてリストアをする
差分バックアップは前回の完全バックアップからの
差分になるため、複数の差分バックアップがあって
も、最新の差分バックアップをリストアすれば、そ
れまでのデータがリストアされる
データ
ログ
前回完全バックアップからの変更分のデータ
バックアップ中の変更
40
41. トランザクションログ バックアップのリストア
SQL Server バックアップとリストアの基礎
単体でリストア不可
完全バックアップ / 差分バックアップと組み合わせてリ
ストアする
トランザクションログのバックアップを使用することで、
特定の時間に戻すことが可能となる
最小ログ記録操作の含まれるログバックアップでは特定の時間
に戻すことはできない
データ
ログ
最小ログ記録で変更のあったデータ
前回ログバックアップからの変更
41
42. 最小ログ記録時のログバックアップの比較
SQL Server バックアップとリストアの基礎
完全バックアップのログバックアップ
データベース'TESTDB' の2665 ページ、ファイル1 のファイル'TESTDB_log' を
処理しました。
BACKUP LOG により2665 ページが0.302 秒間で正常に処理されました(68.938
MB/秒)。
一括ログ のログバックアップ
データベース'TESTDB' の2608 ページ、ファイル1 のファイル'TESTDB' を処
理しました。
データベース'TESTDB' の117 ページ、ファイル1 のファイル'TESTDB_log' を処
理しました。
BACKUP LOG により2725 ページが0.633 秒間で正常に処理されました(33.621
MB/秒)。
バックアップのログから復旧モデルが一括ログの場合で
最小ログ記録操作があった場合はログバックアップ時に
変更のあったデータが取得されていることが確認できる
42
44. リストアの基本手順
SQL Server バックアップとリストアの基礎
1. (ログ末尾のバックアップを取得)
1. SQL Server 2012 以降では SSMS からのリストア時に
ログ末尾のバックアップを取得することが可能
2. 最新の完全バックアップをリストア
3. 最新の差分バックアップをリストア
4. 最新の差分バックアップ以降のトランザクションログ
バックアップをリストア
完全バックアップ + ログバックアップのリストアでも可
5. ログ末尾のバックアップをリストア
44
46. バックアップの暗号化
SQL Server バックアップとリストアの基礎
透過的データ暗号化 (TDE)
透過的データ暗号化で暗号化されたデータベースは、データ
ベースのファイル / バックアップについても暗号化された状
態となる
(メモリ上のデータは暗号化されていない)
透過的なデータ暗号化 (TDE)
https://msdn.microsoft.com/ja-jp/library/bb934049(v=sql.120).aspx
SQL Server 2008 以降の Enterprise Edition で使用できる
リストア先も Enterprise Edition に限定される
バックアップ暗号化
TDE と異なりバックアップのみを暗号化する
SQL Server 2014 から使用できる機能
Standard Edition 以上で使用することができる
Web / Express では使用できないが、リストアは可能
46