今天实际项目中用到了spool,发现网上好多内容不是很全,自己摸索了好半天,现在总结一下。
一、通过spool 命令,可以将select 数据库的内容写到文件中,通过在sqlplus设置一些参数,使得按指定方式写到文件中
(1)常规使用spool方法,将set的一些命令和spool,select等放入.sql脚本中,然后再sqlplus中运行该脚本。以下为logmnr.sql脚本,
在sqlplus中执行@logmnr.sql就可以写入文件record3.txt中。不会再终端显示任何信息。但是,如果是在sqlplus中输入:
set termout off;
......
spool record3.txt
select ....... from .....;
spool off;
前面的设置是没有用的,还是会在终端中显示大量信息。
1 set echo off;
2 set heading off;
3 set line 100;
4 set long 2000000000;
5 set longchunksize 255;
6 set wra on;
7 set newpage none;
8 set pagesize 0;
9 set numwidth 12;
10 set termout off;
11 set trimout on;
12 set trimspool on;
13 set feedback off;
14 set timing on;
15 execute dbms_logmnr.add_logfile(LogFileName=>'/oracle/app/oracle/logs/hrbfct_1_4156_748575599.arc',Options=>dbms_logmnr.new);
16 execute dbms_logmnr.add_logfile(LogFileName=>'/oracle/app/oracle/logs/hrbfct_2_6645_748575599.arc',Options=>dbms_logmnr.addfile);
17 execute dbms_logmnr.start_logmnr(DictFileName=>'/oracle/app/oracle/logs/dict.ora');
18 spool /oracle/app/oracle/logs/record3.txt;
19 select to_clob(sql_redo)||'|'||to_char(scn)||'|'||to_char(timestamp)||'|'||to_char(session_info)||'|'||to_char(table_name)||'|'||to_char(seg_owner)||'?'
20 from v$logmnr_contents;
21 spool off;
22 exit;
(2)那到底能否在shell脚本中运行还不显示这些信息呢,答案是有的。
例如
1