1. 程式人生 > >SqlServer 多伺服器管理(MSSQL分散式作業管理)

SqlServer 多伺服器管理(MSSQL分散式作業管理)

範圍的多個例項的自動化管理 SQL Server 稱為 多伺服器管理。 使用多伺服器管理可以執行下列操作:


管理兩臺或多臺伺服器。


在企業伺服器之間安排資料倉庫的資訊流。


若要利用多伺服器管理,您必須至少有一臺主伺服器且至少有一臺目標伺服器。 主伺服器將作業分發到目標伺服器並從它那裡接收事件。 主伺服器還儲存在目標伺服器上執行的作業的作業定義的中央副本。 目標伺服器定期連線到主伺服器來更新它們的作業計劃。 如果主伺服器上存在新作業,目標伺服器將下載該作業。 目標伺服器在完成作業後,會重新連線到主伺服器並報告作業狀態。 請注意,在執行任何資料庫時,作業定義必須是同一個相關活動。


以下圖例顯示了主伺服器與目標伺服器之間的關係。

將該備份作業一次性寫入主伺服器,然後將部門伺服器登記為目標伺服器。 從它們登記時刻起,所有部門伺服器將執行相同的備份作業,而您只需定義一次作業。

開始測試吧!!本測試為單伺服器上的雙例項.

MSSQL 2014 :HZC\MSSQLSERVER (主伺服器例項)

MSSQL 2016 :HZC\DOG (目標伺服器例項)

首先改登錄檔,取消主伺服器和目標伺服器之間的加密。開啟登錄檔,搜尋更改兩個選項。

MsxEncryptChannelOptions = 0 

AllowDownloadedJobsToMatchProxyName = 0 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\SQLServerAgent\MsxEncryptChannelOptions


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\SQLServerAgent\AllowDownloadedJobsToMatchProxyName

說明如下:


說明
0
在該目標伺服器和主伺服器之間禁用加密。 請僅在目標伺服器和主伺服器之間的通道已使用其他方法進行了保護時才選擇此選項。
1
僅在該目標伺服器和主伺服器之間啟用加密,但不需要證書驗證。
2
在該目標伺服器和主伺服器之間啟用完全 SSL 加密和證書驗證。 這是預設設定。 除非出於特定的原因要選擇其他值,否則建議不要對其進行更改。

代理啟動賬戶新增到例項賬戶中,並授予伺服器角色 sysadmin

接下來直接開始吧!右鍵主伺服器代理,將當前設定為主伺服器

到這一步,在已註冊伺服器中將目標例項新增上,下一步步完成即可!

(開啟已註冊伺服器:選單欄——》檢視——》已註冊伺服器——》將伺服器新增)

或者一個命令即可配置完成!將當前伺服器新增到主伺服器的可用伺服器列表中(目標例項執行)

[sql] view plain copy
 
--將當前伺服器新增到主伺服器的可用伺服器列表中(目標例項執行)  
EXEC msdb.dbo.sp_msx_enlist   
@msx_server_name = N'HZC', --主伺服器  
@location = N'location' --要新增的目標伺服器的位置  
GO  


好了,代理的名字變了,配置完成!可以看到,主伺服器例項代理下區分了“本地作業” 和 “多伺服器作業”。

現在簡單建立一個作業,步驟執行內容為 :select getdate() 。最後一個選項 “目標”,這是區分本地還是多伺服器的作業,如下勾選目標伺服器:

很快,發現同步了。

現在開啟目標管理器進行同步管理。右鍵主伺服器代理——》多伺服器管理——》管理目標伺服器

這時最近一次同步的時間。

作業 “test2” 是主伺服器剛建立的,建立時或者修改時,記錄會記錄在 “下載指令” 中。目標伺服器會逐條執行這些記錄,若“下載日期” 不為空,則表示已經同步過來了。

[sql] view plain copy
 
--下載指令(主例項執行)  
EXEC msdb.dbo.sp_help_downloadlist  
SELECT * FROM msdb.dbo.sysdownloadlist  
GO  


若指令出現了錯誤,也可以將錯誤的指令刪除。

[sql] view plain copy
 
--  Delete from msdb.dbo.sysdownloadlist where instance_id < 5 --可以直接刪除  

若需要某條指令重新同步或新增同步,可以將指令插入到表 sysdownloadlist 中。
[sql] view plain copy
 
--向系統表 sysdownloadlist 中插入操作(行),以供目標伺服器下載和執行(主例項執行)  
--https://msdn.microsoft.com/zh-cn/library/ms173737.aspx  
DECLARE @jobid CHAR(36)  
SELECT @jobid=job_id FROM msdb.dbo.sysjobs WHERE name = 'test2'   
EXEC msdb.dbo.sp_post_msx_operation   
@operation = 'INSERT',   
@object_type =  'JOB',   
@job_id = @jobid,  
@specific_target_server = 'HZC\DOG'  
GO  

