VSS による SQL Server のバックアップ② [BACKUP]
実際にやってみます…と言いつつも間が空いてしまいました。
環境は Windows Server 2012 の Hyper-V の仮想サーバ内に SQLServer 2008R2 がインストールされています。
SM1 がユーザーデータベースになります。
SQLServerはDBのフルバックアップを行い、トランザクションログのバックアップが出来る状態にします。
初めにトランザクションログを充てられる起点のバックアップを取ります。
まず、バックアップをする直前で SQLServerのトランザクションログのバックアップを行います。
ただし、通常と異なるのは Options の leave the database in the restoring state で バックアップ後に restoring モードにしておく事です。
クエリで行うとこんな感じです。
restoring モードになります。
この間にVSSでフルバックアップを行います。
VSSによるフルバックアップが終了したらSQLServerはリカバリして通常モードにします。
(トランザクションログのリストアでファイルを指定せずに WITH RECOVER でリストアします)
クエリで行うとこんな感じです。
この後、しばらく運用してトランザクションログが溜まったらトランザクションログをバックアップします。
またしばらく運用してフルバックアップを行う時には、トランザクションログのバックアップを行い restoring モードにしてから、
その間にVSSでフルバックアップします。
以降は トランザクションログのバックアップ - 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を落とします。
仮想サーバのボリュームをリストアします。
仮想サーバを起動し、仮想サーバ内のSQLServerを起動します。
SQLServerは restoring モードでバックアップされているので、restoring モードで起動されます。
このまま RESTORE LOG WITH RECOVER で使える様にもなりますが、
フルバックアップ以降のトランザクションログを適用する事が出来ます。
フルバックアップ時にはまだ無かったトランザクションログのバックアップなので、バックアップ履歴には無く、GUIでは適用できませんが、クエリで直接指定すれば適用する事が出来ます。
-- ボリュームフルリストアで 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 モードのバックアップより後なので。
環境は Windows Server 2012 の Hyper-V の仮想サーバ内に SQLServer 2008R2 がインストールされています。
SM1 がユーザーデータベースになります。
SQLServerはDBのフルバックアップを行い、トランザクションログのバックアップが出来る状態にします。
初めにトランザクションログを充てられる起点のバックアップを取ります。
まず、バックアップをする直前で SQLServerのトランザクションログのバックアップを行います。
ただし、通常と異なるのは Options の leave the database in the restoring state で バックアップ後に restoring モードにしておく事です。
クエリで行うとこんな感じです。
restoring モードになります。
この間にVSSでフルバックアップを行います。
VSSによるフルバックアップが終了したらSQLServerはリカバリして通常モードにします。
(トランザクションログのリストアでファイルを指定せずに WITH RECOVER でリストアします)
クエリで行うとこんな感じです。
この後、しばらく運用してトランザクションログが溜まったらトランザクションログをバックアップします。
またしばらく運用してフルバックアップを行う時には、トランザクションログのバックアップを行い restoring モードにしてから、
その間にVSSでフルバックアップします。
以降は トランザクションログのバックアップ - 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を落とします。
仮想サーバのボリュームをリストアします。
仮想サーバを起動し、仮想サーバ内のSQLServerを起動します。
SQLServerは restoring モードでバックアップされているので、restoring モードで起動されます。
このまま RESTORE LOG WITH RECOVER で使える様にもなりますが、
フルバックアップ以降のトランザクションログを適用する事が出来ます。
フルバックアップ時にはまだ無かったトランザクションログのバックアップなので、バックアップ履歴には無く、GUIでは適用できませんが、クエリで直接指定すれば適用する事が出来ます。
-- ボリュームフルリストアで 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 モードのバックアップより後なので。
コメント 0