ORACLE 11G 觸發器調試記錄Error: PLS-00201: identifier'SYS.DBMS_SYSTEM' must be declared,oracle11g

來源:互聯網
上載者:User

ORACLE 11G 觸發器調試記錄Error: PLS-00201: identifier'SYS.DBMS_SYSTEM' must be declared,oracle11g

 

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);

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

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.