ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux管理腳本之自動執行腳本

Linux管理腳本之自動執行腳本

原创 Linux操作系统 作者:ygzhou518 时间:2011-12-16 17:10:11 0 删除 编辑
在unix环境下,如何快速高效的工作。
      首先,我们开始介绍,如何在unix下,创建一个可以与数据库进行交互的脚本。在unix下,很多时候,我们需要一个shell脚本,通过这个脚本,对数据库进行操作。这是一个最基本的必备技能,后面我们会讲到,在实际的运维中,我们需要经常使用这种方式,进行数据库后台作业。
     
      我们先用一个最简单的sample来讲解一下,如何通过shell脚本,来执行数据库的sql,我们把这个sample脚本叫做 run_sql.sh
 
dbmon01:/u01/oracle/alan> cat run_sql.sh
#!/usr/bin/sh
sqlplus /nolog <conn alan/alan ;
select sysdate from dual ;
exit ;
 
      这就是一个最简单的run_sql.sh,我们可以实际运行一下,看看效果是什么样的
dbmon01:/u01/oracle/alan> id
uid=201(oracle) gid=106(dba)
dbmon01:/u01/oracle/alan>
dbmon01:/u01/oracle/alan> sh run_sql.sh
SQL*Plus: Release 10.2.0.4.0 - Production on Wed Mar 31 12:57:00 2010
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
SQL> Connected.
SQL>
SYSDATE
------------
31-MAR-10
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
dbmon01:/u01/oracle/alan>
      通过结果我们看到,脚本里的sql命令,被准确的执行了。这里,我们需要注意一点,我首先用id命令确认了当前的用户身份呢,为什么要这么做呢,因为在shell脚本里面,所有的命令,都要依赖环境变量的,在run_sql这个脚本里面,用到了sqlplus命令,如果环境变量中没有这个命令的路径的话,这个脚本是不能执行成功的,会报错,告诉你命令不存在。遇到这种情况,有两种办法,一种是把命令写成绝对路径的命令,另一种,就是在脚本里定义环境变量。
      OK,了解了以上注意点后,下面我们来逐行讲解这个简单的脚本。
#!/usr/bin/sh                   --这一行,是脚本的提示行,告诉系统,这个脚本的命令,是用sh编写的
sqlplus /nolog <--这一行,调用sqlplus命令,使用/nolog的方式 ,<
conn alan/alan ;                  --这一行,是在sqlplus中进行用户连接。
select sysdate from dual ;    
--这一行,是实际需要运行的命令。
exit ;                                 --此处,执行完命令后,退出。
      经过分解,这个最简单的shell script就完全清晰了。这个时候,如果你需要执行其他任何数据库内的sql,都可以在这个sample里进行替换,就可以达到目的了。
 
      以上,就是本章的第一部分,学会创建一个简单的,可以与数据库交互的shell脚本。接下来,我们来学习一下,如何在后台执行脚本。可能有人要问了,为什么要后台执行呢,后台执行的好处是什么。其实,在实际运维中,有许多工作是需要耗费时间的,比如说,最简单的,有个新的数据库建好了,要创建表空间,一共有1000个裸设备,需要添加到数据库中去,这时候,如果你手工去执行,将会浪费大量的时间。这时候,我们就需要将工作脚本化,后台化,将我们自己宝贵的时间节约出来。
      就用这个做例子吧,假设我们1000个裸设备需要添加,于是,我们把脚本修改成这样:
 
dbmon01:/u01/oracle/alan> cat add_tbs.sh
#!/usr/bin/sh
sqlplus /nolog <conn alan/alan ;
alter tablespace data1 add datafile '/dev/rvg1.dbf' size 16000m autoextend off ;
......
alter tablespace data1 add datafile '/dev/rvg2.dbf' size 16000m autoextend off ;
exit ;
       怎么样,是不是替换起来很简单,脚本创建完成后,我们预估一下时间,假设需要2个小时,如果我们使用sh add_tbs.sh执行的话,我们就必须守在电脑旁边,还要保证电脑跟服务器的连接不能断,否则处理异常会更麻烦。怎么办呢,这时候,我们就可以使用后台命令了:
[oracle@standbyDB backup]$ nohup sh run_rman.sh >rman.log &
[1] 7261
[oracle@standbyDB backup]$
[1]+  Done                    nohup sh run_rman.sh > rman.log
[oracle@standbyDB backup]$ ll -ht
        这个命令什么意思呢,nohup的意思是不挂起(no hang up),就是说将命令放到后台执行,与你当前的连接没有关系,而要是我们想知道命令的执行结果呢,这里,就出现了定向符 ">",它的意思就是将运行结果,输出到add_tbs.out这个文件中去,命令结尾的&,就代表后台无中断运行的意思。
       这样,我们只需要对add_tbs.out这个文件进行检查就可以了,出去喝个茶,看个书,过一会回来看看运行的日志文件,就能够轻松掌握了。
       实时查看add_tbs.out这个文件,可以用tail -f add_tbs.out这个命令来实现,具体的使用,大家实际测试一把就清楚了。
 
        如果仅仅想测试一下nohup这个功能,也可以用run_sql.sh来进行测试,如下:
dbmon01:/u01/oracle/alan> nohup run_sql.sh > run_sql.out &
[1]     27782
dbmon01:/u01/oracle/alan>
[1] +  Done                       nohup run_sql.sh > run_sql.out &
dbmon01:/u01/oracle/alan>
dbmon01:/u01/oracle/alan> more run_sql.out
SQL*Plus: Release 10.2.0.4.0 - Production on Wed Mar 31 13:31:41 2010
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
SQL> Connected.
SQL>
SYSDATE
------------
31-MAR-10
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
dbmon01:/u01/oracle/alan>
   当然,使用这个方式的时候,有个注意点,你要运行的sh文件,必须具有可执行权限,如果你没有对应权限的话,在执行的时候,会有“Permission denied”的错误提示,脚本也无法正常执行。你可以使用chmod将执行权限赋予对应的文件。
 
   OK,本章的内容,基本就结束了,在这一章节里,我们讲了,如何创建一个简单的,可以与数据库交互的shell脚本,同时,如何在数据库后台对这些脚本进行调用等等。这是DBA工作的一项基本技能,很多时候会用到,所以,一定要掌握好。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24867586/viewspace-713455/,如需转载,请注明出处,否则将追究法律责任。

上一篇: How to Setup LogMiner
下一篇: 收藏
请登录后发表评论 登录
全部评论

注册时间:2011-02-11

  • 博文量
    167
  • 访问量
    360319