ORACLE 11G 触发器调试记录Error: PLS-00201: identifier'SYS.DBMS_SYSTEM' must be declared

1,触发器内容如下

CREATE OR REPLACE TRIGGER"LOGON_DENIED_TO_ALERT"

 AFTER servererror ON DATABASE

DECLARE

 message   VARCHAR2(168);

 ip        VARCHAR2(15);

 v_os_user VARCHAR2(80);

 v_module  VARCHAR2(50);

 v_action  VARCHAR2(50);

 v_pid     VARCHAR2(10);

 v_sid     NUMBER;

 v_program VARCHAR2(48);

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

BEGIN

  IF(ora_is_servererror(1017)) THEN

   -- get ip FOR remote connections :

   IF upper(sys_context('userenv', 'network_protocol')) = 'TCP' THEN

     ip := sys_context('userenv', 'ip_address');

   END IF;

   SELECT sid INTO v_sid FROM sys.v_$mystat WHERE rownum < 2;

   SELECT p.spid, v.program

     INTO v_pid, v_program

     FROM v$process p, v$session v

    WHERE p.addr = v.paddr

      AND v.sid = v_sid;

   v_os_user := sys_context('userenv', 'os_user');

   dbms_application_info.read_module(v_module, v_action);

   message := to_char(SYSDATE, 'YYYYMMDD HH24MISS') ||

               ' logon denied from ' || nvl(ip,'localhost') || ' ' ||

               v_pid || ' ' || v_os_user || 'with ' || v_program || ' – ' ||

               v_module || ' ' || v_action;

   sys.dbms_system.ksdwrt(2, message);

  ENDIF;

END;

 ----------------------------------------------------------------------------------------------------------------
<版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!>
原博客地址:    http://blog.csdn.net/mchdba/article/details/45898169
原作者:黄杉 (mchdba)
----------------------------------------------------------------------------------------------------------------

2,执行报错信息:

Compilation errors for TRIGGERTIMDBA.LOGON_DENIED_TO_ALERT

Error: PL/SQL: ORA-00942: table or viewdoes not exist

Line: 20

Text: SELECT sid INTO v_sid FROMsys.v_$mystat WHERE rownum < 2;

Error: PL/SQL: SQL Statement ignored

Line: 20

Text: SELECT sid INTO v_sid FROMsys.v_$mystat WHERE rownum < 2;

Error: PL/SQL: ORA-00942: table or viewdoes not exist

Line: 23

Text: FROM v$process p, v$session v

Error: PL/SQL: SQL Statement ignored

Line: 21

Text: SELECT p.spid, v.program

Error: PLS-00201: identifier'SYS.DBMS_SYSTEM' must be declared

Line: 35

Text: sys.dbms_system.ksdwrt(2, message);

Error: PL/SQL: Statement ignored

Line: 35

Text: sys.dbms_system.ksdwrt(2, message);

解决办法

grant execute on sys.dbms_system to timdba;

3,再次执行还在报错:

Compilation errors for TRIGGER TIMDBA.LOGON_DENIED_TO_ALERT

Error: PL/SQL: ORA-00942: table or viewdoes not exist

Line: 20

Text: SELECT sid INTO v_sid FROMsys.v_$mystat WHERE rownum < 2;

Error: PL/SQL: SQL Statement ignored

Line: 20

Text: SELECT sid INTO v_sid FROMsys.v_$mystat WHERE rownum < 2;

Error: PL/SQL: ORA-00942: table or viewdoes not exist

Line: 23

Text: FROM v$process p, v$session v

Error: PL/SQL: SQL Statement ignored

Line: 21

Text: SELECT p.spid, v.program

解决办法:

grant select on sys.v_$mystat to timdba;

4,再次调试报错信息3

Compilation errors for TRIGGERTIMDBA.LOGON_DENIED_TO_ALERT

Error: PL/SQL: ORA-00942: table or viewdoes not exist

Line: 23

Text: FROM v$process p, v$session v

Error: PL/SQL: SQL Statement ignored

Line: 21

Text: SELECT p.spid, v.program

解决办法:

grant select on sys.v_$process to timdba;

grant select on sys.v_$session to timdba;

参考文章地址:https://blogs.oracle.com/mandalika/entry/resolving_pls_00201_identifier_dbms

猜你喜欢

转载自blog.csdn.net/csdnhsh/article/details/94229733