MSSQL-最佳实践-如何监控备份还原进度
title: MSSQL · 最佳實(shí)踐 · 如何監(jiān)控備份還原進(jìn)度
author: 風(fēng)移
摘要
本期月報(bào)是SQL Server備份還原專題分享系列的第六期,打算分享給大家如何監(jiān)控SQL Server備份還原進(jìn)度。
場(chǎng)景引入
由于SQL Server備份還原操作是重I/O讀寫(xiě)操作,尤其是當(dāng)數(shù)據(jù)庫(kù)或數(shù)據(jù)庫(kù)備份文件比較大的到時(shí)候。那么,我們就有強(qiáng)烈的需求去監(jiān)控備份還原的過(guò)程,時(shí)時(shí)刻刻把握備份還原的進(jìn)度,以獲取備份還原操作完成時(shí)間的心理預(yù)期以及對(duì)系統(tǒng)的影響。本期月報(bào)分享如何監(jiān)控SQL Server備份還原進(jìn)度。
監(jiān)控備份還原進(jìn)度
在SQL Server數(shù)據(jù)庫(kù)中,監(jiān)控?cái)?shù)據(jù)庫(kù)備份還原進(jìn)度方法主要有以下三種:
?利用SSMS的備份、還原進(jìn)度百分比
?利用T-SQL的stats關(guān)鍵字展示百分比
?利用動(dòng)態(tài)視圖監(jiān)控備份、還原完成百分比
利用SSMS
監(jiān)控?cái)?shù)據(jù)庫(kù)備份進(jìn)度
在SSMS中,右鍵點(diǎn)擊你需要備份的數(shù)據(jù)庫(kù) => Tasks => Back Up...
在Destination中選擇Disk => Add... => 選擇備份文件本地存儲(chǔ)路徑 => OK
在該窗口的左下角部分,會(huì)有Process的進(jìn)度展示,比如截圖中的進(jìn)度表示數(shù)據(jù)庫(kù)已經(jīng)備份完成了30%。
這種方法可以看到數(shù)據(jù)庫(kù)備份進(jìn)程進(jìn)度的百分比,但是沒(méi)有更多的詳細(xì)信息。
監(jiān)控?cái)?shù)據(jù)庫(kù)還原進(jìn)度
監(jiān)控?cái)?shù)據(jù)庫(kù)還原進(jìn)度方法與上面的方法十分類(lèi)似,只是入口不同。還原數(shù)據(jù)庫(kù)入口:右鍵點(diǎn)擊你需要還原的數(shù)據(jù)庫(kù) => Tasks => Restore => Database...
在Restore Database頁(yè)面,選擇Device => 點(diǎn)擊右側(cè)的預(yù)覽按鈕 => Add => 添加本地備份文件 => OK
在接下來(lái)的數(shù)據(jù)庫(kù)還原頁(yè)面中的最右上角部分,有數(shù)據(jù)庫(kù)的還原進(jìn)度條,以及還原百分比。比如,圖中的數(shù)據(jù)庫(kù)還原進(jìn)度是50%,參見(jiàn)如下截圖:
利用T-SQL
以上方法介紹使用SSMS來(lái)備份或者還原數(shù)據(jù)庫(kù)進(jìn)度監(jiān)控查看方法。當(dāng)然,有的人喜歡使用T-SQL腳本的方式來(lái)備份或者還原數(shù)據(jù)庫(kù)。我們同樣可以實(shí)現(xiàn)備份還原數(shù)據(jù)庫(kù)的進(jìn)度監(jiān)控,方法是在語(yǔ)句中增加stats關(guān)鍵字,比如stats=10,那么系統(tǒng)在完成每個(gè)百分之十以后,都會(huì)在Messages中打印出** percent processed的字樣。
BACKUP DATABASE [TestBackUpRestore] TO DISK='C:\BACKUP1\TestBackUpRestore_FULL.bak' WITH STATS=10;參見(jiàn)如下截圖,在Messages窗口中,每個(gè)10%,都有** percent processed的進(jìn)度提示。
注意:
還原數(shù)據(jù)庫(kù)的方法相同,同樣也是添加stats關(guān)鍵字。比如:
利用DMV
有的人可能會(huì)遇到這樣的情況:我在做數(shù)據(jù)庫(kù)備份還原的時(shí)候,忘記添加stats關(guān)鍵字了,Messages窗口什么也沒(méi)有提示。這種情況下,我該如何去監(jiān)控我的備份或者還原數(shù)據(jù)庫(kù)進(jìn)度呢?
其實(shí),這種情況也無(wú)需緊張,我們同樣有辦法來(lái)監(jiān)控?cái)?shù)據(jù)庫(kù)備份還原的進(jìn)度,方法是使用動(dòng)態(tài)管理視圖sys.dm_exec_requests配合一些關(guān)鍵信息字段來(lái)監(jiān)控進(jìn)度。方法如下:
由于結(jié)果集寬度過(guò)寬,人為分割為兩個(gè)部分來(lái)展示查詢結(jié)果集:
這個(gè)結(jié)果中有非常多重要的字段信息,比如:
Command: 表示命令種類(lèi),此處表示備份數(shù)據(jù)庫(kù)命令
sql_text: 語(yǔ)句詳細(xì)信息,此處展示了完整的T-SQL語(yǔ)句
percent_complete: 進(jìn)度完成百分比,此處已經(jīng)完成了59.67%
start_time:進(jìn)程開(kāi)始執(zhí)行時(shí)間
eta_completion_time:進(jìn)程預(yù)計(jì)結(jié)束時(shí)間
等等。這種方法除了可以監(jiān)控?cái)?shù)據(jù)庫(kù)備份還原進(jìn)度外,還可以獲取更多的進(jìn)程信息,是比較推薦的方法。
提示:
這種方法不僅僅是可以用來(lái)監(jiān)控你的備份還原進(jìn)程,任何其他的用戶進(jìn)程都可以使用類(lèi)似的方法來(lái)監(jiān)控,你只需要把WHERE語(yǔ)句稍作修改即可。比如:想要監(jiān)控某一個(gè)進(jìn)程的進(jìn)度情況,你只需要把WHERE語(yǔ)句修改為WHERE req.session_id=xxx即可。
獲取備份歷史信息
以上章節(jié)是介紹如何監(jiān)控SQL Server備份還原進(jìn)程的進(jìn)度,我們有時(shí)也會(huì)遇到如下場(chǎng)景是:我們需要如何去探索或者發(fā)現(xiàn)某個(gè)數(shù)據(jù)庫(kù)的備份歷史記錄信息?參見(jiàn)如下代碼可以獲取到數(shù)據(jù)庫(kù)TestBackUpRestore的歷史備份記錄信息。
use msdb GO DECLARE@database_name sysname ;SELECT@database_name = N'TestBackUpRestore' ;SELECTbs.server_name,bs.user_name,database_name = bs.database_name,start_time = bs.backup_start_date,finish_tiem = bs.backup_finish_date,time_cost_sec = DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date),back_file = bmf.physical_device_name,backup_type = CASE WHEN bs.[type] = 'D' THEN 'Full Backup' WHEN bs.[type] = 'I' THEN 'Differential Database' WHEN bs.[type] = 'L' THEN 'Log' WHEN bs.[type] = 'F' THEN 'File/Filegroup' WHEN bs.[type] = 'G' THEN 'Differential File'WHEN bs.[type] = 'P' THEN 'Partial' WHEN bs.[type] = 'Q' THEN 'Differential partial' END,backup_size_mb = ROUND(((bs.backup_size/1024)/1024),2),compressed_size_mb = ROUND(((bs.compressed_backup_size/1024)/1024),2),bs.first_lsn,bs.last_lsn,bs.checkpoint_lsn,bs.database_backup_lsn,bs.software_major_version,bs.software_minor_version,bs.software_build_version,bs.recovery_model,bs.collation_name,bs.database_version FROM msdb.dbo.backupmediafamily bmf WITH(NOLOCK)INNER JOIN msdb.dbo.backupset bs WITH(NOLOCK)ON bmf.media_set_id = bs.media_set_id WHERE bs.database_name = @database_name ORDER BY bs.backup_start_date DESC截圖如下:
這里需要特別注意:
如果你刪除數(shù)據(jù)庫(kù)時(shí),使用了msdb.dbo.sp_delete_database_backuphistory存儲(chǔ)過(guò)程清空數(shù)據(jù)庫(kù)的備份歷史,將無(wú)法再獲取到該數(shù)據(jù)庫(kù)的備份歷史。比如:
最后總結(jié)
繼前面五篇SQL Server備份還原專題系列月報(bào)分享后,我們完成了:三種常見(jiàn)的數(shù)據(jù)庫(kù)備份、備份策略的制定、查找備份鏈、數(shù)據(jù)庫(kù)的三種恢復(fù)模式與備份之間的關(guān)系、利用文件組實(shí)現(xiàn)冷熱數(shù)據(jù)隔離備份方案以及本期月報(bào)分享的如何監(jiān)控備份還原進(jìn)度總共六篇。
總結(jié)
以上是生活随笔為你收集整理的MSSQL-最佳实践-如何监控备份还原进度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自定义实现栈的功能
- 下一篇: 使用T-SQL语句操作数据表-删除数据