`
sjk2013
  • 浏览: 2166851 次
文章分类
社区版块
存档分类
最新评论

Oracle 存储过程 无法编译 解决方法

 
阅读更多

昨天整理了一下shutdown过程中db hang住的问题,参考:

Oracleshutdown 过程中 DBhang住 解决方法

http://blog.csdn.net/tianlesoftware/article/details/7407587

今天同事修改存储过程又导致2个过程无法被编译,流程规范上的东西,Dave 这里不多说,看看怎么解决问题。

1.查看无效对象

XEZF@xezf(qs-xezf-db1)> select object_name,object_type,status from all_objects where status='INVALID' and owner='XEZF';

OBJECT_NAME OBJECT_TYPE STATUS

------------------------------------------------- -------

PROC_OB_TO_XEZF PROCEDURE INVALID

PROC_JOB_OB_WRITE PROCEDURE INVALID

以上是2个不能编译的过程,我们查看使用这2个过程的session:

2.查看正在访问无效对象的session

这里我们使用 v$access 视图:

V$ACCESSdisplaysinformation about locks that are currently imposed on library cache objects.The locks are imposed to ensure that they are not aged out of the library cachewhile they are required for SQL execution.

XEZF@xezf(qs-xezf-db1)> Select * from v$access where object='PROC_OB_TO_XEZF';

SID OWNER OBJECT TYPE

---------- -------------------------------- ------------------------

958 XEZFPROC_OB_TO_XEZF PROCEDURE

XEZF@xezf(qs-xezf-db1)> Select * from v$access where object='PROC_JOB_OB_WRITE';

SID OWNER OBJECT TYPE

---------- -------------------------------- ------------------------

958 XEZFPROC_JOB_OB_WRITE PROCEDURE

从以上查询结果,是958的session 在使用。

3.查看session 状态:

XEZF@xezf(qs-xezf-db1)> select sid,serial#,status,process from v$session where sid='958';

SID SERIAL# STATUS PROCESS

---------- ---------- -------- ------------

958 8350 KILLED 24007

从以上结果看,这个session 已经被标记为killed状态了。 被标记为killed 的进程由PMON 进程kill,但是这个也是有条件的:

PMON will notdelete the session object itself until the client connected to that sessionnotices that it has been killed.

如果session 被标记为killed,并且长时间不能被清楚,MOS上给出的解决方法是在OS级别kill 进程。 这个问题会另篇Blog 进行说明。

4.获取session 对应的SPID

XEZF@xezf(qs-xezf-db1)> select spid,osuser, s.program

2 from v$session s,v$process p

3 where s.paddr=p.addr and s.sid=958;

--指定sessionSID

SPIDOSUSERPROGRAM

------------ ------------------------------------------------------------------

24007oracleoracle@qs-xezf-db1 (J004)

在Linux 平台下,我们就可以直接kill 这个进程了:

#kill -9 24007

5.Kill 进程

如果等PMON来清理这个进程可能需要很长时间,所以这里我们手工的kill 进程。 在OS级别进行操作:

[oracle@qs-xezf-db1 ~]$ ps -ef|grep 24007

oracle10031 9299 0 17:39 pts/2 00:00:00 grep 24007

oracle24007 1 0 Mar29 ? 00:00:01 ora_j004_xezf

[oracle@qs-xezf-db1 ~]$ kill -9 24007

[oracle@qs-xezf-db1 ~]$ ps -ef|grep 24007

oracle10361 9299 0 17:54 pts/2 00:00:00 grep 24007

进程已经被kill掉了。

验证session

XEZF@xezf(qs-xezf-db1)> select sid,serial#,status,process from v$session where sid='958';

SID SERIAL# STATUS PROCESS

---------- ---------- -------- ------------

958 8357 INACTIVE 1234

在次就可以成功编译无效的过程了。

XEZF@xezf(qs-xezf-db1)>select object_name,object_type,status from all_objects where status='INVALID' and owner='XEZF';

no rows selected

问题解决。

-------------------------------------------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Skype: tianlesoftware

Email: tianlesoftware@gmail.com

Blog: http://www.tianlesoftware.com

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满); DBA2 群:62697977(满)DBA3 群:62697850(满)

DBA 超级群:63306533(满); DBA4 群:83829929 DBA5群: 142216823

DBA6 群:158654907 DBA7 群:172855474 DBA总群:104207940

分享到:
评论

相关推荐

    shell脚本编译Oracle存储过程

    linux系统中使用shell脚本对oracle存储过程进行编译

    oracle存储过程编译

    oracle存储过程编译

    解决存储过程被锁无法编译的问题

    解决存储过程被锁无法编译的问题解决存储过程被锁无法编译的问题解决存储过程被锁无法编译的问题解决存储过程被锁无法编译的问题

    oracle数据库存储过程反编译和异常使用的检测方法.pdf

    oracle数据库存储过程反编译和异常使用的检测方法.pdf

    oracle 事务 回滚 存储过程

    oracle 事务 回滚 存储过程 自用

    oracle存储过程编译错误问题

    NULL 博文链接:https://forlab.iteye.com/blog/1821751

    Oracle数据库存储过程技术文档.doc

    第一章 oracle存储过程概述 2 1.1 存储过程基本结构(PROCEDURE) 3 1.1.1创建存储过程 3 1.1.2 存储过程删除 5 1.1.3 调用存储过程 5 1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包...

    Oracle存储过程测试总结.ppt

    Oracle存储过程测试总结.ppt

    oracle存储过程--数字大写变小写

    oracle存储过程--数字大写变小写,使用存储过程将数字的大写转成小写,在程序中可以直接调用

    oracle存储过程应用实例

    Oracle 允许将PL/ SQL 语言编写的存储过程作为数据库对象存储在数据库中,存储过程通过语法分析,将第一 次执行编译的SQL 语句存储在高速缓冲存储器中,下次使用只需从高速缓冲区中调用已编译的代码,加速了SQL 语句的执...

    带排序的oracle分页存储过程

    几乎每一个WEB应用都会用到分页,因此,将其做得通用高效就变得非常重要了,根据自己的想法用存储过程做了一个分页的存储过程,与大家分享,希望能够通过讨论得到更好的解决方案。 --之所以用存储过程,是因为以后...

    关于oracle存储过程的基本语法

    在oracle中,数据表别名不能加as;在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就...在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错

    存储过程编译卡死处理.txt

    此文档中的内容针对的是oracle在编译存储过程时出现卡死现象的解决办法。这种现象主要是存储过程正在被调用。

    oracle 编译存储过程 赋权 查询用户占用空间

    NULL 博文链接:https://daywbdb.iteye.com/blog/1418336

    oracle 视图,函数,过程,触发器自动编译脚本

    日常管理维护一个oracle数据库服务器的时,经常会碰到修改view,table结构的情况,而且由于oracle view,函数,存储过程等对象的相互关联的关系,经常会由于一个view,table,fun,proc的修改而导致相关的对象失效。...

    ORACLE存储过程

     Oracle存储过程开发的要点是:  ? 使用Notepad文本编辑器,用Oracle PL/SQL编程语言写一个存储过程;  ? 在Oracle数据库中创建一个存储过程;  ? 在Oracle数据库中使用SQL*Plus工具运行存储过程;  ? 在...

    oracle反编译工具

    此工具用来解密已加密的Oracle存储过程,函数等对象。经试验可用性强。

    自学oracle存储过程

    Oracle 存储过程调用 Java 方法.....................................................................................................16 Oracle 高效分页存储过程实例...........................................

    Spring boot调用Oracle存储过程的两种方式及完整代码

    主要给大家介绍了关于Spring boot调用Oracle存储过程的两种方式及完整代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    asp.net中调用oracle存储过程的方法

    一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它,下面给大家介绍下asp.net中调用oracle存储过程的方法,需要的朋友可以...

Global site tag (gtag.js) - Google Analytics