sqlserver 如何查看备份还原进度及历史备份信息

有时需要给业务方备份还原数据库,如果库比较大,可能时不时会被问“怎么样啦?”,“还剩多少哇?”,如果看不到监控备份还原的进度就很悲催,答不上来...

SQL Server主要有三种方法备份还原进度:

  • 利用SSMS备份还原,查看进度条(还原的不准)
  • 利用SQL的stats关键字指定每完成百分之几显示
  • 利用动态性能视图监控(未指定stats关键字)

个人感觉还原进度很不准,对于大库可能前面70%左右的时间进度都为0,后面又突然前进飞快,暂时没想明白是为什么

一、 图形化 SSMS

这个最简单也最常用,备份在左下角会有进度

02.png

05.png

二、 SQL的stats关键字

可以在备份语句中加stats关键字,比如stats=10,每备完10%会在Messages中打印出** percent processed,这种方法最后还会显示总用时和平均速度。

BACKUP DATABASE [TestBackUpRestore]
TO DISK='C:\BACKUP1\TestBackUpRestore_FULL.bak' WITH STATS=10;

06.png

还原进度显示方法相同,也是添加stats关键字。

RESTORE DATABASE [TestBackUpRestore] FROM DISK = N'C:\BACKUP1\TestBackUpRestore_FULL.bak' WITH FILE = 4,NOUNLOAD,STATS = 10;

三、 利用DMV

如果在备份还原的时候,忘了加stats关键字,是不是就只能一脸懵逼?其实也不是

SELECT req.session_id, 
	database_name = db_name(req.database_id),
	req.status,
	req.blocking_session_id, 
	req.command,
	[sql_text] = Substring(txt.TEXT, (req.statement_start_offset / 2) + 1, (
				(
					CASE req.statement_end_offset
						WHEN - 1 THEN Datalength(txt.TEXT)
						ELSE req.statement_end_offset
					END - req.statement_start_offset
					) / 2
				) + 1),
	req.percent_complete,
	req.start_time,
	cpu_time_sec = req.cpu_time / 1000,
	granted_query_memory_mb = CONVERT(NUMERIC(8, 2), req.granted_query_memory / 128.),
	req.reads,
	req.logical_reads,
	req.writes,
	eta_completion_time = DATEADD(ms, req.[estimated_completion_time], GETDATE()),
	elapsed_min = CONVERT(NUMERIC(6, 2), req.[total_elapsed_time] / 1000.0 / 60.0),
	remaning_eta_min = CONVERT(NUMERIC(6, 2), req.[estimated_completion_time] / 1000.0 / 60.0),
	eta_hours = CONVERT(NUMERIC(6, 2), req.[estimated_completion_time] / 1000.0 / 60.0/ 60.0),
	wait_type,
	wait_time_sec = wait_time/1000, 
	wait_resource
FROM sys.dm_exec_requests as req WITH(NOLOCK)
	CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as txt 
WHERE req.session_id>50
	AND command IN ('BACKUP DATABASE', 'BACKUP LOG', 'RESTORE DATABASE', 'RESTORE LOG');

由于结果集过宽,分为两部分来展示结果:

07.png

08.png

结果中有非常多重要的字段信息,比如:

  • Command: 命令种类,此处表示备份命令
  • sql_text: 语句详细信息,此处展示了完整的T-SQL语句
  • percent_complete: 进度完成百分比,此处已经完成了59.67%
  • start_time:进程开始执行时间
  • eta_completion_time:进程预计结束时间

这种方法除了可以监控备份还原进度,任何其他的用户进程都可以使用类似的方法来监控,只需把WHERE语句稍作修改即可。比如:想要监控某一个进程的进度,只要改为WHERE req.session_id=xxx即可。

四、 获取备份历史信息

use msdb
GO
DECLARE
	@database_name sysname
;

SELECT
	@database_name = N'TestBackUpRestore'
;

SELECT
	bs.server_name,
	bs.user_name,
	database_name = bs.database_name,
	start_time = bs.backup_start_date,
	finish_time = 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

截图如下: 

09.png

这里需要特别注意: 如果你删除数据库时,使用了msdb.dbo.sp_delete_database_backuphistory存储过程清空数据库的备份历史,将无法再获取到该数据库的备份历史。比如:

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'TestBackUpRestore';

参考

MSSQL · 最佳实践 · 如何监控备份还原进度

SQL Server 维护脚本分享(12)查看数据库空间分配情况(准确)_公众号:SQLServer-CSDN博客

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL Server数据库备份还原可以通过SQL Server自带的命令来完成。备份数据库的命令是BACKUP DATABASE,语法格式如下:BACKUP DATABASE <数据库名> TO <备份设备> \[WITH {NOINIT|INIT} {NAME='备份名', DESCRIPTION ='说明文本'}\]。\[3\]在执行备份命令时,可以指定备份设备的路径和名称,还可以选择是否初始化备份设备。备份完成后,可以通过还原数据库的命令将备份文件还原到指定的时间点的状态。在SQL Server Management Studio (SSMS)中,可以通过右击数据库,选择任务,然后选择还原来打开还原数据库对话框。在对话框中,可以选择要还原备份集,并确定进行还原操作。\[2\]通过这些命令和操作,可以方便地进行SQL Server数据库备份还原。\[1\] #### 引用[.reference_title] - *1* [SQL Server数据库备份还原](https://blog.csdn.net/weixin_44325714/article/details/90768073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SQL Server 数据库备份和恢复数据库](https://blog.csdn.net/weixin_43960383/article/details/123728671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值