免费注册 查看新帖 |

Chinaunix

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

[求助] redhat环境下从shell传递参数到sql出错(solaris下ok) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-09 23:31 |只看该作者 |倒序浏览
如下是在solaris执行成功的运维脚本,但是移植到redhat却出错了,详见No.2,请问如何解决?
1。solaris执行成功的运维脚本
-bash-3.00$ cat topPID_prstat.sh
#!/usr/bin/bash
num=1
day=`date +%Y%m%d`
day1=`date +%Y%m%d%H%M`
while [ $num -lt 8 ]
do
        ltime=`date +%H:%M:%S`
        second=`date +%S`
        var_pid=`prstat -a 1 1|sed -n "2p"|awk '{print $1;}'`
        cputotal=`prstat -a 1 1|sed -n "2p"|awk '{print $1,$9;}'`
#echo $var_pid;
sqlplus -S abc/abc@abc <<EOF
conn / as sysdba;
set heading off;
set serveroutput off;
set linesize 400;
set pagesize 5000;
set trimspool on;
SELECT to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),sql_text FROM v\$sqltext a WHERE (a.hash_value, a.address) IN
(SELECT DECODE (sql_hash_value,0, prev_hash_value,sql_hash_value),DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)FROM v\$session b
WHERE b.paddr = (SELECT addr FROM v\$process c WHERE c.spid =$var_pid))ORDER BY piece ASC;

EXIT
EOF

        echo $ltime $cputotal  >> /export/home/beiman/Monitor_TopPID/$day.cpu-mem.log
        let num+=1;
        sleep 1;
done
2。redhat执行出错信息如下:
[oracle@itms-sjz-db-4 Monitor]$ ./topPID_prstat.sh
WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid=12345))
                                                           *
ERROR at line 4:
ORA-00920: invalid relational operator

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
2 [报告]
发表于 2013-08-10 08:48 |只看该作者
$process 没解析吧

论坛徽章:
0
3 [报告]
发表于 2013-08-11 06:30 |只看该作者
回复 2# bikong0411
copy到论坛后显示格式错位,
*是放置在$var_pid上的,肯定是没有解析,麻烦帮忙解决一下。

   

论坛徽章:
7
酉鸡
日期:2013-10-30 17:17:51水瓶座
日期:2014-01-25 14:47:21天秤座
日期:2014-02-20 09:49:50处女座
日期:2014-11-04 17:44:082015年亚洲杯之中国
日期:2015-03-09 17:21:312015亚冠之北京国安
日期:2015-06-01 16:58:552015亚冠之山东鲁能
日期:2015-06-19 11:30:08
4 [报告]
发表于 2013-08-14 08:51 |只看该作者
使用sqlplus执行SQL的脚本有一种简单的测试手段,就是将sqlplus -S abc/abc@abc <<EOF注释掉,然后在此行下面增加一行cat <<EOF,然后执行代码,将生成的SQL语句,手工在sqlplus中执行,查找具体出错的原因。
另外spid是varchar2类型,最好将$var_pid使用单引号括起来。

论坛徽章:
0
5 [报告]
发表于 2013-08-14 10:19 |只看该作者
本帖最后由 zdj007 于 2013-08-14 10:44 编辑

回复 4# syncpk99


    感谢回复。
    测试后发现cat打印出来的sql拷贝到sqlplus中能够执行,但是直接执行shell还是老样子。
相信是c.spid=后面的参数值没有被带进数据库里。

论坛徽章:
0
6 [报告]
发表于 2013-08-20 10:09 |只看该作者
怎么解决,那位帮忙?

论坛徽章:
0
7 [报告]
发表于 2013-08-22 09:59 |只看该作者
回复 6# zdj007


    顶!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP