及解决求救:Oracle被锁的原因及如何解决(oracle被锁原因)
Oracle被锁定是指有多个用户同时访问Oracle数据库时出现锁定问题,此时,在某些数据库操作方面,用户会感到无法正常使用。而如何解决Oracle被锁定问题呢?
一、原因分析
究其原因,可能同一表有两个用户在操作,或数据库积压太多,产生活动锁定保护,还有可能是数据库及相关文件从未及时定期进行检查,等等。
二、客户端操作
(1)检查相关*.TRC和ALERT*.LOG文件
首先要确认是哪个用户在使用Oracle被锁定,可以通过查询.trc和alert*.log文件,查找到哪个用户发起的锁定操作,便于后面的操作。
(2)检查有无死锁
在查询完相关日志找到潜在原因之后,要确认是否存在死锁情况,如果存在,可以使用以下查询语句找到进程的sid和serial#:
SQL>SELECT sid,serial# from V$SESSION WHERE username=’XXXX’
(3)查询是否存在任一锁定及关联pid
接着,可以用以下查询语句来查看是否有其他进程发起了锁定操作,以及有没有关联的:
SQL>SELECT l.sid, l.serial#, h.htype, h.obj# FROM v$lock l, v$handle h where l.sid=&sid and l.serial#=&serial# and l. ID1 = h.ID1;
(4)分析死锁的行为
如果死锁的行为能够分析出原因,那就可以通过更改以上步骤,解决掉死锁的情况。
三、服务端操作
(1)查看系统实例
要解决好Oracle被锁定问题,一个重要的一步是查看系统实例,如下:
SQL>SELECT inst_id,last_shutdown_mode FROM gv$instance;
(2)查看监听器状态
其次,要查看监听器是否正常工作,监听器是否启动,用下面这条语句检查:
SQL>SELECT FROM gv$tns_listener
(3)查看表空间
接着,要查看表空间的状态,即检查表空间是不是正常使用,用下面这句来查看:
SQL>SELECT tablespace_name,bytes/1024/1024,autoextensible FROM dba_data_files;
(4)查看回收段状态
最后,要检查表空间的回收段状态,即查看是否有残留回收段,用下面这条来查询:
SQL>SELECT segment_name,tablespace_name FROM dba_rollback_segs;
以上步骤可以帮助我们检查出问题的根源,并尝试着找到一个有效的解决方案。
四、总结
锁定是多用户操作ORACLE数据库时的一种普遍现象,如何解决Oracle被锁定问题,就要先从原理上分析,检查客户端操作日志和服务端及关联原因,而更应该重视以上几个步骤,确保Oracle数据库的安全性和正常工作。