oracle 鎖表解決方法
今天碰到一個問題,有一張表不能操作,很可能是被鎖了,首先想到的是kill session,於是執行了下列的指令碼找到是哪個session有問題:
查看錶是否被鎖
1 2 3 4 5 |
|
根據上面查詢出的sid,找出對應的serial#:
SELECT sid,serial# FROM v$session WHERE sid = &sid;
發現有一個會話有鎖sid 197,serial# 17,於是執行alter system kill session ‘197,17';大概等了30s中,pl/sql developer報出一個錯誤:ora-00031:標記要終止的會話。
解決方法:查出session的spid
select spid, osuser, s.program from v$session s, v$process p where s.paddr = p.addr and s.sid =197;
1. 在linux上, kill -9 12345
2. 在windows上,C:\Documents and Settings\gg>orakill orcl 12345
orcl:表示要殺死的程序屬於的例項名
12345:是要殺掉的執行緒號
ORA-00031: session marked for kill
Cause: The session specified in an ALTER SYSTEM KILL SESSION command cannot bekilled immediately (because it is rolling back or blocked on a networkoperation), but it has been marked for kill. This means it will be killed as soonas possible after its current uninterruptible operation is done.
Action: No action is required for the session to be killed, but further executionsof the ALTER SYSTEM KILL SESSION command on this session may cause the sessionto be killed sooner.
下面是補充:
oracle中編譯一個包的時候發現,只要一編譯就卡死了,後來使用《oracle查詢、Kill鎖資源的SQL語句》方法查鎖的時候發現包中用到的一些資源一直處於死鎖狀態。後來通過alter system kill session的方法去解鎖,卻發現出現如下圖1所示的問題:
ORA-00031:標記要終止的會話
ORA-00031:標記要終止的會話
後來通過連線上oracle資料庫所在的系統,然後kill掉程序解決,方法如下:
(1)查詢被鎖資源的sid、serial#:
1 2 3 4 5 6 7 8 9 |
|
(2)利用上面的SQL查詢出sid和serial#以後,利用下面SQL去kill session:
-- 如有記錄則表示lock,記錄下SID和serial#,將記錄下的SID和serial#替換下面的738,1429,即可接觸lock。
ALTER SYSTEM KILL SESSION '738,1429';
(3)如果上面的kill session報如上圖1的錯誤,那麼再用下面的SQL去查處session對應的spid:
1 2 3 4 5 6 7 |
|
(4)連上oracle資料庫所在的系統(我這裡是Linux系統),記錄下上面查到的spid(假設這裡查到的是1133),然後使用下面語句來kill掉程序:
kill -9 1133
等待一會,等程序kill成功以後,再去查鎖即可發現資源已經被釋放。如果oracle安裝在Windows系統上,請使用Windows系統的kill程序的方式去殺掉程序。
相關推薦
oracle 鎖表解決方法
今天碰到一個問題,有一張表不能操作,很可能是被鎖了,首先想到的是kill session,於是執行了下列的指令碼找到是哪個session有問題: 查看錶是否被鎖 ? 1 2 3 4 5 SELECT /*+
MySQL鎖表解決方法(轉)
一、我的處理過程 1、查程序,主要是查詢被鎖表的那個程序的ID SHOW PROCESSLIST; 2、kill掉鎖表的程序ID KILL 10866;//後面的數字即時程序的ID 網上找了些資料,瞭解了一下,先分享一下: 二、mysql的鎖表問題 SHOW PROCESSLIST檢視資料庫中表的狀態
ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句方法
1. ORACLE中檢視當前系統中鎖表情況 select * from v$locked_object 可以通過查詢v$locked_object拿到sid和objectid,然後用sid和v$session連結串列查詢是哪裡鎖的表,用v$sessio
ORACLE鎖表暴力解決方法
一、概述 二、方法 1、找出被鎖物件 select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o wh
oracle 出現不能查詢sql時候, 表被鎖住解決方法
select object_name as 物件名稱,s.sid,s.serial#,p.spid as 系統程序號from v$locked_object l , dba_objects o , v$session s , v$process pwhere l.object
Oracle鎖表查詢和解鎖方法
數據庫查詢 lar 關系 鎖級別 share 技術 獲取 suse b2c 數據庫操作語句的分類 DDL:數據庫模式定義語言,關鍵字:create DML:數據操縱語言,關鍵字:Insert、delete、update DCL:數據庫控制語言 ,關鍵字:grant
oracle死鎖的解決方法
1、 關於死鎖 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序 2、 怎麼解決死鎖 檢視引起死鎖的語句:
SqlServer表死鎖的解決方法(轉)
前些天寫一個儲存過程,儲存過程中使用了事務,後來我把一些程式碼註釋掉來進行除錯找錯,突然發現一張表被鎖住了,原來是建立事務的程式碼忘記註釋掉。本文表鎖住了的解決方法。 其實不光是上面描述的情況會鎖住表,還有很多種場景會使表放生死鎖,解鎖其實很簡單,下面用一個示例來講解: 1 首先建立一個測試用的表: CR
insert delete 語句卡死,oracle資料庫鎖表解決。
delete table XXX where ……,卡死。 select * from XXX for update 的時候沒有commit,oracle將該記錄鎖住了。 先查詢鎖定記錄 Sql
Oracle資料庫"記錄被另一個使用者鎖住"解決方法
1、先來看看為什麼會出鎖住: 資料庫是一個多使用者使用的共享資源。當多個使用者併發地存取資料時,在資料庫中就會產生多個事務同時存取同一資料的情況。若對併發操作不加控制就可能會讀取和儲存不正確的資料,破壞資料庫的一致性。 加鎖是實現資料庫併發控制的一個非常重要的技術
Oracle DML和DDL鎖的解決方法
二、DDL鎖解決辦法 假設鎖在會話1上 session1: create or replace procedure p_test is begin dbms_lock.sleep(1000); end; call p_test(); 系統現在無法完成DML操作,這個時候要人工造成一個鎖等待衝突的現象 se
for update造成的Oracle鎖表與解鎖
執行 lec 如果 pl/sql 查看 數據 system oracle log 我遇到的情況: 當使用select語句查詢表時,後面跟著for update , select * from table for update 當修改表中數據,但是沒有com
oracle鎖表問題
ria pan family objects -s 問題 釋放 select serial 查詢是否有鎖表: --鎖表查詢 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, d
Windows無法安裝到這個磁盤 選中的磁盤具有MBR分區表解決方法
xtend led 分區安裝 刪掉 操作系統 win8 默認 朋友 包含 在安裝 win10的時候,會出現這種提示:Windows 無法安裝到這個磁盤。選中的磁 盤具有 MBR 分區表。在 EFI 系統上, Windows 只能安裝到 GPT 磁盤。出現這種 情況主要是因為
postgresql查看死鎖及解決方法
sel can from 數據 post sta 進程 wait nbsp 檢索出死鎖進程的ID SELECT * FROM pg_stat_activity WHERE datname=‘數據庫名‘ and waiting=‘t‘; 找到對用的pid列的值
ORACLE 鎖表物件 | 鎖表程序 | 字符集 | 版本號 |預設表空間
1. 查詢當前使用者鎖表物件 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_n
無法獲得鎖統一解決方法
Linux的ubuntu安裝軟體時出現無法獲得鎖的問題 原因: 既然是無法獲得鎖,那就是你要使用的資源被佔用了,其他的程序佔用了你要使用的資源,擁有了這個鎖。所以一般都是因為資源被佔用引起。 解決方案: 1. 檢視程序 ps aux | grep apt 這個命令將列出
Oracle鎖表資訊處理步驟
檢視是否有鎖表的sql select 'blocker(' || lb.sid || ':' || sb.username || ')-sql:' || qb.sql_text blockers, 'waiter (' || lw.sid || ':' || sw.usern
oracle for update造成的Oracle鎖表與解鎖
我遇到的情況: 當使用select語句查詢表時,後面跟著for update , select * from table for update 當修改表中資料,但是沒有commit就關掉PL/SQL,下次再開啟,執行帶for update的sql語句,就會卡死
Oracle 鎖表查詢
--以下幾個為相關表 SELECT * FROM v$lock; SELECT * FROM v$sqlarea; SELECT * FROM v$session; SELECT * FROM v$process ; SELECT * FROM v$locked_object; SELECT * F