目標伺服器的作業會記錄每次執行資訊,而主伺服器中的 【作業活動監視器】可以看到所有作業最近的狀態。
[sql] view plain copy
 
--作業活動監視器(目標伺服器作業失敗了會反映到這裡(主例項執行)  
EXEC msdb.dbo.sp_help_job  
SELECT * FROM msdb.dbo.sysjobservers  
GO  


現在將本地作業改為多伺服器作業。

[sql] view plain copy
 
--將本地作業更改為多伺服器作業(主例項執行)  
EXEC msdb.dbo.sp_delete_jobserver  
@job_name=N'test',  
@server_name = N'HZC'  
GO  
EXEC msdb.dbo.sp_add_jobserver  
@job_name = N'test',  
@server_name =  N'HZC\DOG'  
GO  

儲存過程 sp_delete_jobserver 和 sp_add_jobserver 只是對伺服器的選項選擇,也可以兩個都不選(只能sp_delete_jobserver執行),選擇一個時必須先刪除掉另一個。


現在說說管理介面吧!

看到四個選擇:脫離,設定輪詢間隔,同步時鐘,開始作業。語義明顯,不多說明,後3個設定指令碼如下:

[sql] view plain copy
 
--設定輪詢間隔(主例項執行)  
EXEC msdb.dbo.sp_post_msx_operation   
@operation = 'SET-POLL',  
@object_type = 'SERVER',  
@specific_target_server = 'HZC\DOG',  
@value = 60--以秒為單位的輪詢間隔(10 到 28800)  
GO  
  
--設定時鐘同步(主例項執行)  
EXEC msdb.dbo.sp_post_msx_operation  
@operation = 'SYNC-TIME',  
@object_type = 'SERVER',  
@specific_target_server = 'HZC\DOG'  
GO  
  
--設定開始同步(主例項執行)  
EXEC msdb.dbo.sp_post_msx_operation  
@operation = 'RE-ENLIST',  
@object_type = 'SERVER',  
@specific_target_server = 'HZC\DOG'  
GO  

脫離 最後再說。作業可能較久沒同步或者變化較多,可以批量重新同步。儲存過程 sp_resync_targetserver 先是同步一個刪除命令,刪除所有作業,再將所有目標伺服器作業同步過來。
[sql] view plain copy
 
--重新同步指定目標伺服器中的所有多伺服器作業(主例項執行)  
EXEC msdb.dbo.sp_resync_targetserver N'ALL'  
GO  

同步指令下達之後,就等著時間輪詢到時執行同步。輪詢時間可以設定,也可強制輪詢。
(注:該儲存過程似乎沒用,最好在操作介面點選 “強制輪詢”)

[sql] view plain copy
 
--強制輪詢,手動指令碼似乎無效!(主例項執行)  
DECLARE @localtime VARCHAR(30) = CONVERT(VARCHAR(30),GETDATE(),120)  
EXEC msdb.dbo.sp_sqlagent_probe_msx  
@server_name = N'HZC\DOG',  
@local_time = @localtime,  
@poll_interval = 60,  
@time_zone_adjustment = 480  
GO  


對於脫離,幾個方法:

[sql] view plain copy
 
--從多伺服器操作中刪除當前伺服器,並刪除目標伺服器中的作業(目標例項執行,為最後一個作業則會刪除 MSX&TSX)  
EXEC msdb.dbo.sp_msx_defect @forced_defection = 0  
GO   
  
--從多伺服器操作中刪除當前伺服器,並刪除目標伺服器中的作業(主/目標例項執行,為最後一個作業則會刪除 MSX&TSX)  
EXEC msdb.dbo.sp_post_msx_operation  
@operation = 'DEFECT',  
@object_type = 'SERVER',  
@specific_target_server = 'HZC\DOG'  
GO   
  
--刪除作業目標伺服器,並刪除目標伺服器中的作業(主例項執行,為最後一個作業則會刪除 MSX&TSX)  
EXEC msdb.dbo.sp_delete_targetserver  
 @server_name = 'HZC\DOG',  
 @clear_downloadlist = 1 ,--是否清除下載列表  
 @post_defection = 1 --是否向目標伺服器釋出脫離指令  
 GO   
--------------------- 
作者:scGY07leY6 
來源:CSDN 
原文:https://blog.csdn.net/scgy07ley6/article/details/57436844 
版權宣告:本文為博主原創文章,轉載請附上博文連結!