এসকিউএল-সার্ভার: এসকিউএল সার্ভারের ব্যাকআপ বা পুনরুদ্ধার প্রক্রিয়াটির অগ্রগতি নির্ধারণ করতে আমি কি কোনও এসকিউএল স্ক্রিপ্ট ব্যবহার করতে পারি?


97

আমি যখন এম এস এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে কোনও ডেটাবেস ব্যাকআপ করি বা পুনরুদ্ধার করি, তখন প্রক্রিয়াটি কতটা এগিয়েছে তার একটি ভিজ্যুয়াল ইঙ্গিত পাই এবং এভাবে শেষ হওয়ার জন্য এখনও আমাকে আরও কত অপেক্ষা করতে হবে। যদি আমি ব্যাকআপটি বন্ধ করি বা কোনও স্ক্রিপ্ট দিয়ে পুনরুদ্ধার করি, তবে অগ্রগতি পর্যবেক্ষণ করার কোনও উপায় আছে, বা আমি কি কেবল বসে বসে এটি শেষ হওয়ার জন্য অপেক্ষা করব (আশা করি কোনও কিছু ভুল হয়নি)?

সম্পাদিত: আমার প্রয়োজনটি বিশেষত ব্যাকআপটি নিরীক্ষণ করতে বা অগ্রগতি পুনরুদ্ধার করতে সক্ষম হওয়া সেশন থেকে সম্পূর্ণ আলাদা যেখানে ব্যাকআপ বা পুনরুদ্ধার শুরু হয়েছিল।

উত্তর:


12

হ্যাঁ. আপনি যদি মাস্টার ডাটাবেসে sp_who2k5 ইনস্টল করেন তবে আপনি কেবল চালাতে পারেন:

sp_who2k5 1,1

ফলসেটটিতে সমস্ত সক্রিয় লেনদেন অন্তর্ভুক্ত থাকবে। বর্তমানে চলমান ব্যাকআপ (গুলি) -র অনুরোধকমন্ড ফিল্ডে " BACKUP " স্ট্রিংটি থাকবে । উপযুক্ত নামযুক্ত শতাংশ কমপ্লিট ফিল্ড আপনাকে ব্যাকআপের অগ্রগতি দেবে।

দ্রষ্টব্য: sp_who2k5 প্রত্যেকের সরঞ্জামকিটের একটি অংশ হওয়া উচিত, এটি কেবল এটির চেয়ে অনেক বেশি কাজ করে।


Sp_Wo2k5 এর জন্য কোডটিতে অদ্ভুত উক্তিগুলি সাবধান করুন !! এই কাজটি পেতে 'সহ' প্রতিস্থাপন করতে হয়েছিল
ডিংলমিয়ার নেভারগোনগিভআপ

আমি বুঝতে পারি এটি একটি খুব পুরানো থ্রেড তবে সঞ্চিত প্রকল্পটি পাওয়ার লিঙ্কটি মারা গেছে।
জন ওয়াকালাউস্কি

220

আমি এই নমুনা স্ক্রিপ্টটি এখানে পেয়েছি যা দেখে মনে হচ্ছে এটি বেশ ভালভাবে কাজ করছে:

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

4
প্রদত্ত উত্স লিঙ্কটি আর্টিকেলের দিকে নির্দেশ করছে না। এটি আপডেট হওয়া এক: sql-articles.com/scriptts/estimated-time-for-backup-restore
মারিয়েন

যদিও পুনরুদ্ধারটি 15 মিনিটের জন্য চলছে, এটি কেবল 0% অগ্রগতি রেকর্ড করে। এটি একটি বৃহত ডাটাবেস (৮০ জিগ)। অন্য কোন পরামর্শ?
ব্যবহারকারী 64141

5
@ ব্যবহারকারী 63141; পুনরুদ্ধার একটি ফাইল বরাদ্দ দিয়ে শুরু হয়। যদি আপনি কিছু না করেন তবে তাত্ক্ষণিক ফাইল প্রারম্ভিককরণের অনুমতি নেই (দেখুন msdn.microsoft.com/en-us/library/ms175935.aspx )। আপনার যদি পুরানো ডিস্ক বা একটি বৃহত ডাটাবেস থাকে তবে এটি বেশ খানিকটা সময় নিতে পারে
হেনরিক স্টাউন পুলসেন

4
আমি এই কোয়েরিটি সম্পাদন করার পরে আউটপুটটিতে কোনও সারি নেই
গৌতম

4
আমি মনে করি, যদি আপনি ক্লিয়ার শর্তে তালিকায় 'রিস্টোর হিডেরন' যুক্ত করেন, আপনি পরবর্তী সময়ে চলমান কোনও ব্যাকআপ যাচাইকরণ কাজের ক্ষেত্রেও অগ্রগতি পাবেন।
গুড়জ

17

আপনি যদি সেশনআইডিটি জানেন তবে আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

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

7
এটি আসলে আমার জন্য নির্বাচন করুন কমান্ড, শতাংশ_ অসম্পূর্ণ, প্রারম্ভিকালীন সময় থেকে সিএসএল.ডিএম_এক্সেক_রিক্যোস্ট যেখানে কমান্ড = '
ডাটাবেস

13

এখানে একটি সাধারণ স্ক্রিপ্ট যা সাধারণত আমার জন্য কৌশল করে:

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

এটি যদি কেবল স্ক্রিপ্ট হয় তবে ব্যাকআপ কমান্ডে STATS ব্যবহার করুন।

