3

我知道这很可能是一个简单的问题,但是当您从 SQL 管理工作室内部恢复数据库时,您可以使用 stats 设置更新间隔

RESTORE DATABASE [test] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\test.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10

如果我想从 c# 内部执行那行代码,我将如何获得进度?目前我只是使用System.Data.SqlClient.SqlCommand.ExecuteNonQuery(),但我不知道如何获得进展。

此外,如果速度更快,则可以使用 Microsoft.SQLServer 命名空间。

4

2 回答 2

5

在开始操作之前获取连接会话 ID:

SELECT @@SPID;

然后开始您的备份请求。从不同的连接,查询sys.dm_exec_requests并查看执行恢复语句的会话的 percent_complete:

以下命令完成的工作百分比:

  • 改变索引重组
  • 带有 ALTER DATABASE 的 AUTO_SHRINK 选项
  • 备份数据库
  • 创建索引
  • DBCC CHECKDB
  • DBCC 检查文件组
  • DBCC 检查表
  • DBCC 索引碎片整理
  • DBCC 收缩数据库
  • DBCC 收缩文件
  • 杀死(事务处理 SQL)
  • 恢复数据库
  • 更新统计。
于 2010-03-09T18:11:29.110 回答
3

ExecuteNonQuery 只会在操作完成后返回。可能有一种方法可以通过另一个线程上的连接或使用异步调用来监视其进度,但您也可以查看使用 SMO,它提供了一种注册回调的方法,请参见http://msdn.microsoft.com/en -us/library/microsoft.sqlserver.management.smo.restore.aspxhttp://msdn.microsoft.com/en-us/library/ms162133.aspxPercentComplete 事件

于 2010-03-09T15:59:05.347 回答