ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句方法
阿新 • • 發佈:2018-12-09
1. ORACLE中檢視當前系統中鎖表情況
select * from v$locked_object
可以通過查詢v$locked_object
拿到sid
和objectid
,然後用sid
和v$session
連結串列查詢是哪裡鎖的表,用v$session
中的objectid
欄位和dba_objects
的id
欄位關聯,查詢詳細的鎖表情況。
查詢SQL如下:
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked _mode
from v$locked_object lo, dba_objects ao, v$session sess, v$process p
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;
查詢是什麼SQL引起了鎖表的原因,SQL如下:
select l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine ,
s.terminal,
a.sql_text,
a.action
from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#;
2. ORACLE解鎖的方法
alter system kill session ’146′; –146為鎖住的程序號,即spid
檢視oracle資料庫允許的最大連線數和當前連線數
在檢視資料的連線情況很有用,寫完程式一邊測試程式碼一邊檢視資料庫連線的釋放情況有助於分析優化出一個健壯的系統程式來。
1、檢視當前的資料庫連線數
select count(*) from v$process ; --當前的資料庫連線數
2、資料庫允許的最大連線數
select value from v$parameter where name ='processes'; --資料庫允許的最大連線數
3、修改資料庫最大連線數
alter system set processes = 300 scope = spfile; --修改最大連線數:
4、關閉/重啟資料庫
shutdown immediate; --關閉資料庫
startup; --重啟資料庫
5、檢視當前有哪些使用者正在使用資料
select osuser, a.username, cpu_time/executions/1000000||'s', b.sql_text, machine
from v$session a, v$sqlarea b
where a.sql_address =b.address
order by cpu_time/executions desc; --檢視當前有哪些使用者正在使用資料
6、當前的session
連線數
select count(*) from v$session --當前的session連線數
7、當前併發連線數
select count(*) from v$session where status='ACTIVE'; --併發連線數
v$process
:
這個檢視提供的資訊,都是oracle
服務程序的資訊,沒有客戶端程式相關的資訊服務程序分兩類,一是後臺的,一是dedicate/shared server
pid, serial# 這是oracle分配的PID
spid 這才是作業系統的pid
program 這是服務程序對應的作業系統程序名
v$session
:
這個檢視主要提供的是一個數據庫connect
的資訊,主要是client
端的資訊,比如以下欄位:
machine 在哪臺機器上
terminal 使用什麼終端
osuser 作業系統使用者是誰
program 通過什麼客戶端程式,比如TOAD
process 作業系統分配給TOAD的程序號
logon_time 在什麼時間
username 以什麼oracle的帳號登入
command 執行了什麼型別的SQL命令
sql_hash_value SQL語句資訊
有一些是server
端的資訊:
paddr
即v$process
中的server
程序的addr
server
伺服器是dedicate/shared