免费注册 查看新帖 |

Chinaunix

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

HP-UNIX服务器下的shell程序报错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-05 09:57 |只看该作者 |倒序浏览
在HP服务器上装的ORACLE数据库,想用脚本监控表空间情况, < 10的时候触发相应的动作。 用sql语句只取了三个字段的内容,一个是表空间的名称,一个是表空间的剩余百分比,最后一个就是真正剩余的多少,是以M为单位的。
我在AIX的机器上测试脚本都没有问题,可是移到HP机器上老是报错就。
脚本如下:
vi table_space.sh
"table_space.sh" 65 lines, 2853 characters
#!/bin/sh
###################################################################
#THE SCRIPT creat time: 2008-04-11
#THE SCRIPT NOTE  is  : watch the table_space
###################################################################
CMD_PATH=/usr/bin
ORACLE_BASE=/oracle/app;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/9.2.0;export ORACLE_HOME
ORACLE_SID=siebdb;export ORACLE_SID
TEST_BASE=/oracle/itm6;export TEST_BASE
PATH=$PATHORACLE_HOME/binTEST_BASE:.
export PATH
ALARM_PATH="/oracle/itm6/patrol_event"
HOST_IP=10.4.44.24
TIME_VAL="`date '+%y/%m/%d %H:%M:%S'`"
#sqlplus ${DB_USER}/${DB_PASS}@${Service_Name} <<! >/dev/null
sqlplus '/as sysdba' <<! >/dev/null
set linesize  800
set head off
set feedback off
set termout off
WHENEVER SQLERROR EXIT FAILURE
WHENEVER OSERROR EXIT FAILURE
spool spaceview.txt
SELECT tablespace_name ,100*(sum_max-sum_alloc+nvl(sum_free,0))/sum_max ,(sum_max-sum_alloc+nvl(sum_free,0))/10
24/1024   FROM ( SELECT tablespace_name, sum(bytes) AS sum_alloc, sum(decode(maxbytes,0,bytes,maxbytes)) AS sum
_max FROM dba_data_files GROUP BY tablespace_name),( SELECT tablespace_name AS fs_ts_name, sum(bytes) AS sum_fr
ee FROM dba_free_space GROUP BY tablespace_name )WHERE tablespace_name = fs_ts_name(+)order by 1;
!
$CMD_PATH/cat spaceview.txt|$CMD_PATH/grep -v '^SQL'|sed '/^$/d'   > $TEST_BASE/oracle.log

while read LINE
do
s=$LINE
FRE_NU=`$CMD_PATH/echo $s|awk '{ if ($2 < 10) print $2}'`
TABLE_NAME=`echo $s|awk '{ if( $2 < 10) print $1}'`
FRE_TOAL=`$CMD_PATH/echo $s|awk '{ if ( $2 < 10) print $3}'`
echo "FRE_NU is FRE_NU" > log1.log
if [ $FRE_NU < 10 ] ;then
$CMD_PATH/echo $TIME_VAL >>log4.log
echo "${ALARM_PATH}/AddExtEvent.sh HOST_IP $TABLE_NAME tb_space Nms minor $FRE_NU $FRE_TOAL 36 "${TIME_VAL}"">>
$TEST_BASE/table_space.log
fi
done < $TEST_BASE/oracle.log

执行后总是报错,说是table_space.sh[37]: 10: Cannot find or open the file.

