建一个表.
表中一个行,一个列.
就存用户输入的这个时间.create table jobTime(d datetime)
insert jobtime getdate()用户输入时
只update就行了.这个表只update不delete和insertjob的调度为每天一次(最低的频率设置),或者小于这个,比如每小时,每分...
job的步骤里:if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0)
--执行要操作的东西
else
--不执行,或不要else
表中一个行,一个列.
就存用户输入的这个时间.create table jobTime(d datetime)
insert jobtime getdate()用户输入时
只update就行了.这个表只update不delete和insertjob的调度为每天一次(最低的频率设置),或者小于这个,比如每小时,每分...
job的步骤里:if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0)
--执行要操作的东西
else
--不执行,或不要else
企业管理器>>SQLSERVER组>>选中某个SQL注册>>管理>>数据库维护计划>>新建维护计划
在弹出的窗口第一步,选你要操作的库
第二步是优化,的可以不选,直接下一步
第三步检查完整性,你也可以不选,再直接下一步
第四步就是备份了,将调度更改为每天执行一次,每天凌晨2点(具体时间你调),然后下一步
第五步,选备份到的目录和备份文件扩展名,再下一步
第六步,不用,直接下一步
第七步,不用,直接下一步
第八步,写作业记录,这里钩上,以便以后查看用.
第九步,输个计划名,就OVER了.比如你输入的名为 backUp_MyDataBase_Task上面的完成后,到
管理>>SQL SERVER代理>>作业下,就看到你刚才建的这个 backUp_MyDataBase_Task 作业了.
点属性>>切换到"步骤"选项卡,选中第一步,点"编辑"看到命令里的sql语句了吧EXECUTE master.dbo.xp_sqlmaint N'-PlanID CC941789-25BF-4170-A4D2-6644DFB0C958 -WriteHistory -VrfyBackup -BkUpMedia DISK -BkUpDB "E:\databak" -BkExt "BAK"'把我写的这句,
if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0)粘到那句前面就OK了.手写的我就不写了,hehe.
if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0) 怎么会成立呢?
不知道我的意思,你明白没有?
msn:[email protected]
不过不怎么上...
因为,大的库,备份操作本身可能就有不短的时间,所以精确到秒触发备份没有意义. 如果是处理数据同步的话,我觉得到是合理的.
2,如果非要精确到秒,我建议你写 windows 服务,或做定时的任务栏程序,时间一到就执行backup database的备份库脚本.
3,若精确程序要求是不是很高,可以采用折衷的作法.
job调度设为10分钟执行一次.(当然,你也可以设置为30分钟)
d
2007-11-5 12:00:00.000
if exists(select 1 from jobTime where datediff(mi,d,getdate()) between 0 and 10) --or 30)
在指定时间后的10(或30)分钟之内执行备份工作
GO
/****** 对象: Job [test1.Subplan_1] 脚本日期: 11/04/2007 01:50:04 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** 对象: JobCategory [Database Maintenance] 脚本日期: 11/04/2007 01:50:04 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'test1.Subplan_1',
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'无描述。',
@category_name=N'Database Maintenance',
@owner_login_name=N'SVCTAG-DT5V52X\tech', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** 对象: Step [Subplan_1] 脚本日期: 11/04/2007 01:50:04 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Subplan_1',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'SSIS',
@command=N'/Server "$(ESCAPE_NONE(SRVR))" /SQL "Maintenance Plans\test1" /set "\Package\Subplan_1.Disable;false"',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'test1',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20071104,
@active_end_date=99991231,
@active_start_time=15100,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
=================
请问如何采用作业调度来处理这个问题.我的想法如下,把上面的程序写成存储过程sp_BackUp
当用户在前台页面上修改备份时间时,动态的修改这个存储过程.这样做可行?如果行,这种存储过程要如何处理?请帮我写下.谢谢.