Bir paket içindeki fonksiyon yada prosedürlerin anlık olarak kullanım durumunun tespiti
Bir paket içindeki fonksiyon yada prosedürlerin anlık olarak kullanım durumunun tespiti için who_is_using fonksiyonunu kullanabiliriz.
Bir paketi derlemek istediğimizde eğer o paket içindeki fonksiyon yada prosedürler kullanımda ise , maalesef paket derlenememektedir. Bu yüzden paket içerisindeki nesnelerin kullanım durumunu tespit edip , kullanılmamasını sağlayıp, sonrasında paketi derleyebiliriz.
who_is_using fonksiyonunun SYS şemasında oluşturulması gerekmektedir. Aşağıdaki linkten who_is_using.plb dosyasını indirip , SYS ile bağlanıp çalıştırın.
http://www.veritabani.gen.tr/who_is_using.plb
-bash-4.3$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Wed Mar 8 13:36:21 2017 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> @/home/oracle/who_is_using.plb Procedure created. SQL>
Fonksiyonun oluşturulmasında sonra aşağıdaki gibi kullanabilirsiniz. Aşağıdaki örnekte içinde dbms geçenler sorgulanmıştır. select cümlesindeki like kullanımı ile aynı şekilde sorgulama yapılabilir.
SQL> exec who_is_using('%dbms%'); (1-1719) - SYS (4-1719) - ADURUOZ PL/SQL procedure successfully completed.
Çıktıdaki sayılar gv$session tablosundaki INSTANCE_ID ve SID kolonlarına denk gelmektedir. Yukarıdaki çıktıda 1 : INSTANCE_ID , 1719 : SID değeridir. Bu değerler ile gv$session sorgulanarak ilgili oturum hakkında detaylı bilgi elde edilebilir.