暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货分享】DM数据库创建JOB的三种方式(二)

达梦大数据 2020-04-24
3068

上周我们讲解了使用DBMS_JOB和DBMS_SCHEDULER系统包来创建定时任务的方法,本次讲解使用DM作业系统创建定时任务的方法。


DBMS_JOB、DBMS_SCHEDULER只支持调用DMSQL块和存储过程,DM作业系统除了支持定时执行SQL脚本之外,也支持定时备份数据库、重组数据库,更新统计信息等功能,并支持管理操作员和警报的功能。


本章介绍DM作业系统的功能和创建作业的方法。


本章的测试环境:

①操作系统:Window 10 (64位)

②数据库版本:达梦8.1

相关关键字:DM作业系统,定时任务


×




DM作业系统

DM的作业系统为用户提供了创建作业,并对作业进行调度执行以完成相应任务的功能。作业系统大致包含作业、警报和操作员三部分。用户需要为作业配置步骤和调度。还可以创建警报,当发生警报时,将警报信息通知操作员,以便操作员能够及时做出响应。用户通过作业可以实现对数据库的操作,并将作业执行结果以通知的形式反馈到操作员。


本章仅介绍DM作业系统创建JOB作业的方法。



创建DM作业系统

创建DM作业系统可以通过两种方式来实现。一是通过系统过程SP_INIT_JOB_SYS来实现;二是通过图形化客户端MANAGER管理工具实现。两者选其一。


看过上周文章会发现,创建DM作业系统与创建DBMS_JOB系统包是同一个方法。也就是说,创建DM作业系统的同时就创建了DBMS_JOB系统包,或者说如果要使用DBMS_JOB系统包,就需要创建DM作业系统。



DM作业系统使用方法


下面我们使用客户端工具介绍创建DM系统作业,创建JOB的方法。

假设我们需要创建一个JOB,每1小时运行一次,运行时调用存储过程p_test_job。实现步骤参考如下:


1.创建DM作业系统

用SYSDBA用户登录DM管理工具,左侧“对象导航”窗口右击“代理”选项,选择“创建代理环境”。




页面提示“创建代理环境成功”,打开模式选项,可以看到数据库模式下面多了SYSJOB模式,该模式属于SYSDBA用户,SYSJOB模式拥有SYS开头的相关系统表,DBMS_JOB系统包、视图等。


如果想删除作业系统,可以直接右击“代理”,选择“清理代理环境”即可删除作业系统。删除作业系统相关的作业都会被清除,需慎重操作。





2.赋予用户相关权限

