1

ビューには現在ログインしているユーザーのV$SESSIONリストが含まれていますが、それらはログ テーブルなどのどこかに保存されていますか?

pl/sql でログインした昨日のユーザーのリストを取得する必要があります (たとえば)。

4

1 に答える 1

4

デフォルトでは、Oracle はそのような情報を保存しません。いくつかのオプションがあります。

  • システム イベント (この場合は longon\logoff) の監査を有効にします。
  • その情報を収集するためのシステム イベント (ロングオン後、ログオフ前) トリガーを記述します。

以下に例を示します。

SQL> show parameter audit_trail

NAME                                 TYPE        VALUE                          
------------------------------------ ----------- ------------------------------ 
audit_trail                          string      DB, EXTENDED       

SQL> select sessionid
  2       , userid
  3       , decode(action#, 100, 'logon', 101, 'logoff') 
  4    from sys.aud$ 
  5    where action# in (100, 101);

no rows selected

SQL> audit connect;

Audit succeeded.

SQL> conn hr/hr
Connected.
SQL> select sessionid
  2       , userid
  3       , decode(action#, 100, 'logon', 101, 'logoff')
  4    from sys.aud$
  5   where action# in (100, 101);

 SESSIONID USERID                         DECODE                                
---------- ------------------------------ ------                                
   1000712 HR                             logon                                 

SQL> conn hr/hr
Connected.
SQL> select sessionid
  2       , userid
  3       , decode(action#, 100, 'logon', 101, 'logoff')
  4   from sys.aud$
  5  where action# in (100, 101);

 SESSIONID USERID                         DECODE                                
---------- ------------------------------ ------                                
   1000712 HR                             logon                                 
   1000712 HR                             logoff                                
   1000713 HR                             logon   

トリガーを使用した例:

SQL> create table Logon_history(
  2    sessionid  number,
  3    userid     varchar2(31),
  4    logon_date timestamp,
  5    logoff_date timestamp
  6  )
  7  ;

Table created


 SQL> create or replace trigger TR_LOGON_STAT after logon
  2  on database
  3  begin
  4    insert into Logon_history(Sessionid, Userid, Logon_Date, Logoff_Date)
  5      values(sys_context('userenv', 'sessionid'), user, systimestamp, null);
  6  end;
  7  /

Trigger created

SQL> create or replace trigger TR_LOGOFF_STAT before logoff
  2  on database
  3  begin
  4    insert into Logon_history(Sessionid, Userid, Logon_Date, Logoff_Date)
  5      values(sys_context('userenv', 'sessionid'), user, null,systimestamp);
  6  end;
  7  /

Trigger created

 SQL> select sessionid
  2       , userid
  3       , logon_date
  4       , logoff_date
  5  from Logon_history
  6  ;

  no rows selected

 SQL> conn hr/hr
 Connected.

 SQL> select sessionid
  2       , userid
  3       , logon_date
  4       , logoff_date
  5  from Logon_history
  6  ;

Sessionid   Userid   Logon_Date                       Logoff_Date 
-------------------------------------------------------------------------------- 
 2490674    HR       01-NOV-12 11.46.23.421000 PM   
 2490672    HR                                     01-NOV-12 11.46.23.343000 PM 
于 2012-11-01T14:16:10.190 に答える