oracle数据库基本语句如何授权user管理sys的job

为正常使用来必力评论功能请激活JavaScript博客分类:
Oracle作业job 没有自动调度起来
问题:有一同事报过来,说有两个job已经近一周没有自动调起了,让我帮忙解决。
1、检查:
(1)在生产库中检查,其他的job都能自动调度
(2)select * from all_jobs where job in(); 检查正常,并无异常 (dba_jobs或PL/SQL Developer DBMS_Jobs 也可查看)
(3)select * from dba_jobs_running where job in();& 在其列表中
结论:进程挂死未完成,导致不能自动调度!
2、解决:先备份两job的内容再将job删除,然后将进程杀掉,并重建
(1)利用上面查出job运行列表中的sid 如 3695,并查出哪些进程需要杀掉,查询语句如下:
select 'call superkill('||a.sid||','||a.SERIAL#||');' KILL_SID,
&&&&&& 'kill -9 '||A.PROCESS||';'KILL_PID,A.SID,A.SERIAL#,A.STATUS,&& A.SCHEMANAME,A.USERNAME,A.MACHINE,OSUSER,A.PROCESS,A.PROGRAM,A.TERMINAL,
&&&&&& A.SERVICE_NAME,A.LOGON_TIME, A.OWNERID,
&&&&&& D.SQL_TEXT,D.SQL_FULLTEXT
from gv$session a, v$sql d
where a.SQL_ADDRESS=d.ADDRESS(+)
and (a.SCHEMANAME = 'REPORT' or a.USERNAME= 'REPORT')
and a.sid=3695
order by a.MACHINE;
杀进程:
(1)上面的superkill如下:
create or replace procedure system.superkill(SESSION_ID BINARY_INTEGER,SERIAL_NUM
BINARY_INTEGER) is
begin
&& execute immediate 'alter system disconnect session '''||SESSION_ID||','||SERIAL_NUM||'''
immediate' ;
EXCEPTION
&& WHEN OTHERS
&& THEN
&&&&& RAISE;
(2)也可直接 alter system kill session 'sid,serial#';
上面两个原理都差不多。
(3)重建job
如job:2706 的重建:
begin
& sys.dbms_job.isubmit(job =& 2706,
&&&&&&&&&&&&&&&&&&&&& what =& 'declare
vc_out varchar2(2000);
begin
SP_SAP_NEWINCOME_ALL(to_char(SYSDATE-1,''yyyymmdd''),to_char(SYSDATE-1,''yyyymmdd''));
pkg_dic_day_report_2011.Dic_day_all_report_2011(to_char(SYSDATE-1,''yyyymmdd''));
pkg_dic_day_report_2010.DiC_Day_Move_Busi(vc_out,to_char(SYSDATE-1,''yyyymmdd''));
pkg_dic_day_report_2010.DiC_Pst_YW(vc_out,to_char(SYSDATE-1,''yyyymmdd''));
',
&&&&&&&&&&&&&&&&&&&&& next_date =& trunc(SYSDATE)+1+17/24,
&&&&&&&&&&&&&&&&&&&&& interval =& 'trunc(SYSDATE)+1+17/24');
&
第二天检查两job都已正常自动调度。
浏览: 10873 次
来自: 苏州
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'相关文章推荐:
ORACLE 9I Job不会自动执行只能手动执行
今天写了一个oracle定时,发现无法运行。
  第一步写存储过程代码:
  create or replace procedure prc_update_tgyhxx as
  insert into 团购优惠信息(集团编号) select s.集团编号 from 团购优惠信息2 s where s.集团编号 not in(select 集团编号 from 团购优惠信息);
  update 团购优惠信息 set(上月用户数,本月新增数,月末用户数,调整折扣,用户手机号码)=(select
ac.用户数1 上月用户数,ac.净增数 本月...
阅读(1637) 回复(0)
其他文章推荐
oracle 8中只需要在Init**.ora中增加:
job_queue_process=1
job_queue_interval=10
oracle 9i中,相同的job执行不能启动job
在Init.ora中增加:
job_queue_process=1
job_queue_interval=10
重新启动数据库
登陆错误:
ora-12514,监听进程不能解析再连接描述符中的Server_name
job_queue_process=1
job_queue_interval=10
如何配置job的启动?
阅读(974) 回复(1)
我的 trace file 如下,不知该怎么解决了。。。
我在 sqlplus 里 exec ctx_ddl......... 是 OK 的
/opt/oracle/product/9.2.0/admin/gIndex/udump/gindex_ora_11981.trc
oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
oracle_HOME = /opt/oracle/product/9.2.0
System name:
Node name:
阅读(2339) 回复(3)
创建存储过程:P_PASSENGERCAR_RPT
修改init.ora:job_queue_processes=10
创建job:
SYS.DBMS_job.SUBMIT
=>; 'P_PASSENGERCAR_RPT;'
,next_date =>; to_date('22/11/:00','dd/mm/yyyy hh24:mi:ss')
=>; 'trunc(sysdate)+1/24'
alter system enabl ...
阅读(1145) 回复(0)
oracle8i和9i的job有什么不同?
阅读(953) 回复(1)
我在oracle中建立了一个数据库,命名为DB。建立了两个用户,UserA(表空间TablespaceA),UserB(表空间TablespaceB),两个用户都拥有DBA权限。
现在我想使用job,定时将TablespaceB.test表中的数据导入到TablespaceA.test。
但是job建立后无法运行。我直接使用Sql语句能够执行。
请诸位大虾帮我定位一下问题原因,谢谢。
sys.dbms_job.submit(job => :job,
what => 'insert into TablespaceA....
阅读(1791) 回复(2)
如何查看oracle中当前正在执行的job
Toad中的Schema Browser中的job的状态Place Online和Place Offline应该怎么理解
阅读(4866) 回复(2)
15分钟改为如下格式后正常:trunc(sysdate+15/1440,'MI')
阅读(733) 回复(0)
用job去执行存储过程,没有返回结果,把这个存储过程直接放到sqlplus里执行就有效果,这是什么原因啊。
阅读(5944) 回复(6)
   本文通过一次oracle job任务异常案例诊断,分析其原因及解决过程,从内部揭示oracle job任务调度及内部计时机制。
   问题及环境
   接到研发人员报告,数据库定时任务未正常执行,导致某些操作失败。
   开始介入处理该事故.
   系统环境:
以下为引用的内容:
SunOS DB 5.8 Generic_ sun4u sparc SUNW,Ultra-4
oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
   解决过程
阅读(875) 回复(0)
察看历史记录,发现系统提示信息为“拒绝给非 SysAdmin 授予运行 CmdExec 作业步骤的权限.
步骤失败”
在此之前,所有的job都正常运行,出现这种状态后。确定不是权限问题,因为我重新启动SQL Service,job又可正常运行,各位是否有遇到过同类问题,
我想知道是什么原因造成job不能执行,出现“拒绝给非 SysAdmin 授予运行 CmdExec 作业步骤的权限.
步骤失败”的误导信息。
阅读(3272) 回复(0)
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题求助 sys.job$ 问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区
后使用快捷导航没有帐号?
查看: 3643|回复: 7
求助 sys.job$ 问题
论坛徽章:1
数据库报这样的错误,请问如何解决?
下面是报错日志:
ksedmp: internal or fatal error
Current SQL statement for this session:
update sys.job$ set failures=0, this_date=null, flag=:1, last_date=:2,&&next_date = greatest(:3, sysdate),&&total=total+(sysdate-nvl(this_date,sysdate)) where job=:4
----- Call Stack Trace -----
calling& && && && &&&call& &&&entry& && && && && & argument values in hex& && &
location& && && && & type& &&&point& && && && && & (? means dubious value)& &&&
-------------------- -------- -------------------- ----------------------------
_ksedmp+524& && && & CALLrel&&_ksedst+0& && && && &0
_kdiknf.78+407& && & CALLrel&&_ksedmp+0& && && && &3 33F28A0 F5E83C7 800 3412B00
& && && && && && && && && && && && && && && && && &DE24604 F 12B14 2 F
& && && && && && && && && && && && && && && && && &3412B2C F5E5D3C 33F28A0
& && && && && && && && && && && && && && && && && & 5D2
__VInfreq__kdimod0+&&CALLrel&&_kdiknf.78+0& && && &1 F5E5E24 F5E839C 2 CB
11732& && && && && && && && && && && && && && && &
_kauupd+4514& && && &CALLrel&&_kdimod0+0& && && &&&1EE839C 0 0 2 FF 1 0
& && && && && && && && && && && && && && && && && &0 0 0 0
_updrow+1771& && && &CALLrel&&_kauupd+0& && && && &B3DEAC8 1EDF764 0
& && && && && && && && && && && && && && && && && &262FD8BC 8 C9 286B8BF4 C
& && && && && && && && && && && && && && && && && &F5ED320 F5ED324
__PGOSF72__qerupRow&&CALLrel&&_updrow+0& && && && &
Procedure+76& && && && && && && && && && && && && &
_qerupFetch+572& && &CALLreg&&& && && && & 286B8E84 7FFF
_updaul+2512& && && &CALL???&&& && && && & 286B8E84 0 286B8F0C 7FFF
_updThreePhaseExe+1&&CALLrel&&_updaul+0& && && && &18DD8CB8 F5ED8F0 0
88& && && && && && && && && && && && && && && && &
_updexe+335& && && & CALLrel&&_updThreePhaseExe+0&&18DD8CB8 0 B3DF764 F5ED9D0
& && && && && && && && && && && && && && && && && &18DD8CB8 1 F5ED9D0 0
_opiexe+4809& && && &CALLrel&&_updexe+0& && && && &18DD8CB8 F5EDCAC
_opiodr+977& && && & CALLreg&&& && && && & 4 4 F5EE7F8
_rpidrus.66+150& && &CALLrel&&_opiodr+0& && && && &4 4 F5EE7F8 9
_rpidru+88& && && &&&CALLrel&&_rpidrus.66+0& && &&&F5EE3BC
_rpiswu2+368& && && &CALLreg&&& && && && & F5EE6F4
_rpidrv+298& && && & CALLrel&&_rpiswu2+0& && && &&&
_rpiexe+70& && && &&&CALLrel&&_rpidrv+0& && && && &9 4 F5EE7F8 8
_kkjex1e+4023& && &&&CALLrel&&_rpiexe+0& && && && &9 355B389C 4 0 147AE14 55 0 0
& && && && && && && && && && && && && && && && && &10 63 0 0
_kkjsexe+293& && && &CALLrel&&_kkjex1e+0& && && &&&F5EEC3C 6A 1 F5EEC10
_kkjrdp+720& && && & CALLrel&&_kkjsexe+0& && && &&&
_opirip+681& && && & CALLrel&&_kkjrdp+0& && && && &
_opidrv+517& && && & CALLrel&&_opirip+0& && && && &32 0 0
_sou2o+45& && && && &CALLrel&&_opidrv+0& && && && &32 0 0
_opimai+314& && && & CALLrel&&_sou2o+0& && && && & F5EFE2C 32 0 0
_BackgroundThreadSt&&CALLrel&&_opimai+0& && && && &
art@4+314& && && && && && && && && && && && && && &
77E1A98D& && && && & CALLreg&&
论坛徽章:1
认证徽章论坛徽章:71
看看数据库中目前执行的Job .
论坛徽章:1
目前执行的作业有两个 总是出问题,无法删除,也无法停止 ,总是报这样的错误:
ORA-00604: error occurred at recursive SQL level 1
ORA-08102: index key not found, obj# 203, file 1, block 1490 (2)
ORA-12012: error on auto execute of job 106
ORA-08102: index key not found, obj# 203, file 1, block 1490 (2)
有什么办法吗?
论坛徽章:136
回复 #4 avaya2008 的帖子
先找出哪个对象,一般把索引重建一下就好了
论坛徽章:1
谢谢 我试一下
论坛徽章:136
删除了,重新创建,这个索引可能是oracle自带的,可以从sql.bsq里查看创建索引的脚本
论坛徽章:1
sql.bsq 这个脚本我看过过了 也没有看出什么啊 就是在那个表上创建索引
2018中国系统架构师大会7.8折倒计时10天
日~19日,由IT168旗下ITPUB企业社区平台主办的第十届中国系统架构师大会(SACC2018)将在北京隆重召开。
本届大会采用了“3+2”模式:3天传统技术大会演讲+2天深度主题培训。多角度出发,为参会者提供更多案例,全面且深入的向企业提供完整的技术解决方案。
现在购票享受7.8折优惠!
----------------------------------------
优惠时间:日前
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号ORACLE JOB以及如何停止一个正在运行的JOB  熟化说万事开头难,这里我只简单记述一个创建一个简单的job  步骤如下:  1、创建一张表g_test  create table G_TEST  (  ID NUMBER(12),  C_DATE DATE  )  2、创建一个sequence  create sequence G_SEQ  minvalue 1  maxvalue 999  start with 141  increment by 1  cache 20;  3、创建一个存储过程  create or replace procedure prc_g_test is  begin  insert into g_test values(g_seq.nextval,sysdate);  end prc_g_  4、创建job,  使用Submit()过程,工作被正常地计划好。  这个过程有五个参数:job、what、next_date、interval与no_parse.  PROCEDURE Submit ( job OUT binary_ineger,  What IN varchar2,  next_date IN date,  interval IN varchar2,  no_parse IN booean:=FALSE)  job参数是由Submit()过程返回的binary_ineger.这个值用来唯一标识一个工作。  what参数是将被执行的PL/SQL代码块。  next_date参数指识何时将运行这个工作。  interval参数何时这个工作将被重执行。  no_parse参数指示此工作在提交时或执行时是否应进行语法分析--TRUE  指示此PL/SQL代码在它第一次执行时应进行语法分析,  而FALSE指示本PL/SQL代码应立即进行语法分析。  在command window窗口中执行下面脚本  variable job1  begin  sys.dbms_job.submit(job =& :job,  what =& 'prc_g_',  next_date =& to_date('22-10-:41', 'dd-mm-yyyy hh24:mi:ss'),  interval =& 'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次      /  ----------------------------------------------------------------------------------  在plSQL中我的做法是,默认创建好自动执行:  declare    begin  sys.dbms_job.submit(job,'prc_g_',sysdate,'sysdate+1/1440');    ----------------------------------------------------------------------------------  5、查看创建的job  查看相关job信息  1、相关视图  dba_jobs  all_jobs  user_jobs  dba_jobs_running 包含正在运行job相关信息。  如:  select * from dba_jobs  6、运行JOB  说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:  SQL& begin  2 dbms_job.run(:job);  3  4 /  ----------------------------------------------------------------------------------  在plSQL中我的做法是:  begin  dbms_job.run(3017);    ----------------------------------------------------------------------------------  7、删除JOB  SQL& begin  2 dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198  3
&iframe id="cproIframe_u" width="336" height="280" src="http://pos.baidu.com/acom?adn=3&at=134&aurl=&cad=0&ccd=24&cec=GBK&cfv=13&ch=0&col=zh-CN&conOP=0&cpa=1&dai=3&dis=0&layout_filter=rank%2Ctabcloud&ltr=http%3A%2F%2Fwww.dedecms.com%2Fknowledge%2Fdata-base%2Foracle%2F2%2F23478.html&ltu=http%3A%2F%2Fwww.dedecms.com%2Fknowledge%2Fdata-base%2Foracle%2F2%2F23478_2.html&lunum=6&n=_cpr&pcs=&pis=&ps=526x1081&psr=&pss=&qn=1a41d4ac812a93c9&rad=&rsi0=336&rsi1=280&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000FF&rss3=%&rss4=%&rss5=&rss6=%23e10900&rss7=%23ffffff&scale=&skin=&td_id=1284777&tn=text_default_336_280&tpr=8&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u1284777&ti=ORACLE%20JOB%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E5%81%9C%E6%AD%A2%E4%B8%80%E4%B8%AA%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84JOB(2)_%E7%BB%87%E6%A2%A6CMS&tt=5.130.236.236" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true"&&/iframe&
4 /  =====================如何停止一个正在运行的JOB===================
  1 相关表、视图
  dba_jobs
  all_jobs
  user_jobs 包含登录用户所有的JOB信息
  dba_jobs_running 包含正在运行job相关信息
  须使用oracle的sys用户登录到数据库,才能查看dba_jobs_running, v$process, v$session表的信息。同时,登录操作系统时,要用oracle用户。
  2 问题描述
  为同事解决一个因为网络连接情况不佳时,执行一个超长时间的SQL插入操作。
  既然网络状况不好,就选择了使用一次性使用JOB来完成该插入操作。在JOB执行一段时间后,我发现被插入表有些问题(惭愧,当时也没有先检查检查就做了)。准备停止JOB,因为在JOB运行情况下,我的所有修改都会报系统资源忙的错误。
  强行KILL SESSION是行不通的,因为过会儿,JOB还会重新启动,如果执行的SQL也被KILL了通过重新启动的JOB还是会被再次新执行的。
  3 解决办法
  比较好的方法应该是;
  1. 首先确定要停止的JOB号
  在10g中可通过Dba_Jobs_Running进行确认。
  查找正在运行的JOB:
  select sid from dba_jobs_
  查找到正在运行的JOB的spid:
  select a.spid from v$process a ,v$session b where a.addr=b.paddr and b.sid in (select sid from dba_jobs_running);
  2. Broken你确认的JOB
  注意使用DBMS_JOB包来标识你的JOB为BROKEN.
  SQL& EXEC DBMS_JOB.BROKEN(job#,TRUE);
  注意:当执行完该命令你选择的这个JOB还是在运行着的。
  3. Kill 对应的Oracle Session
  应为BROKEN后该JOB还在运行,如果要求该JOB立刻停止,就需要找到该job的对应SESSION(SID,SERIAL#),然后执行以下命令:
  ALTER SYSTEM KILL SESSION 'sid,serial#';
  或者直接KILL对应的操作系统的SESSION,如果使用ALTER SYSTEM KILL SESSION执行很长时间,其实可以使用OS的命令来快速KILL掉SESSION.
  For Windows, at the DOS Prompt: orakill sid spid
  For UNIX at the command line& kill –9 spid
  4. 检查你的JOB是否还在运行
  检查你要停止的JOB是否还在运行,其实多数情况下,应该都已经停止了。尤其执行的第三步的"杀手"命令。如果真的还是没有停止,只好从第一道第三步重新做一下了。
  5. 将Job Queue Processes的数目修改为0
  首先确认当前的Job Queue Processes的数目
  SQL& col value for a10
  SQL& select name,value from v$parameter where name ='job_queue_processes';
  然后将Job Queue Processes的数目修改为0
  SQL& ALTER SYSTEM SET job_queue_processes = 0;
  保证所有的JOB都会停止。
  6. 修改你要修改的任何东西,甚至是JOB内的内容。
  7. 修改完成后,将job的BROKEN状态停止。
  SQL&EXEC DBMS_JOB.BROKEN(job#,FALSE):
  8. 恢复job_queue_processes的原始值
  ALTER SYSTEM SET job_queue_processes = original_
  至此整个停止并修改JOB完成。
  但是需要另外注意一下的是,在MARK一个BROKEN状态的时候,因为JOB内部执行SQL的原因,所以执行时或许要"煎熬"一段时间。所以 在建立JOB时一定要仔细考虑,同时如果可能可以在你设计的PL/SQL代码中,增加一些判断"停止信号"的部分。来避免费力执行上面的步骤。
  毕竟,ORACLE在执行JOB时,还是很"倔强"的 -:)
  4 附件:ORAKILL用法
  很多时候遇到某个session一直处于active,使得CPU一直处于搞使用状态,虽然kill 了,但是却不能够使得使得线程结束。 kill session只是kill这个进程,但是线程一直处于活动状态。需要真正的kill线程才能够解决cpu使用率高的问题。
  os :windows2003
  ORAKILL用法是 orakill sid spid 其中sid为实例名,spid为线程号。
  怎么样取得这个spid呢?
  以下给出查找spid的语句。
  select spid, osuser, s.program from v$process p, v$session s
  where p.addr=s.paddr and s.sid = XXX;
  --说明:XXX为session的sid (不是数据库SID 呵呵)。自己输入就可以。
  orakill instance_name spid
  这样就能够成功解决cpu使用率高的问题
PL/SQL Developer创建Job的步骤
ORACLE DBA_JOBS_RUNNING,DBA_JOBS/USER_JOBS/ALL_JOBS 字段解释
Oracle中job的实例
oracle创建job并执行job
oracle job的建立及执行
没有更多推荐了,

我要回帖

更多关于 oracle修改sys密码 的文章

 

随机推荐