क्या एक एसक्यूएल स्क्रिप्ट है जिसका उपयोग मैं एसक्यूएल सर्वर बैकअप की प्रगति को निर्धारित करने या प्रक्रिया को पुनर्स्थापित करने के लिए कर सकता हूं?


94

जब मैं MS SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर डेटाबेस को बैकअप या पुनर्स्थापित करता हूं, तो मुझे इस बात का एक दृश्य संकेत मिलता है कि प्रक्रिया कितनी आगे बढ़ गई है, और इस तरह मुझे अभी भी इसे खत्म करने के लिए इंतजार करने की आवश्यकता है। यदि मैं बैकअप को बंद कर देता हूं या स्क्रिप्ट के साथ पुनर्स्थापित करता हूं, तो क्या प्रगति की निगरानी करने का एक तरीका है, या क्या मैं बस वापस बैठ जाता हूं और इसके समाप्त होने की प्रतीक्षा कर रहा हूं (उम्मीद है कि कुछ भी गलत नहीं हुआ है?)

संपादित: मेरी ज़रूरत विशेष रूप से बैकअप की निगरानी करने या प्रगति को उस सत्र से पूरी तरह से अलग करने में सक्षम होने में है जहां बैकअप या पुनर्स्थापना शुरू की गई थी।

जवाबों:


12

हाँ। यदि आपने अपने मास्टर डेटाबेस में sp_who2k5 स्थापित किया है, तो आप बस चला सकते हैं:

sp_who2k5 1,1

परिणाम में सभी सक्रिय लेनदेन शामिल होंगे। वर्तमान में चल रहे बैकअप ( रिक्वेस्ट) में RequestCommand फ़ील्ड में "BACKUP" स्ट्रिंग होगी । उपयुक्त रूप से नामित प्रतिशत पूर्ण क्षेत्र आपको बैकअप की प्रगति देगा।

नोट: sp_who2k5 हर किसी के टूलकिट का एक हिस्सा होना चाहिए, यह सिर्फ इससे बहुत कुछ करता है।


Sp_who2k5 के लिए कोड में अजीब उद्धरण से सावधान रहें !! इस काम को पाने के लिए 'के साथ' को बदलना पड़ा
डिंगलेमेयर नेवरगैनगिवअप यू

मुझे लगता है कि यह एक बहुत पुराना धागा है लेकिन संग्रहीत खरीद पाने के लिए लिंक मृत है।
जॉन वक्लावस्की 16

216

मुझे यह नमूना लिपि यहाँ मिली जो बहुत अच्छी तरह से काम करती हुई प्रतीत होती है:

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

2
बशर्ते स्रोत लिंक लेख की ओर इशारा नहीं कर रहा है। यह अपडेटेड है: sql-articles.com/scripts/estimated-time-for-backup-restore
Marien

भले ही पुनर्स्थापना 15 मिनट से चल रहा हो, यह केवल 0% प्रगति दर्ज करता है। यह एक बड़ा डेटाबेस (80 गीगा) है। कोई अन्य सुझाव?
user64141

5
@ user63141; पुनर्स्थापना फ़ाइल आवंटन के साथ शुरू होती है। यदि आपने कुछ नहीं किया है, तो इंस्टेंट फ़ाइल इनिशियलाइज़ेशन की अनुमति नहीं है (देखें msdn.microsoft.com/en-us/library/ms175935.aspx )। यदि आपके पास पुराने डिस्क या एक बड़ा डेटाबेस है, तो इसमें काफी समय लग सकता है
हेनरिक स्टॉउन पुल्सेन

2
आउटपुट में कोई पंक्तियाँ नहीं हैं जब मैंने इस क्वेरी को निष्पादित किया है
goutam

1
मुझे लगता है, यदि आप WHEST क्लॉज में सूची में 'RESTORE HEADERON' जोड़ते हैं, तो आपको बाद में चलने वाले किसी भी बैकअप सत्यापन कार्य पर प्रगति मिलेगी।
गोर्ज

16

यदि आप सेशन को जानते हैं तो आप निम्नलिखित का उपयोग कर सकते हैं:

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

6
यह वास्तव में मेरे लिए अच्छी तरह से काम किया कमान का चयन करें, प्रतिशत_संकल्प, start_time से sysinos_exec_requests जहां कमांड = '
रिस्टोरेंट डीटैब

