Geçtiğimiz günlerde OTN’de bir soru ve cevabı dikkatimi çekti. Soru;”V$ACCESS görünümü kullanarak kilitli objelerin tespit edilmesi” ile ilgiliydi ve cevap veren gurulardan birisinin cevabı V$ACCESS görünümü ile kilitli objelerin görülemeyeceği şeklindeydi. V$ACCESS görünümünü daha önceden bende kilit tutan objelerin tespitinde kullanılır diye bildiğimden, bu cevap hakkında kafamda kuşkular oluştu. Aslında V$LOCKED_OBJECTS gibi bir görünüm daha fazla kilit hakkında bilgi tuttuğu için benimde tercihim olmasına rağmen, bu cevap ile ilgili bugün test ortamında bir deneme yaptım ve sonucunu bu yazı ile paylaşıyorum.
Oracle dökümanlarında V$ACCESS hakkında bulduğum bir paragraf;
"V$ACCESS görünümü, library cache üzerinde mevcut durumda uygulamaya girmiş kilitler hakkında bilgi vermektedir."
V$ACCESS görünümü oturumlar tarafından belirli instance için library cache seviyesinde hangi objelerin erişim erişim yaptığı ve kilit tuttuğu ile ilgili bilgi vermektedir. Bu görünüm kilit tutulup tutulmadığı ile ilgili bilgi içermez. Aşağıdaki örnekte test1 ve scott adlı 2 farklı oturumdan işlemler yapacağım ve V$ACCESS görünümü bilgilerini alacağım.
V$ACCESS görünümü oturumlar tarafından belirli instance için library cache seviyesinde hangi objelerin erişim erişim yaptığı ve kilit tuttuğu ile ilgili bilgi vermektedir. Bu görünüm kilit tutulup tutulmadığı ile ilgili bilgi içermez. Aşağıdaki örnekte test1 ve scott adlı 2 farklı oturumdan işlemler yapacağım ve V$ACCESS görünümü bilgilerini alacağım.
1. oturum:
SQL> conn test1/Pa$$word1 as sysdba
SQL> conn test1/Pa$$word1 as sysdba
SQL> select owner,type,count(*)
2 from v$access
3 where owner='SCOTT'
4 group by owner,type;
no rows selected
2. oturum:
SQL> conn scott/tiger
SQL> desc emp
Name Null? Type
----------- -------- --------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> select * from emp where rownum < 2;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ------ ----- ----- --------- ------ ------ ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
1. oturum:
SQL> select owner,type,count(*)
2 from v$access
3 where owner='SCOTT'
4 group by owner,type;
OWNER TYPE COUNT(*)
-------- ------- ---------
SCOTT TABLE 1
Yukardaki obje şuan 2. oturumun yaptığı işlem sonunda library cache içerisine yüklenmiştir.
Yukardaki obje şuan 2. oturumun yaptığı işlem sonunda library cache içerisine yüklenmiştir.
SQL> grant all on emp to public;
Grant succeeded.
SQL> update emp
2 set sal=sal+1000
3 where empno=7369;
1 row updated.
Yukardaki UPDATE işlemi sonunda henüz COMMIT işlemi yapmıyorum.
3. oturum:
$ sqlplus / as sysdba
$ sqlplus / as sysdba
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> update scott.emp set sal=sal-100 where empno=7369;
Yukarda 3. oturum sonunda 1. oturumdan neler olduğuna bir bakalım.
Yukarda 3. oturum sonunda 1. oturumdan neler olduğuna bir bakalım.
SQL> select * from v$access where object='EMP';
SID OWNER OBJECT TYPE
--- ------- -------- --------
25 SCOTT EMP TABLE
24 SCOTT EMP TABLE
Yukardaki örnekte görüldüğü üzere, V$ACCESS görünümü üzerinden hangi oturumun library cache içinden hangi objeye o anda erişim yaptığı bilgisi alınmaktadır. 25 ve 24 SID numaralı oturumların her ikiside aynı objedeki satırı değiştirmektedir, ancak hangisinin bekleyen, hangisinin bloklayan olduğu hakkında bir bilgi yoktur. Bu andaeğer V$LOCKED_OBJECTS görünümüne bakarsanız daha detaylı bilgiyi bulabilirsiniz.
Yukardaki örnekte görüldüğü üzere, V$ACCESS görünümü üzerinden hangi oturumun library cache içinden hangi objeye o anda erişim yaptığı bilgisi alınmaktadır. 25 ve 24 SID numaralı oturumların her ikiside aynı objedeki satırı değiştirmektedir, ancak hangisinin bekleyen, hangisinin bloklayan olduğu hakkında bir bilgi yoktur. Bu anda
0 yorum:
Yorum Gönder