讀書筆記(十四)——作業的知識點與註意事項
1、 SQL Server 代理中包含很多的類別,有作業、警報、操作員、代理等,作業屬於其中的一個類別
1、 用自動化數據備份來介紹作業的具體運用規則
①用命令符啟用sqlserveragent
②添加作業的類別,明確進行作業的任務
EXEC msdb.dbo.sp_add_category @class = ‘JOB‘--添加對象的類別,如:作業、報警 ,@name = ‘ct_藥房管理系統_Maintain‘; ---設置類別的名字
③添加作業(包括名字、任務,所屬的類別)
EXEC msdb.dbo.sp_add_job @job_name= ‘jb_藥房管理系統_FullBackup_Weekly‘ --為作業命名 ,@description = ‘Full Backup job for 藥房管理系統every week(end).‘ ---作業的任務描述,每周自動備份更新 ,@category_name = ‘ct_藥房管理系統_Maintain‘; ---作業所屬的類別
④為作業添加具體的任務描述,就是作業計劃(jobschedule)
DECLARE @StartDate INT = CONVERT(CHAR(8),GETDATE(),112) ,@EndDate INT = CONVERT(CHAR(8),DATEADD(year,1,GETDATE()),112) ,@StartTime INT = 220000; EXEC msdb.dbo.sp_add_jobschedule @job_name = ‘jb_藥房管理系統_FullBackup_Weekly‘ --作業名字 ,@name = ‘jc_藥房管理系統_FullBackup_Sunday2200‘ ---作業計劃的名字,為數據庫自動每周星期日22:00備份 ,@freq_type = 8 --對應每周的頻率類型,具體見表格 ,@freq_interval = 1 --對應星期天的頻率類型,具體見表格 ,@freq_recurrence_factor= 1--作業計劃間隔一周 ,@active_start_date = @StartDate ,@active_end_date = @EndDate ,@active_start_time = @StartTime ,@active_end_time = @StartTime;
頻率類型表
頻率間隔表
⑤為作業制定服務器,作業將會在sqlserveragent啟用後生效
EXEC msdb.dbo.sp_add_jobserver @job_name = ‘jb_藥房管理系統_FullBackup_Weekly‘
,@server_name =@@SERVERNAME; --默認為local服務器 ,也可以指定現有目標的服務器名稱
⑥測試作業執行(將電腦的時間往下調整至周日)
RESTORE HEADERONLY
FROM jb_藥房管理系統_FullBackup_Weekly
3、 郵件通知,數據庫是否備份
數據的自動備份系統應該存在提示,因此就可以利用郵件來實現這一個功能,下面就介紹利用郵件通識相關人員系統是否完整備份,備份是否成功。SQL就自帶有郵件通知的功能
①啟用郵件
EXEC sp_configure ‘SHOW ADVANCED OPTIONS‘,1; RECONFIGURE; EXEC sp_configure ‘DATABASE MAIL XPs‘; EXEC sp_configure ‘DATABASE MAIL XPs‘,1; RECONFIGURE;
②添加配置文件
EXEC msdb.dbo.sysmail_add_profile_sp @profile_name = ‘mp_藥房管理系統_Dba‘ ,@description = ‘Database mail profile for 藥房管理系統database administrator.‘;
③添加郵件的賬號
EXEC msdb.dbo.sysmail_add_account_sp @account_name = ‘ma_藥房管理系統_Dba‘ ,@description = ‘Database mail account for 藥房管理系統database administrator.‘ ,@email_address = ‘dba@藥房管理系統.com‘ ,@display_name = ‘藥房管理系統DBA‘ ,@mailserver_name = ‘127.0.0.1‘ ---SMTP發送地址 ,@mailserver_type=‘SMTP‘ ,@port = 25 ,@use_default_credentials = 1; ---默認使用Windows驗證方式
④將郵件的賬號和配置文件相互關聯
EXEC msdb.dbo.sysmail_add_profileaccount_sp @profile_name = ‘mp_藥房管理系統_Dba‘ ,@account_name = ‘ma_藥房管理系統_Dba‘ ,@sequence_number = 1; EXEC msdb.dbo.sysmail_configure_sp ‘AccountRetryAttempts‘, ‘3‘ ; EXEC msdb.dbo.sysmail_configure_sp ‘AccountRetryDelay‘, ‘5‘ ;
⑤發送郵件
EXEC msdb.dbo.sp_send_dbmail @profile_name = ‘mp_藥房管理系統_Dba‘ ,@recipients = ‘dba@藥房管理系統.com‘ ,@subject = ‘TestMail_2‘ ,@body = ‘Another test mail for 藥房管理系統database administrator.‘;
4、 系統盡管已經通知是否備份,但是有時候系統備份也會失敗,因此最好能將備分具體的情況一同發送到郵箱。系統自動備份成功與否就要有明確的判斷,用四個on來判斷成功還是失敗的分支,看到底執行哪一個步驟。
①添加計劃步驟
EXEC msdb.dbo.sp_add_jobstep @job_name = ‘jb_藥房管理系統_FullBackup_Weekly‘ ,@step_name = ‘js_藥房管理系統_FullBackup‘ ,@step_id = 1 ,@database_name = ‘master‘ ,@subsystem = ‘TSQL‘ ,@command = ‘EXEC 藥房管理系統.dbo.usp_BackupFull‘ ,@retry_attempts = 3 ,@retry_interval = 0 ,@on_success_action = 4 ,@on_success_step_id = 2 ,@on_fail_action = 4 ,@on_fail_step_id = 3; EXEC msdb.dbo.sp_add_jobstep @job_name = ‘jb_藥房管理系統_FullBackup_Weekly‘ ,@step_name = ‘js_藥房管理系統_MailAfterFullBkOk‘ ,@step_id = 2 ,@database_name = ‘master‘ ,@subsystem = ‘TSQL‘ ,@command = ‘EXEC 藥房管理系統..usp_execMailAfterBkOk;‘ ,@retry_attempts = 3 ,@retry_interval = 0;
②發送郵件,將結果以附件的形式發送至郵箱
EXEC msdb.dbo.sp_add_jobstep @job_name = ‘jb_藥房管理系統_FullBackup_Weekly‘ ,@step_name = ‘js_藥房管理系統_MailAfterFullBkFail‘ ,@step_id = 3 ,@database_name = ‘master‘ ,@subsystem = ‘TSQL‘ ,@command = ‘EXEC 藥房管理系統..usp_MailAfterBkFail;‘ ,@retry_attempts = 3 ,@retry_interval = 0; EXEC msdb.dbo.sp_send_dbmail @profile_name = ‘mp_藥房管理系統_Dba‘ ,@recipients = ‘dba@藥房管理系統.com‘ ,@subject = ‘TestMail_2‘ ,@body = ‘This mail contains the query result as attach.‘ ---以附件的形式發送 ,@query= ‘SELECT TOP 100 * FROM master.dbo.spt_values‘ ,@attach_query_result_as_file = 1;
讀書筆記(十四)——作業的知識點與註意事項