ORA-04063: package body "DBSNMP.BSLN" has errors

ORA-04063: package body "DBSNMP.BSLN" has errors

问题描述:

警告日志出现报错:

Sun Jun 28 00:00:01 2020
Errors in file /u01/app/oracle/diag/rdbms/zbqdb/zbqdbi2/trace/zbqdbi2_j000_8274.trc:
ORA-12012: error on auto execute of job "SYS"."BSLN_MAINTAIN_STATS_JOB"
ORA-04063: package body "DBSNMP.BSLN" has errors
ORA-06508: PL/SQL: could not find program unit being called: "DBSNMP.BSLN"
ORA-06512: at "DBSNMP.BSLN_INTERNAL", line 2073
ORA-06512: at line 1

问题类似我之前不久的一片博文里边描述的问题,ORA-04063: package body "DBSNMP.BSLN_INTERNAL" has errors

虽然不再搜索到同样的官方处理方式,不过其实根因是一样的。

问题原因:

1.BSLN包体对象处于无效状态。

select owner,object_name,object_type,status from dba_objects where owner='DBSNMP' and object_name='BSLN';

OWNER      OBJECT_NAME                    OBJECT_TYPE                                               STATUS
---------- ------------------------------ --------------------------------------------------------- ----------
DBSNMP     BSLN                           PACKAGE                                                   VALID
DBSNMP     BSLN                           PACKAGE BODY                                              INVALID

处理过程

08:26:15 sys@xxxxxxi1(xxxxxx1)> alter package DBSNMP.BSLN compile body;

Warning: Package Body altered with compilation errors.

Elapsed: 00:00:00.10
08:27:36 sys@xxxxxxi1(xxxxxx1)> show error
Errors for PACKAGE BODY DBSNMP.BSLN:

LINE/COL ERROR
-------- -----------------------------------------------------------------
88/5     PL/SQL: Statement ignored
88/19    PLS-00201: identifier 'DBMS_OBFUSCATION_TOOLKIT' must be declared
200/7    PL/SQL: Statement ignored
200/21   PLS-00201: identifier 'DBMS_OBFUSCATION_TOOLKIT' must be declared
241/7    PL/SQL: Statement ignored
242/8    PLS-00201: identifier 'DBMS_OBFUSCATION_TOOLKIT' must be declared
1332/7   PL/SQL: Statement ignored
1332/21  PLS-00201: identifier 'DBMS_OBFUSCATION_TOOLKIT' must be declared

08:39:51 sys@xxxxxx(xxxxxx2)> select * from dba_sys_privs where grantee='DBSNMP';

GRANTEE      PRIVILEGE                                          ADM
------------ -------------------------------------------------- ---
DBSNMP       CREATE PROCEDURE                                   NO
DBSNMP       UNLIMITED TABLESPACE                               NO
DBSNMP       SELECT ANY DICTIONARY                              NO
DBSNMP       CREATE TABLE                                       NO

Elapsed: 00:00:00.00
08:39:52 sys@xxxxxx(xxxxxx2)> select * from dba_role_privs  where grantee='DBSNMP';

GRANTEE      GRANTED_ROLE                   ADM DEF
------------ ------------------------------ --- ---
DBSNMP       OEM_MONITOR                    NO  YES

Elapsed: 00:00:00.02
08:40:05 sys@xxxxxx(xxxxxx2)> select * from dba_tab_privs  where grantee='DBSNMP';

GRANTEE      OWNER      TABLE_NAME                          GRANTOR      PRIVILEGE                                          GRA HIE
------------ ---------- ----------------------------------- ------------ -------------------------------------------------- --- ---
DBSNMP       SYS        DBMS_SERVER_ALERT                   SYS          EXECUTE                                            NO  NO
DBSNMP       SYS        DBMS_JOB                            SYS          EXECUTE                                            NO  NO
DBSNMP       SYS        DBMS_MANAGEMENT_PACKS               SYS          EXECUTE                                            NO  NO
DBSNMP       APPQOSSYS  WLM_CLASSIFIER_PLAN                 APPQOSSYS    SELECT                                             NO  NO
DBSNMP       APPQOSSYS  WLM_METRICS_STREAM                  APPQOSSYS    SELECT                                             NO  NO
DBSNMP       APPQOSSYS  WLM_MPA_STREAM                      APPQOSSYS    SELECT                                             NO  NO
DBSNMP       APPQOSSYS  WLM_VIOLATION_STREAM                APPQOSSYS    SELECT                                             NO  NO

7 rows selected.

Elapsed: 00:00:00.05
08:40:15 sys@xxxxxx(xxxxxx2)> select * from dba_tab_privs  where grantee='OEM_MONITOR';