然后我用sh -x table_space.sh 看了一下脚本的执行过程,都是到了if判断这就出问题了,请帮忙看一下,是什么原因呢?
sh -x table_space.sh
+ CMD_PATH=/usr/bin
+ ORACLE_BASE=/oracle/app
+ export ORACLE_BASE
+ ORACLE_HOME=/oracle/app/product/9.2.0
+ export ORACLE_HOME
+ ORACLE_SID=siebdb
+ export ORACLE_SID
+ TEST_BASE=/oracle/itm6
+ export TEST_BASE
+ PATH=/usr/sbin:/usr/bin:/opt/ansic/bin:/usr/ccs/bin:/usr/contrib/bin:/opt/hparray/bin:/opt/nettladm/bin:/opt/upgrade/bin:/opt/fcms/bin:/opt/pd/bin:/usr/bin/X11:/usr/contrib/bin/X11:/opt/resmon/bin:/opt/aCC/bin:/opt/gnome/bin:/opt/ignite/bin:/opt/mozilla:/opt/wbem/bin:/opt/wbem/sbin:/opt/hpsmh/bin:/opt/perl/bin:/opt/ssh/bin:/opt/langtools/bin:/opt/imake/bin:/opt/gwlm/bin:/usr/sbin/diag/contrib:/opt/graphics/common/bin:/opt/perf/bin:/sbin:/home/root:/oracle/app/product/9.2.0/bin:/oracle/itm6:.
+ export PATH
+ ALARM_PATH=/oracle/itm6/patrol_event
+ HOST_IP=10.4.44.24
+ + date +%y/%m/%d %H:%M:%S
TIME_VAL=08/04/28 14:12:46
+ sqlplus /as sysdba
+ 0< /var/tmp/sh20193.1 1> /dev/null
+ /usr/bin/cat spaceview.txt
+ /usr/bin/grep -v ^SQL
+ sed /^$/d
+ 1> /oracle/itm6/oracle.log
+ 0< /oracle/itm6/oracle.log
+ read LINE
+ s=EIM_DATA                                                            58.7422917                                     35245.375
+ + awk { if ($2 < 10) print $2}
+ /usr/bin/echo EIM_DATA 58.7422917 35245.375
FRE_NU=
+ + awk { if( $2 < 10) print $1}
+ echo EIM_DATA 58.7422917 35245.375
TABLE_NAME=
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo EIM_DATA 58.7422917 35245.375
FRE_TOAL=
+ echo FRE_NU is :
+ 1> log1.log
+ [ ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE
+ s=EIM_IDX                                                             71.0909856                                    36967.3125
+ + awk { if ($2 < 10) print $2}
+ /usr/bin/echo EIM_IDX 71.0909856 36967.3125
FRE_NU=
+ + echo EIM_IDX 71.0909856 36967.3125
+ awk { if( $2 < 10) print $1}
TABLE_NAME=
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo EIM_IDX 71.0909856 36967.3125
FRE_TOAL=
+ echo FRE_NU is :
+ 1> log1.log
+ [ ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE
+ s=SIEB_DATA                                                           5.95303775                                    156294.625
+ + awk { if ($2 < 10) print $2}
+ /usr/bin/echo SIEB_DATA 5.95303775 156294.625
FRE_NU=5.95303775
+ + awk { if( $2 < 10) print $1}
+ echo SIEB_DATA 5.95303775 156294.625
TABLE_NAME=SIEB_DATA
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo SIEB_DATA 5.95303775 156294.625
FRE_TOAL=156294.625
+ echo FRE_NU is :5.95303775
+ 1> log1.log
+ [ 5.95303775 ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE
+ s=SIEB_IDX                                                            11.2030312                                    239668.688
+ + awk { if ($2 < 10) print $2}
+ /usr/bin/echo SIEB_IDX 11.2030312 239668.688
FRE_NU=
+ + echo SIEB_IDX 11.2030312 239668.688
+ awk { if( $2 < 10) print $1}
TABLE_NAME=
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo SIEB_IDX 11.2030312 239668.688
FRE_TOAL=
+ echo FRE_NU is :
+ 1> log1.log
+ [ ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE
+ s=SYSTEM                                                              68.1660156                                    1363.32031
+ + /usr/bin/echo SYSTEM 68.1660156 1363.32031
+ awk { if ($2 < 10) print $2}
FRE_NU=
+ + echo SYSTEM 68.1660156 1363.32031
+ awk { if( $2 < 10) print $1}
TABLE_NAME=
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo SYSTEM 68.1660156 1363.32031
FRE_TOAL=
+ echo FRE_NU is :
+ 1> log1.log
+ [ ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE
+ s=TIVOLIORTS                                                          74.7025994                                     12213.875
+ + awk { if ($2 < 10) print $2}
+ /usr/bin/echo TIVOLIORTS 74.7025994 12213.875
FRE_NU=
+ + awk { if( $2 < 10) print $1}
+ echo TIVOLIORTS 74.7025994 12213.875
TABLE_NAME=
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo TIVOLIORTS 74.7025994 12213.875
FRE_TOAL=
+ echo FRE_NU is :
+ 1> log1.log
+ [ ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE
+ s=UNDOTBS                                                             32.5243317                                    19465.8125
+ + awk { if ($2 < 10) print $2}
+ /usr/bin/echo UNDOTBS 32.5243317 19465.8125
FRE_NU=
+ + awk { if( $2 < 10) print $1}
+ echo UNDOTBS 32.5243317 19465.8125
TABLE_NAME=
+ + awk { if ( $2 < 10) print $3}
+ /usr/bin/echo UNDOTBS 32.5243317 19465.8125
FRE_TOAL=
+ echo FRE_NU is :
+ 1> log1.log
+ [ ]
+ table_space.sh[37]: 10: Cannot find or open the file.
+ read LINE

论坛徽章:
0
2 [报告]
发表于 2008-05-05 10:07 |只看该作者
echo "${ALARM_PATH}/AddExtEvent.sh HOST_IP $TABLE_NAME tb_space Nms minor $FRE_NU $FRE_TOAL 36 "${TIME_VAL}"">>
$TEST_BASE/table_space.log
there is a '\n'  between  that
check it

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2008-05-05 10:17 |只看该作者
if [ $FRE_NU < 10 ] ;then

if [ $FRE_NU -lt 10 ] ;then

论坛徽章:
0
4 [报告]
发表于 2008-05-05 10:37 |只看该作者

回复 #3 waker 的帖子

if [ $FRE_NU -lt 10 ] ;then  这个我也用过了,还是报上面同样的错误。
有人说可能是括号的问题? 改为小括号,我还没试,不知道和这个有关系没?

论坛徽章:
0
5 [报告]
发表于 2008-05-05 10:38 |只看该作者

回复 #2 nuclearxin 的帖子

echo "${ALARM_PATH}/AddExtEvent.sh HOST_IP $TABLE_NAME tb_space Nms minor $FRE_NU $FRE_TOAL 36 "${TIME_VAL}"">>
$TEST_BASE/table_space.log
there is a '\n'  between  that
check it


这个是一行的,贴的时候分成两行了。 不是这个的事情。

论坛徽章:
0
6 [报告]
发表于 2008-05-05 10:51 |只看该作者
not enought message;
post your  script

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

回复 #6 nuclearxin 的帖子

vi spaceview.txt
"spaceview.txt" 21 lines, 3521 characters
SQL> SELECT tablespace_name ,100*(sum_max-sum_alloc+nvl(sum_free,0))/sum_max ,(sum_max-sum_alloc+nvl(sum_free,0))/1024/1024
FROM ( SELECT tablespace_name, sum(bytes) AS sum_alloc, sum(decode(maxbytes,0,bytes,maxbytes)) AS sum_max FROM dba_data_file
s GROUP BY tablespace_name),( SELECT tablespace_name AS fs_ts_name, sum(bytes) AS sum_free FROM dba_free_space GROUP BY table
space_name )WHERE tablespace_name = fs_ts_name(+)order by 1;

BACK                                                                    86.625                                       43.3125

DRSYS                                                                  75.9375                                       15.1875

INDX                                                                    99.975                                      249.9375

ITNMS2_DATA                                                         97.3416316                                    63793.7813

ITNMS2_INDEX                                                        98.2291213                                    64375.4063

PERFSTAT                                                            55.3894043                                      567.1875

SYSTEM                                                               82.510376                                     1689.8125

TIVOLIORTS                                                              99.875                                      249.6875

TOOLS                                                                   99.375                                        9.9375


这个是我用语句得到的结果,我要分析这个文件,第一列是表空间的名字,第二列是表空间剩余百分比,第三列是实在的剩余量是多少,单位M。

$CMD_PATH/cat spaceview.txt|$CMD_PATH/grep -v '^SQL'|sed '/^$/d'   > $TEST_BASE/oracle.log  去掉了里面的空行,有时候取值的时候会得到空行,为了避免出现问题进行了此操作。
然后循环读oracle.log  也就是读spaceview.txt文件。 判断表空间剩余百分比小于10的,把相关的三列值都取出来,用echo "${ALARM_PATH}/AddExtEvent.sh HOST_IP $TABLE_NAME tb_space Nms minor $FRE_NU $FRE_TOAL 36 "${TIME_VAL}"">>$TEST_BASE/table_space.log 显示一下。
如果显示正确的话,我会把上面一行变为:${ALARM_PATH}/AddExtEvent.sh HOST_IP $TABLE_NAME tb_space Nms minor $FRE_NU $FRE_TOAL 36 "${TIME_VAL}">>$TEST_BASE/table_space.log  真正的执行此操作。
就是这么个意思。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP