ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 实验-shell执行数据库命令.TXT

实验-shell执行数据库命令.TXT

原创 Linux操作系统 作者:to_be_dba 时间:2013-06-25 19:39:30 0 删除 编辑
今天来复习一下在shell中如何登陆oracle,并执行脚本或命令。
我编了以下这个小程序,起名为test.txt用于修改表结构,并执行几条输出命令:
#!/bin/sh
sqlplus -s "scott/tiger"<alter table bymt  add sales_nm varchar2(6);
alter table binfo add sales_nm varchar2(6);
Set timing on --该设置可以使结果中显示语句执行耗时
Set time on   --此设置没有意义,因为无论是此文件的日志还是使用spool,都不显示sqlplus的提示符
Set serveroutput on
select * from v\$instance; --此处用于说明在使用$符号时,需要前面加斜杠进行转义,否则shell会将其看做是调用的变量
spool /u01/mig/TL/test.log --在shell脚本中,只要用sqlplus登录了,也是可以开启spool,将程序块结果放入文件中的
declare
  i_vc_code varchar2(2);
  i_vc_schema varchar2(100);
begin
  i_vc_code:='NZ';
  i_vc_schema:='NZNZ';
  dbms_output.put_line('CODE is:'||i_vc_code);
  dbms_lock.sleep(5);
  dbms_output.put_line('SCHEMA NAME is :'||i_vc_chema);
end;
/
@/u01/mig/TL/tian.txt --在此环境下,还可以执行一些子脚本
spool off
调用此文件,就可以执行sqlplus环境下的命令的。
[oracle@TSTDB TL]$ ./test.txt &
[1] 11076                                
[oracle@TSTDB TL]$
此处需要提一句,如果执行某个单独的文件,在文件执行语句后面加 &就可以令其快速返回光标(后台执行);
但如果像上面的程序那样,存在嵌套,可能还没来得及在执行该语句后再次按下回车,子程序已经开始执行了,这时候就无法后台执行了。
若使用命令 nohup ./test.txt &
会将结果日志记录到nohup.out文件中,并能够迅速返回光标。

我们使用shell,一般都是处于两个目的:
1)自动化
2)在我们期望执行的时间执行
要达到第二个目的,可以在系统设置crontab任务。
[oracle@TSTDB TL]$ crontab -e   --添加,用VI命令将需要设置的任务写入文件,所有用户的定时任务放在/var/spool/cron中
[oracle@TSTDB TL]$ crontab -l   --查看
20 18 * * * /u01/mig/TL/bsd_exe.txt >>nohup.out
[oracle@TSTDB TL]$ crontab -r   --删除

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

上一篇: mysql初识(一)
请登录后发表评论 登录
全部评论

注册时间:2011-11-23

  • 博文量
    148
  • 访问量
    390637