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

Oracle
Excel VBA连接并操作Oracle
Oracle 外连接实现代码
oracle 存储过程和函数例子
Oracle 数据库操作类
ORACLE 分区表的设计
Oracle 用户权限管理方法
Oracle In和exists not in和not exists的比较分析
利用windows任务计划实现oracle的定期备份
ORACLE11g随RHEL5系统自动启动与关闭的设置方法
在oracle 数据库查询的select 查询字段中关联其他表的方法
plsql和tsql常用函数比对
plsql与tsql的语法不同
ASP.NET调用oracle存储过程实现快速分页
执行drop表操作后数据库无法起动
分析Oracle有时会用索引来查找数据的原因
数据从MySQL迁移到 Oracle的注意事项
快速理解Oracle归档模式的命令及参数
在Oracle里加快SQL执行的三种方法
几条常见的数据库分页 SQL 语句
Oracle9I OCP认证过程

解决Oracle被锁定有妙招


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 62 ::
收藏到网摘: 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

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