免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4040 | 回复: 4
打印 上一主题 下一主题

Issuing rollback() for database without explicit disconnect() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-17 16:29 |只看该作者 |倒序浏览
我在程序中ExecuteJob有连接数据库MYSQL的连接与断开操作.
程序运行在子进程中,目的是同时可以有N个操作同时进行.

  1.         my $pid=fork();
  2.         if ( $pid == 0 )
  3.         {
  4.             eval{
  5.                 my $rtn = &ExecuteJob(@row_ary);
  6.             };
  7.             if ($@)
  8.             {
  9.                 &PrintLog("ExecuteJob have error : $@",'ERROR');
  10.             }
  11.             exit 0;
  12.         }
复制代码


断开时出现这个错误.

  1. Issuing rollback() for database handle being DESTROY'd without explicit disconnect(), <DATA> line 283.
复制代码


但是我已经显示的断开了:
$dbh->commit;
$dbh->disconnect;

不知道为什么出现这个错误,帮我分析下,谢谢

论坛徽章:
0
2 [报告]
发表于 2006-05-17 17:57 |只看该作者
郁闷的是 我把
my $rtn = &ExecuteJob(@row_ary);
放到主程序中顺序执行就不报错
请问在子进程中有什么限制吗?

论坛徽章:
0
3 [报告]
发表于 2006-05-18 17:06 |只看该作者
大虾 谁碰到过这种问题 谢谢

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-05-19 08:31 |只看该作者
my $rtn = &ExecuteJob(@row_ary);
你是不是在child process连上DB?并断开?
如果是的话,
检查一下跟parent process连的时候有什麽差别。
另外你可以试试看先
$sth->finish;
然後再
$dbh->disconnect;

通常我连DB都会打开auto_commit...
所以没碰过你的问题....

论坛徽章:
0
5 [报告]
发表于 2006-05-19 15:17 |只看该作者
事情解决:
解决方式
是在进入子进程之前 父进程仍然连接着DB, 一开始我认为是没有问题的 因为子进程中是单独连接
但是这样就总是报错

后来我在父进程中更改循环方式 首先结束$dbh->disconnect;
这样就不出现这个错误了

但是我还是不理解子进程的连接和父进程有什么关系?

虽然我没有开自动提交 但是后来我每做一个SQL提交一次了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP