动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > DB2教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ DB2教程 ]的信息

本月文章推荐
.DB2数据库完整性暂挂SQL0668N的错.
.关于DB2数据库的系统信息集成(1.
.教你快速掌握IBM DB2数据库的性能.
.DB2中的数据移动——装入(1).
.将XML应用程序从DB2 8.x迁移到Vi.
.教你轻松掌握DB2 9.5的数据库内存.
.DB2数据库归档日志的管理方案简介.
.让DB2数据库使用所有内存的方法(.
.提高数据库性能 让无关处理放到外.
.详细讲解IBM DB2数据库无限活动日.
.使用重定向恢复DB2数据库.
.如何操作Excel读取数据导入DB2数.
.IBM DB2通用数据库和信息管理(1.
.关于DB2 9数据库优点及缺点详细分.
.DB2 9数据库中有关同步trigger的.
.IBM DB2 OLAP多维服务器解决方案.
.DB2数据库导出表结构与导入导出表.
.DB2 9 数据库服务器管理之DB2实例.
.带你深入了解DB2数据库优化的六个.
.IBM DB2跨平台数据库迁移步骤和注.

DBA:临时表游标未释放导致回滚段空间不足

发表日期:2008-6-5 |


这篇论坛文章(赛迪网技术社区)根据笔者在工作中遇到的临时表游标未释放导致回滚段空间不足的错误现象及解决方法进行详尽的介绍,更多内容请参考下文:

一大早,突然收到生产系统报出多个ORA-01650错误,报回滚段空间不足。

先分析一下相关背景。产生报错的程序是一个数据处理模块,每天会将其他系统传过来的平面文件中的内容处理后放入数据库中,事务量很大。我们的系统是9i,划分了16个回滚段,其中两个大的batch回滚段,每个batch回滚段有6G的足够空间。而数据处理模块会在事务中指定使用BATCH1。

再分析报错的模块。检查相关的数据事务处理部分,由于业务需要保持数据的一致性,需要处理完1个文件后才能提交,中间如果出错就要全部回滚。经过确认,这部分代码有很长时间没有做改动了。然后再确认数据量,可以确认,今天(周五)是一周之内文件内容最少的一天。也就是说,如果由于数据量引起错误,其他时间的概率应该更大。

但是,有一点需要注意。指定回滚段是针对事务的,不是针对回滚段。也就是说,我们可以指定某个事务只使用某个回滚段,但是不能保证这个回滚段只被这个事务事务。当一个事务申请使用回滚段时,如果没有自己指定,oracle就会根据当时的各个回滚段的使用情况,分配一个最合适的回滚段给这个事务使用。因此,报回滚段空间不足的事务可能不一定就是导致回滚段空间不足的事务。还有一种可能就是,事务所指定的回滚段被其他事务所占用了。

于是我们就检查是否还有其他事务占用了该回滚段。

SELECT s.sid, s.username, s.osuser, s.machine, s.program,

t.xidusn,t.ubafil,t.ubablk,t.used_ublk, t.log_io, t.phy_io, t.cr_get, t.cr_change,

r.name, q.sql_text

FROM v$session s,v$transaction t, v$RollName r, v$sqlarea q

WHERE s.saddr=t.ses_addr

and t.xidusn = r.usn

and s.sql_address = q.address(+)

and s.sql_hash_value = q.hash_value(+)

And r,name = 'RBS_BATCH1';

果然发现有5个事务在占用BATCH1。但是发现会话状态为INACTIVE。这说明它们当时并没有运行INSERT/UPDATE/DELETE语句(曾经运行过,事务没有结束),而是将回滚段资源hung住了。

再查下那些对象被hung在BATCH1中,

select l.session_id, l.os_user_name, l.oracle_username, o.owner, o.object_name, t.xidusn,t.ubafil,t.ubablk,t.used_ublk, t.used_urec,

t.log_io, t.phy_io, t.cr_get, t.cr_change, r.name

from v$locked_object l, dba_objects o, v$transaction t, v$RollName r

where l.object_id = o.object_id

and l.xidusn = t.xidusn

and l.xidslot = t.xidslot

and l.xidsqn = t.xidsqn

and t.xidusn = r.usn;

嗯,都是同一个对象:“TMP_CNT_GRP”。通过SID确认,确实上面的事务都是将这个对象hung在RBS中的。

经过检查,原来这个对象是一个临时表。我们知道,临时表对象平时是不存在数据的。只有当一个会话使用临时表,并向表中插入数据后,oracle才会在临时表空间上创建它的数据对象。临时表数据之所以只被所调用会话看到,是实际上是在每个会话中创建了一个单独的数据对象,有各自的数据对象标号。因此尽管是同一个临时表,每个会话只是copy一个表结构,而创建了不同的数据对象,这样,会话之间就不会有数据干扰。而在一个会话中,对临时表数据对象的处理跟普通数据对象处理基本相同,其中就包括临时表对象在事务中的数据改动也会有回滚信息的产生。

回到我们的问题中。通过V$SESSION和V$SQL_AREA查到,这些会话都是调用了一个PLSQL函数,而且都是通过java调用的。

Review代码,终于发现潜在问题了:这个函数的结果是返回一个游标,而游标恰恰关联了这张临时表。

INSERT INTO TMP_CNT_GRP ...

SELECT...

... ...

open v_cursor FOR

select TMP.CDE,

CAR.ID,

CAR.NME,

COUNT(DISTINCT TMP.NUM) TOTAL_CNT

from TMP_CNT_GRP TMP,

CSS_CAR CAR

WHERE TMP.ID = CAR.ID

GROUP BY TMP.CDE, CAR.ID, CAR.NME;

RETURN v_cursor;

DELETE TMP_CNT_GRP;

(这段代码其实还存在一个问题,也就是最后的DELETE语句根本不会被调用)

从这段代码中可以看到,实际上在整个函数当中,临时表的数据根本不会被释放;而且也没有提交和回滚事务(尽管这是一个会话级的临时表)。占用的回滚段也不会被释放。这就存在这样的潜在问题,如果调用者不关闭会话或提交/回滚事务的话,它所占用的回滚段就不会被释放。事实上,经过让java开发人员检查代码,果然发现客户端在打开会话后,就没有关闭,知道客户端本身结束。

最后的解决办法:

1、因为这是一个会话级的临时表,数据在事务提交后继续保留,因此在PLSQL函数中的insert语句后加上commit;

2、Java代码在使用完游标后关闭会话。

上一篇:UNIX环境下手动安装DB2数据库的详细步骤 人气:665
下一篇:AIX环境下DB2许可证问题的解决方法及步骤 人气:556
浏览全部DB2的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成