কোডের অভ্যন্তরে এটি কিছুটা জটিল। উদাহরণস্বরূপ ওডিসিবিতে, আপনি এসকিউএল_এটিটিআর_এএসওয়াইএনসি_ইএনএবিএল সেট করুন এবং তারপরে এসকিউএলসিপিএলিল_এক্সেকিউটিং রিটার্ন কোডটি সন্ধান করুন এবং আপনি এসকিউএলএসসিডিরেক্টের কিছু বারবার কল করবেন যতক্ষণ না আপনি এসকিউএলএসউসিএসসিএস (বা একিআইভি) পাবেন।


4

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

3

স্ট্যাটাস বিকল্পটি ব্যবহার করুন: http://msdn.microsoft.com/en-us/library/ms186865.aspx


আমি যদি কিছু মিস না করি তবে এটি ব্যাকআপ শুরু করার সাথে সাথে একই সেশনে প্রতিক্রিয়া জানাতে সীমাবদ্ধ করে। আমাদের ক্ষেত্রে আমরা সকাল 4 টায় একটি ডিবি পুনরুদ্ধার একটি নির্ধারিত BAT ফাইলটি দিয়ে কিক করি এবং আমি 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

উপরের ক্যোয়ারী, সেশনটি নিজেই সনাক্ত করুন এবং প্রতিবার এসএসএমএসে আপনি F5 বা এক্সিকিউট বোতাম টিপুন প্রতি শতাংশ অগ্রগতি সম্পাদন করুন!

কোয়েরিটি এই পোস্টটি লেখার লোক দ্বারা সম্পাদন করা হয়েছিল


2

যোগ করুন 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.

2

এসপিআইডি, কমান্ড, স্টার্টটাইম, শতাংশ_কম্পিউট, ডেটড্ড (দ্বিতীয়, আনুমানিক_কম্পশন_টাইম / 1000, গেটডেট ()) হিসাবে সিলেক্ট করুন SEX.Dm_exec_squl_text r ক্রস থেকে ক্রম হিসাবে। কমান্ড ইন ('ব্যাকআপ ডেটাবেস', 'ব্যাকআপ লগ', 'ডাটাবেস পুনরুদ্ধার করুন', 'পুনরুদ্ধার লগ')


1

আরডিএসে (এসডাব্লুএস) এসকিউএল সার্ভার চালিত যে কোনও ব্যক্তির জন্য, ডাটাবেসে কল করার যোগ্য একটি অন্তর্নিহিত পদ্ধতি রয়েছেmsdb যা সমস্ত ব্যাকআপ এবং পুনরুদ্ধার কর্মের জন্য বিস্তৃত তথ্য সরবরাহ করে:

exec msdb.dbo.rds_task_status;

এটি প্রতিটি টাস্ক, এর কনফিগারেশন, কার্যকরকরণ সম্পর্কিত বিশদ (যেমন সমাপ্ত শতাংশ এবং মোট সময়কাল) এর সম্পূর্ণ রুনডাউন দেবে এবং task_infoব্যাকআপ বা পুনরুদ্ধারে কী সমস্যা আছে তা সনাক্ত করার চেষ্টা করার সময় একটি কলাম যা প্রচুর সহায়ক।


1

এমএস এসকিউএল সার্ভার ২০১২-এ ডাটাবেস পুনরুদ্ধার অপারেশনে কাজ করার সময় আমারও একই সমস্যা ছিল।

যাইহোক, আমার নিজের দৃশ্যের জন্য, আমাকে কেবল ডেটাবেস পুনরুদ্ধারের অগ্রগতিটি দেখার দরকার ছিল স্ক্রিপ্ট উইন্ডোতে অপারেশনটির

আমাকে যা করতে হয়েছিল তা হ'ল স্ক্রিপ্টে STATS বিকল্পটি যুক্ত করা:

USE master;
GO

ALTER DATABASE mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
    
RESTORE DATABASE mydb
    FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\my_db_21-08-2020.bak'
    WITH REPLACE,
         STATS = 10,
         RESTART,
    MOVE 'my_db' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\my_db.mdf',
    MOVE 'my_db_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mydb_log.ldf'
GO
    
ALTER DATABASE mydb SET MULTI_USER;
GO

এবং তারপরে ড্যাটাবেস রিস্টোর অপারেশনের অগ্রগতি দেখতে আমি স্ক্রিপ্ট উইন্ডোটির বার্তা ট্যাবটিতে স্যুইচ করেছি :

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি ডেটাবেস রিস্টোর অপারেশনের পরে আরও তথ্য পেতে চান তবে আপনি এই কমান্ডটি বর্ষবরণের প্রস্তাবিত ব্যবহার করতে পারেন :

SELECT command, percent_complete, start_time FROM sys.dm_exec_requests where command = 'RESTORE DATABASE'

এখানেই শেষ.

আশা করি এটা কাজে লাগবে


0

ব্যাকআপ নিরীক্ষণ করতে বা ব্যাকআপ বা পুনরুদ্ধার শুরু করা অধিবেশন থেকে সম্পূর্ণ আলাদা অগ্রগতি পুনরুদ্ধার করতে। কোনও তৃতীয় পক্ষের সরঞ্জাম প্রয়োজন। মাইক্রোসফ্ট এসকিউএল সার্ভার ২০১২-তে পরীক্ষা করা হয়েছে।

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

0

আমি sp_Woisactive, খুব তথ্যপূর্ণ একটি মূলত শিল্পের মান ব্যবহার করছি। এটিও সম্পূর্ণ সম্পূর্ণ প্রত্যাবর্তন করে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.