Sql-Server

我可以在 SQL 數據庫備份已經啟動後停止它嗎?

  • May 18, 2020

我希望在 SQL Server 2008 中對 SQL 數據庫進行完整的數據庫備份。

我的問題是:

  • 如果備份時間太長或速度太慢,我可以在備份開始後停止、暫停或取消備份嗎?備份只是一項工作,我會停止工作嗎?
  • 進行備份時,您是否能夠查看進度,並查看備份的估計完成時間?如果是這樣,您如何看待它的進展?

直接回答你的問題:

如果備份時間太長或速度太慢,我可以在備份開始後停止、暫停或取消備份嗎?

您不能暫停備份 - 使用 Tsql 或使用 sql 代理作業執行。如果您的數據庫處於鏡像狀態,那麼當您進行故障轉移時,備份將被終止。

由於您使用的是 sql server 2008,最近我遇到了一個奇怪的情況,導致我們的一個關鍵應用程序中斷,如果您不在最新的 SP(2008 SP4)上 - 我們在節點上執行 sp1錯誤並已在 SP1+CU4 中修復 - 在 SP1 的 CU4 中已解決:https: //support.microsoft.com/en-US/help/973602。在“970133”中搜尋:修復:在 SQL Server 2008 中為數據庫創建壓縮備份時,如果備份操作停止響應,則無法停止備份操作。

您可以使用命令停止或殺死它kill spid

你必須小心,就好像你殺死了一個已經在進行中的工作,它必須ROLLBACK花費一些或更多的時間。

備份只是一項工作,我會停止這項工作嗎?

取決於您如何執行備份。如果您使用 SQL 代理作業執行它,那麼它是您可以的作業,STOP或者如果您直接從 SSMS 或 SQLCMD 執行它,那麼您可以CANCELKILL命令。

進行備份時,您是否能夠查看進度,並查看備份的估計完成時間?如果是這樣,您如何看待它的進展?

您可以使用 DMV 來監控備份(或恢復)進度(如果您不使用WITH STATS = number):

----- find out the ETA time for restore and backup progress

SELECT command,
           s.text,
           start_time,
           percent_complete, 
           CAST(((DATEDIFF(s,start_time,GetDate()))/3600) as varchar) + ' hour(s), '
                 + CAST((DATEDIFF(s,start_time,GetDate())%3600)/60 as varchar) + 'min, '
                 + CAST((DATEDIFF(s,start_time,GetDate())%60) as varchar) + ' sec' as running_time,
           CAST((estimated_completion_time/3600000) as varchar) + ' hour(s), '
                 + CAST((estimated_completion_time %3600000)/60000 as varchar) + 'min, '
                 + CAST((estimated_completion_time %60000)/1000 as varchar) + ' sec' as est_time_to_go,
           dateadd(second,estimated_completion_time/1000, getdate()) as est_completion_time 
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
WHERE r.command in ('RESTORE DATABASE', 'BACKUP DATABASE', 'RESTORE LOG', 'BACKUP LOG')

一些思考的食物:

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