免费注册 查看新帖 |

Chinaunix

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

ORACLE升级后的程序问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-29 11:50 |只看该作者 |倒序浏览
10可用积分
我的程序在AIX上,在子进程中用execlp()函数调用Oracle的exp命令.在ORACLE9.2上是没问题的,现在ORACLE10G上,就出现调用exp出不来,导致子进程一直没法结束.但备份文件有产生,不知道什么原因,请高人指点.谢谢.

程序代码大体如下:

if((pid=fork())<0)
{
  return(-3);
}

if(pid==0)
        {
        if(execlp("exp","exp",  "user/pass",  "FILE=/backup/fastback.dmp",  "LOG=/backup/fastback.exp.log",
              tableList,"BUFFER=10485360",NULL)!=0)
                      exit(4);

                 exit(0);
        }

while( (pid=wait(&status))==-1 && errno==EINTR );

论坛徽章:
0
2 [报告]
发表于 2008-07-29 13:34 |只看该作者

回复 #1 Mubai 的帖子

顶一哈

论坛徽章:
0
3 [报告]
发表于 2008-07-29 15:32 |只看该作者

回复 #1 Mubai 的帖子

再顶一哈,难道没人遇到相同的问题吗?好象是10G下的exp有点不一样呢

论坛徽章:
0
4 [报告]
发表于 2008-07-29 19:36 |只看该作者
备份日志应该也生成了吧?里面有啥内容?

论坛徽章:
0
5 [报告]
发表于 2008-07-29 20:49 |只看该作者
顶一下。没用过10G不清楚

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
6 [报告]
发表于 2008-07-29 23:42 |只看该作者
ding

论坛徽章:
0
7 [报告]
发表于 2008-07-30 08:56 |只看该作者

回复 #1 Mubai 的帖子

情况大概是这样的:程序连接数据库后,产生了一个连接数据库的子进程:oracleora10g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))。问题是exp的子进程结束后,wait()并没有等到它的返回,也就是exp完毕后内核没有向父进程发送SIGCHLD信号,从而导致wait()一直阻塞在那里,使得程序没法结束。

后将wait()方法改为waitpid(pid,&status,0),说明的确是waitpid()没有等到pid。

为什么会出现这个现象?因为同样的程序在同样的机器上,在Oracle9.2上没有问题,在Oracle10上才出问题。说明Oracle10上exp的实现可能不一样。

论坛徽章:
0
8 [报告]
发表于 2008-07-30 12:12 |只看该作者
如果你用的是10G提供的exp命令的话是不能从9I里导出数据的,必须用9I的exp才可以,导出后的文件可以用10G的imp导入
如果你是用10G的exp命令导出的数据的话,用9I的imp是不能导入的

论坛徽章:
0
9 [报告]
发表于 2008-07-30 12:14 |只看该作者
原帖由 Mubai 于 2008-7-30 08:56 发表
情况大概是这样的:程序连接数据库后,产生了一个连接数据库的子进程:oracleora10g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))。问题是exp的子进程结束后,wait()并没有等到它的返回,也就是exp完毕 ...



10G的exp确实和9i不一样,你把9i的exp拷到10G中exp所在的bin下面,换个别的名字比如exp9i你在修改你的程序,把exp换成exp9i,这样就应该没问题了

[ 本帖最后由 interboy 于 2008-7-30 12:16 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-07-30 21:09 |只看该作者
又看了看,我前面的回答似乎有些驴唇不对马嘴。:wink:

可能是10G的exp导出完成后返回值变了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP