后台运行SQL脚本,并做执行时间的统计

      我的日志 2007-3-21 16:36

--统计表建立

---------------------------------------------------------
create table TBL_CONVERT_PROC_STAT
(
  SCRIPT_NAME         VARCHAR2(255) not null,
  OPER_USER           VARCHAR2(15),
  LAST_TOTAL_COST     NUMBER,
  CUR_PROC_BEGIN_DATE DATE,
  CUR_PROC_END_DATE   DATE,
  CUR_TOTAL_COST      NUMBER,
  SCRIPT_GRP          NUMBER(3)
)
/

 --具体操作SHELL

alter table TBL_CONVERT_PROC_STAT
  add constraint I_TBL_CONVERT_PROC_STAT primary key (SCRIPT_NAME)
/

---------------------------------------------------------

#filename: run_sql.sh

if [ $ # -ne 5 ] ; then
  echo "用法: `basename $ 0` 脚本组ID 数据库TNS 用户名 密码 SQL脚本文件名"
  echo "范例: `basename $ 0` 1 gzcs1     ZG     ZG   test.sql"
  exit 1
fi

SCRIPT_GRP=$ 1
SERVICE=$ 2
USERNAME=$ 3
PASSWORD=$ 4
FILE=$ 5

echo `date '+%Y-%m-%d'`" "`date '+%T'` "---> 脚本<" $ FILE" >开始... ..."

sqlplus -S $ {USERNAME}/$ {PASSWORD}@$ {SERVICE} <<END_SUITE
prompt --======================================;
Declare
 script_count number;
begin
  select count(*) into script_count from TBL_CONVERT_PROC_STAT
  where script_name = substr('$ FILE',(Instr('$ FILE', '/', -1) +1),length('$ FILE'));
  if (script_count = 0) then
    Insert /*+ NOLOGGING*/Into TBL_CONVERT_PROC_STAT(script_name,oper_user,cur_proc_begin_date,script_grp)
    Values(substr('$ FILE',(Instr('$ FILE', '/', -1) +1),length('$ FILE')),'YOURNAME',Sysdate,'$ SCRIPT_GRP');
  else
    update /*+ NOLOGGING*/ TBL_CONVERT_PROC_STAT
    set last_total_cost = cur_total_cost, cur_proc_begin_date = sysdate, cur_proc_end_date = '',
        script_grp='$ SCRIPT_GRP'
    where script_name = substr('$ FILE',(Instr('$ FILE', '/', -1) +1),length('$ FILE'));
  end if;
  Commit; 
end;
/
prompt --======================================;
alter session set sort_area_size=204800;
@$ FILE
prompt --======================================;
update /*+ NOLOGGING*/ TBL_CONVERT_PROC_STAT
set cur_proc_end_date = sysdate, cur_total_cost = (sysdate - cur_proc_begin_date)*86400,
script_grp='$ SCRIPT_GRP'
where script_name = substr('$ FILE',(Instr('$ FILE', '/', -1) +1),length('$ FILE'));
Commit;
prompt --======================================;
END_SUITE

echo `date '+%Y-%m-%d'`" "`date '+%T'` "---> 脚本<" $ FILE" >处理结束!"

---------------------------------------------------------

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}