查詢當前資料庫鎖的sql:
selecta.session_id,
c.serial#,
a.locked_mode,
b.object_id
, b.
object_name
, b.object_type,
c.logon_time,
a.oracle_username,
a.os_user_name,
b.owner,
a.process
from
v$locked_object a,
dba_objects b,
v$session c
where b.object_id
= a.object_id
and a.session_id = c.sid;
select 'alter system kill session ''' ||a.session_id||','||c.serial#||''''
from v$locked_object a, dba_objects b, v$session c
where b.object_id = a.object_id
and a.session_id = c.sid
and b.owner='bzfz_yc_ia';
查詢造成鎖的sql:
selectsql_text
from
v$session,
v$sqltext_with_newlines
where decode(v$session.sql_hash_value, 0, prev_hash_value, sql_hash_value) =
v$sqltext_with_newlines.hash_value
and v$session.sid =
#session_id#
order
bypiece;
--其中 #session_id# 為鎖的會話id
--如果確定為死鎖,可以使用下面語句殺死死鎖
殺掉死鎖:
alter system kill session '對應sid,對應serial';
alter system disconnect session '
對應sid,對應serial
' immediate;
1.檢視總消耗時間最多的前10條sql語句:
select*from (select
v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank()
over(order
by v.elapsed_time desc
) elapsed_rank
from
v$sql v) a
where elapsed_rank <=
10;
2.檢視cpu消耗時間最多的前10條sql語句:
select*from (select
v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank()
over(order
by v.cpu_time desc
) elapsed_rank
from
v$sql v) a
where elapsed_rank <=
10;
3.檢視消耗磁碟讀取最多的前10條sql語句:
select*from (select
v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank()
over(order
by v.disk_reads desc
) elapsed_rank
from
v$sql v) a
where elapsed_rank <=
10;
oracle pl sql中文亂碼解決小記
資料庫出現亂碼的問題主要和客戶的本地化環境,客戶端nls lang設定,伺服器端的資料庫oracle字符集設定這三者有關,如果它們的設定不一致或者某個設定錯誤,就會很容易出現亂碼。使用pl sql對資料庫操作時會出現中文亂碼,在pl sql上用 select from v nls parameter...
死鎖與解決死鎖
要是以後寫資料庫的產品,不是寫sql語句,那裡面涉及到的鎖就跟多了。故事裡有五個哲學家 這些哲學家很窮,只買得起五根筷子。他們坐成一圈,兩個人的中間放一根筷子。哲學家吃飯的時候必須同時得到左手邊和右手邊的筷子。如果他身邊的任何一位正在使用筷子,那他只有等著。假設哲學家的編號是a b c d e,筷子...
死鎖及死鎖的解決
如果一組程序中的每乙個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序是死鎖的,1 競爭不可搶占性資源。當系統把某資源分配給該程序後,就不能將它強行收回,只能在程序用完後自行釋放。2 競爭可消耗資源。當系統中供多個程序共享的資源如印表機,公用佇列等,其數目不足以滿足諸程序的需要時,會...