SQL Server代理服務(wù)概述: 作業(yè) 警報(bào) 操作員
使用存儲(chǔ)過程定義作業(yè)-->sp_add_job(update,delete) sp_add_jobstep(update,delete) sp_add_jobschedule(update,delete) sp_add_jobserver(update,delete)
使用存儲(chǔ)過程定義作業(yè)-->創(chuàng)建作業(yè) Declare @jobid uniqueidentifier
Exec msdb.dbo.sp_add_job @job_name=N'Jobname', @job_id=@jobid output 使用存儲(chǔ)過程定義作業(yè)-->定義作業(yè)步驟 Declare @sql nvarchar(100),@dbname sysname Select @dbname=db_name(),--當(dāng)前數(shù)據(jù)庫(kù) @sql=N'job內(nèi)容' -T-SQL語(yǔ)句 Exec msdb.dbo.sp_add_jobstep @job_id=@jobid, @step_name=N'job步驟名稱' @subsystem='TSQL'-步驟類型 @database_name=@dbname @command=@sql 使用存儲(chǔ)過程定義作業(yè)-->定義作業(yè)調(diào)度 Exec msdb.sp_add_jobschedule
@job_id=@jobid @name=N'調(diào)度名' @freq_tpye=4 --每天 @freq_interval=1 --每天1次 @freq_subday_type=0x8 --重復(fù)方式,0x1:指定時(shí)間,0x4:多少分鐘,0x8多少小時(shí)執(zhí)行一次 @freq_subday_interval=1 --重復(fù)周期,每小時(shí)執(zhí)行一次 @freq_start_data=NULL --NULL表示當(dāng)前日期YYYYMMDD @freq_end_data=99991231 --默認(rèn)為99991231 @freq_start_time=0000 --HHMMSS @freq_end_time=235959 SQL Server 2005代理服務(wù)安全性增強(qiáng): 若要使用SQL Server代理,用戶必須是下列一個(gè)或多個(gè)固定數(shù)據(jù)庫(kù)角色的成員: SQLAgentUserRole SQLAgentReaderRole SQLAgentOperatorRole 這些角色存儲(chǔ)在msdb數(shù)據(jù)庫(kù)中 任何用戶都不是這些數(shù)據(jù)庫(kù)角色的成員,必須顯式授予這些角色中的成員身份 sa可以完全訪問SQL Server代理
如果用戶不是其中某個(gè)角色的成員,連接到SQL Server Management Studio中的SQL Server時(shí),對(duì)象資源管理器中的"SQL Server代理"將不可見,。用戶必須是這些固定數(shù)據(jù)庫(kù)角色之一的成員,或者是sysadmin固定服務(wù)器角色的成員才能使用SQL Server代理,。
SQL Server代理安全性原則: 專門為代理創(chuàng)建專用的用戶賬戶,并且只使用這些代理用戶賬戶來(lái)運(yùn)行作業(yè)步驟。只為代理用戶賬戶授予必需的權(quán)限,。只授予運(yùn)行分配給給定代理賬戶的作業(yè)步驟實(shí)際所需的那些權(quán)限,。不要作為Windows Administrators組成員的Microsoft Windows賬戶運(yùn)行SQL Server代理服務(wù)。
較高特權(quán)的角色繼承較低特權(quán)的角色對(duì)SQL Server代理對(duì)象(包括警報(bào),、運(yùn)算符,、作業(yè)、計(jì)劃和代理)的權(quán)限
SQLAgentUserRole權(quán)限: SQLAgentUserRole是具有最低特權(quán)的SQL Server代理固定數(shù)據(jù)庫(kù)角色,。SQLAgentUserRole的成員只對(duì)它們所擁有的本地作業(yè)和作業(yè)計(jì)劃擁有權(quán)限。它們不能使用多服務(wù)器作業(yè)(主服務(wù)器作業(yè)和目標(biāo)服務(wù)器作業(yè)),也不能通過更改作業(yè)所有權(quán)來(lái)獲得對(duì)它們還沒有擁有的作業(yè)的訪問權(quán)限,。SQLAgentUserRole的成員只能在SQL Server Management Studio的"作業(yè)步驟屬性"對(duì)話框中查看可用的代理列表,。在SQL Server Management Studio對(duì)象資源管理器中,SQLAgentUserRole的成員只能看到"作業(yè)"節(jié)點(diǎn),。
SQLAgentUserRole對(duì)SQL Server代理對(duì)象的權(quán)限-->見下列表:
操作 運(yùn)算符 本地作業(yè)(僅限于所擁有的作業(yè)) 作業(yè)計(jì)劃(僅限于所擁有的計(jì)劃) 代理
創(chuàng)建/修改/刪除 否 是 是 否
視圖列表(枚舉) 是 是 是 是
啟用/禁用 否 是 是 不適用
視圖屬性 否 是 是 否
執(zhí)行/停止/開始 不適用 是 不適用 不適用
查看作業(yè)歷史記錄 不適用 是 不適用 不適用
刪除作業(yè)歷史記錄 不適用 否 不適用 不適用
附加/分離 不適用 不適用 是 不適用
SQLAgentReaderRole權(quán)限: SQLAgentReaderRole包括所有的SQLAgentUserRole權(quán)限,以及查看可用的多服務(wù)器作業(yè)及其屬性和歷史記錄的列表的權(quán)限。此角色的成員還可以查看所有可用作業(yè)和作業(yè)計(jì)劃以及它們的屬性的列表,而不只是它們所擁有的那些作業(yè)和作業(yè)計(jì)劃,。SQLAgentReaderRole成員不能通過更改作業(yè)所有權(quán)來(lái)獲得對(duì)它們還沒有擁有的作業(yè)的訪問權(quán)限,。在SQL Server Management Studio對(duì)象資源管理器中,SQLAgentReaderRole的成員只能看到"作業(yè)"節(jié)點(diǎn)。
SQLAgentOperatorRole權(quán)限: SQLAgentOperatorRole是具有最高特權(quán)的SQL Server代理固定數(shù)據(jù)庫(kù)角色,??梢詧?zhí)行、停止或啟動(dòng)所有本地作業(yè),還可以刪除服務(wù)器上的任何本地作業(yè)的作業(yè)歷史記錄,。它們還可以啟用或禁用服務(wù)器上的所有本地作業(yè)和計(jì)劃,。若要啟用或禁用本地作業(yè)或計(jì)劃,此角色的成員必須使用存儲(chǔ)過程sp_update_job和sp_update_schedule。SQLAgentOperatorRole的成員只能指定那些指定了作業(yè)名稱,、計(jì)劃名稱或標(biāo)識(shí)符的參數(shù)和@enabled參數(shù),。
SQL Server自動(dòng)管理應(yīng)用場(chǎng)景: 每天晚上自動(dòng)20點(diǎn)停用UserDB數(shù)據(jù)庫(kù),早上7點(diǎn)自動(dòng)啟用該數(shù)據(jù)庫(kù) 創(chuàng)建作業(yè)-->Declare @jobid uniqueidentifier Exec msdb.dbo.sp_add_job @job_name=N'定時(shí)停用UserDB數(shù)據(jù)庫(kù)',@job_id=@jobid output
定義作業(yè)步驟-->Declare @sqlnvarchar (400),@dbname sysname
Select @dbname=N'master', @sql=N'alter database UserDB set offline with rollback after 10' Exec msdb.dbo.sp_add_jobstep @job_id=@jobid, @step_name=N'啟用UserDB數(shù)據(jù)處理', @subsystem='TSQL', @database_name=@dbname, @command=@sql 創(chuàng)建調(diào)度-->Exec msdb.sp_add_jobschedule
@job_id=@jobid, @name=N'啟用UserDB數(shù)據(jù)庫(kù)處理調(diào)度', @freq_type=4, @freq_interval=1, @freq_subday_type=0x1, @freq_subday_interval=1, @active_start_time=200000 -晚上20點(diǎn). 添加目標(biāo)服務(wù)器-->Declare @servername sysname Set @servername=convert(nvarchar(128),serverproperty(N'serverName')) Exec msdb.dbo.sp_add_jobserver @job_id=@jobid, @server_name=@servername 企業(yè)范圍的自動(dòng)化管理: 跨多個(gè)SQL Server實(shí)例的自動(dòng)化管理稱為"多服務(wù)器管理"。使用多服務(wù)器管理可以執(zhí)行的操作: 管理兩臺(tái)或多臺(tái)服務(wù)器,。在企業(yè)服務(wù)器之間安排數(shù)據(jù)倉(cāng)庫(kù)的信息流,。
主服務(wù)器將作業(yè)分發(fā)到目標(biāo)服務(wù)器并從它那里接收事件。目標(biāo)服務(wù)器定期連接到主服務(wù)器來(lái)更新它們的作業(yè)計(jì)劃,。如果主服務(wù)器上存在新作業(yè),目標(biāo)服務(wù)器將下載該作業(yè),。目標(biāo)服務(wù)器在完成作業(yè)后,會(huì)重新連接到主服務(wù)器并報(bào)告作業(yè)狀態(tài)。
將該備份作業(yè)一次性寫入主服務(wù)器,然后登記目標(biāo)服務(wù)器,。從它們登記時(shí)刻起,所有部門服務(wù)器將運(yùn)行相同的備份作業(yè),而只需定義一次作業(yè),。
多服務(wù)器管理功能用于sysadmin角色成員。然而,目標(biāo)服務(wù)器上的sysadmin角色成員無(wú)法編輯目標(biāo)服務(wù)器上由主服務(wù)器執(zhí)行的操作,。這項(xiàng)安全措施可防止意外刪除作業(yè)步驟,并可防止目標(biāo)服務(wù)器上的操作中斷,。
兩個(gè)服務(wù)都應(yīng)該在Microsoft Windows域賬戶下運(yùn)行。
如果存在大量目標(biāo)服務(wù)器,應(yīng)避免將生產(chǎn)服務(wù)器定義為主服務(wù)器,。否則,目標(biāo)服務(wù)器的通信量會(huì)降低生產(chǎn)服務(wù)器的性能,。 如果在Microsoft SQL Server Management Studio以外對(duì)多服務(wù)器作業(yè)定義進(jìn)行了更改,則必須將更改發(fā)布到下載列表中,以便目標(biāo)服務(wù)器可以再次下載更新后的作業(yè)。為了確保目標(biāo)服務(wù)器具有當(dāng)前的作業(yè)定義,在更新多服務(wù)器作業(yè)后,需發(fā)布一條INSERT指令,。
EXECUTE sp_post_max_operation 'INSERT','JOB','<job id>' 實(shí)現(xiàn)多服務(wù)器管理后,目標(biāo)服務(wù)器將定期聯(lián)系主服務(wù)器以上載有關(guān)已執(zhí)行的作業(yè)的信息,并下載新的作業(yè),。聯(lián)系主服務(wù)器的過程稱為"服務(wù)器輪詢",該過程每隔"輪詢間隔"(定期)發(fā)生一次。輪詢間隔默認(rèn)情況下為一分鐘,。 當(dāng)目標(biāo)服務(wù)器輪詢主服務(wù)器時(shí),它從msdb數(shù)據(jù)庫(kù)的sysdownloadlist表中讀取分配給目標(biāo)服務(wù)器的操作,。操作包括刪除作業(yè)、插入作業(yè),、啟動(dòng)作業(yè)和更新目標(biāo)服務(wù)器的輪詢間隔等,。 將操作發(fā)布到sysdownloadlist表中有兩種方式: 使用sp_post_max_operation存儲(chǔ)過程顯式發(fā)布。使用其他作業(yè)存儲(chǔ)過程隱式發(fā)布,。EXECUTE msdb.dbo.sp_post_msx_operation'INSERT','JOB','<job id>' 本文出自 “葉俊生” 博客,,請(qǐng)務(wù)必保留此出處http://yejunsheng.blog.51cto.com/793131/164312 |
|