Sql-Server-2014

我可以從相同版本的 SQL 伺服器恢復具有不同更新的數據庫嗎?

  • July 16, 2021

主伺服器(我備份數據庫的那個)是:

Microsoft SQL Server 2014 - 12.0.4100.1 (X64)

Apr 20 2015 17:29:27 版權所有 (c) Microsoft Corporation

Enterprise Edition (64-bit) o​​n Windows NT 6.3 (Build 9600 :)

(Hypervisor)

我正在嘗試恢復此伺服器中的數據庫:

Microsoft SQL Server 2014 (RTM-CU14) (KB3158271) - 12.0.2569.0 (X64) 2016 年 5 月 27 日 15:06:08 版權所有 (c) Microsoft Corporation Enterprise Edition:Windows NT 6.3 上基於核心的許可(64 位)(建構 10586:)

但恢復永遠不會完成。使用SP_WHOISACTIVEcomplete_percentage 為空(例如,10 分鐘)。

在我自己的機器上,我可以恢復數據庫,這是我的伺服器:

Microsoft SQL Server 2014 (SP1-CU7) (KB3162659) - 12.0.4459.0 (X64) 2016 年 5 月 27 日 15:33:17 版權所有 (c) Microsoft Corporation Enterprise Edition:Windows NT 6.3 上基於核心的許可(64 位)(內部版本 10586:)(管理程序)

什麼會導致這個問題?數據庫為 140GB。有需要驗證的地方嗎?

verifyonly文件有效。

我正在使用 T-SQL 進行還原:

restore database Database
   from disk ='F:\Database.BKP'
       with
           move 'Database' to 'path\database.mdf',
           move 'Database2' to 'path\database.ndf',
           move 'Database3' to 'path\database_FULLTEXT',
           move 'Databaselog' to 'path\database_log',stats=1

我注意到的一件事是等待類型Async_io_

有沒有辦法驗證磁碟是否有問題,但通過 SQL SERVER?

哦,當我暫停腳本時,我收到了這條消息:

消息 3122,級別 16,狀態 1,行 4 文件初始化失敗。

RESTORE 無法繼續。消息 3204,第 16 級,狀態 1,第 4 行

備份或恢復被中止。消息 3013,第 16 級,狀態 1,第 4 行

RESTORE DATABASE 異常終止。查詢被取消

使用者。

但恢復永遠不會完成。使用 SP_WHOISACTIVE 的 complete_percentage 為空(例如,10 分鐘)。

10 分鐘的時間幾乎不足以有資格使用“從不”這個詞!

什麼會導致這個問題?數據庫為 140GB。

如果您沒有打開即時文件初始化(請參閱此處此處以及其他地方),那麼它將嘗試將 140Gb+ 的磁碟空間歸零以準備恢復數據 - 這可能需要十分鐘以上的時間$$ * $$並且在該過程的那部分過程中,完成的百分比將不計算在內(這僅在頁面從備份文件恢復到數據文件時才計算在內,而不是在創建數據文件時計算在內)。

$$ * $$: ~10 分鐘內 ~14Gb 大約是 240MByte/秒 - 您的 I/O 子系統能以多快的速度寫入以及同時進行哪些其他活動?

要回答標題中的問題:

我可以從相同版本的 SQL 伺服器恢復具有不同更新的數據庫嗎?

是的,您應該能夠,即使不同的更新是服務包,但我通常建議您只在可能的情況下向上恢復以防萬一。

您可以使用以下腳本檢查恢復剩餘時間,也許這可以告訴您恢復需要多長時間:

select
session_id,
convert(nvarchar(22),db_name(database_id)) as [database],
case command
when 'BACKUP DATABASE' then 'DB'
when 'RESTORE DATABASE' then 'DB RESTORE'
when 'RESTORE VERIFYON' then 'VERIFYING'
when 'RESTORE HEADERON' then 'VERIFYING HEADER'
else 'LOG' end as [type],
start_time as [started],
dateadd(mi,estimated_completion_time/60000,getdate()) as [finishing],
datediff(mi, start_time, (dateadd(mi,estimated_completion_time/60000,getdate()))) - wait_time/60000 as [mins left],
datediff(mi, start_time, (dateadd(mi,estimated_completion_time/60000,getdate()))) as [total wait mins (est)],
convert(varchar(5),cast((percent_complete) as decimal (4,1))) as [% complete],
getdate() as [current time]
from sys.dm_exec_requests
where command in ('BACKUP DATABASE','BACKUP LOG','RESTORE DATABASE','RESTORE VERIFYON','RESTORE HEADERON')

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