it-swarm-ko.tech

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

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

Edited : 특히 백업 또는 복원이 시작된 세션과는 별도로 백업 또는 복원 진행률을 모니터링 할 수 있어야합니다.

90
Veldmuis

예. 마스터 데이터베이스에 sp_who2k5 를 설치 한 경우 간단히 다음을 실행할 수 있습니다.

sp_who2k5 1,1

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

참고 : sp_who2k5는 모든 사람의 툴킷에 포함되어야합니다.

10
Portman

이 샘플 스크립트를 발견했습니다 here 그것은 꽤 잘 작동하는 것 같습니다 :

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

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
12
Allen

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

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
Wilfred Kimani
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')
5
Shahbaz I Shaikh

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')
4
Kundan Dasange

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

내부 코드는 조금 더 복잡합니다. 예를 들어 ODBC에서 SQL_ATTR_ASYNC_ENABLE을 설정 한 다음 SQL_STILL_EXECUTING 리턴 코드를 찾은 다음 SQL_SUCCESS (또는 eqiv)를 얻을 때까지 SQLExecDirect를 반복해서 호출하십시오.

4
David L Morris

다음 쿼리를 통해 복원 또는 백업 진행 상태를 확인하는 가장 좋은 방법은 다음과 같습니다.

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 또는 실행 버튼을 누를 때마다 백분율 진행을 수행합니다!

이 질문을 쓰는 사람이 쿼리를 수행했습니다 post

3
BMDaemon
3
Pavel Chuchuva

시도해보십시오 :

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')
2
Zaalouni Mohamed

SPID로 session_id를 선택하고, start_time, percent_complete, dateadd (second, estimated_completion_time/1000, getdate ())를 추정 된 _completion_time, a.text로 a.text AS Query FROM으로 sys.dm_exec_requests를 선택하십시오. ( 'BACKUP DATABASE', 'BACKUP LOG', 'RESTORE DATABASE', 'RESTORE LOG') 명령

0
Ben

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

exec msdb.dbo.rds_task_status;

각 작업의 전체 요약, 구성, 실행에 대한 세부 정보 (예 : 완료 백분율 및 총 지속 시간) 및 task_info 열은 백업 또는 복원의 문제점을 파악할 때 매우 유용합니다.

0
bsplosion

백업 명령에 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.
0
Zaalouni Mohamed

Sp_whoisactive를 사용하고 있으며 기본적으로 업계 표준에 대한 정보를 제공합니다. 완료율도 반환합니다.

0
RC Bird

백업 또는 복원 진행률을 모니터링하려면 백업 또는 복원이 시작된 세션과 완전히 분리하십시오. 타사 도구가 필요하지 않습니다. Microsoft SQL Server 2012에서 테스트되었습니다.

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