免费注册 查看新帖 |

Chinaunix

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

菜鸟-监控数据表空间脚本的疑惑~~~,请高手赐教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-31 17:07 |只看该作者 |倒序浏览
小弟刚刚进出shell,对很多东西还弄不懂。最近系统有个需求,需求是这样的:监控数据库表空间,如果发现表空间有超过90%的就发送email告知维护人员。我在网上搜到了一个脚本,但执行不起来,原因是对里面的一些语句弄不明白,而且直接执行报很多错误,不通过。高手帮忙看一下,另外如果有更好的能推荐给我再好不过了 谢谢!


  1. #####################################################################
  2. ## ck_tbsp.sh ##
  3. #####################################################################
  4. #!/bin/ksh

  5. sqlplus -s < oracle/$1@$2           -这个条命令不太明白,执行不通过
  6. set feed off
  7. set linesize 100
  8. set pagesize 200
  9. spool tablespace.alert                 -tablespace.alert 是一个文件吗,执行时提示找不到文件
  10. SELECT F.TABLESPACE_NAME,
  11. TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",
  12. TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)",
  13. TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",
  14. TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE
  15. FROM (
  16. SELECT TABLESPACE_NAME,
  17. ROUND (SUM (BLOCKS*(SELECT VALUE/1024
  18. FROM V$PARAMETER
  19. WHERE NAME = 'db_block_size')/1024)
  20. ) FREE_SPACE
  21. FROM DBA_FREE_SPACE
  22. GROUP BY TABLESPACE_NAME
  23. ) F,
  24. (
  25. SELECT TABLESPACE_NAME,
  26. ROUND (SUM (BYTES/1048576)) TOTAL_SPACE
  27. FROM DBA_DATA_FILES
  28. GROUP BY TABLESPACE_NAME
  29. ) T
  30. WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME
  31. AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) < 10;
  32. spool off
  33. exit
  34. !
  35. if [ `cat tablespace.alert|wc -l` -gt 0 ]
  36. then
  37. cat tablespace.alert -l tablespace.alert > tablespace.tmp  - tablespace.tmp文件是怎么生成的
  38. mailx -s "TABLESPACE ALERT for ${2}" $DBALIST < tablespace.tmp
  39. fi
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-02-01 09:40 |只看该作者
怎么没人指点一下呀?晕死了,是不是我的问题有点傻呀? 求助中~~~~~~~~

论坛徽章:
0
3 [报告]
发表于 2007-02-01 11:05 |只看该作者
sqlplus -s < oracle/$1@$2   aqlplus 是远程连接你oracle数据库的工具,请确定你装了此软件

论坛徽章:
0
4 [报告]
发表于 2007-02-01 11:15 |只看该作者
你得说,具体啥错误。不然没法看。

论坛徽章:
0
5 [报告]
发表于 2007-02-01 11:45 |只看该作者
菜鸟见笑了。我在运行脚本的时候错误信息是:
sqlplus -s < oracle/$1@$2   connot open
spool not found
脚本中的SQL可以执行
不会要装什么什么工具吧。还是算了,大家有没有写过此类需求的SHELL,分享一下吧。

论坛徽章:
0
6 [报告]
发表于 2007-02-01 12:01 |只看该作者
晕了,不知道脚本是做啥的还乱执行
要是刚好是在清数据库然后新建的那不就搞死你了

另外脚本一开始就需代入2个参数 $1 $2 你也没给
userid/password@db

之前还看过有人写过删user的脚本竟然都不检查参数的就直接

  1. userdel $1
  2. rm -rf /home/$1
复制代码

结果有不知情的人执行了没代参数.
结果 /home 被清空了

论坛徽章:
0
7 [报告]
发表于 2007-02-01 16:31 |只看该作者
呵呵。我当然不敢在生产环境下执行脚本了,是在测试环境下。
这个脚本我基本上弄明白了。他是在脚本中运行sqlplu,将执行SQL的结果写到tablespace.alert中,然后检查tablespace.alert文件的行数,如果行数大于0就发送email告警。
但是我在执行脚本的时候报找不到spool错误,我想可能是脚本里第一个命令sqlplus -s < oracle/$1@$2
的问题,我指定了sqlplus的用户名和密码但是运行不起来。
我把脚本里的命令单独拿出来一条一条执行就可以,但放到shell脚本里执行就不通过。

./CheckTableSpace.sh[10]: spool:  not found.
./CheckTableSpace.sh[11]: 0403-057 Syntax error at line 11 : `(' is not expected.

论坛徽章:
0
8 [报告]
发表于 2007-02-01 16:49 |只看该作者
http://orafaq.com/faqplus.htm

The following SQL*Plus commands are available:

      ACCEPT         Get input from the user
      DEFINE         Declare a variable (short: DEF)
      DESCRIBE         Lists the attributes of tables and other objects (short: DESC)
      EDIT         Places you in an editor so you can edit a SQL command (short: ED)
      EXIT or QUIT         Disconnect from the database and terminate SQL*Plus
      GET         Retrieves a SQL file and places it into the SQL buffer
      HOST         Issue an operating system command (short: !)
      LIST         Displays the last command executed/ command in the SQL buffer (short: L)
      PROMPT         Display a text string on the screen. Eg prompt Hello World!!!
      RUN         List and Run the command stored in the SQL buffer (short: /)
      SAVE         Saves command in the SQL buffer to a file. Eg "save x" will create a script file called x.sql
      SET         Modify the SQL*Plus environment eg. SET PAGESIZE 23
      SHOW         Show environment settings (short: SHO). Eg SHOW ALL, SHO PAGESIZE etc.
      SPOOL         Send output to a file. Eg "spool x" will save STDOUT to a file called x.lst
      START         Run a SQL script file (short: @)

论坛徽章:
0
9 [报告]
发表于 2007-02-01 17:08 |只看该作者
原帖由 nodream2008 于 2007-2-1 16:31 发表
呵呵。我当然不敢在生产环境下执行脚本了,是在测试环境下。
这个脚本我基本上弄明白了。他是在脚本中运行sqlplu,将执行SQL的结果写到tablespace.alert中,然后检查tablespace.alert文件的行数,如果行数大于0就 ...

别光猜想,动手测试一下。你把 spool ... 去掉试试看

论坛徽章:
0
10 [报告]
发表于 2007-02-01 18:10 |只看该作者
晕菜了,我把进入sqlplus后运行的sql命令单独提取到一个sql文件中,然后在shell脚本中执行sql文件,经过测试可以通过了,但是如果把sql命令整合到shell脚本里面运行,始终报spool:not found的错误,为什么找不到呢。我看许多例子中是把spool写在shell脚本里的。期待中~~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP