Oracle数据库运维过程中有时会遇到一种异常情况,由于错误的 *** 作或代码BUG造成session异常地持有锁不释放,并大量阻塞系统对话。这时候需要找出造成异常阻塞的session并清除。
oracle session通常具有三个特征:
(1)一个session可能阻塞多个session;
(2)一个session最多被一个session阻塞;
(3)session阻塞关系不会形成环路。(环路即死锁,oracle能自动解除)
因此session的阻塞关系为一棵树,进而DB系统所有session的BLOCK阻塞关系是一个由若干session阻塞关系树构成的森林,而异常session一定会在故障爆发时成为根(root)。因此,找寻异常锁表session的过程就是找出异常的root。
一般认为异常root有两个特征:(1)block树的规模过大,阻塞树规模即被root层层阻塞的session总数;(2)阻塞的平均等待时间过长。
查找异常session的方法一:
OEM—> performance—> Blocking Sessions
查找异常session的方法二:
select rroot_sid, sserial#,
rblocked_num, ravg_wait_seconds,
susername,sstatus,sevent,sMACHINE,
sPROGRAM,ssql_id,sprev_sql_id
from (select root_sid, avg(seconds_in_wait) as avg_wait_seconds,
count() - 1 as blocked_num
from (select CONNECT_BY_ROOT sid as root_sid, seconds_in_wait
from v$session
start with blocking_session is null
connect by prior sid = blocking_session)
group by root_sid
having count() > 1) r,
v$session s
where rroot_sid = ssid
order by rblocked_num desc, ravg_wait_seconds desc;
该SQL语句即是根据v$session的字段blocking_session统计阻塞树根阻塞session的计数以及平均阻塞时间、并进行排序,排名最前的往往是异常session。
另外需要注意的是,持有锁时间最长、或等待时间最长的session都不一定是造成阻塞的根源session!
经过测试,在我本地是正常的。
你报错在30行,javalangNullPointerException
空指针异常,conn根本就不存在,揣测一下,你应该是没有加载mysql的驱动包!
在mysql开发中出现错误代码各种各样 下面我来给大家收集常用见的mysql使用过程中出错代码的中文说明 希望些文章对各位朋友有所帮助了
创建表失败
创建数据库失败
数据库已存在 创建数据库失败
数据库不存在 删除数据库失败
不能删除数据库文件导致删除数据库失败
不能删除数据目录导致删除数据库失败
删除数据库文件失败
不能读取系统表中的记录
记录已被其他用户修改
硬盘剩余空间不足 请加大硬盘可用空间
关键字重复 更改记录失败
关闭时发生错误
读文件错误
更改名字时发生错误
写文件错误
记录不存在
数据表是只读的 不能对它进行修改
系统内存不足 请重启数据库或重启服务器
用于排序的内存不足 请增大排序缓冲区
已到达数据库的最大连接数 请加大数据库可用连接数
系统内存不足
无效的主机名
无效连接
当前用户没有访问数据库的权限
不能连接数据库 用户名或密码错误
字段不能为空
数据库不存在
数据表已存在
数据表不存在
字段不存在
无效的SQL语句 SQL语句为空
不能建立Socket连接
数据表已满 不能容纳任何记录
打开的数据表太多
数据库出现异常 请重启数据库
连接数据库失败 没有连接数据库的权限
数据库用户不存在
当前用户无权访问数据库
当前用户无权访问数据表
当前用户无权访问数据表中的字段
数据表不存在
未定义用户对数据表的访问权限
SQL语句语法错误
网络错误 出现读错误 请检查网络连接状况
网络错误 读超时 请检查网络连接状况
网络错误 出现写错误 请检查网络连接状况
网络错误 写超时 请检查网络连接状况
字段值重复 入库失败
字段值重复 更新记录失败
打开数据表失败
提交事务失败
回滚事务失败
当前用户和数据库建立的连接已到达数据库的最大连接数 请增大可用的数据库连接数或重启数据库
加锁超时
当前用户没有创建用户的权限
外键约束检查失败 更新子表记录失败
外键约束检查失败 删除或修改主表记录失败
当前用户使用的资源已超过所允许的资源 请重启数据库或重启服务器
权限不足 您无权进行此 *** 作
lishixinzhi/Article/program/MySQL/201311/29547
1,首先排除设置了正确的SID连接
如:C:\Users\Administrator>set ORACLE_SID = orcl //确定本机数据库实例名
linux下用export ORACLE_SID=orcl
2,以sysdba连接,关闭数据库
sqlplus / as sysdba
shutdown immediate
如果不能关闭,windows下杀掉oracle进程,停掉oracle的服务
linux下:ps -ef|grep smon找到对应的pid
kill -9 <pid>
3,重新启动试试
startup
如果还是不行,查看报错原因,这里可能有很多,比如数据文件错误
4这里假如你的错误是数据文件引起
shutdown immediate
startup mount
recover datafile <datafile number>;
alter database open;
就可以了
如果之前已经备份过数据,或者目前手机中没有需要备份的数据,建议可以尝试一下手机格式化,清空所有数据,开机之后暂时不要还原数据,看看是否可以解决问题。
如果还是无法解决,建议你系统更新到最新开发版尝试。
拓展
数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
而数据库异常是由于显示找不到该表,连接数据库的时候是不是datasource不是数据库存放的全程路径名。
以上就是关于如何查看oracle数据库中哪些session异常阻塞了系统全部的内容,包括:如何查看oracle数据库中哪些session异常阻塞了系统、连接数据库出现异常该怎么解决、Mysql数据库错误代码中文详细说明等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)