GRANTEE      OWNER      TABLE_NAME                          GRANTOR      PRIVILEGE                                          GRA HIE
------------ ---------- ----------------------------------- ------------ -------------------------------------------------- --- ---
OEM_MONITOR  SYS        ALERT_QUE                           SYS          DEQUEUE                                            NO  NO
OEM_MONITOR  SYS        DBMS_SYSTEM                         SYS          EXECUTE                                            NO  NO
OEM_MONITOR  SYS        DBMS_SERVER_ALERT                   SYS          EXECUTE                                            NO  NO
OEM_MONITOR  SYS        DBMS_MONITOR                        SYS          EXECUTE                                            NO  NO
OEM_MONITOR  SYS        DBMS_AQ                             SYS          EXECUTE                                            NO  NO
OEM_MONITOR  SYS        DBMS_AQADM                          SYS          EXECUTE                                            NO  NO
OEM_MONITOR  SYS        DBMS_WORKLOAD_REPOSITORY            SYS          EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN                                DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_BASELINES                      DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     BSLN_INTERNAL                       DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_METRIC_DEFAULTS                DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     BSLN_METRIC_SET                     DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_METRIC_T                       DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_OBSERVATION_SET                DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_OBSERVATION_T                  DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_STATISTICS                     DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     BSLN_STATISTICS_SET                 DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_STATISTICS_T                   DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_THRESHOLD_PARAMS               DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     BSLN_TIMEGROUPS                     DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     BSLN_VARIANCE_SET                   DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     BSLN_VARIANCE_T                     DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     MGMT_BASELINE                       DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BASELINE_SQL                   DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BSLN_BASELINES                 DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BSLN_DATASOURCES               DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BSLN_INTERVALS                 DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BSLN_METRICS                   DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BSLN_STATISTICS                DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_BSLN_THRESHOLD_PARMS           DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_HISTORY                        DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_HISTORY_SQL                    DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_LATEST                         DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_LATEST_SQL                     DBSNMP       SELECT                                             NO  NO
OEM_MONITOR  DBSNMP     MGMT_RESPONSE                       DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  DBSNMP     MGMT_UPDATE_DB_FEATURE_LOG          DBSNMP       EXECUTE                                            NO  NO
OEM_MONITOR  SYS        DBMS_DRS                            SYS          EXECUTE                                            NO  NO

37 rows selected.

Elapsed: 00:00:00.04


08:43:46 sys@xxxxxx(xxxxxx2)> select owner,object_name,object_type from dba_objects where object_name='DBMS_OBFUSCATION_TOOLKIT';

OWNER      OBJECT_NAME                    OBJECT_TYPE
---------- ------------------------------ -------------------
SYS        DBMS_OBFUSCATION_TOOLKIT       PACKAGE BODY
SYS        DBMS_OBFUSCATION_TOOLKIT       PACKAGE
PUBLIC     DBMS_OBFUSCATION_TOOLKIT       SYNONYM

Elapsed: 00:00:00.00
08:43:52 sys@xxxxxx(xxxxxx2)> grant execute on sys.DBMS_OBFUSCATION_TOOLKIT to DBSNMP;

Grant succeeded.

Elapsed: 00:00:00.02
08:44:19 sys@xxxxxx(xxxxxx2)> alter package DBSNMP.BSLN compile body;

Package body altered.

Elapsed: 00:00:00.23
08:44:42 sys@xxxxxx(xxxxxx2)> select * from dba_tab_privs where table_name='DBMS_OBFUSCATION_TOOLKIT';

GRANTEE      OWNER      TABLE_NAME                          GRANTOR      PRIVILEGE            GRA HIE
------------ ---------- ----------------------------------- ------------ -------------------- --- ---
DBSNMP       SYS        DBMS_OBFUSCATION_TOOLKIT            SYS          EXECUTE              NO  NO

深入分析

根据此次问题和上次的问题,原本以为出于安全原因,删除了某些包上的public特权是Oracle随着版本的自身的行为。

但是其实不是这样,此次版本为11.2.0.4.0。在发生问题的生产环境上,某些包确实没有了public的特权。

扫描二维码关注公众号,回复: 11380034 查看本文章

但是我看了其他同样是11.2.0.4.0的环境,确发现这些权限还在。

那么原因只有两个:

  1. 建库之后,由于企业的生产规范要求,按照Oracle安全白皮书中的建议撤消了某些包的公开的执行特权。
  2. 可能是建库的时候存在一些特殊的配置。

第一个的可能性更大一些。因为Oracle确实有mos文档建议撤销一些包的public权限。

比如:ecurity Checklist: 10 Basic Steps to Make Your Database Secure from Attacks (Doc ID 1545816.1)中

猜你喜欢

转载自www.cnblogs.com/PiscesCanon/p/13201275.html