SQL Server 백업 또는 복원 프로세스의 진행률을 확인하는 데 사용할 수있는 SQL 스크립트가 있습니까?


94

MS SQL Server Management Studio를 사용하여 데이터베이스를 백업하거나 복원 할 때 프로세스가 얼마나 진행되었는지 시각적으로 표시하므로 완료 될 때까지 기다려야하는 시간이 얼마나 오래 걸립니다. 스크립트를 사용하여 백업 또는 복원을 시작하면 진행 상황을 모니터링 할 수있는 방법이 있습니까? 아니면 그냥 앉아서 완료 될 때까지 기다려야합니까 (아무것도 잘못되지 않았 으면 좋겠습니까?).

편집 됨 : 특히 백업 또는 복원이 시작된 세션과 완전히 별도로 백업 또는 복원 진행 상황을 모니터링 할 수 있어야합니다.

답변:


12

예. master 데이터베이스에 sp_who2k5 를 설치 한 경우 다음을 실행하면됩니다.

sp_who2k5 1,1

결과 집합에는 모든 활성 트랜잭션이 포함됩니다. 현재 실행중인 백업은 requestCommand 필드 에 "BACKUP"문자열을 포함합니다 . 적절한 이름의 percentComplete 필드는 백업 진행률을 제공합니다.

참고 : sp_who2k5는 모든 사람의 툴킷의 일부 여야하며, 이보다 더 많은 작업을 수행합니다.


sp_who2k5에 대한 코드에서 이상한 따옴표를주의하십시오 !! 이 작업 얻기 위해 '와'대체했다
Dinglemeyer NeverGonnaGiveUUp

나는 이것이 매우 오래된 스레드라는 것을 알고 있지만 저장된 proc을 얻는 링크는 죽었습니다.
John Waclawski

216

여기 에서 꽤 잘 작동하는 샘플 스크립트를 찾았 습니다.

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')

2
제공된 소스 링크가 더 이상 기사를 가리 키지 않습니다. 이것은 업데이트 된 것입니다 : sql-articles.com/scripts/estimated-time-for-backup-restore
Marien

복원이 15 분 동안 진행되었지만 진행률이 0 %로 기록됩니다. 대용량 데이터베이스 (80 기가)입니다. 다른 제안이 있습니까?
user64141

5
@ user63141; 복원은 파일 할당으로 시작됩니다. 아무 작업도 수행하지 않은 경우 인스턴트 파일 초기화가 허용되지 않습니다 ( msdn.microsoft.com/en-us/library/ms175935.aspx 참조 ). 당신은 오래된 디스크 또는 대용량 데이터베이스가있는 경우는, 꽤 시간이 걸릴 수 있습니다
헨릭 Staun 폴센을

2
이 쿼리를 실행할 때 출력에 행이 없습니다
goutam

1
WHERE 절의 목록에 'RESTORE HEADERON'을 추가하면 이후에 실행되는 백업 확인 작업도 진행될 것입니다.
goorj

16

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

6
이것은 실제로 sys.dm_exec_requests FROM 명령, PERCENT_COMPLETE, START_TIME를 선택 잘 날 위해 일했던 명령 = 'DATABASE 복원'
eythort

10

다음은 일반적으로 나를 위해 트릭을 수행하는 간단한 스크립트입니다.

SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time
  FROM sys.dm_exec_requests
  WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE') 

6

SQL Server에서 백업 및 복원 진행률을 확인하는 스크립트 :

백업 (또는 복원) 활동이 다른 데이터베이스 관리자 또는 작업에 의해 시작된 경우가 많으며 GUI를 사용하여 해당 백업 / 복원의 진행 상황을 확인할 수 없습니다.

여러 명령을 결합하여 서버에서 발생하는 현재 백업 및 복원에 대한 요약을 제공 할 수있는 아래 스크립트를 생성했습니다.

select 
r.session_id, 
r.blocking_session_id, 
db_name(database_id) as [DatabaseName],
r.command, 
[SQL_QUERY_TEXT] = Substring(Query.TEXT, (r.statement_start_offset / 2) + 1, (
            (
                CASE r.statement_end_offset
                    WHEN - 1
                        THEN Datalength(Query.TEXT)
                    ELSE r.statement_end_offset
                    END - r.statement_start_offset
                ) / 2
            ) + 1),
                [SP_Name] =Coalesce(Quotename(Db_name(Query.dbid)) + N'.' + Quotename(Object_schema_name(Query.objectid, Query.dbid)) + N'.' + 
     Quotename(Object_name(Query.objectid, Query.dbid)), ''),
