使用者被鎖定不影響JOB的執行

yangtingkun發表於2009-08-26

今天在維護使用者的帳號狀態的時候碰到這個問題。和同事討論這個問題的時候,我認為即使使用者的帳號被鎖定,JOB也可以執行。

 

 

用一個建立例子來說明這個問題:

SQL> conn / as sysdba
Connected.
SQL> create user u_test identified by u_test default tablespace ndmain;

User created.

SQL> grant connect, resource to u_test;

Grant succeeded.

SQL> conn u_test/u_test
Connected.
SQL> create table t (time date);

Table created.

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> declare
  2  v_job number;
  3  begin
  4  dbms_job.submit(v_job, 'begin insert into t values (sysdate); end;', to_date('2009-8-26 11:0:0'));
  5  commit;
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL> col what format a45
SQL> select job, what, next_date from user_jobs;

       JOB WHAT                                          NEXT_DATE
---------- --------------------------------------------- -------------------
        50 begin insert into t values (sysdate); end;    2009-08-26 11:00:00

SQL> select sysdate from dual;

SYSDATE
-------------------
2009-08-26 10:44:22

建立一個U_TEST使用者,授權必要的許可權,然後建立一張測試表,並設定一個JOB,在11點的時候向測試表中插入系統時間。

現在的時間是1044分,下面鎖住U_TEST使用者:

SQL> conn / as sysdba
Connected.
SQL> alter user u_test account lock;

User altered.

SQL> select username, account_status
  2  from dba_users
  3  where username = 'U_TEST';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
U_TEST                         LOCKED

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
2009-08-26 10:45:59

SQL> select * from u_test.t;

no rows selected

鎖定使用者後,目前的時間是1046分左右,U_TEST使用者下的T表還沒有記錄,等待一段時間後:

SQL> select sysdate from dual;

SYSDATE
-------------------
2009-08-26 10:59:18

SQL> select sysdate from dual;

SYSDATE
-------------------
2009-08-26 11:00:50

SQL> select * from u_test.t;

TIME
-------------------
2009-08-26 11:00:01

SQL> select username, account_status, lock_date
  2  from dba_users
  3  where username = 'U_TEST';

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE
------------------------------ -------------------------------- -------------------
U_TEST                         LOCKED                           2009-08-26 10:44:52

可以看到,在11點的時候JOB執行,向測試表中插入了JOB執行時的系統時間。而檢查U_TEST使用者可以發現,從1044分起,這個使用者一直處於鎖定狀態。

這說明JOB的執行和使用者是否被鎖定無關,因為JOB的執行並不需要登陸操作。以前碰到過的一個問題從另一方面說明了這一點:JOB自動執行出錯,但手工執行正常——淺談jobdatabase link的一個特點:http://yangtingkun.itpub.net/post/468/7984

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-613331/,如需轉載,請註明出處,否則將追究法律責任。

相關文章