oracle中鎖表怎么查,oracle查看鎖表

oracle數(shù)據(jù)庫鎖表怎么解決

首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。

創(chuàng)新互聯(lián)公司服務(wù)項目包括東安網(wǎng)站建設(shè)、東安網(wǎng)站制作、東安網(wǎng)頁制作以及東安網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,東安網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到東安省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業(yè)務(wù)需求,不建議隨便KILL session,如果這個鎖表是正常業(yè)務(wù)你把session kill掉了會影響業(yè)務(wù)的。

建議先查原因再做決定。

(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)殺掉對應(yīng)進程

執(zhí)行命令:alter system kill session'1025,41';

其中1025為sid,41為serial#.

oracle表在什么情況下會被鎖住

在對指定表做append操作,其他再做truncate時候,會產(chǎn)生鎖表,如下驗證步驟,

1、創(chuàng)建測試表,

create table test_lock(id number, value varchar2(200));

2、執(zhí)行append語句;并且不做提交,insert /*+append*/ into test_lock values(1,1);

3、再次執(zhí)行清表語句,truncate table test_lock;報鎖表錯誤,

4、查看鎖表語句,發(fā)現(xiàn)被鎖表,

select b.object_name, t.*

from v$locked_object t, user_objects b

where t.object_id = b.object_id

oracle 怎么查看數(shù)據(jù)被鎖

1.創(chuàng)建測試表,如下圖。

createtabletest_lock(idnumber,valuevarchar2(200));

2.執(zhí)行append語句;并且不做提交,insert/*+append*/intotest_lockvalues(1,1)如下圖。

3.再次執(zhí)行清表語句,truncatetabletest_lock;報鎖表錯誤,如下圖。

4.查看鎖表語句,發(fā)現(xiàn)被鎖表

selectb.object_name,t.*

fromv$locked_objectt,user_objectsb

wheret.object_id=b.object_id

注意事項:

簡化數(shù)據(jù):可以將復(fù)雜的查詢創(chuàng)建為其他人可以使用的視圖,而不必了解復(fù)雜的業(yè)務(wù)或邏輯關(guān)系。這簡化并掩蓋了視圖用戶數(shù)據(jù)的復(fù)雜性。

表結(jié)構(gòu)設(shè)計的補充:在設(shè)計的系統(tǒng)才剛剛開始,大部分的程序直接訪問數(shù)據(jù)表結(jié)構(gòu),但是隨著業(yè)務(wù)的變化,系統(tǒng)更新,等等,引起了一些表結(jié)構(gòu)不適用,這次修改系統(tǒng)的表結(jié)構(gòu)太大,開發(fā)成本較高的影響。

這個時候可以創(chuàng)建一個視圖來補充表結(jié)構(gòu)設(shè)計,降低開發(fā)成本。程序可以通過查詢視圖直接獲得它想要的數(shù)據(jù)。

添加安全性:視圖可以向用戶顯示表中的指定字段,而不是向用戶顯示表中的所有字段。在實際開發(fā)中,視圖通常作為提供數(shù)據(jù)的一種方式提供,并將只讀權(quán)限提供給第三方以供查詢使用。

查看oracle鎖的表名

下面3個語句是我經(jīng)常使用來解決oracle鎖問題的 -- 注意你的用戶有沒有權(quán)限問題

1. 查看被鎖的表

SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,

b.os_user_name

FROM v$process p, v$session a, v$locked_object b, all_objects c

WHERE p.addr = a.paddr AND a.process = b.process

AND c.object_id = b.object_id

2. 查看是哪個進程鎖的

SELECT sid, serial#, username, osuser FROM v$session where osuser = 'tangpj'

3. 殺掉這個進程 alter system kill session 'sid,serial#';

oracle中如何查詢表被鎖定狀態(tài)

SELECT?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;

如果沒有結(jié)果就是沒有被鎖定的,如果查詢有結(jié)果,就說明此表被鎖了。如圖:

本文名稱:oracle中鎖表怎么查,oracle查看鎖表
路徑分享:http://muchs.cn/article18/pheigp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)微信公眾號、標簽優(yōu)化、網(wǎng)站導(dǎo)航、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名