当前位置: 首页 > 图文教程 > 数据库 > Oracle > 解决Oracle被锁定有妙招

Oracle
常见的一些Oracle初学者的问题
ORACLE认证系统概述
数据库考试简介:Oracle认证
Oracle认证基础知识介绍
ADO连接Oracle Access示例及记录集处理源码
SQL Server和MySQL的安全性分析
用Oracle和SQL Server数据库组合利弊分析
Oracle 11g分区功能新革命
Flashback Query 恢复误删除的数据
基于Oracle高性能动态SQL程序开发
怎样在Oracle 9i中正确的转换时区
Oracle 10g导出的数据库能否导入Oracle 9i?
增加Distinct后查询效率反而提高
Oracle限制返回结果集的大小
Java语言数据库操作的基本流程
美国甲骨文(ORACLE)公司入驻渝中区大都会商厦
RHEL AS4上安装oracle 10R2 的方法
DB中如何查询Table占用空间的大小
编写高质量高性能的MySQL语法
Oracle数据库自动备份的具体实现步骤

解决Oracle被锁定有妙招


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 57 ::
收藏到网摘: n/a

  一些性能方面的告警信息通过dba_outstanding_alerts表都能查到,被锁定的表如果长期得不到释放,在这里也能查到相关session的sid和serial#。

  select * from dba_outstanding_alerts

  v$locked_object视图可以看到当前被锁定的对象,只有那些一直存在的session才有可能是被锁定的,因此不能简单匆忙的下结论,尤其是在RAC环境中,必须查看各个节点以发现相关的session在哪里。

  select * from v$locked_object

  有时候也可以根据对象名来查看锁的信息:

  select sid,id1,type from v$lock where id1=(select object_id from dba_objects where object_name=upper('mytablename'));

  找到了引起锁定的session,就可以找到对应的sid和serial#

  select saddr,sid,serial#,paddr,username,status from v$session where sid=772

  从而可以杀死这个session:

  SQL> alter system kill session '772,9044';

  System altered.

  可以查询Oracle数据库的进程和操作系统进程之间的关联:

  select spid, osuser, s.program from v$session s,v$process p

  where s.paddr=p.addr and s.sid=772

  有时候一些进程要在操作系统杀死,这时可以用kill -9 pid的命令:

  [root@erpdevdb ~]# ps -ef|grep sqlplus

  oracle 11847 11126 0 16:39 pts/1 00:00:00 sqlplus -S @/oracle/home/droptable.sql

  root 11889 11856 0 16:40 pts/2 00:00:00 grep sqlplus

  [root@erpdevdb ~]# kill -9 11847

  数据库对象锁定引起的阻塞是比较麻烦的事情,处理的时候一定要小心谨慎。