普通用户创建JOB需要ADMIN JOB权限,这里以DMHR为例,使用管理员SYSDBA用户赋予DMHR用户该权限。语句参考如下:

    grant admin job to dmhr;
    复制



    3.创建作业

    以具有ADMIN JOB权限的用户(这里以DMHR为例)登录DM管理工具,左侧“对象导航”窗口右击【代理】->【作业】选项,选择“新建作业”。




    ①打开新建作业页面,在“常规”页签中,填写作业名(必填)和作业描述(可选)等其他信息。




    ②点击“作业步骤”页签,选择“添加”,打开新建作业步骤页面,填写步骤名称、步骤类型等信息。




    点击“高级”页签,可以配置作业步骤完成后的操作,可以选择执行下一步,也可以选择报告成功或失败,这里保持默认不变,点击【确定】。




    ③在新建作业页面,点击“作业调度”页签,选择“添加”,打开新建作业调度页面,填写名称、调度类型为反复执行,勾选星期一~周期日的选项,选择执行周期为每隔1小时,点击【确定】。




    此时,创建作业的步骤已基本完成,在新建作业页面点击“DDL”页签,可以看到上述步骤的操作语句。点击【确定】,JOB创建完成。




    在查看上述的DDL语句时,我们可以把语句保存下来,可以看出创建JOB的完整SQL语句如下。

      call SP_CREATE_JOB('JOBTEST1',1,0,'',0,0,'',0,'JOBTEST');
      call SP_JOB_CONFIG_START('JOBTEST1');
      call SP_ADD_JOB_STEP('JOBTEST1','JOBSTEP1',0,'p_test_job;',1,2,0,0,NULL,0);
      call SP_ADD_JOB_SCHEDULE('JOBTEST1','JOBSCHEDULERTEST1',1,2,1,127,60,'00:00:00','23:59:59','2020-04-2410:40:40',NULL,'');
      call SP_JOB_CONFIG_COMMIT('JOBTEST1');;
      复制

      其中,在客户端操作时,1,3,4行命令是可看到明显操作动作的,而2,5打开和结束配置没有明显感知,可以理解为后台隐式调用。以上语言可以单独在SQL窗口依次执行,实现创建JOB的功能。或者说,上述客户端的操作方式,也可以直接换成上面的5行命令在SQL窗口执行,达到创建JOB的目的。


      下面就分别从这五个过程

      讲解DM作业系统的方法


      DM作业系统相关方法


      SP_CREATE_JOB创建作业

      系统过程SP_CREATE_JOB用于实现创建作业。语法如下:

        SP_CREATE_JOB (
        JOB_NAME    VARCHAR(128),
        ENABLED    INT,
        ENABLE_EMAIL   INT,
        EMAIL_OPTR_NAME VARCHAR(128),
        EMAIL_TYPE   INT,
        ENABLED_NETSEND  INT,
        NETSEND_OPTR_NAME VARCHAR(128),
        NETSEND_TYPE   INT,
        DESCRIBE    VARCHAR(8187)
        )
        复制


        参数详解

        JOB_NAME作业名称。必须是有效的标识符,同时不能是DM关键字。作业不能重名,重名则报错。

        ENABLE 作业是否启用。1启用;0不启用。

        ENABLE_EMAIL、EMAIL_OPTR_NAME、EMAIL_TYPE这三个参数与邮件发送相关。

        ENABLE_EMAIL:作业是否开启邮件系统。1是;0否。如果开启,那么该作业相关的一些日志会通过邮件通知操作员;不开启就不会发送邮件。

        EMAIL_OPTR_NAME:指定操作员名称。如果开启了邮件通知功能,邮件会发送给该操作员。在创建时系统会检测这个操作员是否存在,如果不存在则报错。

        EMAIL_TYPE:如果在开启了邮件发送之后,在什么情况下发送邮件。情况分为三种:0、1、2。0表示在作业执行成功后发送;1表示在作业执行失败后发送;2表示在作业执行结束后发送。

        ENABLE_NETSEND、NETSEND_OPTR_NAME、NETSEND_TYPE这三个参数与网络发送相关,这里不过多介绍。

        DESCRIBE 作业描述信息。


        SP_CREATE_JOB所创建的作业不能执行任何操作,只是一个空的作业,如果想要这个作业能执行一些指定的操作,就需要对这个作业进行配置。

        配置一个作业主要包括以下几个步骤:

        1.指定要开始配置一个作业;
        2.为指定的作业增加步骤;
        3.为指定的作业增加调度;
        4.结束作业配置。

        只有在结束作业配置后,这个作业才算配置完成,同时如果这个作业是ENABLE状态的,那么它会立即生效。



        SP_JOB_CONFIG_START开始作业配置

        系统过程SP_JOB_CONFIG_START用来指定对一个作业配置的开始。语法如下:

          SP_JOB_CONFIG_START(
          JOB_NAME VARCHAR(128)
          )
          复制


          参数详解

          JOB_NAME要配置的作业的名称。执行时会检测这个作业是否存在,如果不存在则报错。

          说明:不支持在设置了DML自动提交(例如,DISQL中设置SETAUTO ON)的会话上配置作业。


          开始作业配置之后到结束作业配置之前这段时间,当前会话会处于作业配置状态。配置状态不允许做任何的创建、修改、删除对象(作业、操作员、警报)的操作。开始作业配置和结束作业配置两个过程配合使用,是为了保证作业配置的完整性。


          同时强烈建议:因为作业配置全部都是DDL操作,所以在配置过程中建议用户不要做任何的COMMIT操作或者设置DDL自动提交(例如,不要设置dm.ini文件中DDL_AUTO_COMMIT=1)。否则在配置作业过程中,一旦错误的作业配置DDL操作被自动提交,将不能回滚。


          在DM的作业配置过程中,如果配置出现错误时,可以直接使用ROLLBACK将错误的配置回滚到SP_JOB_CONFIG_START刚执行的状态,因为在这个过程执行时会自动提交前面所做的操作。所以在配置一个作业开始前,也需要谨慎,需要考虑前面做的操作是否需要提交。



          SP_ADD_JOB_STEP增加作业步骤

          增加、删除作业步骤必须是在配置作业开始后才能进行,否则系统会报错。增加作业的步骤通过系统过程SP_ADD_JOB_STEP实现。语法如下:

            SP_ADD_JOB_STEP(
            JOB_NAME VARCHAR(128),
            STEP_NAME VARCHAR(128),
            TYPE INT,
            COMMAND VARCHAR(8187),
            SUCC_ACTION INT,
            FAIL_ACTION INT,
            RETRY_ATTEMPTS INT,
            RETRY_INTERVAL INT,
            OUTPUT_FILE_PATH VARCHAR(256),
            APPEND_FLAG INT
            );
            复制


            参数详解

            JOB_NAME 作业的名称。表示正在给哪一个作业增加步骤,这个参数必须为上面调用SP_JOB_CONFIG_START函数时指定的作业名,否则系统会报错,同时系统会检测这个作业是否存在,不存在也会报错。


            STEP_NAME 表示增加的步骤名。必须是有效的标识符,同时不能是DM关键字。同一个作业不能有两个同名的步骤,创建时会检测这个步骤是否已经存在,如果存在则报错。


            TYPE 步骤的类型。取值0、1、2、3、4、5和6。说明如下:

            0表示执行一段SQL语句或者是语句块。

            1表示执行基于V1.0版本的备份还原(没有WITHOUTLOG和PARALLEL选项)。

            2表示重组数据库。3表示更新数据库的统计信息。

            4表示执行DTS(数据迁移)。

            5表示执行基于V1.0版本的备份还原(有WITHOUTLOG和PARALLEL选项)。

            6表示执行基于V2.0版本的备份还原。


            COMMAND指定不同步骤类型(TYPE)下,步骤在运行时所执行的语句。它不能为空。当TYPE=0时,指定要执行的SQL语句或者语句块。如果要指定多条语句,在语句之间必须用分号隔开。不支持多条DDL语句一起执行,否则在执行时可能会报出不可预知的错误信息。其他情形此处略,用户可参考《DM8作业系统使用手册》。


            SUCC_ACTION 指定步骤执行成功后,下一步该做什么事。取值0或1。说明如下:0表示执行下一步。1表示报告执行成功,并执行下一步。

            FAIL_ACTION 指定步骤执行失败后,下一步该做什么事。取值0或2。说明如下:0表示执行下一步。2表示报告执行失败,并结束作业。

            RETRY_ATTEMPTS 表示当步骤执行失败后,需要重试的次数。取值范围0~100次。

            RETRY_INTERVAL 表示在每两次步骤执行重试之间的间隔时间。不能大于10秒钟。

            OUTPUT_FILE_PATH 表示步骤执行时输出文件的路径。该参数已废弃,没有实际意义。

            APPEND_FLAG输出文件的追写方式。如果指定输出文件,那么这个参数表示在写入文件时是否从文件末尾开始追写。1是;0否。如果是0,那么从文件指针当前指向的位置开始追写。



            SP_ADD_JOB_SCHEDULE增加调度

            增加、删除调度必须是在配置作业开始后才能进行,否则系统会报错,这样处理主要是为了保证作业配置的完整性。增加调度通过调度系统过程SP_ADD_JOB_SCHEDULE实现。语法如下:

              SP_ADD_JOB_SCHEDULE(
              JOB_NAME VARCHAR(128),
              SCHEDULE_NAME VARCHAR(128),
              ENABLE INT,
              TYPE INT,
              FREQ_INTERVAL INT,
              FREQ_SUB_INTERVAL INT,
              FREQ_MINUTE_INTERVAL INT,
              STARTTIME VARCHAR(128),
              ENDTIME VARCHAR(128),
              DURING_START_DATE VARCHAR(128),
              DURING_END_DATE VARCHAR(128),
              DESCRIBE VARCHAR(500)
              );
              复制


              参数详解

              JOB_NAME作业名称。指定要给该作业增加调度,这个参数必须是配置作业开始时指定的作业名,否则报错,同时系统还会检测这个作业是否存在,如果不存在也会报错。

              SCHEDULE_NAME待创建的调度名称。必须是有效的标识符,同时不能是DM关键字。指定的作业不能创建两个同名的调度,创建时会检测该调度是否已存在,如果存在则报错。

              ENABLE 表示调度是否启用,布尔类型。1启用;0不启用。

              TYPE 指定调度类型。取值0、1、2、3、4、5、6、7、8。分别介绍如下:

              0表示指定作业只执行一次。
              1按天的频率来执行。
              2按周的频率来执行。
              3在一个月的某一天执行。
              4在一个月的第一周第几天执行。
              5在一个月的第二周的第几天执行。
              6在一个月的第三周的第几天执行。
              7在一个月的第四周的第几天执行。
              8在一个月的最后一周的第几天执行。
              当TYPE=0时,其执行时间由下面的参数DURING_START_DATE指定。

              FREQ_INTERVAL 与TYPE有关。表示不同调度类型下的发生频率。说明如下:

              当TYPE=0时,这个值无效,系统不做检查。
              当TYPE=1时,表示每几天执行,取值范围为1~100。
              当TYPE=2时,表示的是每几个星期执行,取值范围没有限制。
              当TYPE=3时,表示每几个月中的某一天执行,取值范围没有限制。
              当TYPE=4时,表示每几个月的第一周执行,取值范围没有限制。
              当TYPE=5时,表示每几个月的第二周执行,取值范围没有限制。
              当TYPE=6时,表示每几个月的第三周执行,取值范围没有限制。
              当TYPE=7时,表示每几个月的第四周执行,取值范围没有限制。
              当TYPE=8时,表示每几个月的最后一周执行,取值范围没有限制。

              FREQ_SUB_INTERVAL与TYPE和FREQ_INTERVAL有关。表示不同TYPE的执行频率,在FREQ_INTERVAL基础上,继续指定更为精准的频率。说明如下:

              当TYPE=0或1时,这个值无效,系统不做检查。

              当TYPE=2时,表示的是某一个星期的星期几执行,可以同时选中七天中的任意几天。取值范围1~127。具体如何取值,请用户参考如下规则。因为每周有七天,所以DM数据库系统内部用七位二进制来表示选中的日子。从最低位开始算起,依次表示周日、周一至周五、周六。选中周几,就将该位置1,否则0。例如,选中周二和周六,7位二进制就是1000100,转化成十进制就是68,所以FREQ_SUB_INTERVAL就取值68。

              当TYPE=3时,表示将在一个月的第几天执行。取值范围1~31。
              当TYPE为4、5、6、7或8时,都表示将在某一周内第几天执行。取值范围1~7,分别表示从周一到周日。

              FREQ_MINUTE_INTERVAL 表示一天内每隔多少分钟执行一次。有效值范围1~1440,单位分钟。

              STARTTIME 定义作业被调度的起始时间。必须是有效的时间字符串,不可以为空。

              ENDTIME 定义作业被调度的结束时间。可以为空。但如果不为空,指定的必须是有效的时间字符串,同时必须要在STARTTIME时间之后。

              DESCRIBE 调度描述信息。



              SP_JOB_CONFIG_COMMIT提交作业配置

              在配置完成后,用户需要对前面所做的配置进行提交,表示对作业的配置已经完成,同时将这个作业加入到运行队列,运行的内容包括这个作业下定义的所有步骤的执行内容,执行方式就是根据这个作业下定义的所有的调度定义的方式来执行。


              在配置过程中,可以对指定的作业增加、删除任意多个调度、步骤,但不要做提交操作以及自动提交操作,否则可能会出现作业配置不完整的问题。


              系统过程SP_JOB_CONFIG_COMMIT实现作业配置提交。语法如下:

                SP_JOB_CONFIG_COMMIT(
                JOB_NAME VARCHAR(128)
                )
                复制


                参数详解

                JOB_NAME待结束配置的作业的名称。

                调用这个过程时,系统会检测当前会话是否处于作业配置状态,如果不处于配置状态,则系统会报“非法的作业配置操作”的错误。


                由上面可以看出,相比较于DM作业系统相关方法的晦涩难懂,客户端工具更方便理解和使用。另外,DBMS_JOB和DBMS_SCHEDULER系统包命令行操作也相对简单,方便命令行方式的记忆和使用。


                DM作业系统除创建作业外,还具有通知操作员,创建警报的功能,更多功能请参考《DM8作业系统使用手册》。


                1

                好了,本次分享到此结束,感谢大家。


                END

                【干货分享】DM数据库创建JOB的三种方式(一)

                【干货分享】DM数据库使用UTL_FILE读写文件方法

                【干货分享】JAVA调用DM Logmnr日志分析方法

                【干货分享】dmfldr数据装载使用方法

                最后修改时间:2020-06-12 17:43:57
                文章转载自达梦大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论