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:的错误进行处理,也可以重新初始化会话

目录
相关文章
|
25天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
4月前
|
Oracle 关系型数据库 数据库
关系型数据库Oracle 故障转移能力
【7月更文挑战第10天】
60 2
|
6月前
|
Oracle Java 关系型数据库
实时计算 Flink版产品使用合集之在同步Oracle数据时,需要下载并添加到项目中的jar包主要包括哪些
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
存储 SQL Oracle
Oracle程序全局区:数据王国的“魔术舞台”
【4月更文挑战第19天】Oracle的程序全局区(PGA)是每个进程或会话的内存区域,存储会话信息、排序、哈希等数据结构。它确保会话独立性,提升执行效率,优化资源利用。PGA中的会话信息、排序区、哈希区等组件协同工作,支持复杂查询和操作,如同魔术舞台,展现数据处理的高效与魅力。
|
6月前
|
运维 Oracle 关系型数据库
服务器数据恢复-raid5故障导致上层oracle数据库故障的数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统+ext3文件系统,服务器上层部署有oracle数据库。 服务器故障&检测: raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法挂载,oracle数据库无法正常使用。 通过管理后台查看服务器中硬盘的状态,显示有两块硬盘处于离线状态。
|
存储 Oracle 算法
数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
ORACLE数据库常见故障: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。
|
Oracle 关系型数据库 Linux
使用rpm包在Linux上安装Oracle软件和创建数据库
在Linux上安装Oracle软件的过程相当复杂,让很多初学者望而却步。但在Oracle 18c以后Oracle推出了使用rpm包安装Oracle数据库软件的安装方式,安装两个(预安装包和数据库安装包)rpm包即可完成整个Oracle数据库软件的安装。
352 0
使用rpm包在Linux上安装Oracle软件和创建数据库
|
存储 Oracle 关系型数据库
Oracle优化07-分析及动态采样-DBMS_STATS 包
Oracle优化07-分析及动态采样-DBMS_STATS 包
134 0
Oracle优化07-分析及动态采样-DBMS_STATS 包
|
Oracle 关系型数据库 网络安全
连接Oracle数据库失败(ORA-12514)故障排除
ORA-12514的故障是很多新手在连接Oracle数据库时经常遇到故障,它通常表示无法连接到数据库实例,这里姚远老师告诉大家如何排除这类故障。
9479 0