天天看點

linux中檢視oracle程序在做什麼,是否sql引起了鎖 kill掉程序

ps -l 檢視系統程序

    PID 每個程序的ID。

  PPID 每個程序的父程序ID。

  UID 每個程序所有者的UID 。

  USER 每個程序所有者的使用者名。

  PRI 每個程序的優先級别。

  NI 該程序的優先級值。

  SIZE 該程序的代碼大小加上資料大小再加上堆棧空間大小的總數。機關是KB。

  TSIZE 該程序的代碼大小。對于核心程序這是一個很奇怪的值。

  DSIZE 資料和堆棧的大小。

  TRS 文本駐留大小。

  D 被标記為“不幹淨”的頁項目。

  LIB 使用的庫頁的大小。對于ELF程序沒有作用。

  RSS 該程序占用的實體記憶體的總數量,機關是KB。

  SHARE 該程序使用共享記憶體的數量。

  STAT 該程序的狀态。其中S代表休眠狀态;D代表不可中斷的休眠狀态;R代表運作狀态;Z代表僵死狀态;

T代表停止或跟蹤狀态。

  TIME 該程序自啟動以來所占用的總CPU時間。如果進入的是累計模式,那麼該時間還包括這個程序子程序所占用的時間。且标題會變成CTIME。根據OS程序号,應該可以查到它正在執行什麼SQL語句.

-- 查到oracle OS程序的sid編号:

select ses.sid from v$session ses,v$process pro where pro.spid=&spid and ses.paddr=pro.addr;

-- 查到此sid連接配接使用者正在執行的SQL語句:

select sql_text from v$sqltext_with_newlines where (hash_value,address)

in (select sql_hash_value,sql_address from v$session where sid=&sid) order by address,piece;

檢視oracle的鎖是sql語句引起的

檢視引起鎖的session_id

 sync4j啟動的程序

select * from v$locked_object where os_user_name='sync4j'

找到seesion_ID=139

找到引起的sql語句

SELECT a.username,

a.machine,

a.program,

a.sid,

a.serial#,

a.status,

c.piece,

c.sql_text

FROM v$session a,

v$sqltext c

WHERE a.sid = 139

and a.sql_address=c.address(+)

ORDER BY c.piece

v$sqltext就是引起鎖的sql語句了

alter system kill session 'sid,serial#'  殺掉程序

  sid,serial#在v$session中可以查到

==================================

1.首先通過v$session_wait确定library cache pin等待事件的會話

2.确定要pin的對象:

select kglnaobj

from sys.x$kglob

where inst_id = userenv('instance')

and kglhdadr = v$session_wait.P1RAW;

3.确定阻塞的會話:

select a.sid,a.serial#,a.username,a.paddr,a.logon_time,

a.sql_hash_value,b.kglpnmod

from v$session a,sys.x$kglpn b

where a.saddr = b.kglpnuse

and b.inst_id= userenv('instance')

and b.kglpnreq = 0

and b.kglpnmod not in (0,1)

and b.kglpnhdl = v$session_wait.P1RAW;

确定哪些會話正在使用某個包/過程/函數/視圖,如果有的話,這時就不要進行drop,complie之類的操作了

select c.sid

from sys.x$lglob a,sys.x$kglpn b,v$session c

where a.kglnaobj=大寫的你要進行操作的包/過程/函數/視圖

and a.kglhdadr=b.kglpnhdl

and b.kglpnuse=c.saddr;