چطور از زمان باقیمانده بکاپ و ری استور دیتابیس باخبر بشیم؟


اگر شما یک SQL Server Database Developer یا حتی SQL Server DBA باشید حتما موقع گرفتن بکاپ و یا ری استور از دیتابیستون چه توسط جاب و چه به صورت دستی میخاین بدونین که چند دقیقه دیگه از عملیات بکاپ و یا ری استورتون باقی مونده و یا چند درصد کار انجام شده به خصوص زمانی که با دیتابیس حجیمی طرف باشید. البته اگر از ویزارد و یا کوئری برای این دو عملیات استفاده کنید در حالت معمول درصد پیشرفت عملیات رو به صورت ضریبی از 10 در صد بهتون نمایش میده. تو این پست من یک کوئری بهتون میدم که موقع بکاپ گرفتن یا ری استور دیتابیس داخل سشن جدید اجراش کنید تا از زمان باقیمانده تقریبی (که بسیار نزدیک به زمان دقیق هست) و درصد پیشرفت عملیات با جزییات کامل (به صورت درصد حتی با اعشار) باخبر بشید و تسک هاتون رو بهتر برنامه ریزی کنید. این کوئری از دی ام ویو های sys.dm_exec_requests و sys.dm_exec_sql_text جهت استخراج این اطلاعات و نمایش به کاربر استفاده می کند.

هنگام گرفتن بکاپ و یا ری استور دیتابیس در سشن جدید این کوئری رو اجرا کنید :

SELECT
r.session_id,
CONVERT(NVARCHAR(255),DB_NAME(r.database_id)) AS [DATABASE],
a.text AS Query,
CASE r.command
WHEN 'BACKUP DATABASE' THEN 'Database Backup'
WHEN 'RESTORE DATABASE' THEN 'Database Restore'
WHEN 'RESTORE VERIFYON' THEN 'Database Restore Verification'
WHEN 'RESTORE HEADERON' THEN 'Database Restore Verification - Header'
ELSE 'LOG' END AS [type],
start_time AS [started],
DATEADD(SECOND,estimated_completion_time/1000,GETDATE()) AS [Est. COMPLETION TIME],
DATEDIFF(SECOND, start_time, (DATEADD(SECOND,estimated_completion_time/1000,GETDATE()))) - wait_time/1000 AS [Seconds LEFT],
DATEDIFF(SECOND, start_time, (DATEADD(SECOND,estimated_completion_time/1000,GETDATE()))) AS [Est. Wait TIME() Seconds],
CONVERT(VARCHAR(5),CAST((percent_complete) AS DECIMAL (4,1))) AS [% Complete],
GETDATE() AS [CURRENT TIME]
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE
COMMAND IN
(
'BACKUP DATABASE','BACKUP LOG',
'RESTORE DATABASE','RESTORE VERIFYON',
'RESTORE HEADERON'
)
GO