r.percent_complete,
start_time,
CONVERT(VARCHAR(20), DATEADD(ms, [estimated_completion_time],
GETDATE()), 20) AS [ETA_COMPLETION_TIME],
CONVERT(NUMERIC(6, 2), r.[total_elapsed_time] / 1000.0 / 60.0) AS [Elapsed_MIN],
CONVERT(NUMERIC(6, 2), r.[estimated_completion_time] / 1000.0 / 60.0) AS [Remaning_ETA_MIN],
CONVERT(NUMERIC(6, 2), r.[estimated_completion_time] / 1000.0 / 60.0/ 60.0) AS [ETA_Hours],
wait_type,
wait_time/1000 as Wait_Time_Sec, 
wait_resource
from sys.dm_exec_requests r 
cross apply sys.fn_get_sql(r.sql_handle) as Query where r.session_id>50 and command IN ('RESTORE DATABASE','BACKUP DATABASE', 'RESTORE LOG', 'BACKUP LOG')

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')

4

스크립트 인 경우 BACKUP 명령에 STATS를 사용하십시오.

내부 코드는 좀 더 복잡합니다. 예를 들어 ODBC에서 SQL_ATTR_ASYNC_ENABLE을 설정 한 다음 SQL_STILL_EXECUTING 반환 코드를 찾고 SQL_SUCCESS (또는 eqiv)를 얻을 때까지 SQLExecDirect를 반복적으로 호출합니다.


4

wih 시도 :

SELECT * FROM sys.dm_exec_requests where command like '%BACKUP%'

SELECT command, percent_complete, start_time FROM sys.dm_exec_requests where command like '%BACKUP%'

SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time
  FROM sys.dm_exec_requests
  WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')

3

내가 뭔가를 놓친 경우가 아니라면 백업을 시작한 세션과 동일한 세션에서 피드백을받을 수 없습니다. 우리의 경우 오전 4시에 예정된 BAT 파일로 DB 복원을 시작하고 3 ~ 4 시간 후에 서버에 연결하여 진행 상황을 확인하고 싶습니다.
Veldmuis

스크립트 출력을 로그 파일로 리디렉션 한 다음 수시로 검사 할 수 있다고 생각합니다.
Pavel Chuchuva

3

복원 또는 백업 진행 상황을 확인하는 가장 좋은 방법은 다음 쿼리를 통해 확인할 수 있습니다.

USE[master]
GO
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')
GO

위의 쿼리는 세션 자체를 식별하고 SSMS에서 F5 또는 Execute 버튼을 누를 때마다 백분율 진행률을 수행합니다!

게시물 을 작성한 사람이 쿼리를 수행했습니다.


1

STATS=10또는 STATS=1백업 명령에 추가하십시오 .

BACKUP DATABASE [xxxxxx] TO  DISK = N'E:\\Bachup_DB.bak' WITH NOFORMAT, NOINIT,  
NAME = N'xxxx-Complète Base de données Sauvegarde', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
GO.

1

SELECT session_id as SPID, command, start_time, percent_complete, dateadd (second, estimated_completion_time / 1000, getdate ()) as expected_completion_time, a.text AS Query FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text (r.sql_handle) a WHERE r. ( 'BACKUP DATABASE', 'BACKUP LOG', 'RESTORE DATABASE', 'RESTORE LOG')의 명령


1

RDS (AWS)에서 SQL Server를 실행하는 모든 사용자를 위해 호출 가능한 기본 제공 프로 시저 가 있습니다.msdb 위해 모든 백업 및 복원 작업에 대한 포괄적 인 정보를 제공 데이터베이스에 제공 있습니다.

exec msdb.dbo.rds_task_status;

이렇게하면 각 작업의 전체 개요, 해당 구성, 실행에 대한 세부 정보 (예 : 완료된 비율 및 총 기간), task_info백업 또는 복원의 문제를 파악할 때 매우 유용한 열이 제공됩니다.


0

백업 또는 복원이 시작된 세션과 완전히 별개로 백업 또는 복원 진행 상황을 모니터링합니다. 타사 도구가 필요하지 않습니다. Microsoft SQL Server 2012에서 테스트되었습니다.

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE command In ( 'RESTORE DATABASE', 'BACKUP DATABASE' )

0

기본적으로 산업 표준 인 sp_whoisactive를 사용하고 있습니다. 완료율도 반환합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.