當前位置:首頁 » 參考文獻 » 資料庫被鎖表

資料庫被鎖表

發布時間: 2021-03-15 04:33:11

『壹』 oracle資料庫表被鎖了不能操作怎麼辦

首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。
你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL
session,如果這個鎖表是正常業務你把session
kill掉了會影響業務的。
建議先查原因再做決定。
(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)殺掉對應進程
執行命令:alter
system
kill
session'1025,41';
其中1025為sid,41為serial#.

『貳』 怎麼知道資料庫表已經鎖表了

可直接在mysql命令行執行:show engine innodb statusG;

查看造成死鎖的sql語句,分析索引情況,然後優化sql然後show processlist;

show status like 『%lock%』

show OPEN TABLES where In_use > 0; 這個語句記錄當前鎖表狀態

另外可以打開慢查詢日誌,linux下打開需在my.cnf的[mysqld]裡面加上以下內容:

slow_query_log=TRUE(有些mysql版本是ON)

slow_query_log_file=/usr/local/mysql/slow_query_log.txt

long_query_time=3

select *from v$locked_object:可以獲得被鎖的對象的object_id及產生鎖的會話sid。通過查詢結果中的object_id,可以查詢到具體被鎖的對象。

(2)資料庫被鎖表擴展閱讀:

注意事項

也可以直接把這幾個視圖和表關聯起來,在查詢結果中直接得到「alter system kill session 'sid, serial#'」這樣的方便的kill sessoin命令。

如果執行kill session命令後,鎖並沒有除掉,session依然存在。這種情況,通過select spid from v$process where addr in(select paddr from v$session where sid = &sid)查詢到oracle會話在伺服器上的pid,然後登陸到伺服器上,執行kill -9 pid這樣就能殺掉進程解鎖了。

『叄』 oracle資料庫鎖表怎麼解決

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

你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。
建議先查原因再做決定。

(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)殺掉對應進程
執行命令:alter system kill session'1025,41';
其中1025為sid,41為serial#.

『肆』 如何把資料庫中被鎖表解鎖

如何把資料庫中被鎖表解鎖
在操作資料庫的時候,有時候會由於操作不當引專起資料庫表被鎖定,屬這么我們經常不知所措,不知怎麼給這些表解鎖,在pl/sql Developer工具的的菜單「tools」裡面的「sessions」可以查詢現在存在的會話,但是我們很難找到那個會話被鎖定了,想找到所以被鎖的會話就更難了,下面這叫查詢語句可以查詢出所以被鎖的會話。

『伍』 oracle資料庫表經常被鎖上,怎麼防止鎖表

鎖表時正常現象 是資料庫防止臟讀 保持數據一致性的機制

『陸』 orcal資料庫表被鎖了怎麼解鎖

1、在做Oracle監聽程序測試時,發現帳戶已經被鎖定。

『柒』 什麼情況下oracle資料庫的表會被鎖住呢

DML鎖又可以分為,行鎖、表鎖、死鎖

-行鎖:當事務執行資料庫插入、更新、刪除操作時,該事務自動獲得操作表中操作行的排它鎖。

-表級鎖:當事務獲得行鎖後,此事務也將自動獲得該行的表鎖(共享鎖),以防止其它事務進行DDL語句影響記錄行的更新。事務也可以在進行過程中獲得共享鎖或排它鎖,只有當事務顯示使用LOCK TABLE語句顯示的定義一個排它鎖時,事務才會獲得表上的排它鎖,也可使用LOCK TABLE顯示的定義一個表級的共享鎖(LOCK TABLE具體用法請參考相關文檔)。

-死鎖:當兩個事務需要一組有沖突的鎖,而不能將事務繼續下去的話,就出現死鎖。

如事務1在表A行記錄#3中有一排它鎖,並等待事務2在表A中記錄#4中排它鎖的釋放,而事務2在表A記錄行#4中有一排它鎖,並等待事務1在表A中記錄#3中排它鎖的釋放,事務1與事務2彼此等待,因此就造成了死鎖。死鎖一般是因拙劣的事務設計而產生。

