v$access 與 v$locked_object 的區別

在開發過程中,很多時候都會遇到鎖表,我們都還去查看v$locked_object這張表,但是另外一張表v$access這張表有的時候也會使用到,下看一下這兩張表的定義:
V$LOCKED_OBJECT lists all locks acquired by every transaction on the system. It show which sessins are holding DML locks (that is, TM-type enqueues) on what objects and in what mode.

V$ACCESS displays information about locks that are currently imposed on library cache objects. The locks are imposed to ensure that they are not aged out of the library cache while they are required for SQL execution.
簡單點說,只要存在在LC中,通過表v$access就能夠查看到使用到的表,存儲過程以及cursor。但是V$LOCKED_OBJECT只能查看到相關的表。此外,當語句執行完之後,就會消失,但是V$LOCKED_OBJECT必須提交或者rollback之後纔會消失。
SESSION1:
SQL> set serveroutput on
SQL> select sid from v$mystat where rownum=1;
       SID
----------
        44
SQL> begin
  2    for i in 1..10 loop
  3    insert into sn_qudao.TMP_LIUHC_2 values(i);
  4    dbms_output.put_line(i);
  5    DBMS_LOCK.SLEEP(10);
  6  end loop;
  7  end;
  8  /
1                                                                              
2                                                                              
3                                                                              
4                                                                              
5                                                                              
6                                                                              
7                                                                              
8                                                                              
9                                                                              
10                                                                             
PL/SQL 過程已成功完成。
2. 當該session不執行其他語句時,在其他session會查看任然存在在v$access表中,當該session執行其他語句時,v$access表中就會消失。
SESSION2:
SQL> select sid from v$mystat where rownum=1;
       SID
----------
         6
SQL> select * from v$access where object='TMP_LIUHC_2';       SID OWNER                 OBJECT                    TYPE
---------- ------------- --------------------------- ------------------------
        44 SN_QUDAO             TMP_LIUHC_2                TABLE
SQL> SELECT * FROM V$LOCKED_OBJECT;
    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME             OS_USER_NAME           PROCESS      LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ------------------------ ----------------------- ------------ -----------
        10          8      35775      77745         44 SN_QUDAO                    Administrator          3240:4880              3
SESSION1:
SQL> select sid from v$mystat where rownum=1;
       SID
----------
        44
SESSION2:
SQL> select sid from v$mystat where rownum=1;
       SID
----------
         6
SQL> select * from v$access where object='TMP_LIUHC_2';
 
       SID OWNER           OBJECT         TYPE
---------- ---------- -------------- -------------
 
SQL> SELECT * FROM V$LOCKED_OBJECT;
 
    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME                   PROCESS      LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------ -----------
        10          8      35775      77745         44 SN_QUDAO                       Administrator                  3240:4880              3

3. 當執行session commit之後,在V$LOCKED_OBJECT中也不會找到。

SESSION1:
SQL> select sid from v$mystat where rownum=1;

       SID
----------
        44
SQL> commit;
SQL> SELECT * FROM V$LOCKED_OBJECT;
 
    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME                   PROCESS      LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------ ----

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章