Проблема с получением статуса выполнения задания восстановления SQL-Server - PullRequest
6 голосов
/ 06 августа 2010

Я хочу использовать сценарий из http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx, чтобы получить информацию о ходе выполнения конкретного выполняемого задания восстановления SQL-Server . Чтобы добиться этого, я немного его изменил:

SELECT command,
            s.text,
            start_time,
            percent_complete, 
            CAST(((DATEDIFF(s,start_time,GetDate()))/3600) as varchar) + ' hour(s), '
                  + CAST((DATEDIFF(s,start_time,GetDate())%3600)/60 as varchar) + 'min, '
                  + CAST((DATEDIFF(s,start_time,GetDate())%60) as varchar) + ' sec' as running_time,
            CAST((estimated_completion_time/3600000) as varchar) + ' hour(s), '
                  + CAST((estimated_completion_time %3600000)/60000 as varchar) + 'min, '
                  + CAST((estimated_completion_time %60000)/1000 as varchar) + ' sec' as est_time_to_go,
            dateadd(second,estimated_completion_time/1000, getdate()) as est_completion_time 
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
WHERE r.command = 'RESTORE DATABASE'  and r.database_id = db_id('database_name')

К сожалению, это не работает, потому что r.database_id никогда не равен db_id ('database_name') . В чем причина этого? Что не так с этим оператором SQL? Этот скрипт отлично работает для 'r.command = BACKUP DATABASE' .

Существуют ли другие возможности на основе T-SQL для получения статуса выполнения конкретного задания SQL-Server?

1 Ответ

2 голосов
/ 06 августа 2010

когда вы запускаете BACKUP, база данных подключена, и команда запускается внутри базы данных.Но когда вы запускаете RESTORE, база данных не может быть подключена к сети (вы активно ее восстанавливаете, поэтому она не может быть подключена к сети), поэтому команда не может выполняться в контексте указанной базы данных.

Поэтому вместо того, чтобы тыкать в DB_ID, чтобы угадатькакой из них ваш, просто наберите @@SPID перед выполнением команды RESTORE в SqlConnection, а затем посмотрите на запрос с этим session_id: это будет ваш запрос RESTORE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...