Sql-Server
我可以在 SQL 數據庫備份已經啟動後停止它嗎?
我希望在 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 執行它,那麼您可以CANCEL
或KILL
命令。進行備份時,您是否能夠查看進度,並查看備份的估計完成時間?如果是這樣,您如何看待它的進展?
您可以使用 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')
一些思考的食物:
- 開始檢查導致“性能緩慢”的原因 -分析等待統計資訊、鎖定和阻塞問題、執行sp_whoisactive等
- 如果您真的發現執行備份會導致速度變慢,那麼請在活動最少的時候安排備份,並遵循 Aaron 的建議,並確保閱讀一些常見的備份神話 - 來自 Paul Randal。
- 還有一些選項可以提高 SQL Server 備份性能。