1.以下代碼可以查看是否被鎖表:
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),資興企業(yè)網(wǎng)站建設(shè),資興品牌網(wǎng)站建設(shè),網(wǎng)站定制,資興網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,資興網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
2selecta.object_name,b.session_id,c.serial#,c.program,c.username,c.command,c.machine,c.lockwait
3fromall_objectsa,v$locked_objectb,v$sessioncwherea.object_id=b.object_idandc.sid=b.session_id;
4
2.查詢鎖表原因:
5selectl.session_idsid,
6s.serial#,
7l.locked_mode,
8l.oracle_username,
9s.user#,
10l.os_user_name,
11s.machine,
12s.terminal,
13a.sql_text,
14a.action
153.接上:
16fromv$sqlareaa,v$sessions,v$locked_objectl
17wherel.session_id=s.sid
18ands.prev_sql_addr=a.address
19orderbysid,s.serial#;
204.解鎖方法:altersystemkillsession’146′;–146為鎖住的進(jìn)程號(hào),即spid。
215.查看被鎖的表:selectp.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_namefromv$processp,v$sessiona,v$locked_objectb,all_objectscwherep.addr=a.paddranda.process=b.processandc.object_id=b.object_id
226.以上就是oracle查看鎖表的方法,以及一些相關(guān)信息,看過(guò)之后如果覺(jué)得有幫助可以在下面給點(diǎn)個(gè)贊~
在對(duì)指定表做append操作,其他再做truncate時(shí)候,會(huì)產(chǎn)生鎖表,如下驗(yàn)證步驟,
1、創(chuàng)建測(cè)試表,
create table test_lock(id number, value varchar2(200));
2、執(zhí)行append語(yǔ)句;并且不做提交,insert /*+append*/ into test_lock values(1,1);
3、再次執(zhí)行清表語(yǔ)句,truncate table test_lock;報(bào)鎖表錯(cuò)誤,
4、查看鎖表語(yǔ)句,發(fā)現(xiàn)被鎖表,
select b.object_name, t.*
from v$locked_object t, user_objects b
where t.object_id = b.object_id
怎么知道數(shù)據(jù)庫(kù)表已經(jīng)鎖表了
先回答你的問(wèn)題:
select *from v$locked_object;
可以獲得被鎖的對(duì)象的object_id及產(chǎn)生鎖的會(huì)話sid。
通過(guò)查詢結(jié)果中的object_id,可以查詢到具體被鎖的對(duì)象
再給你看看我查到的一些關(guān)于鎖的資料:
鎖有以下幾種模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表鎖
3:Row-X 行專用(RX):用于行的修改
4:Share 共享鎖(S):阻止其他DML操作
5:S/Row-X 共享行專用(SRX):阻止其他事務(wù)操作
6:exclusive 專用(X):獨(dú)立訪問(wèn)使用
數(shù)字越大鎖級(jí)別越高, 影響的操作越多。
一般的查詢語(yǔ)句如select ... from ... ;是小于2的鎖, 有時(shí)會(huì)在v$locked_object出現(xiàn)。
select ... from ... for update; 是2的鎖。
當(dāng)對(duì)話使用for update子串打開(kāi)一個(gè)游標(biāo)時(shí),
所有返回集中的數(shù)據(jù)行都將處于行級(jí)(Row-X)獨(dú)占式鎖定,
其他對(duì)象只能查詢這些數(shù)據(jù)行,不能進(jìn)行update、delete或select...for update操作。
insert / update / delete ... ; 是3的鎖。
沒(méi)有mit之前插入同樣的一條記錄會(huì)沒(méi)有反應(yīng),
因?yàn)楹笠粋€(gè)3的鎖會(huì)一直等待上一個(gè)3的鎖, 我們必須釋放掉上一個(gè)才能繼續(xù)工作。
創(chuàng)建索引的時(shí)候也會(huì)產(chǎn)生3,4級(jí)別的鎖。
locked_mode為2,3,4不影響DML(insert,delete,update,select)操作,
但DDL(alter,drop等)操作會(huì)提示ora-00054錯(cuò)誤。
有主外鍵約束時(shí) update / delete ... ; 可能會(huì)產(chǎn)生4,5的鎖。
DDL語(yǔ)句時(shí)是6的鎖。
以DBA角色, 查看當(dāng)前數(shù)據(jù)庫(kù)里鎖的情況可以用如下SQL語(yǔ)句:
select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
如果有長(zhǎng)期出現(xiàn)的一列,可能是沒(méi)有釋放的鎖。
我們可以用下面SQL語(yǔ)句殺掉長(zhǎng)期沒(méi)有釋放非正常的鎖:
alter system kill session 'sid,serial#';
如果出現(xiàn)了鎖的問(wèn)題, 某個(gè)DML操作可能等待很久沒(méi)有反應(yīng)。
當(dāng)你采用的是直接連接數(shù)據(jù)庫(kù)的方式,
也不要用OS系統(tǒng)命令 $kill process_num 或者 $kill -9 process_num來(lái)終止用戶連接,
因?yàn)橐粋€(gè)用戶進(jìn)程可能產(chǎn)生一個(gè)以上的鎖, 殺OS進(jìn)程并不能徹底清除鎖的問(wèn)題。
記得在數(shù)據(jù)庫(kù)級(jí)別用alter system kill session 'sid,serial#';殺掉不正常的鎖。
這里還講了一些:
......
查看oracle是否鎖表
Oracle數(shù)據(jù)庫(kù)操作中,我們有時(shí)會(huì)用到鎖表查詢以及解鎖和kill進(jìn)程等操作,那么這些操作是怎么實(shí)現(xiàn)的呢?本文我們主要就介紹一下這部分內(nèi)容。
(1)鎖表查詢的代碼有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪個(gè)表被鎖
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)查看是哪個(gè)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)殺掉對(duì)應(yīng)進(jìn)程
執(zhí)行命令:alter system kill session'1025,41';
其中1025為sid,41為serial#.
怎么查看 sql server 數(shù)據(jù)庫(kù)有沒(méi)有鎖表
--查看被鎖表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' --spid 鎖表進(jìn)程 --tableName 被鎖表名 -- 解鎖: declare @spid int Set @spid = 57 --鎖表進(jìn)程 declare @sql varchar(1000) set @sql='kill '+cast(@spid as varchar) exec(@sql)
MYSQL數(shù)據(jù)庫(kù)怎么查看 哪些表被鎖了
用navicate工具可以輕松查看
里面lock的就是被鎖的
查詢oracle 數(shù)據(jù)庫(kù)里有哪些表鎖死
查鎖,
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
殺鎖
alter system kill session '25,7357'
如何查詢mysql數(shù)據(jù)庫(kù)表是否被鎖 csdn
show OPEN TABLES where In_use 0;
如何查看mysql中表的鎖定情況
1 show processlist;
SHOW PROCESSLIST顯示哪些線程正在運(yùn)行。您也可以使用mysqladmin processlist語(yǔ)句得到此信息。如果您有SUPER權(quán)限,您可以看到所有線程。否則,您只能看到您自己的線程(也就是,與您正在使用的MySQL賬戶相關(guān)的線程)。如果有線程在update或者insert 某個(gè)表,此時(shí)進(jìn)程的status為updating 或者 sending data。
如果您得到“too many connections”錯(cuò)誤信息,并且想要了解正在發(fā)生的情況,本語(yǔ)句是非常有用的。MySQL保留一個(gè)額外的連接,讓擁有SUPER權(quán)限的賬戶使用,以確保管理員能夠隨時(shí)連接和檢查系統(tǒng)(假設(shè)您沒(méi)有把此權(quán)限給予所有的用戶)。
Status
含義
Checking table
正在檢查數(shù)據(jù)表(這是自動(dòng)的)。
Closing tables
正在將表中修改的數(shù)據(jù)刷新到磁盤(pán)中,同時(shí)正在關(guān)閉已經(jīng)用完的表。這是一個(gè)很快的操作,如果不是這樣的話,就應(yīng)該確認(rèn)磁盤(pán)空間是否已經(jīng)滿了或者磁盤(pán)是否正處于重負(fù)中。
Connect Out
復(fù)制從服務(wù)器正在連接主服務(wù)器。
Copying to tmp table on disk
由于臨時(shí)結(jié)果集大于tmp_table_size,正在將臨時(shí)表從內(nèi)存存儲(chǔ)轉(zhuǎn)為磁盤(pán)存儲(chǔ)以此節(jié)省內(nèi)存。
Creating tmp table
正在創(chuàng)建臨時(shí)表以存放部分查詢結(jié)果。
deleting from main table
服務(wù)器正在執(zhí)行多表刪除中的第一部分,剛刪除第一個(gè)表。
deleting from reference tables
服務(wù)器正在執(zhí)行多表刪除中的第二部分,正在刪除其他表的記錄。
Flushing tables
正在執(zhí)行FLUSH TABLES,等待其他線程關(guān)閉數(shù)據(jù)表。
Killed
發(fā)送了一個(gè)kill請(qǐng)求給某線程,那么這個(gè)線程將會(huì)檢查kill標(biāo)志位,同時(shí)會(huì)放棄下一個(gè)kill請(qǐng)求。MySQL會(huì)在每次的主循環(huán)中檢查kill標(biāo)志位,不過(guò)有些情況下該線程可能會(huì)過(guò)一小段才能死掉。如果該線程程被其他線程鎖住了,那么kill請(qǐng)求會(huì)在鎖釋放時(shí)馬上生效。
Locked
被其他查詢鎖住了。
Sending data
正在處理SELECT查詢的記錄,同時(shí)正在把結(jié)果發(fā)送給客戶端。
Sorting for group
正在為GROUP BY做排序。
Sorting for order
正在為ORDER BY做排序。
Opening tables
這個(gè)過(guò)程應(yīng)該會(huì)很快,除非受到其他因素的干擾。例如,在執(zhí)ALTER TABLE或LOCK TABLE語(yǔ)句行完以前,數(shù)據(jù)表無(wú)法被其他線程打開(kāi)。正嘗試打開(kāi)一個(gè)表。
Removing duplicates
正在執(zhí)行一個(gè)SELECT DISTINCT方式的查詢,但是MySQL無(wú)法在前一個(gè)階段優(yōu)化掉那些重復(fù)的記錄。因此,MySQL需要再次去掉重復(fù)的記錄,然后再把結(jié)果發(fā)送給客戶端。
Reopen table
獲得了對(duì)一個(gè)表的鎖,但是必須在表結(jié)構(gòu)修改之后才能獲得這個(gè)鎖。已經(jīng)釋放鎖,關(guān)閉數(shù)據(jù)表,正嘗試重新打開(kāi)數(shù)據(jù)表。
Repair by sorting
修復(fù)指令正在排序以創(chuàng)建索引。
Repair with keycache
修復(fù)指令正在利用索引緩存一個(gè)一個(gè)地創(chuàng)建新索引。它會(huì)比Repair by ......
如何查看SQL數(shù)據(jù)有沒(méi)有鎖表
后續(xù)版本的 Microsoft SQL Server 將刪除該功能。請(qǐng)避免在新的開(kāi)發(fā)工鼎中使用該功能,并著手修改當(dāng)前還在使用該功能的應(yīng)用程序。若要獲取有關(guān) SQL Server 數(shù)據(jù)庫(kù)引擎中的鎖的信息,請(qǐng)使用 sys.dm_tran_locks 動(dòng)態(tài)管理視圖。
USE master;
GO
EXEC sp_lock 53;
GO
查看Oracle中是否有鎖表的sql
查鎖,
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
殺鎖
alter system kill session '25,7357'
如何查詢mysql中是否表被鎖
show OPEN TABLES where In_use 0;
show global status like 'table_locks%';
1. 先通過(guò)top命令查看產(chǎn)用資源較多的spid號(hào)
2.查詢當(dāng)前耗時(shí)的會(huì)話ID,用戶名,sqlID等:
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
? to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('5648612','256523'));
3. 如果上一步sql_id或者 hash_value不為空,則可用v$sqlarea查出當(dāng)前正在使用的sql
select sql_text
from v$sqltext_with_newlines
where hash_value = hash_value
order by piece;
也可直接使用:
select a.*,b.SQL_TEXT from (
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
? to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('23226'))
) a,v$sql b
where a.sql_id? = b.SQL_ID(+)
4.kill占用大資源的session
Alter system kill session 'SID,SERIAL#'
解鎖:
1.查詢哪些對(duì)象被鎖:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
2.下面的語(yǔ)句用來(lái)殺死一個(gè)進(jìn)程:
alter system kill session '524,1095'; (其中24,111分別是上面查詢出的sid,serial#)
3.再一次查詢目前鎖定的對(duì)象,若發(fā)現(xiàn)以上方法不能解除鎖定的表,則用以下方法:
3.1 執(zhí)行下面的語(yǔ)句獲得進(jìn)程(線程)號(hào):
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=524 (524是上面的sid)
ORACLEEBS操作某一個(gè)FORM界面,或者后臺(tái)數(shù)據(jù)庫(kù)操作某一個(gè)表時(shí)發(fā)現(xiàn)一直出于"假死"狀態(tài),可能是該表被某一用戶鎖定,導(dǎo)致其他用戶無(wú)法繼續(xù)操作。
拓展資料:
Session:在計(jì)算機(jī)中,尤其是在網(wǎng)絡(luò)應(yīng)用中,稱為“會(huì)話控制”。Session對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。這樣,當(dāng)用戶在應(yīng)用程序的Web頁(yè)之間跳轉(zhuǎn)時(shí),存儲(chǔ)在Session對(duì)象中的變量將不會(huì)丟失,而是在整個(gè)用戶會(huì)話中一直存在下去。當(dāng)用戶請(qǐng)求來(lái)自應(yīng)用程序的Web頁(yè)時(shí),如果該用戶還沒(méi)有會(huì)話,則Web服務(wù)器將自動(dòng)創(chuàng)建一個(gè)Session對(duì)象。當(dāng)會(huì)話過(guò)期或被放棄后,服務(wù)器將終止該會(huì)話。Session對(duì)象最常見(jiàn)的一個(gè)用法就是存儲(chǔ)用戶的首選項(xiàng)。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲(chǔ)在Session對(duì)象中。有關(guān)使用Session對(duì)象的詳細(xì)信息,請(qǐng)參閱“ASP應(yīng)用程序”部分的“管理會(huì)話”。注意會(huì)話狀態(tài)僅在支持cookie的瀏覽器中保留。
參考資料:session百度百科
1.創(chuàng)建測(cè)試表,如下圖。
createtabletest_lock(idnumber,valuevarchar2(200));
2.執(zhí)行append語(yǔ)句;并且不做提交,insert/*+append*/intotest_lockvalues(1,1)如下圖。
3.再次執(zhí)行清表語(yǔ)句,truncatetabletest_lock;報(bào)鎖表錯(cuò)誤,如下圖。
4.查看鎖表語(yǔ)句,發(fā)現(xiàn)被鎖表
selectb.object_name,t.*
fromv$locked_objectt,user_objectsb
wheret.object_id=b.object_id
注意事項(xiàng):
簡(jiǎn)化數(shù)據(jù):可以將復(fù)雜的查詢創(chuàng)建為其他人可以使用的視圖,而不必了解復(fù)雜的業(yè)務(wù)或邏輯關(guān)系。這簡(jiǎn)化并掩蓋了視圖用戶數(shù)據(jù)的復(fù)雜性。
表結(jié)構(gòu)設(shè)計(jì)的補(bǔ)充:在設(shè)計(jì)的系統(tǒng)才剛剛開(kāi)始,大部分的程序直接訪問(wèn)數(shù)據(jù)表結(jié)構(gòu),但是隨著業(yè)務(wù)的變化,系統(tǒng)更新,等等,引起了一些表結(jié)構(gòu)不適用,這次修改系統(tǒng)的表結(jié)構(gòu)太大,開(kāi)發(fā)成本較高的影響。
這個(gè)時(shí)候可以創(chuàng)建一個(gè)視圖來(lái)補(bǔ)充表結(jié)構(gòu)設(shè)計(jì),降低開(kāi)發(fā)成本。程序可以通過(guò)查詢視圖直接獲得它想要的數(shù)據(jù)。
添加安全性:視圖可以向用戶顯示表中的指定字段,而不是向用戶顯示表中的所有字段。在實(shí)際開(kāi)發(fā)中,視圖通常作為提供數(shù)據(jù)的一種方式提供,并將只讀權(quán)限提供給第三方以供查詢使用。
名稱欄目:如何查詢oracle鎖表 oracle怎么看鎖表
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article6/hpccig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、用戶體驗(yàn)、軟件開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)