10

यहाँ एक सरल स्क्रिप्ट है जो आम तौर पर मेरे लिए चाल है:

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

एसक्यूएल सर्वर में बैकअप और पुनर्स्थापना प्रगति की जांच करने के लिए स्क्रिप्ट :

कई बार ऐसा होता है कि आपकी बैकअप (या पुनर्स्थापना) गतिविधि किसी अन्य डेटाबेस व्यवस्थापक द्वारा या नौकरी से शुरू की गई है, और आप उस बैकअप / पुनर्स्थापना की प्रगति की जांच करने के लिए 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')

5
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

अगर यह सिर्फ एक स्क्रिप्ट है तो बैकअप कमांड में स्टेटस का उपयोग करें।

कोड के अंदर यह थोड़ा अधिक जटिल है। उदाहरण के लिए ODBC में, आप SQL_ATTR_ASYNC_ENABLE सेट करते हैं और फिर SQL_STILL_EXECUTING रिटर्न कोड की तलाश करते हैं, और जब तक आपको SQL_SUCLESS (या eqiv) नहीं मिलता तब तक SQLExecDirect के कुछ बार-बार कॉल करें।


4

कोशिश करें:

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

3

STATS विकल्प का उपयोग करें: http://msdn.microsoft.com/en-us/library/ms186865.aspx


जब तक मैं कुछ याद नहीं कर रहा हूं, यह मुझे उसी सत्र में प्रतिक्रिया प्राप्त करने के लिए सीमित करता है, जहां मैं बैकअप शुरू करता हूं। हमारे मामले में हम सुबह 4 बजे एक अनुसूचित बैट फ़ाइल के साथ एक DB पुनर्स्थापना को बंद कर देते हैं और मैं 3 या 4 घंटे बाद सर्वर से कनेक्ट करना और प्रगति का निर्धारण करना चाहता हूं।
वेलडमुइस

मुझे लगता है कि आप लॉग फ़ाइल में स्क्रिप्ट आउटपुट को रीडायरेक्ट कर सकते हैं और फिर समय-समय पर इसकी जांच कर सकते हैं।
पावेल चुचुवा

3

मुझे लगता है कि निम्नलिखित क्वेरी द्वारा आपकी पुनर्स्थापना या बैकअप प्रगति कैसी है, यह जानने का सबसे अच्छा तरीका है:

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 या Execute बटन दबाने पर हर बार प्रतिशत प्रगति करें!

इस पोस्ट को लिखने वाले व्यक्ति द्वारा क्वेरी का प्रदर्शन किया गया था


1

बैकअप कमांड में जोड़ें 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.

1

SPID, कमांड, start_time, cent_complete, dateadd (दूसरा, अनुमानित_completion_time / 1000, getdate) () के रूप में अनुमानित_completion_time के रूप में चयन करें। ('बैकअप डबस्ट', 'बैकप लॉग', 'रिस्टॉयर डैटाबेस', 'रिस्टोर लॉग') में कमांड


1

RDS (AWS) पर SQL सर्वर चलाने वाले किसी भी व्यक्ति के लिए , डेटाबेस में एक अंतर्निहित कार्यविधिmsdb है जो सभी बैकअप के लिए व्यापक जानकारी प्रदान करती है और कार्यों को पुनर्स्थापित करती है:

exec msdb.dbo.rds_task_status;

यह प्रत्येक कार्य, उसके कॉन्फ़िगरेशन, निष्पादन के बारे में विवरण (जैसे पूर्ण प्रतिशत और कुल अवधि), और एक task_infoकॉलम है जो एक बैकअप या पुनर्स्थापना में क्या गलत है, यह पता लगाने में बहुत मददगार है।


0

बैकअप की निगरानी करने या प्रगति को पूरी तरह से सत्र से अलग करने के लिए जहां बैकअप या पुनर्स्थापना शुरू की गई थी। किसी तीसरे पक्ष के उपकरण की आवश्यकता नहीं है। Microsoft SQL Server 2012 पर परीक्षण किया गया।

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

0

मैं sp_whoisactive का उपयोग कर रहा हूं, बहुत जानकारीपूर्ण रूप से एक उद्योग मानक। यह प्रतिशत के रूप में अच्छी तरह से पूरा करता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.