如何在SQL Server和Oracle中创建job
这篇文章主要讲解了“如何在SQL Server和Oracle中创建job”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在SQL Server和Oracle中创建job”吧!
首先说下ms server,因为我也是新手,所以首先选择了使用企业管理器进行任务设定,然后再导出设计完毕的任务脚本,这样就可以在其他数据库中直接通过执行脚本的形式来新建任务了(需要适当修改其中的一些任务名称和数据库名称等值),下面说下具体的操作步骤以及获得的任务脚本:
1. 保证启动ms server的“SQL Server代理服务”(即agent service)
2. 打开企业管理器 -> 连接数据服务器 -> 右键“SQL Server agent”节点下的“jobs”,选择“New Job”,在详细任务页面,我们会看到很多的设定选项:包括“常规”、“步骤”、“计划”、“警报”、“通知”和“目标”等,在这里我们可以进行非常详细的任务设定,因为我要做的很简单,就是按时执行数据库中的某一个存储过程,所以只是简单地设定了一下常规、步骤和计划三项中的内容,其中我们通过步骤来设定我们要进行的数据库操作和顺序,然后再通过“计划”来设定具体的操作方案,相比直接写sql语句来说,显得更加的容易些,比较适合于初学者。
3. 右键选择我们刚刚创建成功的job,选择“Script job as -> CREATE TO”,选择把脚本存放到文件或者直接通过编辑器打开,然后再进行保存均可。我们可以看到系统自动生成的脚本看起来颇为复杂,因为其将其中的设定参数均进行了设定,可能通过sql脚本可以省略很多的默认参数,但我们可以清晰地看到job创建的几个关键步骤。个人示例的sql脚本如后面附。经过精简后的代码如下:
DECLARE@jobIdBINARY(16)--createthejobEXECmsdb.dbo.sp_add_job@job_name='updatetableofSys_PageInfo',@job_id=@jobIdOUTPUT--createthestepofthejobEXECmsdb.dbo.sp_add_jobstep@job_id=@jobId,@step_name='justonestep',@subsystem='TSQL',@command='EXECdbo.BatchUpdateArchListTotalNum',@database_name=N'Exchanger_2'--createtheschedualofthejobEXECmsdb.dbo.sp_add_jobschedule@job_id=@jobId,@name='theschedual',@freq_type=4,@freq_interval=1,@active_start_time=10000--createtheserverofthejobEXECmsdb.dbo.sp_add_jobserver@job_id=@jobId,@server_name=N'(local)'
在程序中有用到
让用户自定义一些定时执行的提醒或工作任务
所以可能需要用到SQLServer相关创建的Job
因目前不熟作业创建的SQL语句
所以就
1.通过企业管理器的管理处作业的向导
直接建立一个作业
2.查看该作业的SQL语句
相关SQL语句如下
--2007-8-16/14:58上生成的脚本--由:sa--服务器:192.168.0.36BEGINTRANSACTIONDECLARE@JobIDBINARY(16)DECLARE@ReturnCodeINTSELECT@ReturnCode=0IF(SELECTCOUNT(*)FROMmsdb.dbo.syscategoriesWHEREname=N'[Uncategorized(Local)]')<1EXECUTEmsdb.dbo.sp_add_category@name=N'[Uncategorized(Local)]'--删除同名的警报(如果有的话)。SELECT@JobID=job_idFROMmsdb.dbo.sysjobsWHERE(name=N'WriteMsgOnTime')IF(@JobIDISNOTNULL)BEGIN--检查此作业是否为多重服务器作业IF(EXISTS(SELECT*FROMmsdb.dbo.sysjobserversWHERE(job_id=@JobID)AND(server_id<>0)))BEGIN--已经存在,因而终止脚本RAISERROR(N'无法导入作业“WriteMsgOnTime”,因为已经有相同名称的多重服务器作业。',16,1)GOTOQuitWithRollbackENDELSE--删除[本地]作业EXECUTEmsdb.dbo.sp_delete_job@job_name=N'WriteMsgOnTime'SELECT@JobID=NULLENDBEGIN--添加作业EXECUTE@ReturnCode=msdb.dbo.sp_add_job@job_id=@JobIDOUTPUT,@job_name=N'WriteMsgOnTime',@owner_login_name=N'sa',@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=0IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollback--添加作业步骤EXECUTE@ReturnCode=msdb.dbo.sp_add_jobstep@job_id=@JobID,@step_id=1,@step_name=N'WriteMsg',@command=N'INSERTINTOMsg(MsgToUser,MsgTitle,MsgContent,MsgDateTime)VALUES(''张三'',''注意休息'',''需要定时休息一下啊'',GETDATE())',@database_name=N'TestDB',@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=2IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackEXECUTE@ReturnCode=msdb.dbo.sp_update_job@job_id=@JobID,@start_step_id=1IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollback--添加作业调度EXECUTE@ReturnCode=msdb.dbo.sp_add_jobschedule@job_id=@JobID,@name=N'5min',@enabled=1,@freq_type=4,@active_start_date=20070816,@active_start_time=0,@freq_interval=1,@freq_subday_type=4,@freq_subday_interval=5,@freq_relative_interval=0,@freq_recurrence_factor=0,@active_end_date=20070816,@active_end_time=235959IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollback--添加目标服务器EXECUTE@ReturnCode=msdb.dbo.sp_add_jobserver@job_id=@JobID,@server_name=N'(local)'IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackENDCOMMITTRANSACTIONGOTOEndSaveQuitWithRollback:IF(@@TRANCOUNT>0)ROLLBACKTRANSACTIONEndSave:
oracle中创建job
下面再看看oracle中是如何创建job的,这次我们直接使用sql脚本进行创建,一些常用的sql语句如下:
一、查看数据库中的任务
select * from user_jobs
二、删除数据库中指定的任务
begin
dbms_job.remove(50);
end;
三、创建一个每隔5分钟执行一次的任务
DECLARE
jobid NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT(job => jobid,
what => 'BatchUpdateArchListTotalNum();', // 存储过程如果没有参数,可以省略括号,但是不能省略分号
next_date => sysdate,
interval => 'sysdate+1/24/12');
COMMIT;
END;
附:SQL server任务脚本:
USE[msdb]GO/******对象:Job[更新]脚本日期:05/12/200918:14:14******/BEGINTRANSACTIONDECLARE@ReturnCodeINTSELECT@ReturnCode=0/******对象:JobCategory[DatabaseMaintenance]脚本日期:05/12/200918:14:14******/IFNOTEXISTS(SELECTnameFROMmsdb.dbo.syscategoriesWHEREname=N'DatabaseMaintenance'ANDcategory_class=1)BEGINEXEC@ReturnCode=msdb.dbo.sp_add_category@class=N'JOB',@type=N'LOCAL',@name=N'DatabaseMaintenance'IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackENDDECLARE@jobIdBINARY(16)EXEC@ReturnCode=msdb.dbo.sp_add_job@job_name=N'job名称',@enabled=0,@notify_level_eventlog=0,@notify_level_email=0,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'无描述。',@category_name=N'DatabaseMaintenance',@owner_login_name=N'sa',@job_id=@jobIdOUTPUTIF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollback/******对象:Step[更新Sys_PageInfo表的内容]脚本日期:05/12/200918:14:15******/EXEC@ReturnCode=msdb.dbo.sp_add_jobstep@job_id=@jobId,@step_name=N'操作步骤名称',@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'TSQL',@command=N'EXECdbo.BatchUpdateArchListTotalNum',@database_name=N'Exchanger_2',@database_user_name=N'dbo',@flags=0IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackEXEC@ReturnCode=msdb.dbo.sp_update_job@job_id=@jobId,@start_step_id=1IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackEXEC@ReturnCode=msdb.dbo.sp_add_jobschedule@job_id=@jobId,@name=N'计划名称',@enabled=1,@freq_type=4,@freq_interval=1,@freq_subday_type=1,@freq_subday_interval=1,@freq_relative_interval=0,@freq_recurrence_factor=0,@active_start_date=20090512,@active_end_date=99991231,@active_start_time=0,@active_end_time=235959IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackEXEC@ReturnCode=msdb.dbo.sp_add_jobserver@job_id=@jobId,@server_name=N'(local)'IF(@@ERROR<>0OR@ReturnCode<>0)GOTOQuitWithRollbackCOMMITTRANSACTIONGOTOEndSaveQuitWithRollback:IF(@@TRANCOUNT>0)ROLLBACKTRANSACTIONEndSave:
感谢各位的阅读,以上就是“如何在SQL Server和Oracle中创建job”的内容了,经过本文的学习后,相信大家对如何在SQL Server和Oracle中创建job这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。