Oracle數(shù)據(jù)庫出現(xiàn)死鎖的時(shí)候可以按照以下處理步驟加以解決:
成都創(chuàng)新互聯(lián)是專業(yè)的福田網(wǎng)站建設(shè)公司,福田接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行福田網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
第一步:嘗試在sqlplus中通過sql命令進(jìn)行刪除,如果能夠刪除成功,則萬事大吉!但通常情況下,出現(xiàn)死鎖時(shí),想通過命令行或者通過Oracle的管理工具刪除有死鎖的session,oracle只會(huì)將該session標(biāo)記為killed,但無法清除掉,往往需要通過第二步在操作系統(tǒng)層級(jí)進(jìn)行刪除!
Connected?to?Oracle9i?Enterprise?Edition?Release?9.2.0.1.0?
Connected?as?quik
SQL?select?xidusn,?object_id,?session_id,?locked_mode?from?v$locked_object;?--查死鎖的對(duì)象,獲取其SESSION_ID
XIDUSN?OBJECT_ID?SESSION_ID?LOCKED_MODE
----------?----------?----------?-----------
10?30724?29?3
10?30649?29?3
SQL?select?username,sid,serial#?from?v$session?where?sid=29;?--根據(jù)上步獲取到的sid查看其serial#號(hào)
USERNAME?SID?SERIAL#
------------------------------?----------?----------
QUIK?29?57107
SQL?alter?system?kill?session?'29,57107';?--刪除進(jìn)程,如已經(jīng)刪除過,則會(huì)報(bào)ora-00031的錯(cuò)誤;否則oracle會(huì)將該session標(biāo)記為killed狀態(tài),等待一段時(shí)間看能否會(huì)自動(dòng)消失,如長時(shí)間消失不掉,則需要做后續(xù)步驟
alter?system?kill?session?'29,57107'
ORA-00031:?session?marked?for?kill
SQL?select?pro.spid?from?v$session?ses,v$process?pro?where?ses.sid=29?and?ses.paddr=pro.addr;?--查看spid號(hào),以便在操作系統(tǒng)中根據(jù)該進(jìn)程號(hào)刪除進(jìn)程
SPID
------------
2273286
第二步:進(jìn)入操作系統(tǒng)進(jìn)行刪除進(jìn)程,本示例的操作系統(tǒng)是IBM aix。
login:?root?--錄入用戶名
root's?Password:?--錄入密碼
*******************************************************************************
*?*
*?*
*?Welcome?to?AIX?Version?5.3!?*
*?*
*?*
*?Please?see?the?README?file?in?/usr/lpp/bos?for?information?pertinent?to?*
*?this?release?of?the?AIX?Operating?System.?*
*?*
*?*
*******************************************************************************
Last?unsuccessful?login:?Fri?Apr?23?14:42:57?BEIDT?2010?on?/dev/pts/1?from?10.73
.52.254
Last?login:?Fri?Apr?23?15:27:50?BEIDT?2010?on?/dev/pts/2?from?10.73.52.254
#?ps?-ef|grep?2273286?--查看進(jìn)程詳情
root?2289864?2494636?0?17:07:15?pts/1?0:00?grep?2273286
oracle?2273286?1?0?14:38:24?-?0:21?oracleQUIK?(LOCAL=NO)
#?kill?-9?2273286?--刪除進(jìn)程,小心操作,別寫錯(cuò)進(jìn)程號(hào),如果oracle的關(guān)鍵進(jìn)程被刪,數(shù)據(jù)庫會(huì)崩潰的!
#?ps?-ef|grep?2273286?--再次查看
root?2289864?2494636?0?17:07:15?pts/1?0:00?grep?2273286
For?Windows,?at?the?DOS?Prompt:?orakill?sid?spid
For?UNIX?at?the?command?line?kill?–9?spid
在對(duì)指定表做append操作,其他再做truncate時(shí)候,會(huì)產(chǎn)生鎖表,如下驗(yà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;報(bào)鎖表錯(cuò)誤,
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輸入密碼不正確,試了10次后,會(huì)自動(dòng)鎖定用戶。
解決方法:使用sqlplus命令行解鎖。
步驟:
1、打開sqlplus窗口,用sysdba角色登錄
2、請(qǐng)輸入用戶名: /as sysdba
3、SQLalter user GALTTEST account unlock;
? 用戶已更改。
解鎖成功啦!
首先你要知道表鎖住了是不是正常鎖?因?yàn)槿魏蜠ML語句都會(huì)對(duì)表加鎖。
你要先查一下是那個(gè)會(huì)話那個(gè)sql鎖住了表,有可能這是正常業(yè)務(wù)需求,不建議隨便KILL session,如果這個(gè)鎖表是正常業(yè)務(wù)你把session kill掉了會(huì)影響業(yè)務(wù)的。
建議先查原因再做決定。
(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)查看是哪個(gè)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)殺掉對(duì)應(yīng)進(jìn)程
執(zhí)行命令:alter system kill session'1025,41';
其中1025為sid,41為serial#.
1、查看環(huán)境變量ORACLE_SID的設(shè)置情況:
windows:
echo
%ORACLE_SID%
linux:
echo
$ORACLE_SID
2、
設(shè)置環(huán)境變量ORACLE_SID的值為你想登錄的oracle實(shí)例的SID:
set
ORACLE_SID=orcl
鍵入命令:sqlplus
/
as
sysdba
就可以以sysdba的身份登錄到oracle了!
linux系統(tǒng)下,如果找不到sqlplus命令的話,請(qǐng)切換到oracle用戶。
在sqlplus窗口執(zhí)行命令:
alter
user
you_username
identified
by
you_password;
就可以修改你的用戶的密碼了~
如果此時(shí)用戶被鎖定,沒關(guān)系:
既然是被鎖住了,那就通過解鎖system用戶。
SQL
alter
user
system
account
unlock;
User
altered.
SQL
select
username,account_status
from
dba_users
where
username='SYSTEM';
USERNAME
ACCOUNT_STATUS
----------
--------------------------------
SYSTEM
OPEN
SQL
網(wǎng)站名稱:oracle被鎖住怎么辦,oracle用戶被鎖住怎么解鎖
新聞來源:http://m.rwnh.cn/article40/phjjho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、品牌網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)