​oracle定时任务dbms_job与dbms_scheduler使用方法

news2024/11/22 5:33:08

 工作中需要一个定时任务来抽取数据,之前采用的是dbms_job包下的过程来创建job,遇到了一些问题。找了下资料,得知oracle10g以后就推荐采用dbms_scheduler包来取代dbms_job来创建定时任务。下面简单介绍下两者的使用方法及使用过程中的一些体会。

   1.先创建日志表,用于记录存储过程执行时间及结果

    create table bak_job_test(date_time date,mark varchar2(200));

    2.创建一个存储过程,用于创建表

     create or replace procedure my_test authid current_user is

       v_count number := 0;

       v_mess varchar2(200) := '';

     begin

      select count(1) into v_count from user_tables t where t.TABLE_NAME = 'BAK_JOB_TABLES';

       if  v_count > 0 then

          execute immediate 'drop table bak_job_tables purge';

       end if;

      execute immediate 'create table bak_job_tables as select * from user_tables where 1=2';

      insert into bak_job_test(date_time,mark) values(sysdate,'success');

exception

when others then

v_mess := substr(SQLERRM,0,200);

insert into bak_job_test(date_time,mark) values(sysdate,v_mess);

      end;

    3.使用dbms_job包创建定时任务

      declare

          myjob number; 

       begin 

dbms_job.submit(myjob,'begin my_test; end;',sysdate,'TRUNC(sysdate,''mi'') + 1 / (24*60)');

commit;

        end;

      定时器1分钟执行一次,调用存储过程创建表,结果报错:权限不足。之前了解过,定义存储过程时加上authid current_user就可以在存储过程里面使用当前用户所角色的权限,出现这种问题 让人很费解,手动授权grant create table to user之后,确实可以解决这个问题,但是这种方式不通用,特别是存储过程里面用到其他的权限的时候就不方便了。所以决定试试dbms_scheduler包来创建定时任务。

       先简单介绍下dbms_job包下常见的过程:

       1) dbms_job.remove(jobId) 删除job定时任务,可以从user_jobs视图中查看job的详细情况

       2) dbms_job.run(jobid) 运行定时任务

       3) dbms_job.broken(jobid,true) 终止定时任务

       4) dbms_job.interval(jobid,'interval') 修改定时任务的执行时间

     4.使用dbms_scheduler创建定时任务

    使用dbms_scheduler需要具有create job权限,对定时任务一些操作需要具有MANAGE SCHEDULER权限,如:dbms_scheduler.stop_job('my_job_test',true);

     BEGIN

     dbms_scheduler.create_job(job_name        => 'my_job_test',

                             job_type        => 'STORED_PROCEDURE',

                             job_action      => 'my_test',

                              start_date      => sysdate,

                             repeat_interval => 'sysdate + 1/1440',

                             enabled         => TRUE,

                             comments        => 'test');

     end;

     定时器执行,调用存储过程创建表成功了,不需要显示的授权grant create table to user,只需要存错过程定义为authid current_user即可。个人觉得dbms_job在调用authid current_user的存储过程的时候,未能调用到用户具有的角色的权限,这或许是dbms_job的一个bug。

     简单介绍下dbms_scheduler关于定时任务的一些常用过程:

     1) dbms_scheduler.run(jobName) 运行job

     2) dbms_scheduler.stop_job(jobName,force) 停止job,force默认为false,oracle建议false停止失败情况下,使用true,且使用true需要有manage scheduler权限

     3) dbms_scheduler.drop_job(jobName) 删除job

     4) dbms_scheduler.enable(jobName) 打开job

     5) dbms_scheduler.disable(jobName,force) 禁用job,force参数用于dependencies,如果TRUE,即使其他对象依赖于它,操作也能成功

     相关视图

    1) user_scheduler_jobs 查看job信息

    2) User_Scheduler_Job_Log job job日志

    3) user_scheduler_job_run_details job运行日志

    4) user_scheduler_running_jobs 正在运行的job

    总结:

   oracle定时任务,dbms_job调用存储过程创建表,需要显示授权,存储过程定义为authid current_user也不行,而dbms_scheduler是不需要显示授权的,这点来说后者更方便使用。另外,dbms_scheduler提供了job运行日志记录视图,可以查看具体的运行日志,比较实用。而且,oracle10g以后也推荐使用dbms_scheduler。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openEuler用户软件仓(EUR)| 近期项目介绍

在操作系统的世界,软件包是一等公民,软件包的丰富程度和是否易于分发,一定程度上决定了操作系统用户和开发者的使用体验.。 EUR(openEuler User Repo)是openEuler社区针对开发者推出的个人软件包托管平台,目的在于为开发者提供一个…

【LeetCode训练营】用栈来实现队列+用队列来实现栈 详解

💯 博客内容:【LeetCode训练营】用栈来实现队列用队列来实现栈 详解 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! …

Requests-翻页请求实现

翻页请求实现 继https://blog.csdn.net/ssslq/article/details/130747686之后,本篇详述在获取了页面第一页之后,如何获取剩余页的标题内容。 网页:https://books.toscrape.com 找规律 同样还是进行页面的检查,切到网络一栏&…

MySQL查询——joininunion

MySql多表查询的几种方法 连接查询——join自连接查询子查询——🛠in合并查询——Union 认识MySQL数据库的多表查询,在对大量数据进行查询时仅仅使用一些基本的SQL语句已经无法满足我们日益增长的需求,如果要对多表进行查询就不得不认识以下几…

【计算机网络基础】测试2 物理层

文章目录 判断题选择题辨析题应用题 判断题 现在的无线局域网常用的频段是2.8GHz和5.4GHz。 多模光纤只适合于近距离传输。√ 数据在计算机内部多采用串行传输方式,但在通信线路上多采用并行传输方式。 统计时分复用可以按需动态分配时隙。√ 相对于同步时分复用…

安装Ubuntu系统

## ubuntu 22.04 环境处理(按顺序安装) 1. 搜索并打开“windows 功能”窗口 勾上图示的2项,点确定安装,可能要求重启电脑 2. windows store 中 安装ubuntu 22.04 wsl 一定要登录Microsoft Store 账号再操作 3.在ubuntu安装node.j…

以SpringMVC入门案例分析服务器初始化过程、单次请求流程

文章目录 1,SpringMVC概述2,SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器…

RabbitMQ --- 死信交换机(一)

前言 当我们在使用消息队列时,难免会遇到一些消息被拒绝,重复投递或者超时等异常情况。这些异常消息如果不被正确处理,将会阻碍整个消息系统的正常运行。而此时,死信交换机(Dead Letter Exchange,简称DLX&…

【遇到dfs问题,点进来看看思路】【dfs本质之一 全排列思想解决大部分dfs】例题1.全排列 例题2.单词接龙

总之就是 在已知格线上,填充可用数据, 如果回退到A,那么把A之前所用数据,换一个,并且A之后的数据都重新填写 这就是全排列(截取的最关键部分,往下看) 这样的话,就是dfs的…

【节点边际电价】机组运行约束对机组节点边际电价的影响分析(Matlab代码实现)​

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2023年美国大学生数学建模竞赛F题绿色GDP解题全过程文档及程序

2023年美国大学生数学建模竞赛 F题 绿色GDP 原题再现: 背景   国内生产总值(GDP)可以说是衡量-一个国家经济健康状况的最知名和最常用的指标之一。它通常被用于确定一个国家的购买力和获得贷款的机会,为国家提出促进其gdp的政策和项目提供动力。GDP衡…

Springboot +Flowable,流程表单应用之外置表单(HTML形式)(一)

一.简介 整体上来说,我们可以将Flowable 的表单分为三种不同的类型: 动态表单 这种表单定义方式我们可以配置表单中每一个字段的可读性、可写性、是否必填等信息,不过不能定义完整的表单页面。外置表单 外置表单我们只需要定义一下表单的 k…

国考省考行测:求基期量,去年的量,增长率r小于6%化除为乘,否则直接相除

国考省考行测:求基期量,去年的量 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和…

AIGC产业研究报告2023——三维生成篇

定义 人工智能三维生成是指利用深度神经网络学习并生成物体或场景的三维模型,并在三维模型的基础上将色彩与光影赋予物体或场景使生成结果更加逼真。在应用中,生成物体或场景的三维模型称为三维建模,生成三维模型的色彩与光影称为三维渲染。…

在博客逮到一个阿里8年测试开发,聊过之后我悟了....

老话说的好,这人呐,一旦在某个领域鲜有敌手了,就会闲得疋虫疼。前几天我在上班摸鱼刷社区的时候认识了一位腾讯测试开发大佬,在阿里工作了8年,因为本人天赋比较高,平时工作也兢兢业业,现在企业内…

异常检测相关论文记录

1、Unsupervised anomaly detection algorithms on real-world data: how many do we need?真实世界数据的无监督异常检测算法:我们需要多少? Abstract: 将所考虑的算法在所有数据集上的相对性能进行可视化和聚类,我们确定了两个…

10分钟轻松实现三菱FX3UPLC连接阿里云平台

MQTT协议网关串口连接三菱FX3UPLC操作说明v1.3 目录 一. 使用流程 二. 准备工作 2.1 需要准备如下物品 2.2 LF220网关准备工作 2.3 PLC准备工作 2.4 电脑的准备工作 2.5 MQTT服务器准备工作 三. 阿里云IoT平台配置步骤 3.1 创建产品 3.2 添加设备 3.3 配…

pip下载包报错ERROR: No matching distribution found for xxx时的解决方案

前言 当我们使用python自带的pip安装一些包时,可能会报以下错误: 出现这种情况有三种可能: 第一种可能: pip的版本过低,需要升级一下,可以执行以下命令进行尝试 python -m pip install --upgrade pip第…

MySQL---存储函数、触发器

1. 存储函数 MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算 或功能写成一个函数。 存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。 存储函数与存储过程的区…

如何裁剪图片,裁剪图片的几个方法

如何裁剪图片,裁剪图片的几个方法你知道吗?在日常生活中,当浏览图片时,常会想要对某些图片进行裁剪,或从生活照片中裁剪自己的部分。如何处理这种情况?裁剪图片可去除图像不必要的部分,让其更美…