oracle必问的面试题如何授权user管理sys的job

扫一扫体验手机阅读
oracle 11g系列 用户管理实验报告
<span type="1" blog_id="1661601" userid='
24篇文章,2W+人气,0粉丝
MySQL全通晓
¥51.00124人订阅
高并发架构之路
¥51.00153人订阅如何在sys用户下删除dba_jobs的所有任务 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区
后使用快捷导航没有帐号?
查看: 2634|回复: 6
如何在sys用户下删除dba_jobs的所有任务
论坛徽章:0
想要删除在各个用户下添加的任务,如何操作?
论坛徽章:0
有大侠帮一下吗
论坛徽章:737
循环dbms_job.remove ()
论坛徽章:0
oracle_cj 发表于
循环dbms_job.remove ()
我试过了,还是存在的
论坛徽章:0
可以了,用dbms_ijob.remove就行了
&&for v in(select job from dba_jobs) loop
dbms_ijob.remove(v.job);
认证徽章论坛徽章:51
dbms_ijob.remove ()
论坛徽章:737
悟性比我还高啊
2018中国系统架构师大会7.8折倒计时10天
日~19日,由IT168旗下ITPUB企业社区平台主办的第十届中国系统架构师大会(SACC2018)将在北京隆重召开。
本届大会采用了“3+2”模式:3天传统技术大会演讲+2天深度主题培训。多角度出发,为参会者提供更多案例,全面且深入的向企业提供完整的技术解决方案。
现在购票享受7.8折优惠!
----------------------------------------
优惠时间:日前
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号博客分类:
数据库中,执行计划任务的工具通常都是DBMS_JOB
包。这个包使用简单,历史悠久,目前还在广泛使用中。坦率地讲,这个包的功能满足了绝大部分应用的计划任务运行需要,所以生命力才这么强。
但是,我们这里还是要说一下它的不足之处。
(miki西游 @mikixiyou 文档:原文链接:
在DBMS_JOB
使用中,我们需要知道每一次JOB
执行的时间,用于判断该JOB
调用的存储过程执行时间。这里你会说,这个在存储过程里也可以实现的,在存储过程中,执行前后加个时间戳记录到日志表中就可以实现。
是的。以前我们在处理这类需求时也是这么做的。
但从ORACLE 10.1
版本开始,ORACLE
开发了一个新的包DBMS_SCHEDULER
。这个包挺复杂的,以至于我在初次学习之后,就没再去用它了。功能太强大了,其实很多我们不需要的。
我们就有这个需求,看看DBMS_SCHEDULER
是如何解决的。
中,使用DBMS_SCHEDULER.CREATE_JOB
创建计划任务,用于调度一个存储过程。
存储过程很简单,我为这个测试而创建的,就是向一张表里插入数据。
CREATE TABLE T1 AS SELECT SYSDATE AS AA FROM DUAL;
CREATE OR REPLACE PROCEDURE SP_TEST_T1 AS
INSERT INTO T1 SELECTD SYSDATE FROM DUAL;
这个存储过程没有输入输出参数,是为了JOB
调用方便。如果实际运行过程中有参数,我们就写一个存储过程封装它,再放入JOB
CREATE PROCEDURE GATHER_GTJA_STATS
SYS.DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME =& 'GTJA',ESTIMATE_PERCENT =& 30,METHOD_OPT =& 'FOR ALL INDEXED COLUMNS SIZE AUTO',CASCADE =& TRUE,OPTIONS =& 'GATHER');
使用DBMS_SCHEDULER.CREATE_JOB
创建一个JOB,
调用存储过程SP_TEST_T1
,执行间隔2
分钟。这里的JOB_NAME
名称可以自己定义,这个摆脱了DBMS_JOB
号不能自定义的缺点。
EXEC DBMS_SCHEDULER.CREATE_JOB(JOB_NAME =& 'JOB_SP_TEST_T1',JOB_TYPE =& 'STORED_PROCEDURE',JOB_ACTION =&'SP_TEST_T1' ,START_DATE =& SYSDATE ,REPEAT_INTERVAL =& 'FREQ=MINUTELY; INTERVAL=2');
该命令执行成功后,可以在*_SCHEDULER_JOBS
的配置值。
SELECT * FROM DBA_SCHEDULER_JOBS;
SELECT * FROM USER_SCHEDULER_JOBS WHERE JOB_NAME='JOB_SP_TEST_T1';
使用该命令新建的JOB
,默认是不执行的,需要将其状态改成可执行状态。
EXEC DBMS_SCHEDULER.ENABLE(NAME =& 'JOB_SP_TEST_T1');
可以删除重建它。
EXEC DBMS_SCHEDULER.DROP_JOB(JOB_NAME =& 'JOB_SP_TEST_T1');
EXEC DBMS_SCHEDULER.CREATE_JOB(JOB_NAME =& 'JOB_SP_TEST_T1',JOB_TYPE =& 'STORED_PROCEDURE',JOB_ACTION =& 'SP_TEST_T1',START_DATE =& TO_DATE(' 15:30:00','YYYY-MM-DD HH24:MI:SS') ,REPEAT_INTERVAL =& 'FREQ=DAILY');
这个创建过程而言,其实和DBMS_JOB
的差别不大,但DBMS_SCHEDULER
可配置的地方就太多了。执行时间间隔非常非常灵活,这里不做详述了,具体请看ORACLE
官方文档。
DBMS_SCHEDULER
针对每一次JOB
执行,都做了详细记录,因此,可以查询到每一次JOB
执行的时间了。
具体可以查看两类视图*_SCHEDULER_JOB_LOG
和*_SCHEDULER_JOB_RUN_DETAILS
SELECT * FROM DBA_SCHEDULER_JOB_LOG;
SELECT * FROM DBA_SCHEDULER_JOB_RUN_DETAILS;
如果嫌日志太多了,可以使用PURGE_LOG
EXECUTE DBMS_SCHEDULER.PURGE_LOG;
这个DBMS_SCHEDULER
包的功能太多了,用起来也累,所以很多人还是选择DBMS_JOB
看到关于这两个包的不同点的介绍,摘录下来,留着参考。
原始链接:
At first glance it looks like only other names with more human readable schedules fordbms_scheduler
, compared to dbms_job
. When looking slightly better, there are loads of differences, even in Oracle 10gR1. Currently we are in 11gR2. Every release dbms_scheduler
gets more enhancements, where dbms_job
has been static for many years.
Differences
dbms_scheduler has logging
dbms_scheduler has external jobs
dbms_scheduler has job chains
dbms_scheduler has job event handling (can raise and react upon events)
dbms_scheduler has resource manager
integration
dbms_scheduler has human readable calendar syntax
dbms_scheduler can combine different calendars in a new one
In 11g extra
dbms_scheduler has remote external jobs
dbms_scheduler has light weight jobs - generate many low overhead jobs in one tx
dbms_scheduler can send mail on job completion
dbms_scheduler jobs can have multiple targets
dbms_job can only run pl/sql type of jobs in the current database.
I hope this (in complete list) h
浏览: 844682 次
来自: 南京
浏览量:268152
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
挺好的,支持一下
不错,原来是用户oracle 的所属组的问题
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'如何察看用户的 oracle job的运行日志_百度知道
如何察看用户的 oracle job的运行日志
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
做真实的自己 用良心做教育
千锋教育专注HTML5前端、Java开发、Python全栈、UI设计、物联网嵌入式、区块链、大数据、人工智能、软件测试、PHP、云计算、信息安全、Unity游戏开发、红帽RHCE认证培训服务
察看用户的 oracle job的运行日志语句为:select&*&from&user_scheduler_job_log&where&job_name&=&&#39;NIFM_FILE_PRO_OTFCACTION71122&#39;&order&by&log_id&select&*&from&user_scheduler_job_run_details&where&log_id&=&;
time陌言成殇
来自电脑网络类芝麻团
time陌言成殇
采纳数:11325
获赞数:73356
参与团队:
您好,很高兴为您解答。select * from user_scheduler_job_log where job_name = &#39;NIFM_FILE_PRO_OTFCACTION71122&#39; order by log_select * from user_scheduler_job_run_details where log_id = 1512482;select job,what,failures,broken from user_jobs
job id,job 名称,失败次数,状态 所有的job:select ju.name username, j.obj#, jo.name, j.failure_count fromsys.obj$ jo, sys.user$ ju, sys.obj$ co, sys.scheduler$_job jwhere j.obj# = jo.obj# AND jo.owner# = ju.user# AND j.class_oid = co.obj#(+) 在运行的job:SELECT SID,JOB FROM DBA_JOBS_RUNNING; 如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
本回答被提问者和网友采纳
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。& & & & &#25552;&#20379;&#19987;&#19994;&#30340;ORACLE [RAC]&#25968;&#25454;&#24211;&#21450;GoldenGate&#20135;&#21697;&#23433;&#35013;&#21319;&#32423;&#12289;&#24615;&#33021;&#35843;&#20248;&#12289;&#25925;&#38556;&#35786;&#26029;&#12289;&#36828;&#31243;&#25903;&#25345;&#31561;&#26381;&#21153;, &#32852;&#31995;QQ: WeiXin:zhang_weizhao
2,216 views
How to change a DBMS job owned by another user as user sys?
怎么样用sys删除本库中其他用户比如anbob建立的DBMS_JOB呢?默认在sys下dbms_job.remove其它人的JOB是不允许的
要想删除这个JOB目前在10G版本中有4种方法:
在以下中比如创建job的用户是anbob
1,找到anbob密码,用anbob 登录,删除job
2, 如果不知道anbob密码,那可以通过临时修改anbob密码,删除后再恢复原密码。这个方法我会在随后新起一篇单独说
3,用就是使用dbms_sys_sql包中的procedure,以anbob的身份执行
4, 当然也是最简单的,调用dbms_ijob包中的remove
第1不再演示,第3,4会在以下演示,希望对你有所帮助,第2请看下一篇
SQL> conn anbob/anbob
Connected.
SQL> create procedure test
Procedure created.
SQL> DECLARE
SYS.DBMS_JOB.SUBMIT
=> &#8216;ANBOB.TEST;&#8217;
,next_date => to_date(&#-:13&#8242;,&#8217;dd/mm/yyyy hh24:mi:ss&#8217;)
=> &#8216;TRUNC(SYSDATE+1)&#8217;
SYS.DBMS_OUTPUT.PUT_LINE(&#8216;Job Number is: &#8216; || to_char(x));
Job Number is: 314
PL/SQL procedure successfully completed.
SQL> col what for a30
SQL> select job ,SCHEMA_USER,what,broken from user_
JOB SCHEMA_USER
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8211;
ANBOB.TEST;
SQL> conn / as sysdba
Connected.
SQL> exec dbms_job.remove(314);
BEGIN dbms_job.remove(314); END;
ERROR at line 1:
ORA-23421: job number 314 is not a job in the job queue
ORA-06512: at &#8220;SYS.DBMS_SYS_ERROR&#8221;, line 86
ORA-06512: at &#8220;SYS.DBMS_IJOB&#8221;, line 529
ORA-06512: at &#8220;SYS.DBMS_JOB&#8221;, line 174
ORA-06512: at line 1
SQL> exec dbms_ijob.remove(314);
PL/SQL procedure successfully completed
SQL> conn anbob/anbob
Connected.
SQL> select job ,SCHEMA_USER,what,broken from user_
no rows selected
因为DBMS_IJOB我查了官方文档没有找到对它的介绍,ijob 中的i我认为是internal,应该是一个未公开的内部用法,如果除了这个方法还有没有其它方法呢?当然是肯定的,既然都这么问了
看我下面的例子
anbob@ANBOB> create procedure test is
Procedure created.
anbob@ANBOB> DECLARE
SYS.DBMS_JOB.SUBMIT
=> &#8216;ANBOB.TEST;&#8217;
,next_date => to_date(&#-:13&#8242;,&#8217;dd/mm/yyyy hh24:mi:ss&#8217;)
=> &#8216;TRUNC(SYSDATE+1)&#8217;
SYS.DBMS_OUTPUT.PUT_LINE(&#8216;Job Number is: &#8216; || to_char(x));
Job Number is: 21
PL/SQL procedure successfully completed.
anbob@ANBOB> conn / as sysdba
Connected.
sys@ANBOB> exec dbms_job.remove(21);
BEGIN dbms_job.remove(21); END;
ERROR at line 1:
ORA-23421: job number 21 is not a job in the job queue
ORA-06512: at &#8220;SYS.DBMS_SYS_ERROR&#8221;, line 86
ORA-06512: at &#8220;SYS.DBMS_IJOB&#8221;, line 529
ORA-06512: at &#8220;SYS.DBMS_JOB&#8221;, line 171
ORA-06512: at line 1
sys@ANBOB> l
sqlstr varchar2(1000):=&#8217;begin dbms_job.remove(21);&#8217;;
select user_id into userid from all_users where username=&#8217;ANBOB&#8217;;
curid:=DBMS_SYS_SQL.open_cursor();
dbms_sys_sql.parse_as_user(curid,sqlstr,dbms_sql.native,userid);
returnid:=dbms_sys_sql.execute(curid);
dbms_sys_sql.close_cursor(curid);
sys@ANBOB> /
PL/SQL procedure successfully completed.
sys@ANBOB> conn anbob/anbob
Connected.
anbob@ANBOB> select * from user_
no rows selected
sys@ANBOB> l
sqlstr varchar2(1000):=&#8217;begin dbms_job.remove(21);&#8217;;
select user_id into userid from all_users where username=&#8217;ANBOB&#8217;;
curid:=DBMS_SYS_SQL.open_cursor();
dbms_sys_sql.parse_as_user(curid,sqlstr,dbms_sql.native,userid);
returnid:=dbms_sys_sql.execute(curid);
dbms_sys_sql.close_cursor(curid);
sys@ANBOB> /
PL/SQL procedure successfully completed.
sys@ANBOB> conn anbob/anbob
Connected.
anbob@ANBOB> select * from user_
no rows selected
微信扫一扫,打赏作者吧~
I&#8217;ve been surfing online more than three hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. Personally, if all site owners and bloggers made good content as you did, the internet will be a lot more useful than ever before.
MySql Link
ORACLE Link
Others Link
微信公众号

我要回帖

更多关于 oracle数据库基本语句 的文章

 

随机推荐