签到成功

知道了

CNDBA社区CNDBA社区

Oracle 19c存储过程失败

2021-10-15 11:11 1237 0 原创 oracle
作者: hbhe0316

对于存储过程编译失败问题

http://www.cndba.cn/hbhe0316/article/4932

1.查看无效对象http://www.cndba.cn/hbhe0316/article/4932

SQL > select object_name,object_type,status from all_objects where status='INVALID' and owner='HBHE';
OBJECT_NAME                    OBJECT_TYPE         STATUS
------------------------------------------------- -------
PROC_TS_TO_XFTG                PROCEDURE           INVALID
PROC_TS_TO_WRITE              PROCEDURE           INVALID

2.查看正在访问无效对象session,查询结果,是1001的session 在使用。

SQL > Select * from v$access where object='PROC_TS_TO_XFTG';
      SID OWNER        OBJECT               TYPE
---------- -------------------------------- ------------------------
      1001 HBHE        PROC_TS_TO_XFTG      PROCEDURE

SQL > Select * from v$access where object='PROC_TS_TO_WRITE';

      SID OWNER        OBJECT               TYPE
---------- -------------------------------- ------------------------
      1001 HBHE        PROC_TS_TO_WRITE    PROCEDURE

3.查看session 状态:http://www.cndba.cn/hbhe0316/article/4932http://www.cndba.cn/hbhe0316/article/4932

http://www.cndba.cn/hbhe0316/article/4932

SQL > select sid,serial#,status,process from v$session where sid='1001';
      SID    SERIAL# STATUS   PROCESS

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

      1001       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.http://www.cndba.cn/hbhe0316/article/4932

如果session 被标记为killed,并且长时间不能被清除,只能在OS级别kill 进程

http://www.cndba.cn/hbhe0316/article/4932

4.获取session 对应的SPIDhttp://www.cndba.cn/hbhe0316/article/4932

SQL > select spid,osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=1001;
--指定session的SID

SPID        OSUSER                        PROGRAM

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

25555       oracle                        oracle@qs-HBHE-db1 (J004)

5.Kill 进程

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

[oracle@node01 ~]$ ps -ef|grep 25555
oracle  10031  9299  0 17:39 pts/2    00:00:00 grep 25555
oracle  25555     1  0 Mar29 ?        00:00:01 ora_j004_HBHE
[oracle@node01 ~]$ kill -9 25555
[oracle@node01 ~]$ ps -ef|grep 25555
oracle  10361  9299  0 17:54 pts/2    00:00:00 grep 25555

进程已经被kill掉了。http://www.cndba.cn/hbhe0316/article/4932

6.验证session:

http://www.cndba.cn/hbhe0316/article/4932

SQL > select sid,serial#,status,process from v$session where sid='1001';
      SID    SERIAL# STATUS   PROCESS

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

      1001       8357 INACTIVE 1234

7.在次就可以成功编译无效的过程

SQL >select object_name,object_type,status from all_objects where status='INVALID' and owner='HBHE';

no rows selected

版权声明:本文为博主原创文章,未经博主允许不得转载。

oracle,linux

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
hbhe0316

hbhe0316

关注

1.只有承认无知,才能装下新的东西; 2.进步来自一点点滴滴的积累; 3.广博让你更优秀,而专业让你无法替代; 4.挫折和失败能够转换为一种财富。

  • 889
    原创
  • 1
    翻译
  • 13
    转载
  • 24
    评论
  • 访问:1140617次
  • 积分:1523
  • 等级:核心会员
  • 排名:第6名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