Sql-Server

如何備份我的大型 SQL Server 表?

  • November 14, 2019

環境:Windows Server 2008 R2 上的 SQL Server 2008 R2 標準版(是的 - 我知道)。VMWare,Commvault。

我們有一個帶有一張表的 1.4 TB 數據庫。這是架構:

CREATE TABLE [dbo].[FileManager_FilesContent](
   [Id] [bigint] IDENTITY(1,1) NOT NULL,
   [GUID] [uniqueidentifier] NOT NULL,
   [FileContent] [varbinary](max) NOT NULL,
   [Extension] [varchar](20) NULL,
   [IsDeleted] [bit] NULL,
CONSTRAINT [PK_FileManager_FilesContent] PRIMARY KEY CLUSTERED 
(
   [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE UNIQUE NONCLUSTERED INDEX [IX_FileManager_FilesContent] ON [dbo].[FileManager_FilesContent]
(
   [GUID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

我們有一個網路共享,我們在其中備份其他數據庫。這個不會在那裡備份,因為它需要 40 多個小時。我的想法是本地驅動器(或多個驅動器)加上備份壓縮、條帶化和撥入 maxtransfersize 和 buffercount 可能會有所幫助。

關於如何備份此數據庫的任何其他建議?

在此先感謝,-彼得

您可以對錶進行分區。通過分區方案將每個分區放在一個單獨的文件組中。每個文件組都可以單獨備份。從 SQL Server 2019 開始,有一個 DMV可以提供有關哪些頁面以及哪些文件是臟的資訊。

仍有 1.4TB 需要備份,因此完整的備份週期仍需要至少 40 小時。但是,每個單獨的文件組將花費更少的時間來避免停機、網路擁塞和所有其他擔憂。

如果寫入通常只涉及幾個分區,您可以建立某種形式的更改跟踪 -內置應用程式碼- 並且只備份臟文件組。

根據寫入行的時間,您可以將某些文件組設為只讀。一旦進行了最終備份,就可以從正在進行的備份週期中省略這些,從而減少經過的時間。

潛在的備份和傳輸到網路共享可能會並行發生,從而減少所需的本地工作空間的數量(備份分區 1,在準備分區 2 的備份時通過網路傳輸,然後在備份 3 的同時傳輸 2 等等;每個本地備份可以在網路驅動器上立即刪除)。

如果您可以適當地安排事情,您可能能夠實施零碎的恢復,這肯定會從 40 小時提高您的 RTO。

當然,腳本編寫和恢復會更複雜一些。

如果網路太慢,將多個文件備份到本地或直接連接的驅動器。SSD、NVme等

所有其他選項(文件數量、最大傳輸量等)都屬於“視情況而定”類別,需要進行測試以查看最佳選項。

或者…“備份”,通過日誌將其傳送到另一個 SQL 框。不是最乾淨的選擇,但至少它是一個選擇。

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