日期:2014-05-18  浏览次数:20681 次

[新手问题]怎样直接在程序中用代码新建或者编辑Job?
正在做数据库备份恢复这一部分
查了一下以前的贴子
基本上都是用作业job来做的

那样的话需要直接操作SqlServer
我这边的没有专门的数据库管理人员
另外客户对数据库也不是很了解

我想把备份和恢复功能直接做到程序里边
在程序里提供一个窗口直接设置备份参数
比如:自动备份时间(包括完全备份时间间隔、追加备份时间...)、手动恢复数据库按钮...参数

这样的话该怎么做呢?
参数设置好之后如何更新?
有没有办法直接用代码控制生成新的job,编辑已存在job的办法?

------解决方案--------------------

添加由 SQLServerAgent 服务执行的新作业。

语法

sp_add_job
[ @job_name = ] 'job_name '
[ , [ @enabled = ] enabled ]
[ , [ @description = ] 'description ' ]
[ , [ @start_step_id = ] step_id ]
[ , [ @category_name = ] 'category ' ]
[ , [ @category_id = ] category_id ]
[ , [ @owner_login_name = ] 'login ' ]
[ , [ @notify_level_eventlog = ] eventlog_level ]
[ , [ @notify_level_email = ] email_level ]
[ , [ @notify_level_netsend = ] netsend_level ]
[ , [ @notify_level_page = ] page_level ]
[ , [ @notify_email_operator_name = ] 'email_name ' ]
[ , [ @notify_netsend_operator_name = ] 'netsend_name ' ]
[ , [ @notify_page_operator_name = ] 'page_name ' ]
[ , [ @delete_level = ] delete_level ]
[ , [ @job_id = ] job_id OUTPUT ]


备注
@originating_server 存在于 sp_add_job 中,但不列在参数下。@originating_server 被保留供内部使用。

执行 sp_add_job 添加作业后,可使用 sp_add_jobstep 添加执行该作业活动的步骤。sp_add_jobschedule 可用于创建 SQL Server 代理服务使用的作业执行计划。使用 sp_add_jobserver 设置执行作业所在的 SQL Server 实例,使用 sp_delete_jobserver 从 SQL Server 实例中删除作业。

如果对多服务器环境中的一个或多个目标服务器执行作业,则可使用 sp_apply_job_to_targets 设置作业的目标服务器或目标服务器组。若要从目标服务器或目标服务器组中删除作业,可使用 sp_remove_job_from_targets。

SQL Server Management Studio 为管理作业提供了一种图形化的简便方法,建议使用此方法来创建和管理作业基础结构。

参数
[ @job_name = ] 'job_name '
作业的名称。该名称必须唯一,且不能含有百分比 (%) 字符。job_name 的数据类型为 sysname,无默认值。

[ @enabled = ] enabled
指示添加的作业的状态。enabled 的数据类型为 tinyint,默认值为 1(启用)。如果为 0,则不启用作业,也不按作业计划运行作业。可以手动运行作业。

[ @description = ] 'description '
作业的说明。description 的数据类型为 nvarchar(512),默认值为 NULL。如果省略 description,则使用“无说明”。

[ @start_step_id = ] step_id
该作业要执行的第一步的标识号。step_id 的数据类型为 int,默认值为 1。

[ @category_name = ] 'category '
作业的类别。category 的数据类型为 sysname,默认值为 NULL。

[ @category_id = ] category_id
一种与语言无关的机制,用于指定作业类别。category_id 的数据类型为 int,默认值为 NULL。

[ @owner_login_name = ] 'login '
拥有作业的登录名。login 的数据类型为 sysname,默认值为 NULL,可解释为当前登录名。只有 sysadmin 固定服务器角色的成员才可以设置或更改 @owner_login_name 的值。如果非 sysadmin 角色成员的用户设置或更改 @owner_login_name 的值,则无法执行此存储过程,并且会返回错误。

[ @notify_level_eventlog = ] eventlog_level
一个值,用于指示何时将该作业的项放入 Microsoft Windows NT 应用程序日志。eventlog_level 的数据类型为 int,可以是下列值之一。

值 说明
0
从不

1
成功后

2(默认值)
失败后

3
始终


[ @notify_level_email = ] email_level
一个值,用于指示完成该作业后何时发送电子邮件。email_level 的数据类型为 int,默认值为 0,指示从不发送。email_level 和 eventlog_level 使用相同的值。

[ @notify_level_netsend = ] netsend_level
一个值,用于指示完成该作业后何时发送网络消息。netsend_level 的数据类型为 int,默认值为 0,指示从不发送。netsend_level 和 eventlog_level 使用相同的值。

[ @notify_level_page = ] page_level
一个值,用于指示完成该作业后何时发送寻呼。page_level 的数据类型为 int,默认值为 0,指示从不发送。page_level 和 eventlog_level 使用相同的值。

[ @notify_email_operator_name = ] 'email_name '
达到 email_level 时,电子邮件收件人的电子邮件名称。email_name 的数据类型为 sysname,默认值为 NULL。

[ @notify_netsend_operator_name = ] 'netsend_name '
完成该作业后,接收网络消息的操作员的名称。netsend_name 的数据类型为 sysname,默认值为 N