資料庫鎖表查詢
1. 怎麼知道資料庫表已經鎖表了
可直接在mysql命令行執行:show engine innodb statusG;
查看造成死鎖的sql語句,分析索引情況,然後優化sql然後show processlist;
show status like 『%lock%』
show OPEN TABLES where In_use > 0; 這個語句記錄當前鎖表狀態
另外可以打開慢查詢日誌,linux下打開需在my.cnf的[mysqld]裡面加上以下內容:
slow_query_log=TRUE(有些mysql版本是ON)
slow_query_log_file=/usr/local/mysql/slow_query_log.txt
long_query_time=3
select *from v$locked_object:可以獲得被鎖的對象的object_id及產生鎖的會話sid。通過查詢結果中的object_id,可以查詢到具體被鎖的對象。
(1)資料庫鎖表查詢擴展閱讀:
注意事項
也可以直接把這幾個視圖和表關聯起來,在查詢結果中直接得到「alter system kill session 'sid, serial#'」這樣的方便的kill sessoin命令。
如果執行kill session命令後,鎖並沒有除掉,session依然存在。這種情況,通過select spid from v$process where addr in(select paddr from v$session where sid = &sid)查詢到oracle會話在伺服器上的pid,然後登陸到伺服器上,執行kill -9 pid這樣就能殺掉進程解鎖了。
2. 查詢oracle 資料庫里有哪些表鎖死
用如下語句查詢鎖死的表:
selectp.spid,
a.serial#,
c.object_name,
b.session_id,
b.oracle_username,
b.os_user_name
fromv$processp,v$sessiona,v$locked_objectb,all_objectsc
wherep.addr=a.paddr
anda.process=b.process
andc.object_id=b.object_id;
其中object_name就是被鎖的表名,如圖:
3. oracle 鎖表如何查看
通過以下語句查詢
SELECT
'alter system kill session '''||c.sid||','|| c.SERIAL#||',@'|| c.inst_id||'''' ,
c.INST_ID,
c.pADDR,
A.OWNER, --OBJECT所屬用戶
A.OBJECT_NAME, --OBJECT名稱
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID, --鎖表用戶的session
B.ORACLE_USERNAME, --鎖表用戶的Oracle用戶名
B.OS_USER_NAME,--鎖表用戶的操作系統登陸用戶名
B.PROCESS,
B.LOCKED_MODE,
C.MACHINE, --鎖表用戶的計算機名稱
C.STATUS, --鎖表狀態
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM --鎖表用戶所用的資料庫管理工具
FROM
ALL_OBJECTS A,
V$LOCKED_OBJECT B,
SYS.V_$SESSION C
WHERE
A.OBJECT_ID = B.OBJECT_ID
AND B.PROCESS = C.PROCESS --AND C.STATUS='ACTIVE'
ORDER BY 1,2
4. oracle資料庫鎖表怎麼解決
首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。
你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。
建議先查原因再做決定。
(1)鎖表查詢的代碼有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪個表被鎖
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪個session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
(4)查看是哪個sql引起的
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid
and b.SQL_ID = c.sql_id and c.sql_id = ''
order by b.logon_time;
(5)殺掉對應進程
執行命令:alter system kill session'1025,41';
其中1025為sid,41為serial#.
5. 查看oracle是否鎖表
Oracle資料庫操作中,我們有時會用到鎖表查詢以及解鎖和kill進程等操作,那麼這些操作是怎麼實現的呢?本文我們主要就介紹一下這部分內容。
(1)鎖表查詢的代碼有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪個表被鎖
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪個session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
(4)殺掉對應進程
執行命令:alter system kill session'1025,41';
其中1025為sid,41為serial#.
6. 怎麼查看 sql server 資料庫有沒有鎖表
查看sql server資料庫被鎖表可以用用如下語句:
拓展資料:
鎖定資料庫的一個表的區別
SELECT * FROM table WITH (HOLDLOCK) 其他事務可以讀取表,但不能更新刪除
SELECT * FROM table WITH (TABLOCKX) 其他事務不能讀取表,更新和刪除
SELECT語句中的各項「加鎖選項」以及相應的功能說明。
NOLOCK(不加鎖)
此選項被選中時,SQL Server 在讀取或修改數據時不加任何鎖。 在這種情況下,用戶有可能讀取到未完成事務(Uncommited Transaction)或回滾(Roll Back)中的數據, 即所謂的「臟數據」。
NOLOCK 語句執行時不發出共享鎖,允許臟讀 ,等於 READ UNCOMMITTED事務隔離級別
HOLDLOCK(保持鎖)
此選項被選中時,SQL Server 會將此共享鎖保持至整個事務結束,而不會在途中釋放。
HOLDLOCK 持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等於SERIALIZABLE事務隔離級別
UPDLOCK(修改鎖)
此選項被選中時,SQL Server 在讀取數據時使用修改鎖來代替共享鎖,並將此鎖保持至整個事務或命令結束。使用此選項能夠保證多個進程能同時讀取數據但只有該進程能修改數據。
TABLOCK(表鎖)
此選項被選中時,SQL Server 將在整個表上置共享鎖直至該命令結束。 這個選項保證其他進程只能讀取而不能修改數據。
PAGLOCK(頁鎖)
此選項為默認選項, 當被選中時,SQL Server 使用共享頁鎖。
PAGLOCK 在使用一個表鎖的地方用多個頁鎖
TABLOCKX(排它表鎖)
此選項被選中時,SQL Server 將在整個表上置排它鎖直至該命令或事務結束。這將防止其他進程讀取或修改表中的數據。 TABLOCKX 強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表
7. 如何查詢db2資料庫表是否被鎖
1、首先點擊桌面上的SQL server資料庫。
8. ORACLE 如何查詢被鎖定表及如何解鎖釋放session
ORACLE
EBS操作某一個FORM界面,或者後台資料庫操作某一個表時發現一直出於"假死"狀態,可能是該表被某一用戶鎖定,導致其他用戶無法繼續操作
復制代碼
代碼如下:--鎖表查詢SQLSELECT
object_name,
machine,
s.sid,
s.serial#
FROM
gv$locked_object
l,
dba_objects
o,
gv$session
s
WHERE
l.object_id
=
o.object_id
AND
l.session_id
=
s.sid;
找到被鎖定的表,解鎖
復制代碼
代碼如下:--釋放SESSION
SQL:
--alter
system
kill
session
'sid,
serial#';
您可能感興趣的文章:mysql
事務處理及表鎖定深入簡析
9. 資料庫鎖表會影響前台查詢嗎
看資料庫、事物隔離級別以及是什麼表鎖
以SQLserver為例在默認事物隔離情況下為例
當某個表存在排他鎖,比如一個事物未提交並且其中含有更新語句則產生排他鎖
此時是無法對該表進行查詢的,因為默認事物隔離級別(非臟讀)下,select會對表加共享鎖,但是排他鎖不兼容共享鎖,所以此時不能查詢。
10. 資料庫鎖表是什麼意思
1、資料庫鎖表的意思:因為在資料庫里,同一個數據可能有多個人來讀取或更改,為了防止我更改的時候別人也同時更改,這是一般要鎖住表不讓別人改。
2、舉個簡單例子:在更新資料庫記錄的過程中,我是不希望別人也來更新我的這些記錄的,像庫存,做出庫的時候,原數量100,我出了20,我就需要把數量更新到80;
在更新的過程中,別人又做了30的出庫,如果在我更新的時候,別人先把庫存更新到70,然後我又更新80,那數量就錯誤了。所以我更新的時候,我就需要鎖定這條記錄。這是數據行鎖,排他鎖。
(10)資料庫鎖表查詢擴展閱讀:
資料庫鎖表的必要條件:
1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程佔用。如果此時還有其它進程請求資源,則請求者只能等待,直至佔有資源的進程用畢釋放。
2)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程佔有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。
3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4)環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源。