SQL SERVER数据库的作业的脚本及存储过程_MsSql

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_jobschedule

sp_help_jobschedule

sp_update_jobschedule

系统存储过程

本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql
, 数据库
, 存储过程
, 脚本
server
sqlserver数据库脚本、sql server数据库脚本、mssql数据库、mssql数据库管理工具、php查询mssql数据库,以便于您获取更多的相关知识。

时间: 2024-10-22 10:57:29

SQL SERVER数据库的作业的脚本及存储过程_MsSql的相关文章

SQL SERVER数据库的作业的脚本及存储过程

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 完整备份 @FolderPat

利用SQL Server数据库邮件服务实现监控和预警_MsSql

背景 现在越来越多的企业.公司要求对于数据库实现7*24小时的数据库监控,一般情况下采用的就是第三方的平台来实现邮件和手机短信的监测提醒.前几日公司新上了一台服务器,急于部署程序还没来得及搭建其他相关平台,为了更好的监控数据库,暂时用SQL Server自带的邮件服务来实现对数据库的监控和预警.下面简要介绍下配置的过程便于以后使用. 配置邮件 整个部分的核心就是配置邮件服务,这部分需要一个邮件账户以及相应的邮件服务器.下面就以QQ的邮件为例进行说明. 1.设置邮件服务器 开启SMTP服务,点击开

SQL Server 数据库索引其索引的小技巧_MsSql

一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.由于非聚集索引通常不包含所有列,所以一般

SQL Server 数据库分离与附加 就这么简单!_MsSql

一.概述 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用的"分离/附加"方法,类似于大家熟悉的"文件拷贝"方法,即把数据库文件(.MDF)和对应的日志文件(.LDF)拷贝到其它磁盘上作备份,然后把这两个文件再拷贝到任何需要这个数据库的系统之中.比如,在实验教学过程中,同学们常常想把自己在学校实验室计算机中创建的数据库搬迁到自己的计算机中而不想

SQL Server数据库开发的二十一条法则_MsSql

在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计.这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复. 一.了解你用的工具 不要轻视这一点,这是我在这篇文章中讲述的最关键的一条.也许你也看到有很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具. "什么?我要浪费一个月的时间来学习那些我永远也不会用到的SQL命令???&qu

详解SQL Server数据库架构和对象、定义数据完整性_MsSql

前言 本节我们继续SQL之旅,本节我们如题来讲讲一些基本知识以及需要注意的地方,若有不妥之处,还望指出,简短的内容,深入的理解. 数据库架构和对象 数据库包含架构,而架构又包含对象,架构可以看做是表.视图.存储过程等对象的容器.架构是一个命名空间,它被用做对象名称的前缀,比如在Cnblogs的架构中有一个名称为Blogs的表,此时我们用架构式限定式名称(即两部分式对象名称)所以Blogs表示为Cnblogs.Blogs.如果我们引用对象时省略了架构名称,SQL Server将会检查对象是否存在用

SQL Server下几个危险的扩展存储过程_MsSql

这些存储过程如下: sp_makewebtask xp_cmdshell xp_dirtree xp_fileexist xp_terminate_process sp_oamethod sp_oacreate xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumkeys xp_regenumvalues sp_add_job sp_addtask xp_regread xp_regwrite xp_readwebta

从SQL Server数据库转到Oracle数据库的数据脚本处理

在我们很多情况下的开发,为了方便或者通用性的考虑,都首先考虑SQL Server数据库进行开发,但有时候客户的生产环境是Oracle或者其他数据库,那么我们就需要把对应的数据结构和数据脚本转换为对应的数据库,数据结构一般来说,语法都遵循了SQL92的标准,或者我们根据不同的PowerDesigner文件进行生成对应的结构脚本即可,但是实际数据的脚本我们就需要进行一定的处理,以及文本的替换处理了,本文结合Notepad++的文本正则表达式替换,实现一些如日期较为特殊的数据脚本调整,把它从SQL S

SQL Server如何定时作业

如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL Server代理->作业来实现. 1.管理->SQL Server代理->作业(按鼠标右键)->新建作业-> 2.新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号-> 分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]-> 描述[填写本