web-dev-qa-db-ja.com

私の復元プロセスは、このサードパーティの非コピーのみのバックアップによって悪影響を受けていますか?

この質問は重複のように見えるかもしれませんが、状況に基づいており、他の回答からの知識を適用する混乱から投稿されます。

私は数十の記事( 12 、、 4 )を読みましたが、矛盾しています意見(私の情報は、情報過多に苦しんでいるか、おそらく他の質問に十分な情報が含まれていないことに基づいています)。私はこの質問を作成しているので、自分の状況に基づいて決定的な答えを得ます。

次のバックアップシナリオを考えると、サードパーティのバックアップソフトウェアによって最新のバックアップ(18:00)の時点まで完全に回復できないのかを知る必要がありますか?

Time  | Action                                       | Device   
------|----------------------------------------------|----------------------------
12:00 | Full backup (non copy_only)                  | D:\MyBackupDevice                 
13:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
14:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
15:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
16:00 | Full backup (non copy_only) VSS snapshot     | Third-party off-site device
17:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                
18:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
19:00 | Disaster strikes                             |                                   

私の復元の目標は、18:00のバックアップの時点まで復元することです(災害まで残りのトランザクションを取得するために追加できるログ末尾のバックアップがあることはわかっていますが、今のところは簡単にしましょう)。 。

この答え に基づいて、サードパーティのバックアップが自分のトランザクションログの復元と競合を引き起こし( この答え のように)、自分の復元を実行できないと思いますその時点まで。私の理解では、トランザクションログバックアップには、最後の完全な非copy_onlyバックアップ以降のデータが含まれています。

これは正しいです?サードパーティのバックアップはcopy_only以外のバックアップなので、自分の復元ルーチンが機能しなくなりますか?

7
EvilDr

多分これはあなたが理解するのに役立ちます。デモをしましょう!いくつかのダミーデータでダミーデータベースを作成します。

USE master;

/*Create a dummy database*/
CREATE DATABASE LogRestoreTest

/*We full now*/
ALTER DATABASE LogRestoreTest SET RECOVERY FULL

/*Context is everything*/
USE LogRestoreTest

/*If nothing changes, do we even need a log backup?*/
CREATE TABLE dbo.t1 (Id INT)

次に、1つの完全バックアップを作成します。一つだけです。約束する。

/*Take a full backup, dummy*/

BACKUP DATABASE LogRestoreTest 
TO DISK = 'F:\Backup\LRT_FULL.bak' 
WITH INIT, FORMAT, COMPRESSION

次に、いくつかの変更を行い、ログのバックアップを取ります。実生活と同じように。楽しいです。まだ飲みません。

/*Make a change*/
INSERT dbo.t1 (Id )
VALUES ( 1 )

/*Take a log backup*/
BACKUP LOG LogRestoreTest 
TO DISK = 'F:\Backup\LRT_LOG_1.trn' 
WITH INIT, FORMAT, COMPRESSION

/*Make another change*/
INSERT dbo.t1 (Id )
VALUES ( 2 )

/*Take another log backup*/
BACKUP LOG LogRestoreTest 
TO DISK = 'F:\Backup\LRT_LOG_2.trn' 
WITH INIT, FORMAT, COMPRESSION

/*Make another change*/
INSERT dbo.t1 (Id )
VALUES ( 3 )

次に、「帯域外」のフルバックアップと、別のログバックアップを作成します。

/*A second full backup appears!*/
BACKUP DATABASE LogRestoreTest 
TO DISK = 'F:\Backup\LRT_FULL_2.bak' 
WITH INIT, FORMAT, COMPRESSION

/*Take another log backup*/
BACKUP LOG LogRestoreTest 
TO DISK = 'F:\Backup\LRT_LOG_3.trn' 
WITH INIT, FORMAT, COMPRESSION

3番目のログバックアップにデータを復元する場合、2つのオプションがあります。

firstフルバックアップとつすべてログバックアップを復元します。

/*Restore the full backup*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_FULL.bak' 
WITH REPLACE, NORECOVERY


/*Square one*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_1.trn' 
WITH NORECOVERY

/*What about to here?*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_2.trn' 
WITH NORECOVERY

/*Obligatory Your Mom*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_3.trn' 
WITH NORECOVERY

または、最新の完全なファイルを復元してから、最終的なログファイルを復元することもできます。

/*Restore the full backup*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_FULL_2.bak' 
WITH REPLACE, NORECOVERY


/*What happens if I try to jump the restores?*/
RESTORE DATABASE LogRestoreTest
FROM DISK = 'F:\Backup\LRT_LOG_3.trn' 
WITH NORECOVERY

ここでは差分バックアップについて説明しませんが、DBA 101の資料をカバーするリソースはたくさんあります。

お役に立てれば!

9
Erik Darling

コミュニティwikiの回答

