SQL SERVER資料庫的作業的指令碼及預存程序_MsSql

來源:互聯網
上載者:User
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  -- 檢查此作業是否為多重伺服器作業  IF (EXISTS (SELECT *     FROM msdb.dbo.sysjobservers     WHERE (job_id = @JobID) AND (server_id <> 0)))  BEGIN   -- 已經存在,因而終止指令碼   RAISERROR (N'無法匯入作業“access911_每2周備份一次”,因為已經有相同名稱的多重伺服器作業。', 16, 1)   GOTO QuitWithRollback  END  ELSE   -- 刪除[本地]作業   EXECUTE msdb.dbo.sp_delete_job @job_name = N'access911_每2周備份一次'   SELECT @JobID = NULL END BEGIN  -- 添加作業 EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'access911_每2周備份一次', @owner_login_name = N'Access911\access911', @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  -- 添加作業步驟 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  -- 添加作業調度 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  -- 添加目標伺服器 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: 

Transact-SQL 參考

sp_add_jobschedule建立作業調度。文法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 ]參數[ @jobid = ] job_id將向其中添加調度的作業的作業標識號。job_id 的資料類型為 uniqueidentifier,預設設定為 NULL。[ @job_name = ] 'job_name'作業的名稱,調度即添加到該作業中。job_name 的資料類型為 sysname,預設設定為 NULL。 說明 必須指定 job_id 或 job_name,但不能兩個都指定。[ @name = ] 'name'調度的名稱。name 的資料類型為 sysname,沒有預設設定。[ @enabled = ] enabled指明調度的目前狀態。enabled 的資料類型為 tinyint,預設設定為 1(啟用)。如果為 0,則不啟用調度。禁用該調度時,不運行作業。[ @freq_type = ] freq_type用於指明何時將執行作業的值。freq_type 的資料類型為 int,預設設定為 0,可以是下列值之一。值 描述 1 一次 4 每天 8 每周 16 每月 32 每月,與 freq interval 相關 64 當 SQLServerAgent 服務啟動時運行 128 電腦空閑時運行  [ @freq_interval = ] freq_interval作業執行的天數。freq_interval 的資料類型為 int,預設設定為 0,依賴於 freq_type 的值。 freq_type 的值 對 freq_interval 的影響 1(一次) 未使用 freq_interval。 4(每天) 每個 freq_interval 日。 8(每周) freq_interval 為下面的一個或多個值(與 OR 邏輯運算子結合使用): 1 = 星期日2 = 星期一4 = 星期二8 = 星期三16 = 星期四32 = 星期五64 = 星期六 16(每月) 每月的 freq_interval 日。 32(每月相對) freq_interval 為下列值之一: 1 = 星期日 2 = 星期一 3 = 星期二 4 = 星期三 5 = 星期四 6 = 星期五 7 = 星期六 8 = 日 9 = 工作日10 = 周末 64(當 SQLServerAgent 服務啟動時) 未使用 freq_interval。 128 未使用 freq_interval。  [ @freq_subday_type = ] freq_subday_type指定 freq_subday_interval 的單位。freq_subday_type 為 int 類型,其預設值為 0,且可以取下列值之一。值 描述(單位) 0x1 在指定的時間 0x4 分鐘 0x8 小時  [ @freq_subday_interval = ] freq_subday_interval作業每次執行之間要出現的 freq_subday_type 周期數。freq_subday_interval 的資料類型為 int,預設設定為 0。[ @freq_relative_interval = ] freq_relative_interval如果 freq_interval 是 32(每月相對),則為每月中已調度作業的 freq_interval 的發生情況。freq_relative_interval 的資料類型為 int,預設設定為 0,可以是下列值之一。值 描述(單位) 1 第一頁 2 秒 4 第三個 8 第四個 16 最後一頁  [ @freq_recurrence_factor = ] freq_recurrence_factor作業的已調度執行之間的周數或月數。只有當 freq_type 是 8、16 或 32 時,才使用 freq_recurrence_factor。freq_recurrence_factor 的資料類型為 int,預設設定為 0。[ @active_start_date = ] active_start_date作業可開始執行的日期。active_start_date 的資料類型為 int,預設設定為 NULL,該值表示當天的日期。日期的格式為 YYYYMMDD。如果 active_start_date 不為 NULL,則日期必須大於或等於 19900101。[ @active_end_date = ] active_end_date作業可停止執行的日期。active_end_date 的資料類型為 int,預設設定為 99991231,該值表示 9999 年 12 月 31 日。格式為 YYYYMMDD。[ @active_start_time = ] active_start_time在 active_start_date 和 active_end_date 之間的任何一天開始執行作業的時間。active_start_time 的資料類型為 int,預設設定為 000000,該值表示 24 小時制的上午 12:00:00,並且必須使用格式 HHMMSS 進行輸入。[ @active_end_time = ] active_end_time在 active_start_date 和 active_end_date 之間的任何一天停止執行作業的時間。active_end_time 的資料類型為 int,預設設定為 235959,該值表示 24 小時制的下午 11:59:59,並且必須使用格式 HHMMSS 進行輸入。傳回碼值0(成功)或 1(失敗)結果集 無注釋SQL Server 企業管理器提供便於使用的圖形方法來管理作業,建議使用該方法建立和管理作業基本結構。許可權 執行許可權預設授予 public 角色。樣本 此樣本假設已經建立用來備份資料庫的 NightlyBackup 作業。它將作業添加到名為 ScheduledBackup 的調度中,並且在每天上午 1:00 執行。USE msdb EXEC sp_add_jobschedule @job_name = 'NightlyBackup',  @name = 'ScheduledBackup', @freq_type = 4, -- daily @freq_interval = 1, @active_start_time = 10000請參見修改和查看作業sp_delete_jobschedulesp_help_jobschedulesp_update_jobschedule系統預存程序

本站文章旨在為該問題提供解決思路及關鍵性代碼,並不能完成應該由網友自己完成的所有工作,請網友在仔細看文章並理解思路的基礎上舉一反三、靈活運用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.