今天在利用plsql导入文本信息的时候,由于导入过程中网络原因中断导入,而且发现表的字段长度有点小,想扩大,所以讲xm
varchar2(20) 改成varchar2(200)结果报:ORA-00054: 资源正忙,要求指定
NOWAIT.
解决方法:
SQL> select
session_id from v$locked_object;
SESSION_ID----------142
SELECT sid, serial#, username, osuser FROM v$session where
sid=142;
SID SERIAL#
USERNAME OSUSER
---------- ---------- ------------------------------ ------
142 38
SQL> ALTER
SYSTEM KILL SESSION '142,38';
System altered
重新登录就可以对表进行更改操作。大致原因如下:
Oracle数据库的锁类型
根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data
locks,数据锁),用于保护数据的完整性;DDL锁(dictionary
locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and
latches),保护数据库的内部结构。DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。当Oracle
执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X
等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。在数据行上只有X锁(排他锁)。在
Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行
DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。