SQL 서버 백업 또는 복원 프로세스의 진행 상황을 결정하는 데 사용할 수있는 SQL 스크립트가 있습니까?

StackOverflow https://stackoverflow.com/questions/152447

  •  02-07-2019
  •  | 
  •  

문제

MS SQL Server Management Studio를 사용하여 데이터베이스를 백업하거나 복원 할 때 프로세스가 얼마나 멀리 진행되었는지에 대한 시각적 표시를 얻었으므로 여전히 완료되기까지 얼마나 더 오래 기다려야하는지를 알 수 있습니다. 스크립트로 백업을 시작하거나 복원하면 진행 상황을 모니터링 할 수있는 방법이 있습니까?

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

도움이 되었습니까?

해결책

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

sp_who2k5 1,1

결과 세트에는 모든 활성 거래가 포함됩니다. 현재 실행되는 백업은 requestCommand 필드. 적절한 이름 퍼센트 complete 필드는 백업의 진행 상황을 제공합니다.

참고 : SP_WHO2K5는 모든 사람의 툴킷의 일부 여야합니다.

다른 팁

이 샘플 스크립트를 찾았습니다 여기 그것은 꽤 잘 작동하는 것 같습니다.

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

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

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

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

스크립트 인 경우 백업 명령에서 통계를 사용하십시오.

내부 코드는 조금 더 복잡합니다. 예를 들어 ODBC에서 SQL_ATTR_ASYNC_ENABLE을 설정 한 다음 SQL_STILL_EXECUTING RETURN CODE를 찾은 다음 SQL_SUCCESS (또는 EQIV)를 얻을 때까지 SQLEXECDIRECT의 반복 호출을 수행합니다.

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

백업을 확인하고 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')

복원 또는 백업 진행 상황을 찾는 가장 좋은 방법은 다음 쿼리에 의한 것입니다.

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를 누르거나 버튼을 실행할 때마다 세션을 자체적으로 식별하고 백분율 진행 상황을 수행하십시오!

쿼리는 이것을 쓰는 사람이 수행했습니다. 게시하다

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

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

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

나는 SP_WHOISACTIVE를 사용하고 있으며 기본적으로 산업 표준을 매우 유익합니다. 백분율도 완료됩니다.

Add STATS=10 or STATS=1 in backup command.

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.

SELECT session_id as SPID, command, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_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.command in ('BACKUP DATABASE', 'BACKUP LOG', 'RESTORE DATABASE', 'RESTORE LOG')

simply run bkp_status on master db you will get backup status

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top