106

MS SQL Server Management Studio を使用してデータベースをバックアップまたは復元すると、プロセスの進行状況が視覚的に示されるため、プロセスが完了するまであとどれくらい待つ必要があるかがわかります。スクリプトを使用してバックアップまたは復元を開始する場合、進行状況を監視する方法はありますか?それとも、何も問題が発生していないことを願って、ただ座って完了するのを待ちますか?

編集済み:特に、バックアップまたは復元が開始されたセッションとは完全に分離して、バックアップまたは復元の進行状況を監視できるようにする必要があります。

4

17 に答える 17

237

このサンプル スクリプトはこちらで見つかりましたが、これはかなりうまく機能しているようです。

SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END)
FROM sys.dm_exec_sql_text(sql_handle))) AS [SQL]
FROM sys.dm_exec_requests r WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')
于 2008-09-30T10:08:50.780 に答える
17

sessionID がわかっている場合は、次を使用できます。

SELECT * FROM sys.dm_exec_requests WHERE session_id = 62

または、絞り込みたい場合:

SELECT command, percent_complete, start_time FROM sys.dm_exec_requests WHERE session_id = 62
于 2012-06-30T00:31:58.133 に答える
14

一般的に私のためにトリックを行う簡単なスクリプトを次に示します。

SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time
  FROM sys.dm_exec_requests
  WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE') 
于 2016-10-19T13:23:24.410 に答える
12

はい。sp_who2k5を master データベースにインストールした場合は、次のコマンドを実行するだけです。

sp_who2k5 1,1

結果セットには、すべてのアクティブなトランザクションが含まれます。現在実行中のバックアップには、 requestCommandフィールドに文字列「BACKUP」が含まれます。適切な名前のpercentCompleteフィールドは、バックアップの進行状況を示します。

注: sp_who2k5 は、すべてのツールキットの一部である必要があります。これは、これだけではありません。

于 2008-10-01T03:22:35.117 に答える
5
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 
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
于 2015-12-15T10:54:42.673 に答える
4

単なるスクリプトの場合は、BACKUP コマンドで STATS を使用します。

内部コードはもう少し複雑です。たとえば、ODBC では、SQL_ATTR_ASYNC_ENABLE を設定してから SQL_STILL_EXECUTING リターン コードを探し、SQL_SUCCESS (または eqiv) を取得するまで SQLExecDirect を繰り返し呼び出します。

于 2008-09-30T10:14:06.100 に答える
3

STATS オプションを使用: http://msdn.microsoft.com/en-us/library/ms186865.aspx

于 2008-09-30T10:06:28.960 に答える
0

バックアップまたは復元が開始されたセッションとは完全に分離して、バックアップまたは復元の進行状況を監視するため。サードパーティのツールは必要ありません。Microsoft SQL Server 2012 でテスト済み。

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE command In ( 'RESTORE DATABASE', 'BACKUP DATABASE' )
于 2016-04-07T01:19:22.420 に答える