IF EXISTS (SELECT name
FROM sysobjects
WHERE name = N'cg_DoBackupJob'
AND type = 'P')
DROP PROCEDURE cg_DoBackupJob
GO
CREATE PROCEDURE [cg_DoBackupJob]
@DataBaseName varchar(100),
@FileHead varchar(50),
@isFullBackup bit, -- 0 差量備份 1 完整備份
@FolderPath varchar(50) = 'f:\db_backup\',
@BackName varchar(100) = 'unknown', -- 描述字串
@isAppendMedia bit = 1 -- 0 覆蓋媒體 1 追加到媒體
AS
declare @filePath varchar(150)
declare @sql varchar(1000)
select @filePath=@FolderPath + @FileHead + '_' + case @isFullBackup when 1 then 'FullBackup' when 0 then 'DifferBackup' end + '_' + convert ( nvarchar(11) ,getdate() , 112 )
+ case @isFullBackup when 1 then '' when 0 then replace(convert(nvarchar(15),getdate(),114),':','') end
--print(@filePath)
select @sql ='BACKUP DATABASE [' + @DataBaseName + '] TO DISK = '''
+ @filePath + ''' WITH '
+ case @isAppendMedia when 0 then 'INIT' when 1 then 'NOINIT' end
+ ' , NOUNLOAD , '
+ case @isFullBackup when 0 then 'DIFFERENTIAL , ' when 1 then '' end
+ ' NAME = N''' + @BackName + '備份'', NOSKIP , STATS = 10, NOFORMAT'
execute(@sql)
--print(@sql)
GO
-- =============================================
-- example to execute the store procedure
-- =============================================
EXECUTE cg_DoBackupJob 'cg_access911','access911',1
GO
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') 1
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
-- 刪除同名的警報(如果有的話)。
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N'access911_每2周備份一次')
IF (@JobID IS NOT NULL)
BEGIN
-- 檢查此作業(yè)是否為多重服務(wù)器作業(yè)
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id > 0)))
BEGIN
-- 已經(jīng)存在,因而終止腳本
RAISERROR (N'無法導(dǎo)入作業(yè)“access911_每2周備份一次”,因為已經(jīng)有相同名稱的多重服務(wù)器作業(yè)。', 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 刪除[本地]作業(yè)
EXECUTE msdb.dbo.sp_delete_job @job_name = N'access911_每2周備份一次'
SELECT @JobID = NULL
END
BEGIN
-- 添加作業(yè)
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'access911_每2周備份一次', @owner_login_name = N'Access911access911', @description = N'沒有可用的描述。', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR > 0 OR @ReturnCode > 0) GOTO QuitWithRollback
-- 添加作業(yè)步驟
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'2周備份', @command = N'EXECUTE cg_DoBackupJob ''a9SupperDatabase'',''a9SupperDatabase'',1
', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR > 0 OR @ReturnCode > 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR > 0 OR @ReturnCode > 0) GOTO QuitWithRollback
-- 添加作業(yè)調(diào)度
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'diaodu', @enabled = 1, @freq_type = 8, @active_start_date = 20061009, @active_start_time = 0, @freq_interval = 64, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 2, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR > 0 OR @ReturnCode > 0) GOTO QuitWithRollback
-- 添加目標(biāo)服務(wù)器
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
IF (@@ERROR > 0 OR @ReturnCode > 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
sp_add_jobschedule
創(chuàng)建作業(yè)調(diào)度。
語法
sp_add_jobschedule [ @job_id = ] job_id, | [ @job_name = ] 'job_name',
[ @name = ] 'name'
[ , [ @enabled = ] enabled ]
[ , [ @freq_type = ] freq_type ]
[ , [ @freq_interval = ] freq_interval ]
[ , [ @freq_subday_type = ] freq_subday_type ]
[ , [ @freq_subday_interval = ] freq_subday_interval ]
[ , [ @freq_relative_interval = ] freq_relative_interval ]
[ , [ @freq_recurrence_factor = ] freq_recurrence_factor ]
[ , [ @active_start_date = ] active_start_date ]
[ , [ @active_end_date = ] active_end_date ]
[ , [ @active_start_time = ] active_start_time ]
[ , [ @active_end_time = ] active_end_time ]
參數(shù)
[ @jobid = ] job_id
將向其中添加調(diào)度的作業(yè)的作業(yè)標(biāo)識號。job_id 的數(shù)據(jù)類型為 uniqueidentifier,默認(rèn)設(shè)置為 NULL。
[ @job_name = ] 'job_name'
作業(yè)的名稱,調(diào)度即添加到該作業(yè)中。job_name 的數(shù)據(jù)類型為 sysname,默認(rèn)設(shè)置為 NULL。
說明 必須指定 job_id 或 job_name,但不能兩個都指定。
[ @name = ] 'name'
調(diào)度的名稱。name 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。
[ @enabled = ] enabled
指明調(diào)度的當(dāng)前狀態(tài)。enabled 的數(shù)據(jù)類型為 tinyint,默認(rèn)設(shè)置為 1(啟用)。如果為 0,則不啟用調(diào)度。禁用該調(diào)度時,不運行作業(yè)。
[ @freq_type = ] freq_type
用于指明何時將執(zhí)行作業(yè)的值。freq_type 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 0,可以是下列值之一。
值 描述
1 一次
4 每天
8 每周
16 每月
32 每月,與 freq interval 相關(guān)
64 當(dāng) SQLServerAgent 服務(wù)啟動時運行
128 計算機(jī)空閑時運行
[ @freq_interval = ] freq_interval
作業(yè)執(zhí)行的天數(shù)。freq_interval 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 0,依賴于 freq_type 的值。
freq_type 的值 對 freq_interval 的影響
1(一次) 未使用 freq_interval。
4(每天) 每個 freq_interval 日。
8(每周) freq_interval 為下面的一個或多個值(與 OR 邏輯運算符結(jié)合使用):
1 = 星期日
2 = 星期一
4 = 星期二
8 = 星期三
16 = 星期四
32 = 星期五
64 = 星期六
16(每月) 每月的 freq_interval 日。
32(每月相對) freq_interval 為下列值之一:
1 = 星期日
2 = 星期一
3 = 星期二
4 = 星期三
5 = 星期四
6 = 星期五
7 = 星期六
8 = 日
9 = 工作日
10 = 周末
64(當(dāng) SQLServerAgent 服務(wù)啟動時) 未使用 freq_interval。
128 未使用 freq_interval。
[ @freq_subday_type = ] freq_subday_type
指定 freq_subday_interval 的單位。freq_subday_type 為 int 類型,其默認(rèn)值為 0,且可以取下列值之一。
值 描述(單位)
0x1 在指定的時間
0x4 分鐘
0x8 小時
[ @freq_subday_interval = ] freq_subday_interval
作業(yè)每次執(zhí)行之間要出現(xiàn)的 freq_subday_type 周期數(shù)。freq_subday_interval 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 0。
[ @freq_relative_interval = ] freq_relative_interval
如果 freq_interval 是 32(每月相對),則為每月中已調(diào)度作業(yè)的 freq_interval 的發(fā)生情況。freq_relative_interval 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 0,可以是下列值之一。
值 描述(單位)
1 第一頁
2 秒
4 第三個
8 第四個
16 最后一頁
[ @freq_recurrence_factor = ] freq_recurrence_factor
作業(yè)的已調(diào)度執(zhí)行之間的周數(shù)或月數(shù)。只有當(dāng) freq_type 是 8、16 或 32 時,才使用 freq_recurrence_factor。freq_recurrence_factor 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 0。
[ @active_start_date = ] active_start_date
作業(yè)可開始執(zhí)行的日期。active_start_date 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 NULL,該值表示當(dāng)天的日期。日期的格式為 YYYYMMDD。如果 active_start_date 不為 NULL,則日期必須大于或等于 19900101。
[ @active_end_date = ] active_end_date
作業(yè)可停止執(zhí)行的日期。active_end_date 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 99991231,該值表示 9999 年 12 月 31 日。格式為 YYYYMMDD。
[ @active_start_time = ] active_start_time
在 active_start_date 和 active_end_date 之間的任何一天開始執(zhí)行作業(yè)的時間。active_start_time 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 000000,該值表示 24 小時制的上午 12:00:00,并且必須使用格式 HHMMSS 進(jìn)行輸入。
[ @active_end_time = ] active_end_time
在 active_start_date 和 active_end_date 之間的任何一天停止執(zhí)行作業(yè)的時間。active_end_time 的數(shù)據(jù)類型為 int,默認(rèn)設(shè)置為 235959,該值表示 24 小時制的下午 11:59:59,并且必須使用格式 HHMMSS 進(jìn)行輸入。
返回代碼值
0(成功)或 1(失?。?
結(jié)果集
無
注釋
SQL Server 企業(yè)管理器提供易于使用的圖形方法來管理作業(yè),建議使用該方法創(chuàng)建和管理作業(yè)基本結(jié)構(gòu)。
權(quán)限
執(zhí)行權(quán)限默認(rèn)授予 public 角色。
示例
此示例假設(shè)已經(jīng)創(chuàng)建用來備份數(shù)據(jù)庫的 NightlyBackup 作業(yè)。它將作業(yè)添加到名為 ScheduledBackup 的調(diào)度中,并且在每天上午 1:00 執(zhí)行。
USE msdb
EXEC sp_add_jobschedule @job_name = 'NightlyBackup',
@name = 'ScheduledBackup',
@freq_type = 4, -- daily
@freq_interval = 1,
@active_start_time = 10000
請參見
修改和查看作業(yè)
sp_delete_jobschedule
sp_help_jobschedule
sp_update_jobschedule
系統(tǒng)存儲過程
本站文章旨在為該問題提供解決思路及關(guān)鍵性代碼,并不能完成應(yīng)該由網(wǎng)友自己完成的所有工作,請網(wǎng)友在仔細(xì)看文章并理解思路的基礎(chǔ)上舉一反三、靈活運用。