非副本僅完整備份會影響事務日誌備份鏈嗎?
我們配置了完整備份和日誌備份。
在還原期間,我們應用完整備份和後續日誌備份。
我知道如果我進行手動完整備份(非僅複製模式),那麼它將破壞差異鏈。但在此範例中,沒有差異備份。但是有事務日誌鏈。由於非僅複製完整備份,此鍊是否會受到負面影響?
如果我們只是拿你的問題來分析一下msdb數據庫中儲存的資訊,那麼答案是:是的,
BACKUP DATABASE ...
沒有COPY_ONLY
設置參數,會對備份鏈(歷史……)產生影響。這是因為
database_backup_lsn
一旦執行 FULLBACKUP DATABASE...
語句,與備份資訊一起儲存的(LSN = Log Sequence Number)就會改變。後續事務日誌 (TLOG) 備份引用完整備份。這顯示在下圖中:
[
在2021-09-11 22:19:17.000創建的日誌備份引用
database_backup_lsn
了 LSN1221000000228000037
,這是first_lsn
大約一周前發生的最後一次完整備份的 LSN。在2021-09-11 23:15:13.000創建的日誌備份
database_backup_lsn
使用 LSN引用1221000000714400037
,這是在2021-09-11 22:34:32.000first_lsn
發生的 FULL 數據庫備份的。這對您的恢復有何影響?
好吧,如果自給定的 FULL 備份以來,您有一條完整的 TLOG 備份鏈可用,那麼就沒有任何影響。您可以使用 FULL 數據庫備份和隨後的 TLOG 備份文件恢復您的數據庫,直到任何時間點。
但是,如果您的 TLOG 備份鏈中斷,那麼您將只能使用 FULL 備份和任何可用的 TLOG 備份來恢復數據庫,直到失去 TLOG 文件為止。
如何判斷備份日誌鍊是否損壞?(DBA Stackexhange 回答)
資訊
完整備份包含數據庫的一致狀態。(警告:您必須恢復此文件以證明這一點。或者備份僅在恢復後才有效。)
TLOG 備份包含自上次備份(FULL 或 TLOG)以來所有已送出的事務。備份包含 a
first_lsn
和 alast_lsn
。由於這些通常是按順序排列的,因為last_lsn
上一個 TLOG 備份的備份是first_lsn
下一個 TLOG 備份的備份,所以您應該有一個連續的 TLOG 備份序列,這將允許您將數據庫恢復到任何時間點,前提是您有完整的 TLOG 備份鏈。COPY_ONLY 參數
該
COPY_ONLY
參數只是告訴 SQL Server 執行完整備份,但不要重置database_backup_lsn
儲存在 msdb 備份歷史記錄中的內容。所有後續的 TLOG 備份仍將基於上次創建的不帶COPY_ONLY
參數的完整備份。SSMS 圖形使用者界面
執行不帶
COPY_ONLY
標誌的完整備份將改變資訊在 GUI 中的顯示方式。GUI 通常會根據指定的時間顯示使數據庫恢復到一致狀態所需的最後一次 FULL、DIFF 和 TLOG 備份。這是因為 GUI 會讀取 msdb 備份歷史資訊。查詢 msdb 備份歷史的腳本
為了您的方便,我添加了我使用的腳本。
/* ================================================================== Author......: hot2use Date........: 25.04.2018 Version.....: 0.1 Server......: localhost (first created for) Database....: msdb Owner.......: - Table.......: various Type........: Script Name........: ADMIN_Retrieve_Backup_History_Information.sql Description.: Retrieve backup history information from msdb database ............ ............ ............ History.....: 0.1 h2u First created ............ ............ ================================================================== */ SELECT /* Columns for retrieving information */ -- CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS SRVNAME, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, -- msdb.dbo.backupset.expiration_date, CASE msdb.dbo.backupset.type WHEN 'D' THEN 'Full' WHEN 'I' THEN 'Diff' WHEN 'L' THEN 'Log' END AS backup_type, -- msdb.dbo.backupset.backup_size / 1024 / 1024 as [backup_size MB], msdb.dbo.backupmediafamily.logical_device_name, msdb.dbo.backupmediafamily.physical_device_name, -- msdb.dbo.backupset.name AS backupset_name, -- msdb.dbo.backupset.description, msdb.dbo.backupset.is_copy_only, msdb.dbo.backupset.is_snapshot, msdb.dbo.backupset.checkpoint_lsn, msdb.dbo.backupset.database_backup_lsn, msdb.dbo.backupset.differential_base_lsn, msdb.dbo.backupset.first_lsn, msdb.dbo.backupset.fork_point_lsn, msdb.dbo.backupset.last_lsn FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id /* ---------------------------------------------------------------------------- Generic WHERE statement to simplify selection of more WHEREs -------------------------------------------------------------------------------*/ WHERE 1 = 1 /* ---------------------------------------------------------------------------- WHERE statement to find Device Backups with '{' and date n days back ------------------------------------------------------------------------------- */ -- AND physical_device_name LIKE '{%' /* ------------------------------------------------------------------------------- WHERE statement to find Backups saved in standard directories, msdb.dbo.backupfile AS b ---------------------------------------------------------------------------------- */ -- AND physical_device_name LIKE '[fF]:%' -- STANDARD F: Backup Directory -- AND physical_device_name NOT LIKE '[nN]:%' -- STANDARD N: Backup Directory -- AND physical_device_name NOT LIKE '{%' -- Outstanding Analysis -- AND physical_device_name NOT LIKE '%$\Sharepoint$\%' ESCAPE '$' -- Sharepoint Backs up to Share -- AND backupset_name NOT LIKE '%Galaxy%' -- CommVault Sympana Backup /* ------------------------------------------------------------------------------- WHERE Statement to find backup information for a certain period of time, msdb.dbo.backupset AS b ---------------------------------------------------------------------------------- AND (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7) -- 7 days old or younger AND (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) <= GETDATE()) -- n days old or older */ /* ------------------------------------------------------------------------------- WHERE Statement to find backup information for (a) given database(s) ---------------------------------------------------------------------------------- */ -- AND database_name IN ('AdventureWorks2012') -- database names -- AND database_name IN ('rtc') -- database names /* ------------------------------------------------------------------------------- ORDER Clause for other statements ---------------------------------------------------------------------------------- */ --ORDER BY msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_finish_date -- order clause ---WHERE msdb..backupset.type = 'I' OR msdb..backupset.type = 'D' ORDER BY --2, 2 DESC, 3 DESC