So-net無料ブログ作成

VSS による SQL Server のバックアップ② [BACKUP]

実際にやってみます…と言いつつも間が空いてしまいました。
環境は Windows Server 2012 の Hyper-V の仮想サーバ内に SQLServer 2008R2 がインストールされています。
SM1 がユーザーデータベースになります。
02.jpg
SQLServerはDBのフルバックアップを行い、トランザクションログのバックアップが出来る状態にします。
13.jpg
14.jpg
初めにトランザクションログを充てられる起点のバックアップを取ります。
まず、バックアップをする直前で SQLServerのトランザクションログのバックアップを行います。
17.jpg
ただし、通常と異なるのは Options の leave the database in the restoring state で バックアップ後に restoring モードにしておく事です。
18.jpg
19.jpg
クエリで行うとこんな感じです。
38.jpg
restoring モードになります。
20.jpg
この間にVSSでフルバックアップを行います。
21.jpg
22.jpg
VSSによるフルバックアップが終了したらSQLServerはリカバリして通常モードにします。
(トランザクションログのリストアでファイルを指定せずに WITH RECOVER でリストアします)
23.jpg
24.jpg
クエリで行うとこんな感じです。
42.jpg
この後、しばらく運用してトランザクションログが溜まったらトランザクションログをバックアップします。
43.jpg
またしばらく運用してフルバックアップを行う時には、トランザクションログのバックアップを行い restoring モードにしてから、
44.jpg
その間にVSSでフルバックアップします。
39.jpg
以降は トランザクションログのバックアップ - restoring モードにしてVSSフルバックアップ のローテーションで運用していきます。
-- restoring モードにしてその間に VSSでフルバックアップ
BACKUP LOG [SM1] TO DISK = N'\\saturn\bkup\SM1_2012090423.trn'
WITH NOINIT, NAME = N'ES1-Transaction Log Backup',
SKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 10
GO
-- トランザクションログをバックアップ
BACKUP LOG [SM1] TO DISK = N'\\saturn\bkup\SM1_2012090500.trn'
WITH NOINIT, NAME = N'SM1-Transaction Log Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- トランザクションログをバックアップ
BACKUP LOG [SM1] TO DISK = N'\\saturn\bkup\SM1_2012090501.trn'
WITH NOINIT, NAME = N'SM1-Transaction Log Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
-- restoring モードにしてその間に VSSでフルバックアップ
BACKUP LOG [SM1] TO DISK = N'\\saturn\bkup\SM1_2012090602.trn'
WITH NOINIT, NAME = N'SM1-Transaction Log Backup',
SKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 10
GO

リストアする時は以下の様になります。
仮想サーバの場合まず、OSを落とします。
30.jpg
仮想サーバのボリュームをリストアします。
31.jpg
32.jpg
仮想サーバを起動し、仮想サーバ内のSQLServerを起動します。
SQLServerは restoring モードでバックアップされているので、restoring モードで起動されます。
33.jpg
このまま RESTORE LOG WITH RECOVER で使える様にもなりますが、
42.jpg
フルバックアップ以降のトランザクションログを適用する事が出来ます。
フルバックアップ時にはまだ無かったトランザクションログのバックアップなので、バックアップ履歴には無く、GUIでは適用できませんが、クエリで直接指定すれば適用する事が出来ます。
47.jpg
-- ボリュームフルリストアで SQLServer は restoring モード
-- そのまま使用可能にする
RESTORE LOG [SM1] WITH RECOVERY, STATS = 10
GO
-- 又は目的のトランザクションログのバックアップまで戻す。
RESTORE LOG [SM1] FROM DISK = N'\\saturn\bkup\SM1_2012090500.trn'
WITH FILE = 1, NOUNLOAD, NORECOVERY, STATS = 10
GO
RESTORE LOG [SM1] FROM DISK = N'\\saturn\bkup\SM1_2012090501.trn'
WITH FILE = 1, NOUNLOAD, NORECOVERY, STATS = 10
GO
RESTORE LOG [SM1] FROM DISK = N'\\saturn\bkup\SM1_2012090602.trn'
WITH FILE = 1, NOUNLOAD, RECOVERY, STATS = 10
GO

バックアップの時に restoreing モードにするという事は、その間データベースにはアクセス出来ない時間が出来てしまいます。
オンラインバックアップが標準のSQLServerではこれは大きな欠点になります。
それでもこの方式のバックアップであれば、安易に障害直前にまで戻せる重要な利点があります。

あと、定期的に普通のフルバックアップを行った方が良いと思います。
restoring モードでバックアップした場合、SQLServer的にはフルバックアップされたという認識にはなく、バックアップ履歴が溜まり続ける事になります。
時々フルバックアップを取って履歴をリセットする必要があると思います。
そして、フルバックアップを取った直後に restoring モードでのバックアップを取る必要があります。
ログを戻せるのは restoreing モードのバックアップより後なので。

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。