programing

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

nasanasas 2020. 9. 2. 18:50
반응형

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


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

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


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

sp_who2k5 1,1

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

참고 : 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') 

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

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

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


STATS 옵션 사용 : http://msdn.microsoft.com/en-us/library/ms186865.aspx


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

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

The query above, identify the session by itself and perform a percentage progress every time you press F5 or Execute button on SSMS!

The query was performed by the guy who write this post


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

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


To monitor the backup or restore progress completely separate from the session where the backup or restore was initiated. No third party tools required. Tested on Microsoft SQL Server 2012.

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

I am using sp_whoisactive, very informative an basically industry standard. it returns percent complete as well.


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.

For anyone running SQL Server on RDS (AWS), there's a built-in procedure callable in the msdb database which provides comprehensive information for all backup and restore tasks:

exec msdb.dbo.rds_task_status;

This will give a full rundown of each task, its configuration, details about execution (such as completed percentage and total duration), and a task_info column which is immensely helpful when trying to figure out what's wrong with a backup or restore.


simply run bkp_status on master db you will get backup status

참고URL : https://stackoverflow.com/questions/152447/is-there-a-sql-script-that-i-can-use-to-determine-the-progress-of-a-sql-server-b

반응형