Oracle 19C-尝试授予DBMS_LOCK执行权限时出错

问题描述

将一些脚本从18更新到19,但是得到了

还尝试了DBMS_LOCK而不是SYS.DBMS_LOCK

sql> GRANT EXECUTE ON SYS.DBMS_LOCK to myuser;
GRANT EXECUTE ON SYS.DBMS_LOCK to myuser
                     *
ERROR at line 1:
ORA-04042: procedure,function,package,or package body does not exist

sqlplus“ sys / ChangeMe123!AS SYSDBA”

注意-其他赠款有效

sql>向我的用户授予ALTER SESSION;

授予成功。

sql>向myuser授予创建过程;

授予成功。

sql>向myuser授予创建序列;

授予成功。

sql>将创建的会话授予myuser;

授予成功。

sql>向myuser授予材料创建的材料视图;

授予成功。

sql>将创建表授予myuser;

授予成功。

sql>向我的用户授予触发器;

授予成功。

sql>将创建的视图授予myuser;

授予成功。

sql>授予对myuser的任何同步信息;

授予成功。

sql>将任何SYNONYM授予我的用户

授予成功。

sql>允许选择myuser的所有字典;

授予成功。

sql>将GRMS EXECUTE ON DBMS_LOCK授予myuser; 将DBMS_LOCK授予我的用户执行权限

解决方法

DBMS_LOCK.SLEEP已被DBMS_SESSION.SLEEP取代,但为了向后兼容,在19c中仍然可用。验证对象是否存在

SQL> select object_name,object_type,owner from dba_objects
  2  where object_name='DBMS_LOCK';

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

如果以上查询未返回任何内容,请以创建以上软件包的 sysdba 的身份运行dbmslock脚本

sql>@?/rdbms/admin/dbmslock