sqlplus spool 到动态日志文件名

通过sqlplus的spool功能我们将数据库日常运维的结果输出到日志文件,而有时候则需要定时输出,为避免日志文件名的重复,我们可以将输出的日志文件名采用动态命名方式来实现。本文则是针对这个问题给出一个示例,供大家参考。

 

1、生成动态日志文件的脚本  

  1. robin@SZDB:~> more dynamic_logfile_name.sql  
  2. --+ ================================================================+    
  3. --| Filename:dynamic_logfile_name.sql                               |   
  4. --| Desc:                                                           |   
  5. --|         This is only a sapmle to generate dynamic log file name |   
  6. --| Author: Robinson                                                |    
  7. --| Blog: http://blog.csdn.net.robinson_0612                        |   
  8. --+ ================================================================+   
  9. SET TERMOUT OFF ECHO OFF VERIFY OFF  
  10. SET FEEDBACK OFF  
  11. VARIABLE dt VARCHAR2(13);  
  12. COL dt FORMAT a15  
  13. COL report_name FORMAT a35  
  14.   
  15. BEGIN  
  16.    SELECT TO_CHAR (SYSDATE, 'yyyymmdd_hh24mi'INTO :dt FROM DUAL;  
  17. END;  
  18. /  
  19.   
  20. PRINT dt;  
  21. COL report_name NEW_VALUE rpt_name  
  22.   
  23. SELECT 'dynamic_logfile_' || :dt || '.log' AS report_name FROM DUAL;  
  24.   
  25. PROMPT "variable rpt_name value is &rpt_name"  
  26. SPOOL &rpt_name  
  27. ALTER SESSION SET nls_date_format='yyyymmdd hh24:mi:ss';  
  28.   
  29. SELECT SYSDATE FROM DUAL;  
  30.   
  31. SPOOL OFF;  
  32. SET TERMOUT ON  ECHO ON VERIFY ON;  
  33. SET FEEDBACK ON;  
  34. UNDEFINE rpt_name  
  35. EXIT;  
robin@SZDB:~> more dynamic_logfile_name.sql
--+ ================================================================+ 
--| Filename:dynamic_logfile_name.sql                               |
--| Desc:                                                           |
--|         This is only a sapmle to generate dynamic log file name |
--| Author: Robinson                                                | 
--| Blog: http://blog.csdn.net.robinson_0612                        |
--+ ================================================================+
SET TERMOUT OFF ECHO OFF VERIFY OFF
SET FEEDBACK OFF
VARIABLE dt VARCHAR2(13);
COL dt FORMAT a15
COL report_name FORMAT a35

BEGIN
   SELECT TO_CHAR (SYSDATE, 'yyyymmdd_hh24mi') INTO :dt FROM DUAL;
END;
/

PRINT dt;
COL report_name NEW_VALUE rpt_name

SELECT 'dynamic_logfile_' || :dt || '.log' AS report_name FROM DUAL;

PROMPT "variable rpt_name value is &rpt_name"
SPOOL &rpt_name
ALTER SESSION SET nls_date_format='yyyymmdd hh24:mi:ss';

SELECT SYSDATE FROM DUAL;

SPOOL OFF;
SET TERMOUT ON  ECHO ON VERIFY ON;
SET FEEDBACK ON;
UNDEFINE rpt_name
EXIT;


2、测试脚本

  1. robin@SZDB:~> sqlplus -S scott/tiger@cnmmbo @dynamic_logfile_name.sql  
  2. robin@SZDB:~> date  
  3. Fri Mar 15 11:13:04 CST 2013  
  4. robin@SZDB:~> sqlplus -S scott/tiger@cnmmbo @dynamic_logfile_name.sql  
  5. robin@SZDB:~> ls -hltr dyna*.log  
  6. -rw-r--r-- 1 robin oinstall  45 2013-03-15 11:11 dynamic_logfile_20130315_1111.log   
  7. -rw-r--r-- 1 robin oinstall  45 2013-03-15 11:13 dynamic_logfile_20130315_1113.log  
robin@SZDB:~> sqlplus -S scott/tiger@cnmmbo @dynamic_logfile_name.sql
robin@SZDB:~> date
Fri Mar 15 11:13:04 CST 2013
robin@SZDB:~> sqlplus -S scott/tiger@cnmmbo @dynamic_logfile_name.sql
robin@SZDB:~> ls -hltr dyna*.log
-rw-r--r-- 1 robin oinstall  45 2013-03-15 11:11 dynamic_logfile_20130315_1111.log
-rw-r--r-- 1 robin oinstall  45 2013-03-15 11:13 dynamic_logfile_20130315_1113.log


3、说明
a、有关sqlplus命令的具体用法请参考:SQL*Plus User's Guide and Reference
b、在上面的脚本中主要通过定义变量variable dt来存储系统时间日期用于动态日志文件的后半部分
c、变量使用:dt方式由sql查询进行赋值
d、begin end 块不可省略,否则,上面赋值不成功
e、一些提示信息可以自行移除,如print dt,prompt部分等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值