Нахождение процесса восстановления SQL-сервера изнутри c # - PullRequest
3 голосов
/ 09 марта 2010

Я знаю, что это, скорее всего, простой вопрос, но когда вы восстанавливаете базу данных из SQL Management Studio, вы можете установить интервал обновления с помощью статистики

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.

Ответы [ 2 ]

4 голосов
/ 09 марта 2010

Перед началом операции получите идентификатор сеанса соединения:

SELECT @@SPID;

Затем запустите запрос на резервное копирование. Из другого соединения запросите sys.dm_exec_requests и посмотрите на процент_компонента для сеанса, который выполняет оператор восстановления:

Процент выполненных работ за следующие команды:

  • Изменение индекса переоценки
  • Параметр AUTO_SHRINK с ALTER DATABASE
  • РЕЗЕРВНАЯ БАЗА ДАННЫХ
  • ИНДЕКС СОЗДАНИЯ
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE
  • DBCC INDEXDEFRAG
  • DBCC SHRINKDATABASE
  • DBCC SHRINKFILE
  • KILL (Transact-SQL)
  • Восстановление базы данных
  • ОБНОВЛЕНИЕ СТАТИСТИКИ.
3 голосов
/ 09 марта 2010

ExecuteNonQuery вернется только после завершения операции. Может существовать способ отслеживать его прогресс из соединения в другом потоке или использовать асинхронный вызов, но вы также можете посмотреть на использование SMO, которое предоставляет способ регистрации обратных вызовов, см. http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.restore.aspx и http://msdn.microsoft.com/en-us/library/ms162133.aspx с событием PercentComplete

...