Sql-Server
維護計劃不要停止,不要備份所有數據庫
我有一個包含 100 個數據庫的伺服器,我有一個用於備份的維護計劃 (MP)。我注意到,當我查看備份文件夾目標時,維護計劃不會備份所有數據庫,我可以看到它在 50 個數據庫 +- 後停止。該作業仍處於執行模式 - 它不會停止。
因此,一方面,我可以看到沒有新的備份文件(前 50 個之後),另一方面,工作沒有停止。
如果作業仍在執行,請使用 Adam Machanic 出色的免費儲存過程sp_WhoIsActive檢查目前正在執行的命令。安裝後(通常在 master 數據庫中),您可以執行 sp_WhoIsActive 以列出正在執行的查詢並查看它們現在正在執行的命令。
甚至還有一個完成百分比列,用於填充備份和恢復。
您可能有一個特別大的數據庫(或日誌文件)正在備份中。
如需進一步跟進和澄清,請嘗試拍照或複制/粘貼 sp_WhoIsActive 結果,顯示維護計劃目前正在執行的操作。
使用這 2 個查詢,您可以找到您的工作正在等待什麼。
第一個查詢列出了所有正在執行的使用者程序,如果您不知道您的作業 spid,您會發現它按程序過濾。
第二個查詢將顯示您的工作正在等待什麼:
select s.session_id, s.host_name, s.login_name, db_name(s.database_id) as db, r.percent_complete, s.login_time, s.last_request_start_time, r.status as r_status, r.wait_type, s.program_name, s.cpu_time, s.reads, s.logical_reads, c.num_reads, c.num_writes, cast(s.logical_reads / 1024. * 8/ 1024 as decimal(20,2)) as Gb , s.row_count, s.writes, c.last_read, c.last_write, r.command, r.wait_time, r.last_wait_type, [individual query] = substring(t.text , r.statement_start_offset / 2 + 1, ( case when r.statement_end_offset = - 1 then len(convert(nvarchar(max), t.text)) * 2 else r.statement_end_offset end - r.statement_start_offset ) / 2), t.text --p.query_plan from sys.dm_exec_sessions s join sys.dm_exec_connections c on s.session_id = c.session_id /*left*/ join sys.dm_exec_requests r on s.session_id = r.session_id outer apply sys.dm_exec_sql_text(r.sql_handle) t -- outer apply sys.dm_exec_query_plan(r.plan_handle) p where s.is_user_process = 1 and s.session_id <> @@spid --order by 2 select s.login_name, wt.* from sys.dm_os_waiting_tasks wt join sys.dm_exec_sessions s on wt.session_id = s.session_id where s.is_user_process = 1 and s.session_id <> @@spid order by wt.session_id;