1. 先通過top命令查看產(chǎn)用資源較多的spid號(hào)
成都創(chuàng)新互聯(lián)公司是專業(yè)的桓臺(tái)網(wǎng)站建設(shè)公司,桓臺(tái)接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行桓臺(tái)網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
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.下面的語句用來殺死一個(gè)進(jìn)程:
alter system kill session '524,1095'; (其中24,111分別是上面查詢出的sid,serial#)
3.再一次查詢目前鎖定的對(duì)象,若發(fā)現(xiàn)以上方法不能解除鎖定的表,則用以下方法:
3.1 執(zhí)行下面的語句獲得進(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)
這兩個(gè)操作都需要用sysdba身份去修改,方法如下:
1、win+R,輸入cmd,回車。
2、以sysdba身份連接oracle的sqlplus。
sqlplus?/nolog
conn?/?as?sysdba
3、解鎖語句用:
alter?user?用戶名?account?unlock;
4、修改口令語句用:
alter?user?用戶名?identified?by?密碼;
原因:oracle輸入密碼不正確,試了10次后,會(huì)自動(dòng)鎖定用戶。
解決方法:使用sqlplus命令行解鎖。
步驟:
1、打開sqlplus窗口,用sysdba角色登錄
2、請(qǐng)輸入用戶名: /as sysdba
3、SQLalter user GALTTEST account unlock;
? 用戶已更改。
解鎖成功啦!
原因:默認(rèn)Oracle10g的scott不能登陸。
解決:
(1)conn
sys/sys
as
sysdba;//以DBA的身份登錄
(2)alter
user
scott
account
unlock;//
然后解鎖
(3)conn
scott/tiger
//彈出一個(gè)修改密碼的對(duì)話框,修改一下密碼就可以了
具體操作步驟如下:
C:
sqlplus
請(qǐng)輸入用戶名:sys
輸入口令:sys
as
sysdba
//注意:在口令這里輸入的密碼后面必須要跟上
as
sysdba
才可以。
SQL
alter
user
scott
account
unlock;
用戶已更改.
SQL
commit;
提交完成.
SQL
conn
scott/tiger
更改scott口令
新口令:tiger
重新鍵入新口令:tiger
口令已更改
已連接。
另一種方法:你打開命令提示符,不要登錄直接輸入下面:
sqlplus
sys/tiger
as
sysdba
以dba方式進(jìn)入sys帳戶;
alter
user
scott
account
unlock;
給scott用戶解鎖;
查詢鎖表
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;
2解鎖
--釋放SESSION SQL:
--alter system kill session 'sid, serial#';
ALTER system kill session '23, 1647';
3鎖表原因分析
1.對(duì)數(shù)據(jù)庫操作update,insert,delete時(shí)候,數(shù)據(jù)庫無法更新,操作等待時(shí)長,操作結(jié)果不發(fā)生改變
2.在程序中,底層(數(shù)據(jù)訪問層)操作時(shí)候,不成功,數(shù)據(jù)庫連接超時(shí),無法操作,或者操作等待時(shí)長等現(xiàn)象
【加鎖的原理】:比如一個(gè)操作在進(jìn)行修改一表,它沒完成,另一個(gè)操作也操作這張表時(shí)候就需要等待,前面操作結(jié)束之后才可進(jìn)行操作。
4鎖表分類以及如何避免鎖表
Oracle鎖表 行級(jí)鎖 表級(jí)鎖
---- 行被排他鎖定
----在某行的鎖被釋放之前,其他用戶不能修改此行 ----使用 commit 或 rollback 命令釋放鎖
----Oracle 通過使用 INSERT、UPDATE 和 SELECT…FOR UPDATE 語句自動(dòng)獲取行級(jí)鎖
SELECT…FOR UPDATE 子句 ―在表的一行或多行上放置排他鎖 ―用于防止其他用戶更新該行
―可以執(zhí)行除更新之外的其他操作
―select * from goods where gid=1001 ―for update of gname;
―只有該用戶提交事務(wù),其他用戶才能夠更新gname
FOR UPDATE WAIT 子句 ―Oracle9i 中的新增功能 ―防止無限期地等待鎖定的行 ―等待間隔必須指定為數(shù)值文字
―等待間隔不能是表達(dá)式、賦值變量或 PL/SQL 變量
―select * from goods where gid=1001 for update of gname wait 3 ―等待用戶釋放更新鎖的時(shí)間為3秒,否則超時(shí)。 ?表級(jí)鎖
―保護(hù)表的數(shù)據(jù)
―在多個(gè)用戶同時(shí)訪問數(shù)據(jù)時(shí)確保數(shù)據(jù)的完整性 ―可以設(shè)置為三種模式:共享、共享更新和 排他
語法:lock table table_namein mode; 共享鎖 ―鎖定表
―僅允許其他用戶執(zhí)行查詢操作 ―不能插入、更新和刪除
―多個(gè)用戶可以同時(shí)在同一表中放置此鎖 ―lock table table_name ―in share mode [nowait];
― rollback 和commit 命令釋放鎖 ― nowait 關(guān)鍵字告訴其他用戶不用等待 共享更新鎖
―鎖定要被更新的行
―允許其他用戶同時(shí)查詢、插入、更新未被鎖定的行
―在 SELECT 語句中使用“FOR UPDATE”子句,可以強(qiáng)制使用共享更新鎖 ―允許多個(gè)用戶同時(shí)鎖定表的不同行
加鎖的兩種方法
lock table tab_name in share update mode; select column1,column2 from goods where goods where gid=1001
for update of column1,column2 排他鎖
―與其他兩種鎖相比,排他鎖是限制性最強(qiáng)的表鎖 ―僅允許其他用戶查詢數(shù)據(jù)
―不允許執(zhí)行插入、刪除和更新操作
―在同一時(shí)間僅允許一位用戶在表上放置排他鎖 ―共享鎖與此相反
lock table tab_name in exclusive mode; lock table 表名[ 表名]... in share mode [nowait]
lock table 表名[ 表名]... in exclusive mode [nowait] lock table 表名[ 表名]... in share update mode[nowait]
-----------------------------------------------------------------------------------------------
LOCK Name
LOCK — 在事務(wù)中明確地鎖定一個(gè)表 LOCK [ TABLE ] name
LOCK [ TABLE ] name IN [ ROW | ACCESS ] { SHARE | EXCLUSIVE } MODE
LOCK [ TABLE ] name IN SHARE ROW EXCLUSIVE MODE 輸入
name
要鎖定的現(xiàn)存的表.
ACCESS SHARE MODE
注意: 這個(gè)鎖模式對(duì)被查詢的表自動(dòng)生效。
這是最小限制的鎖模式,只與 ACCESS EXCLUSIVE 模式?jīng)_突。 它用于保護(hù)被查詢的表免于被并行的 ALTER TABLE, DROP TABLE 和 VACUUM 對(duì)同一表操作的語句修改。
ROW SHARE MODE
注意: 任何 SELECT...FOR UPDATE 語句執(zhí)行時(shí)自動(dòng)生效。 因?yàn)樗且粋€(gè)共享鎖,以后可能更新為 ROW EXCLUSIVE 鎖。
與 EXCLUSIVE 和 ACCESS EXCLUSIVE 鎖模式?jīng)_突。
ROW EXCLUSIVE MODE
注意: 任何 UPDATE, DELETE和 INSERT 語句執(zhí)行時(shí)自動(dòng)生效。
與 SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE 和 ACCESS EXCLUSIVE 模式?jīng)_突。
SHARE MODE
注意: 任何 CREATE INDEX 語句執(zhí)行時(shí)自動(dòng)附加。 共享鎖住整個(gè)表.
與 ROW EXCLUSIVE,SHARE ROW EXCLUSIVE,EXCLUSIVE 和 ACCESS EXCLUSIVE 模式?jīng)_突。這個(gè)模式防止一個(gè)表被并行更新。
SHARE ROW EXCLUSIVE MODE
注意: 這個(gè)模式類似 EXCLUSIVE MODE,但是允許其他事務(wù)的 SHARE ROW 鎖.
-----------------------------------------------------------------------------------------------
與 ROW EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE 和 ACCESS EXCLUSIVE 模式?jīng)_突。
EXCLUSIVE MODE
注意: 這個(gè)模式同樣比 SHARE ROW EXCLUSIVE 更有約束力. 它阻塞所有并行的 ROW SHARE/SELECT... FOR UPDATE 查詢。
與 ROW EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE 和 ACCESS EXCLUSIVE 模式?jīng)_突。
ACCESS EXCLUSIVE MODE
注意: 由語句 ALTER TABLE, DROP TABLE,VACUUM 執(zhí)行時(shí)自動(dòng)生效。這是最嚴(yán)格的約束鎖,它與所有其他的鎖 模式?jīng)_突并且保護(hù)一個(gè)被鎖定的表不被任何其他并行的操作更改。
注意: 一個(gè)不合格的 LOCK TABLE 同樣要求這個(gè)鎖模式 (例如,一條沒有顯式鎖模式選項(xiàng)的命令)。
輸出
LOCK TABLE 成功鎖定后的返回.
ERROR name: Table does not exist. 如果name 不存在,返回此信息.
描述
LOCK TABLE 控制一次事務(wù)的生命期內(nèi)對(duì)某表的并行訪問. Postgres 在可能的情況下盡可能使用最小約束的鎖模式。 LOCK TABLE 在你需要時(shí)提供更有約束力的鎖。
RDBMS 鎖定使用下面術(shù)語:
EXCLUSIVE
排它鎖,防止其他(事務(wù))鎖的產(chǎn)生.
SHARE
允許其他(事務(wù))共享鎖.避免 EXCLUSIVE 鎖.
ACCESS
-----------------------------------------------------------------------------------------------
鎖定表結(jié)構(gòu).
ROW
鎖定獨(dú)立的行.
注意: 如果沒有聲明 EXCLUSIVE 或 SHARE,假設(shè)為 EXCLUSIVE.鎖存在于事務(wù)周期內(nèi).
例如,一個(gè)應(yīng)用在 READ COMMITED 隔離級(jí)別上運(yùn)行事務(wù), 并且它需要保證在表中的數(shù)據(jù)在事務(wù)的運(yùn)行過程中都存在。要實(shí)現(xiàn)這個(gè)你 可以在查詢之前對(duì)表使用 SHARE 鎖模式進(jìn)行鎖定。這樣將保護(hù)數(shù)據(jù)不被 并行修改并且為任何更進(jìn)一步的對(duì)表的讀操作提供實(shí)際狀態(tài)的數(shù)據(jù), 因?yàn)? SHARE 鎖模式與任何寫操作需要的 ROW EXCLUSIVE 模式?jīng)_突,并且你的 LOCK TABLE name IN SHARE MODE 語句將等到所有并行的寫操作提交或回卷后才執(zhí)行。
注意: 當(dāng)在 SERIALIZABLE 隔離級(jí)別運(yùn)行事務(wù),而且你需要讀取真實(shí)狀態(tài)的數(shù)據(jù)時(shí), 你必須在執(zhí)行任何 DML 語句 (這時(shí)事務(wù)定義什么樣的并行修改對(duì)它自己是可見的) 之前運(yùn)行一個(gè) LOCK TABLE 語句。
除了上面的要求外,如果一個(gè)事務(wù)準(zhǔn)備修改一個(gè)表中的數(shù)據(jù), 那么應(yīng)該使用 SHARE ROW EXCLUSIVE 鎖模式以避免死鎖情況(當(dāng)兩個(gè) 并行的事務(wù)試圖以 SHARE 模式鎖住表然后試圖更改表中的數(shù)據(jù)時(shí), 兩個(gè)事務(wù)(隱含的)都需要 ROW EXCLUSIVE 鎖模式,而此模式與并行的 SHARE 鎖沖突)。
繼續(xù)上面的死鎖(兩個(gè)事務(wù)彼此等待)問題, 你應(yīng)該遵循兩個(gè)通用的規(guī)則以避免死鎖條件:
事務(wù)應(yīng)該以相同的順序?qū)ο嗤膶?duì)象請(qǐng)求鎖。
例如,如果一個(gè)應(yīng)用更新行 R1 然后更新行 R2(在同一的事務(wù)里), 那么第二個(gè)應(yīng)用如果稍后要更新行 R1 時(shí)不應(yīng)該更新行 R2(在 同一事務(wù)里)。相反,它應(yīng)該與第一個(gè)應(yīng)用以相同的順序更新行 R1 和 R2。
事務(wù)請(qǐng)求兩個(gè)互相沖突的鎖模式的前提:其中一個(gè)鎖模式是自沖突的 (也就是說,一次只能被一個(gè)事務(wù)持有)。 如果涉及多種鎖模式,那么事務(wù)應(yīng)該總是最先請(qǐng)求最嚴(yán)格的鎖模式。
這個(gè)規(guī)則的例子在前面的關(guān)于用 SHARE ROW EXCLUSIVE 模式取代 SHARE 模式的討論中已經(jīng)給出了。 -----------------------------------------------------------------------------------------------
注意: Postgres 的確檢測死鎖, 并將回卷至少一個(gè)等待的事務(wù)以解決死鎖。
注意
LOCK 是 Postgres 語言擴(kuò)展.
除了ACCESS SHARE/EXCLUSIVE 鎖模式外,所有其他 Postgres 鎖模式和 LOCK TABLE 語句都與那些在 Oracle 里面的兼容。
LOCK 只在事務(wù)內(nèi)部使用.
用法
演示在往一個(gè)外鍵表上插入時(shí)在有主鍵的表上使用 SHARE 的鎖:
BEGIN WORK;
LOCK TABLE films IN SHARE MODE; SELECT id FROM films
WHERE name = 'Star Wars: Episode I - The Phantom Menace';
-- 如果記錄沒有返回則回卷
INSERT INTO films_user_comments VALUES
(_id_, 'GREAT! I was waiting for it for so long!'); COMMIT WORK;
在執(zhí)行刪除操作時(shí)對(duì)一個(gè)有主鍵的表進(jìn)行 SHARE ROW EXCLUSIVE 鎖:
BEGIN WORK;
LOCK TABLE films IN SHARE ROW EXCLUSIVE MODE; DELETE FROM films_user_comments WHERE id IN (SELECT id FROM films WHERE rating 5); DELETE FROM films WHERE rating 5; COMMIT WORK; 兼容性 SQL92
在SQL92里面沒有LOCK TABLE ,可以使用 SET TRANSACTION 來聲明當(dāng)前事務(wù)的級(jí)別. 我們也支持這個(gè),參閱 SET TRANSACTION 獲取詳細(xì)信息。
今天訪問應(yīng)用的時(shí)候,發(fā)現(xiàn)賬號(hào)被鎖定,登錄oracle后,發(fā)現(xiàn)很多用戶都被鎖定了。看下提示信息,原來是密碼過期了導(dǎo)致賬號(hào)被鎖定。這里記錄下這幾個(gè)操作的常用命令,以方便以后自己的使用。
1.查看用戶的proifle是哪個(gè),一般是default
SELECT username,PROFILE FROM dba_users;
2.查看對(duì)應(yīng)的概要文件(如default)的密碼有效期設(shè)置
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3.將概要文件(如default)的密碼有效期由默認(rèn)的180天修改成“無限制”(修改之后不需要重啟動(dòng)數(shù)據(jù)庫,會(huì)立即生效)
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
4.對(duì)已經(jīng)鎖定和過期的賬號(hào)進(jìn)行解鎖
(1)alter user 用戶名 identified by 原來的密碼 account unlock; ----不用換新密碼,用戶名和密碼也不用加引號(hào),這個(gè)命令會(huì)解鎖賬號(hào),同時(shí)取消密碼過期。
(2)alter user 用戶名 account unlock; ----這個(gè)只會(huì)解鎖賬號(hào),而不會(huì)取消密碼過期,所以建議使用上面的口令
網(wǎng)站題目:oracle如何解除鎖定,oracle解除死鎖
文章鏈接:http://vcdvsql.cn/article6/hseoig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站導(dǎo)航、網(wǎng)站排名、網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(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)