Sql-Server

零碎只恢復一個文件組,不恢復主文件組

  • January 22, 2020

我有一個簡單恢復模式的數據庫,並定期進行 FULL、DIFF 備份。

這個數據庫也有每個月的文件組。每個文件組只有一個 NDF 文件。

像這樣:

FileGroup: PRIMARY
File: Primary.mdf

FileGroup: FG201801
File: 201801.ndf

FileGroup: FG201802
File: 201802.ndf

FileGroup: FG201803
File: 201803.ndf

etc

我的目標是雙重的:

  1. 能夠對每個分區級別進行備份。當我將文件組標記為只讀時,我只能閱讀它。所以我已經分離了部分備份 BAK 文件。 https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/partial-backups-sql-server
  2. 第二個目標是(我的問題在這裡),能夠只恢復一個文件組,而不恢復 PRIMARY 文件組或觸及任何其他文件組。

甚至可能嗎?

據了解,如果我只想恢復假設 FG201802 **,**而不影響 PRIMARY 和其他人,那麼首先我必須恢復包含 PRIMARY 文件組的完整備份,然後我可以恢復 FG201802 的部分備份。如何在不恢復 PRIMARY 的情況下恢復 FG201802?

任何人都可以向我指出一個線上資源來證明這一點嗎?網路上的所有文章(我發現)總是開始恢復 PRIMARY 完整備份,然後一一應用其餘的部分備份。

我只希望恢復部分備份,怎麼辦?

謝謝!

如果不恢復 PRIMARY 文件組,則無法恢復文件或文件組。考慮到您的情況,有很多原因:

  1. 在 SIMPLE 模式下,部分備份始終包含 PRIMARY 文件組和所有讀/寫文件組。您需要切換到完全恢復以使用可以排除 PRIMARY 的僅文件/文件組備份。
  2. 如果不存在 PRIMARY 文件組,則您的數據庫的系統表和元數據將不存在,因此沒有數據庫使用者、沒有架構資訊,SQL Server 需要了解您的數據、文件和文件組的任何內容都將不可用。
  3. 在 SIMPLE 下,不進行日誌備份,因此您無法針對非 PRIMARY 讀/寫文件組重播事務,這意味著它們必須從與 PRIMARY 一致的備份中恢復。

即使在完全恢復下,也必須恢復主文件組以允許您恢復單個文件/文件組,因為有關數據庫的所有核心元數據都在那裡。

部分備份和分段恢復的想法是通過恢復數據庫正常執行所需的基本文件組,讓您在災難中更快地恢復聯機,並且您可以稍後恢復其他文件組。

我建議您考慮對數據庫進行一些更改:

  1. 將所有使用者對象和數據移出 PRIMARY 文件組,以減少恢復時間。
  2. 切換到完整恢復模式並實施單獨的文件組備份和頻繁的日誌備份。
  3. 將不應更新的任何文件組標記為只讀。

這些更改將使您能夠簡化還原過程。假設您進行了上述更改並希望恢復您提到的文件,則該過程將是:

  1. 進行尾日誌備份
  2. 從備份中恢復主文件組
  3. 恢復所有日誌文件而不恢復(除了最後一次恢復尾日誌備份,這是通過恢復完成的)(此時數據庫線上)
  4. 在所有未損壞的文件組上執行“恢復”(這些 FG 中的數據現在可以訪問)
  5. 從備份中恢復損壞的文件組(數據庫現已完全恢復)

這將比 SIMPLE 恢復下的部分備份更快,因為未損壞的文件組不必從備份中恢復,而是由 SQL Server 簡單地恢復磁碟上的數據文件,並根據需要將事務從日誌重播到這些文件上。如果 PRIMARY 文件組很小,並且您經常進行日誌備份,那麼整個過程應該比恢復所有讀/寫文件組更快,就像在 SIMPLE 下進行部分備份一樣。

引用自:https://dba.stackexchange.com/questions/257965