死鎖只能使用SQL下:alter system kill session "sid,serial#";或者使用相關操作系統kill進程的命令,如UNIX下kill -9 sid,或者使用其它工具殺掉死鎖進程。

+DDL鎖又可以分為:排它DDL鎖、共享DDL鎖、分析鎖

-排它DDL鎖:創建、修改、刪除一個資料庫對象的DDL語句獲得操作對象的 排它鎖。如使用alter table語句時,為了維護數據的完成性、一致性、合法性,該事務獲得一排它DDL鎖。

-共享DDL鎖:需在資料庫對象之間建立相互依賴關系的DDL語句通常需共享獲得DDL鎖。

如創建一個包,該包中的過程與函數引用了不同的資料庫表,當編譯此包時,該事務就獲得了引用表的共享DDL鎖。

-分析鎖:ORACLE使用共享池存儲分析與優化過的SQL語句及PL/SQL程序,使運行相同語句的應用速度更快。一個在共享池中緩存的對象獲得它所引用資料庫對象的分析鎖。分析鎖是一種獨特的DDL鎖類型,ORACLE使用它追蹤共享池對象及它所引用資料庫對象之間的依賴關系。當一個事務修改或刪除了共享池持有分析鎖的資料庫對象時,ORACLE使共享池中的對象作廢,下次在引用這條SQL/PLSQL語句時,ORACLE重新分析編譯此語句。處理oracle中殺不掉的鎖一些ORACLE中的進程被殺掉後,狀態被置為」killed」,但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟資料庫。現在提供一種方法解決這種問題,那就是在ORACLE中殺不掉的,在OS一級再殺。

『捌』 如何將資料庫中被鎖表解鎖

在操作資料庫的時候,有時候會由於操作不當引起資料庫表被鎖定,這么我們經常不知所措,不知怎麼給這些表解鎖,在pl/sql Developer工具的的菜單「tools」裡面的「sessions」可以查詢現在存在的會話,但是我們很難找到那個會話被鎖定了,想找到所以被鎖的會話就更難了,下面這叫查詢語句可以查詢出所以被鎖的會話。如下:
SELECT sn.username, m.SID,sn.SERIAL#, m.TYPE,
DECODE (m.lmode,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
lmode, LTRIM (TO_CHAR (lmode, '990'))
) lmode,
DECODE (m.request,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
request, LTRIM (TO_CHAR (m.request, '990'))
) request,
m.id1, m.id2
FROM v$session sn, v$lock m
WHERE (sn.SID = m.SID AND m.request != 0) --存在鎖請求,即被阻塞
OR ( sn.SID = m.SID --不存在鎖請求,但是鎖定的對象被其他會話請求鎖定
AND m.request = 0
AND lmode != 4
AND (id1, id2) IN (
SELECT s.id1, s.id2
FROM v$lock s
WHERE request != 0 AND s.id1 = m.id1
AND s.id2 = m.id2)
)
ORDER BY id1, id2, m.request;

通過以上查詢知道了sid和 SERIAL#就可以開殺了
alter system kill session 'sid,SERIAL#';

『玖』 oracle表在什麼情況下會被鎖住

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

1、創建測試表,

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

熱點內容
塗鴉論文 發布:2021-03-31 13:04:48 瀏覽:698
手機資料庫應用 發布:2021-03-31 13:04:28 瀏覽:353
版面217 發布:2021-03-31 13:04:18 瀏覽:587
知網不查的資源 發布:2021-03-31 13:03:43 瀏覽:713
基金贖回參考 發布:2021-03-31 13:02:08 瀏覽:489
懸疑故事範文 發布:2021-03-31 13:02:07 瀏覽:87
做簡單的自我介紹範文 發布:2021-03-31 13:01:48 瀏覽:537
戰略地圖參考 發布:2021-03-31 13:01:09 瀏覽:463
收支模板 發布:2021-03-31 13:00:43 瀏覽:17
電氣學術會議 發布:2021-03-31 13:00:32 瀏覽:731