標籤:資料庫操作假死 oracle 表鎖定 commit 事務提交
問題:update 不能更新表
表中19條記錄,在更新的時候,偶爾能更新,偶爾就 update 不動了。
更新操作執行的時候,就不動了,好象是死掉一樣.
關於資料庫事務引起的問題
在oracle一個事務沒有提交之前,下一個事務是處於掛起狀態,通常會出現表被鎖定,就是上述的假死狀態。
查看被掛起的事務(或者說沒有被提交的事務),網上有的說法是查看被鎖定的表(我認為此說法不妥,表並沒有被鎖定,可以進行插入插入等操作)
(用管理使用者登入 sqlplus / as sysdba)
SELECT p.spid,
c.object_name,
b.session_id,
a.serial#,
b.oracle_username,
b.os_user_name
FROM v$process p, v$session a, v$locked_object b, all_objects c
WHERE p.addr = a.paddr
AND a.process = b.process
AND c.object_id = b.object_id;
以下為例子:
SQL> SELECT p.spid,
2 c.object_name,
3 b.session_id,
4 a.serial#,
5 b.oracle_username,
6 b.os_user_name
7 FROM v$processp, v$sessiona, v$locked_objectb, all_objectsc
8 WHERE p.addr= a.paddr
9 AND a.process= b.process
10 AND c.object_id= b.object_id;
SPID OBJECT_NAME SESSION_ID SERIAL#
------------------------------------------------------ ---------- ----------
ORACLE_USERNAME OS_USER_NAME
------------------------------------------------------------
8070 DISK_CHECK 390 3467
SECNET root
SQL> alter system killsession‘390,3467‘;
System altered.
這個表中記錄了等待被提交的事務,只要“解鎖”就可以了
將查詢出來的session_id,serial#,記錄下來使用如下語句進行解鎖
解鎖:
alter system kill session‘b.session_id,a.serial#‘;
解鎖之後就可以對錶進行update操作了,大量操作最容易引起一個事務未結束立馬進行下一個事務
要有一個好的習慣:一個事務結束立馬提交(提交命令commit;)。
oracle資料庫操作執行不了,出現假死狀態