查询MSSQL 数据库还原进度及状态分析

1. MSSQL数据库还原概述

对于数据库管理员来说,备份和恢复是非常重要的工作,减少了因各种原因导致数据库数据丢失的风险,同时,也是最有效的数据库灾难恢复操作手段之一。

而数据库的备份也是有多种方式的,包括:完整备份、差异备份、增量备份等。但是,不管是哪种方式的备份,都离不开恢复操作。而恢复操作包括从备份文件进行还原操作。

在MSSQL数据库中,进行还原操作需要先选择还原文件,即选择备份文件进行恢复,然后就开始恢复操作,根据还原的大小和恢复开销的不同,恢复时间也是不同的。

2. 查询MSSQL数据库还原进度

2.1 查询系统还原进程表sys.dm_exec_requests

在MSSQL数据库中,可以通过查询系统还原进程表sys.dm_exec_requests来查询数据库还原的进度。这个表是用来显示每个活动连接正在执行的所有活动的信息。

使用以下代码语句可以查询还原进度:

SELECT session_id as SPID,

command,

a.text AS Query,

start_time,

percent_complete,

dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time,

DATEDIFF(MILLISECOND,start_time,GETDATE()) AS elapsed_time_in_ms

FROM sys.dm_exec_requests r

CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a

WHERE r.command in ('RESTORE DATABASE', 'BACKUP DATABASE')

ORDER BY session_id desc;

其中,percent_complete列的值表示还原进度,estimated_completion_time列表示预计完成时间,elapsed_time_in_ms表示已用时间。

2.2 查询MSSQL错误日志

在MSSQL数据库中,可以查看MSSQL错误日志来查询还原操作的过程及状态记录。MSSQL错误日志是SQL Server中一个文本文件,用于记录SQL Server在启动、备份、恢复、和其他运行任务时出现的问题以及其他信息。

而在我们进行数据库还原时,MSSQL错误日志可以告诉我们还原操作的成功与否,以及还原操作进行到了哪里。

可以通过以下语句查看MSSQL错误日志中的还原信息:

EXEC sp_readerrorlog 0,1,'restore',null,null,null,null,'desc'

其中,第一个数字0指定当前的错误日志,数字1指定SQL Server错误,restore表示仅筛选包含“还原”关键字内容的输出,desc表示按倒序排序输出。

3. 还原操作常见问题及解决方式

3.1 还原超时问题

在进行还原操作时,可能会出现还原超时的情况,这个时候需要对SQL Server进行一些配置上的修改来解决这个问题。

首先,需要将SQL Server实例的恢复模型更改为简单模式。这可以通过以下脚本实现:

USE [master]

ALTER DATABASE [testdb] SET RECOVERY SIMPLE WITH NO_WAIT

其次,可以通过修改maxtrans和maxcontigoustrans配置来增加还原超时时间。maxtrans定义可以回滚的最大事务数,maxcontiguous定义了连接内的可完成事务数。以下语句可以修改这两项配置:

ALTER DATABASE [testdb] SET maxtrans 8000, maxcontiguous 800

3.2 还原失败问题

在进行还原操作时,可能会出现还原失败的情况。这个时候需要查看MSSQL错误日志,寻找错误日志中的还原信息,并根据错误提示进行相应的处理。

以下是一个还原失败的日志示例:

2021-11-09 16:10:54.86 spid148 Backup Database backed up. Database: testdb, creation date(time): 2021/11/09(11:50:55), pages dumped: 19952, first LSN: 27:464:37, last LSN: 27:516:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\testdb_backup_202111091610.bak'}). This is an informational message only. No user action is required.

2021-11-09 16:10:54.86 spid148 Backup Database backed up. Database: testdb, creation date(time): 2021/11/09(11:50:55), pages dumped: 17012, first LSN: 27:516:3, last LSN: 27:548:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\testdb_backup_202111091610.bak'}). This is an informational message only. No user action is required.

2021-11-09 16:10:54.98 spid148 Starting up database 'testdb'.

2021-11-09 16:10:55.40 spid80 Starting up database 'testdb'.

2021-11-09 16:11:24.82 spid80 Error: 3633, Severity: 16, State: 1.

2021-11-09 16:11:24.82 spid80 The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\testdb.mdf'

2021-11-09 16:11:24.82 spid80 FileMgr::StartLogFiles: Operating system error 2(error not found) occurred while creating or opening file ''. Diagnose and correct the operating system error, and retry the operation.

2021-11-09 16:11:24.82 spid80 File activation failure. The physical file name "D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\testdb_log.ldf" may be incorrect.

2021-11-09 16:11:24.82 spid80 The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.

2021-11-09 16:11:24.82 spid80 Error: 3415, Severity: 16, State: 1.

2021-11-09 16:11:24.82 spid80 Database 'testdb' cannot be upgraded because its non-release version (382) is not supported by this version of SQL Server. You cannot open a database that is incompatible with this version of sqlservr.exe. You must re-create the database.

2021-11-09 16:11:24.84 spid80 Error: 912, Severity: 21, State: 2.

2021-11-09 16:11:24.84 spid80 Script level upgrade for database 'testdb' failed because upgrade step 'msdb110_upgrade.sql' encountered error 3415, state 1, severity 16. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.

从日志中可以看出还原操作失败的原因是权限不足,需要将权限设置到用户组/用户上,使其具备写入文件的权限,或者还原目录的权限被设置为只读,需要修改该目录授权信息。

4. 总结

通过本文的介绍,我们可以了解到如何查询MSSQL数据库还原的进度及状态,还可以了解到还原操作中常见的问题及其解决方式。

在进行数据库还原操作时,需要注意备份文件的选择,以及还原超时的可能性,同时跟据日志信息及时处理出现的错误。

数据库标签