免费注册 查看新帖 |

Chinaunix

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

求救~关于HP-UX ia64平台程序接收到异常信息退出并无CORE文件产生 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-27 18:24 |只看该作者 |倒序浏览
程序代码如下:
int QueryServ()
{
        Environment* env = Environment::createEnvironment(Environment::THREADED_MUTEXED);
        Connection* conn = env->createConnection("user", "pwd", "org11g");
        Statement* stmt = 0x00;
        ResultSet* ds   = 0x00;
        string sql = "select serv_id from serv where serial = :v1";
       

        // 此处发出SIGABRT信号,应该程序在此处退出并产生CORE文件
        abort();

       
        try
        {
                printf("Exec query!\n");
                stmt = conn->createStatement(sql);
                stmt->setNumber(1, 2043127780);
                ds = stmt->executeQuery();
                while (ds->next()) {
                        long serv_id = ds->getNumber(1);
                        printf("serv_id = %ld!\n", serv_id);
                }
        }
        catch(SQLException &ex){
                printf("catch error is : %s!", ex.what());
                return -1
        }
       
  stmt->closeResultSet(ds);
  conn->terminateStatement(stmt);
  return 0;
}

但是程序运行的结果是:
1、程序退出字符串Exec query没有打印,也没有core文件产生。按现理说abort()会发出SIGABRT信号导致程序退出并且有core文件产生。
2、而将abort()函数放至Connection* conn = env->createConnection("user", "pwd", "org11g");处理前则会退出并且产生core文件!

引出的问题是为什么使用ORACLE函数接口获取了一个数据库连接之后为什么不会产生core文件?
在网上查询了一些资料说ORACLE的sqlnet.ora配置文件里的BEQUEATH_DETACH参数是控制信号捕获的开关,如下:

1.BEQUEATH_DETACH

bequeath_detach

The default is NO (turn signal handling on). By setting BEQUEATH_DETACH=YES, Oracle turns off its own signal handlers and pass all child processes over to the UNIX init process (pid = 1). The init process will take over responsibility to checks for "defunct" child processes and terminate them.

Instead of setting this parameter in the sqlnet.ora file, consider setting it as an environment variable before starting applications that use signal handlers that could interfere with SQL*Net. Example:
export BEQUEATH_DETACH=YES


针对上面的解说:
1、上在的代码不变,修改sqlnet.ora参数为YES并重启数据库的监控,执行应该是不会产生CORE文件;
2、使用上面说的替代方式在环境变量中添加export BEQUEATH_DETACH=YES重新执行程序,依然没有产生core,感觉信号依然被oracle给捕获了。
3、在另外一台AIX主机上执行上面的代码,而且SQLNET.ORA和环境变量也没有设置的,却core出来了。

现在的疑问是:
1、为什么在HP主机上只要获取了一个ORACLE连接,程序如何都CORE不出来?这是否因为ORACLE将信号捕获了的原故还是其他?
2、如果是ORACLE把信号捕获了,那为什么设置BEQUEATH_DETACH不起作用?是否是使用别的参数或什么方式,请哪个高手高手高高手指点一下!
3、为什么同样的代码AIX上却能CORE出来?难道ORACLE在两个平台的处理存在差异?

请各位高手~指教一下~~~

看过想知道结果的请路过的兄弟姐妹们帮顶一下~~~!

论坛徽章:
10
处女座
日期:2015-01-22 16:08:50技术图书徽章
日期:2018-09-13 11:25:52技术图书徽章
日期:2018-09-13 11:25:45技术图书徽章
日期:2018-09-13 11:25:37技术图书徽章
日期:2018-09-13 11:25:29黑曼巴
日期:2018-06-04 09:03:192017金鸡报晓
日期:2017-01-10 15:19:56极客徽章
日期:2016-12-07 14:03:402015年迎新春徽章
日期:2015-03-04 09:50:28技术图书徽章
日期:2018-09-13 11:26:01
2 [报告]
发表于 2012-01-28 12:20 |只看该作者
路过帮顶。

论坛徽章:
48
15-16赛季CBA联赛之青岛
日期:2021-01-07 13:41:2315-16赛季CBA联赛之上海
日期:2020-12-01 18:02:0720周年集字徽章-20	
日期:2020-10-28 14:14:2620周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之天津
日期:2020-10-18 22:51:412016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之北控
日期:2015-12-22 13:30:48操作系统版块每日发帖之星
日期:2015-12-07 06:20:00操作系统版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-08-05 18:46:082015年亚洲杯之巴勒斯坦
日期:2015-04-19 10:42:502015年亚洲杯之巴林
日期:2015-04-09 08:03:23
3 [报告]
发表于 2012-01-29 09:49 |只看该作者
这问题应该先问应用~

论坛徽章:
0
4 [报告]
发表于 2012-01-30 08:34 |只看该作者
该问题已经解决了,应该是DIAG_SIGHANDLER_ENABLED这个参数配置
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP