Czy istnieje skrypt SQL, którego mogę użyć do określenia postępu procesu kopii zapasowej lub przywracania serwera SQL?

Kiedy wykonuję kopię zapasową lub przywracam bazę danych za pomocą MS SQL Server Management Studio, otrzymuję wizualne wskazanie, jak daleko postępuje proces, a tym samym jak długo jeszcze muszę czekać na jego zakończenie. Jeśli uruchamiam kopię zapasową lub przywracanie za pomocą skryptu, czy istnieje sposób na monitorowanie postępu, czy po prostu siedzę i czekam na zakończenie (mając nadzieję, że nic nie poszło źle?)

Edited: moja potrzeba jest szczególnie, aby móc monitorować postęp kopii zapasowej lub przywracania całkowicie oddzielony od sesji, w której rozpoczęto tworzenie kopii zapasowej lub przywracanie.

Author: Trisped, 2008-09-30

12 answers

Tak. Jeśli zainstalowałeś sp_who2k5 do głównej bazy danych, możesz po prostu uruchomić:

sp_who2k5 1,1

Zestaw wyników będzie zawierał wszystkie aktywne transakcje. Aktualnie uruchomiona kopia zapasowa będzie zawierać ciąg "kopia zapasowa" w polu requestCommand . Pole o odpowiedniej nazwie percentComplete wyświetli postęp tworzenia kopii zapasowej.

Uwaga: sp_who2k5 powinien być częścią każdego zestawu narzędzi, robi znacznie więcej niż tylko to.

 9
Author: Portman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 03:22:35

Znalazłem ten przykładowy skrypt tutaj {[3] } który wydaje się działać całkiem dobrze:

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')
 197
Author: Veldmuis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-21 07:01:08

Jeśli znasz sessionID, możesz użyć następującego:

SELECT * FROM sys.dm_exec_requests WHERE session_id = 62

Lub jeśli chcesz zawęzić:

SELECT command, percent_complete, start_time FROM sys.dm_exec_requests WHERE session_id = 62
 11
Author: Allen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-30 02:23:37

Oto prosty skrypt, który ogólnie robi sztuczkę dla mnie:

SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time
  FROM sys.dm_exec_requests
  WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE') 
 5
Author: Wilfred Kimani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-19 15:18:17

Użyj STATS w poleceniu BACKUP, jeśli jest to tylko skrypt.

Wewnątrz kodu jest to nieco bardziej skomplikowane. Na przykład w ODBC ustawiasz sql_attr_async_enable, a następnie szukasz kodu zwrotnego sql_still_executing i wykonujesz kilka powtarzających się wywołań SQLExecDirect, aż otrzymasz sql_success (lub eqiv).

 4
Author: David L Morris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 10:14:06
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
Author: Shahbaz I Shaikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-15 10:55:04
 3
Author: Pavel Chuchuva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 10:06:28

Myślę, że najlepszym sposobem, aby dowiedzieć się, jak postęp przywracania lub tworzenia kopii zapasowych jest następujące zapytanie:

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

Powyższe zapytanie identyfikuje sesję samodzielnie i wykonuje procentowy postęp za każdym razem, gdy naciśniesz przycisk F5 lub Execute na SSMS!

Zapytanie wykonał Gość, który napisał ten post

 3
Author: BMDaemon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-11 18:13:22

Skrypt sprawdzający postęp tworzenia kopii zapasowych i przywracania w SQL Server:

Wiele razy zdarza się, że aktywność tworzenia kopii zapasowych (lub przywracania) została uruchomiona przez innego administratora bazy danych lub przez zadanie i nie można używać interfejsu GUI do sprawdzania postępów tej kopii zapasowej / przywracania.

Poprzez połączenie wielu komend, wygenerowałem poniżej skrypt, który może dać nam podsumowanie bieżących kopii zapasowych i przywracania, które dzieją się na serwer.

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')
 1
Author: Kundan Dasange,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 20:29:51

Aby monitorować postęp tworzenia kopii zapasowej lub przywracania całkowicie niezależnie od sesji, w której rozpoczęto tworzenie kopii zapasowej lub przywracanie. Nie są wymagane żadne narzędzia stron trzecich. Testowane na Microsoft SQL Server 2012.

SELECT percent_complete, *
FROM sys.dm_exec_requests
WHERE command In ( 'RESTORE DATABASE', 'BACKUP DATABASE' )
 0
Author: Liam Fleming,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 11:56:30

Używam sp_whoisactive, bardzo informacyjny standard w zasadzie branżowy. zwraca również procent kompletny.

 0
Author: RC Bird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-25 15:36:20

Po prostu uruchom bkp_status NA master db otrzymasz status kopii zapasowej

 0
Author: ahsan Mumtaz Abbasi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-05 03:46:53