如何減少oracle鎖表,oracle什么情況下會鎖表

Oracle數(shù)據(jù)庫老是被鎖表,而且用解鎖語句解開后,緊跟著又出來一堆鎖,解也解不完

出現(xiàn)鎖的根本解決辦法不是去手動解鎖啊,

創(chuàng)新互聯(lián)主營白云網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),白云h5小程序設(shè)計搭建,白云網(wǎng)站營銷推廣歡迎白云等地區(qū)企業(yè)咨詢

而是應(yīng)該去看,是哪個SESSION,哪個sql語句鎖的,鎖了哪些資源,是不是應(yīng)該鎖定這些資源!

如果有些鎖是不必要的,要么commit事務(wù)來釋放鎖,要不就不鎖定這些資源!

修改應(yīng)用才是應(yīng)該做的!

模擬oracle數(shù)據(jù)庫update鎖表現(xiàn)象及處理辦法

Session1創(chuàng)建測試表:

SQL create table test (id number (10) not null , name varchar(20), primary key(id));

Table created.

SQL desc test;

Name Null? Type

----------------------------------------- -------- ----------------------------

ID NOT NULL NUMBER(10)

NAME VARCHAR2(20)

SQL insert into test values(001,'tom');

1 row created.

SQL insert into test values(002,'lisa');

1 row created.

SQL insert into test values(003,'joy');

1 row created.

SQL insert into test values(004,'jia');

1 row created.

查看test表信息

SQL update test set name='xue' where name='joy';

1 row updated.

SQL commit;

Commit complete.

SQL select * from test updata;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

重新打開session 2:

SQL select * from test;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

update模擬鎖表

SQL update test set name='da' where name='tom';

1 row updated.

注:不提交

Session2查詢:

SQL select * from test;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

查看哪個表被鎖

SQL 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;

OWNER

------------------------------

OBJECT_NAME

--------------------------------------------------------------------------------

SESSION_ID LOCKED_MODE

---------- -----------

SYS

TEST

23 3

查看是哪個session引起的

SQL 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;

USERNAME SID SERIAL# LOGON_TIM

------------------------------ ---------- ---------- ---------

SYS 23 23 02-JAN-20

殺掉對應(yīng)進程

SQL alter system kill session'23,23';

System altered.

其中23為sid,23為serial#.

SQL 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;

no rows selected

SQL 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;

no rows selected

session 1查詢:

SQL select * from test;

select * from test

*

ERROR at line 1:

ORA-00028: your session has been killed

SQL select * from test;

select * from test

*

ERROR at line 1:

ORA-01012: not logged on

Process ID: 5366

Session ID: 23 Serial number: 23

重新連接SQL

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 2 11:39:53 2020

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL select * from test updata;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

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

1、在做Oracle監(jiān)聽程序測試時,發(fā)現(xiàn)帳戶已經(jīng)被鎖定。

2、在數(shù)據(jù)庫安裝電腦上,點擊開始打開運行窗口。

3、在運行窗口輸入CMD,調(diào)出命令提示符界面。

3、在命令提示符下面,用管理員身份登入到數(shù)據(jù)庫sqlplus / as sysdba。

4、輸入解鎖命令alter user Scott account unlock后回車。

5、看見用戶已更改的字樣,表示命令已成功執(zhí)行。

6、再切換到監(jiān)聽程序驗證,原來的ora-28000帳戶被鎖定的提示已經(jīng)不存在了。用戶解鎖成功。

oracle查詢資源占用,鎖表解鎖

1. 先通過top命令查看產(chǎn)用資源較多的spid號

2.查詢當前耗時的會話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查出當前正在使用的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.查詢哪些對象被鎖:

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.下面的語句用來殺死一個進程:

alter system kill session '524,1095'; (其中24,111分別是上面查詢出的sid,serial#)

3.再一次查詢目前鎖定的對象,若發(fā)現(xiàn)以上方法不能解除鎖定的表,則用以下方法:

3.1 執(zhí)行下面的語句獲得進程(線程)號:

select spid, osuser, s.program

from v$session s,v$process p

where s.paddr=p.addr and s.sid=524 (524是上面的sid)

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

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

你要先查一下是那個會話那個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數(shù)據(jù)庫如何防止死鎖問題

你好:這個死鎖沒辦法完全避免,盡量的話在做事物提交的時候,提交完成后在進行其余的同一個表的操作,再就是insert、update等操作盡量能減少就減少。其實正常情況下是很少出現(xiàn)死鎖的。

網(wǎng)頁題目:如何減少oracle鎖表,oracle什么情況下會鎖表
文章源于:http://www.muchs.cn/article24/hssgce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)微信公眾號、靜態(tài)網(wǎng)站

廣告

聲明:本網(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)站建設(shè)