前の質問 で、あなたは言った:

...ツールが_copy_only_以外のバックアップを使用して、ログチェーンを破壊したことが判明

FULLバックアップはログチェーンを壊しません。

_COPY_ONLY_ FULL以外のバックアップは、差分ベース(DIFFERENTIALバックアップの参照ポイント)をリセットするだけです。

したがって、no16:00 | Full backup (non copy_only) VSS snapshotを防止しません次の復元シーケンスを正常に実行した場合:

  1. 12:00 | Full backup (non copy_only)
  2. 13:00 | Tran log backup (non copy_only)
  3. 14:00 | Tran log backup (non copy_only)
  4. 15:00 | Tran log backup (non copy_only)
  5. 17:00 | Tran log backup (non copy_only)
  6. 18:00 | Tran log backup (non copy_only)

Not-latest FULLバックアップを使用した復元シーケンスの例を次に示します。

LOGバックアップには、最後のLOGバックアップ以降のデータが含まれています。 FULLおよびDIFFERENTIALバックアップはログを切り捨てません。

From トランザクションログ(SQL Server)

完全復旧モデルまたは一括ログ復旧モデルでは、前回のバックアップ以降にチェックポイントが発生した場合、ログバックアップ後に切り捨てが発生します(コピーのみのログバックアップでない場合)。

7
user126897

ここでは、以前の回答からの情報を1つの回答に統合して、シナリオで何が発生するかについて少し詳しく説明します。質問の前提条件が質問ごとに少し変わったことを指摘しておきます。

TL; DR

いいえ、この例のサードパーティソリューションの通常のフルスナップショットバックアップでは、バックアップチェーンは中断されません。


ベースライン

説明のベースラインは、質問で定義されたテーブルになります。

Time  | Action                                       | Device   
------|----------------------------------------------|----------------------------
12:00 | Full backup (non copy_only)                  | D:\MyBackupDevice                 
13:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
14:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
15:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
16:00 | Full backup (non copy_only) VSS snapshot     | Third-party off-site device
17:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                
18:00 | Tran log backup (non copy_only)              | D:\MyBackupDevice                 
19:00 | Disaster strikes                             |           

バックアップの説明

SQL Serverがデータベースのバックアップを実行するたびに、関連するLoqシーケンス番号(LSN)情報がmsdbバックアップ履歴に挿入されるため、復元の場合、プロセスはデータベースの復元に必要なファイル(バックアップセット)を認識します。 。 LSNを使用して、バックアップシーケンスを列first_lsnlast_lsnおよびdatabase_backup_lsn(およびその他のいくつかの列)に格納します。

この情報は、バックアップファイル自体にも保存されます。これらの列は、完全バックアップおよび追加のTLOGバックアップからデータベースを復元する際の復元プロセスを支援します。

first_lsnには、TLOGバックアップに保存された最初のトランザクションのLSNが含まれ、last_lsnには、TLOGバックアップの最後のトランザクションのLSNが含まれます。

database_backup_lsnには、最後の完全バックアップのLSNが含まれます。

やめる。戻る。このセクションをもう一度お読みください。

同様の状況のLSN番号の例

backup_type checkpoint_lsn      database_backup_lsn first_lsn           last_lsn             
Full        35000001911700042   35000001908000042   35000001911100002   35000001913500001    
Log         35000001911700042   35000001911700042   35000001911200001   35000001914300001    
Log         35000001911700042   35000001911700042   35000001914300001   35000001914600001    
Log         35000001911700042   35000001911700042   35000001914600001   35000001914900001    
Log         35000001911700042   35000001911700042   35000001914900001   35000001915200001    
Full        35000001915700042   35000001911700042   35000001915700042   35000001917500001    
Log         35000001915700042   35000001915700042   35000001915200001   35000001918300001    

この例でわかるように、TLOGバックアップのLSNは常に一致しています。以前のTLOGバックアップのlast_lsnは、次のTLOGバックアップのfirst_lsnと一致します。

ただし、フルバックアップには、次のTLOGバックアップのLSN範囲内で始まり、同じTLOGバックアップのLSN範囲内で終わるLSNがあります。

サンプルテーブルに基づいて復元する

19:00のエラーのためにデータベースを18:00に復元する必要があった場合は、12:00からのフルバックアップと13:00から18:00までのトランザクションログバックアップが必要になります。

LSNは中断されません。サードパーティの完全バックアップは必要ありません。

現在のバックアップのfirst_lsnおよびlast_lsn列を確認することで、これを確認できます。それらは互いに一致する必要があります。

説明の終わり

ここで説明を終了することもできますが、サードパーティのソリューションとバックアップに使用しているソリューションに関して考慮すべき点があります。

(つづく...)

参照:SQL Server-SQL Serverバックアップについて(ポール・S・ランダル)

2