oracle-故障-程序包调用报ORA-06508

简介:

程序包调用报ORA-06508: PL/SQL: 无法找到正在调用的程序单元

背景:

开发人员修改一个包里一个过程,修改成功,并重新编译成功,在程序日志发现调用这个包报错ORA-06508: PL/SQL: 无法找到正在调用的程序单元

-----会话1

CREATE OR REPLACE PACKAGE SimplePkg AS  
   v_GlobalVar1 NUMBER := 1;  
   PROCEDURE UpdateVar;   
END SimplePkg;  
/
CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
   PROCEDURE UpdateVar IS  
   vv number;
   xx number;
   BEGIN  
      v_GlobalVar1 := 7;   
   END UpdateVar;  
END SimplePkg;  
/

set line 300
col object_name for a30
 alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT owner, object_type, object_name, status,created,last_ddl_time
     FROM all_objects
    WHERE 
       object_name in (SELECT name FROM dba_dependencies WHERE OWNER = 'TEST' AND referenced_name='SIMPLEPKG' )
       --AND status = 'INVALID'
     ORDER BY OWNER;


OWNER                          OBJECT_TYPE         OBJECT_NAME                    STATUS  CREATED             LAST_DDL_TIME
------------------------------ ------------------- ------------------------------ ------- ------------------- -------------------
TEST                             PACKAGE BODY        SIMPLEPKG                      VALID   2022-03-01 18:33:21 2022-03-01 18:33:21
TEST                             PACKAGE             SIMPLEPKG                      VALID   2022-03-01 18:33:16 2022-03-01 18:33:16

-----会话2

BEGIN   
   simplePkg.UpdateVar;   
END;  /

-----会话1

CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
   PROCEDURE UpdateVar IS  
   vv number;
   xx number;
   yy  number;
   BEGIN  
      v_GlobalVar1 := 7;   
   END UpdateVar;  
END SimplePkg;  
/


set line 300
col object_name for a30
 alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT owner, object_type, object_name, status,created,last_ddl_time
     FROM all_objects
    WHERE 
       object_name in (SELECT name FROM dba_dependencies WHERE OWNER = 'TEST' AND referenced_name='SIMPLEPKG' )
       --AND status = 'INVALID'
     ORDER BY OWNER;



OWNER                          OBJECT_TYPE         OBJECT_NAME                    STATUS  CREATED             LAST_DDL_TIME
------------------------------ ------------------- ------------------------------ ------- ------------------- -------------------
TEST                             PACKAGE BODY        SIMPLEPKG                      VALID   2022-03-01 18:33:21 2022-03-01 18:39:29
TEST                             PACKAGE             SIMPLEPKG                      VALID   2022-03-01 18:33:16 2022-03-01 18:33:16

-----会话2

SQL>  BEGIN   
   simplePkg.UpdateVar;   
END; 
    /
 BEGIN
*
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "TEST.SIMPLEPKG" has been invalidated
ORA-04065: not executed, altered or dropped package body "TEST.SIMPLEPKG"
ORA-06508: PL/SQL: could not find program unit being called: "TEST.SIMPLEPKG"
ORA-06512: at line 2

原因:

出现这种情况的原因是因为,对于全局变量,每一个session会生成一个本地copy,如果程序重新编译的话,就会因程序里原变量找不到而丢弃该变量,继而导致这个错误。
也就是说在一个会话中调用程序包package时,会生成package中全局变量的副本,如果在另一个会话中对此package进行编译就会使前一个会话中的副本失效,故而产生错误。

处理:

要想避免这个错误,可以使程序捕获ORA-06508:的错误进行处理,也可以重新初始化会话

目录
相关文章
|
5月前
|
运维 Oracle 关系型数据库
服务器数据恢复-raid5故障导致上层oracle数据库故障的数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统+ext3文件系统,服务器上层部署有oracle数据库。 服务器故障&检测: raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法挂载,oracle数据库无法正常使用。 通过管理后台查看服务器中硬盘的状态,显示有两块硬盘处于离线状态。
|
11月前
|
Oracle 关系型数据库 Linux
使用rpm包在Linux上安装Oracle软件和创建数据库
在Linux上安装Oracle软件的过程相当复杂,让很多初学者望而却步。但在Oracle 18c以后Oracle推出了使用rpm包安装Oracle数据库软件的安装方式,安装两个(预安装包和数据库安装包)rpm包即可完成整个Oracle数据库软件的安装。
270 0
使用rpm包在Linux上安装Oracle软件和创建数据库
|
12月前
|
存储
Oracle-AWR管理包DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
Oracle-AWR管理包DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
62 0
|
12月前
|
存储 Oracle 关系型数据库
Oracle优化07-分析及动态采样-DBMS_STATS 包
Oracle优化07-分析及动态采样-DBMS_STATS 包
87 0
Oracle优化07-分析及动态采样-DBMS_STATS 包
|
Oracle 安全 关系型数据库
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 下
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 下
194 0
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务   下
|
SQL Oracle 关系型数据库
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 上
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务 上
405 0
ORACLE 11g【安装流程】及部门问题解决,ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务   上
|
Java Maven
解决maven无法下载oracle.jar包的问题
解决maven无法下载oracle.jar包的问题
182 0
解决maven无法下载oracle.jar包的问题
|
Oracle 关系型数据库
oracle学习28-ora-00064和程序异常终止
oracle学习28-ora-00064和程序异常终止
120 0
oracle学习28-ora-00064和程序异常终止
|
Oracle 关系型数据库
oracle学习33-无监听程序
oracle学习33-无监听程序
95 0
oracle学习33-无监听程序