oracle spool定期导出文本文件数据,并加载到teradata

oracle导出文本文件数据的方法貌似只有sqlplus的spool命令,要定期导出需要借助os的计划任务之类的,不过10g中dbms_schedualr也支持直接掉os批处理文件。 文件名动态命名为当前日期。 例如,--bat文件D:\oracle92\bin\sqlplus @C:\zhjh\demo.sql --C:\zhjh\demo.sqlSET NEWPAGE NONE
SET HEADING OFF
SET SPACE 0
SET PAGESIZE 0
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 2500
set colsep '|'
set feedback off
set echo off
SET VERIFY OFF

set termout on  --如果数据量比较大,要把屏幕显示输出关掉提高性能
column v_date new_value filename;
select to_char(sysdate,'yyyymmdd') || '.dat' v_date from dual;
spool c:\&&filename
select * from scott.emp;
spool off; --执行后      7369|SMITH               |CLERK             |      7902|17-DEC-80|       800|          |        20
      7499|ALLEN               |SALESMAN          |      7698|20-FEB-81|      1600|       300|        30
      7521|WARD                |SALESMAN          |      7698|22-FEB-81|      1250|       500|        30
      7566|JONES               |MANAGER           |      7839|02-APR-81|      2975|          |        20
      7654|MARTIN              |SALESMAN          |      7698|28-SEP-81|      1250|      1400|        30
      7698|BLAKE               |MANAGER           |      7839|01-MAY-81|      2850|          |        30
      7782|CLARK               |MANAGER           |      7839|09-JUN-81|      2450|          |        10
      7788|SCOTT               |ANALYST           |      7566|19-APR-87|      3000|          |        20
      7839|KING                |PRESIDENT         |          |17-NOV-81|      5000|          |        10
      7844|TURNER              |SALESMAN          |      7698|08-SEP-81|      1500|         0|        30
      7876|ADAMS               |CLERK             |      7788|23-MAY-87|      1100|          |        20
      7900|JAMES               |CLERK             |      7698|03-DEC-81|       950|          |        30
      7902|FORD                |ANALYST           |      7566|03-DEC-81|      3000|          |        20
      7934|MILLER              |CLERK             |      7782|23-JAN-82|      1300|          |        10

然后再用任何调度工具调度即可。 海量数据导出的话可以使用并行导出,用条件区分开,这样可以提高导出性能。 在导入teradta数据库时,使用fastload即可,并且该工具支持一次从多个文件导入。

 

set命令使用说明:

SQL>set colsep' '; //-域输出分隔符 
SQL>set newp none //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的 
SQL>set echo off; //显示start启动的脚本中的每个sql命令,缺省为on 
SQL> set echo on //设置运行命令是是否显示语句 
SQL> set feedback on; //设置显示“已选择XX行” 
SQL>set feedback off; //回显本次sql命令处理的记录条数,缺省为on即去掉最后的 "已经选择10000行" 
SQL>set heading off; //输出域标题,缺省为on 设置为off就去掉了select结果的字段名,只显示数据 
SQL>set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。 
SQL>set linesize 80; //输出一行字符个数,缺省为80 
SQL>set numwidth 12; //输出number类型域长度,缺省为10 
SQL>set termout off; //显示脚本中的命令的执行结果,缺省为on 
SQL>set trimout on; //去除标准输出每行的拖尾空格,缺省为off 
SQL>set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off 
SQL>set serveroutput on; //设置允许显示输出类似dbms_output 
SQL> set timing on; //设置显示“已用时间:XXXX” 
SQL> set autotrace on-; //设置允许对执行的sql进行分析 
set verify off //可以关闭和打开提示确认信息old 1和new 1的显示. 

SET TERM[OUT]{ON|OFF}

是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。设置SETTERMOUTOFF,输出的内容只保存在输出文件中,不会显示在屏幕上,提高了SPOOL输出速度。

 

 

set命令介绍见:

http://blog.csdn.net/lichangzai/article/details/10000995

oracle官方:http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve040.htm#SQPUG075

tianlesoftware:http://blog.csdn.net/tianlesoftware/article/details/5270191

实验案例:http://wallimn.iteye.com/blog/472182


你可能感兴趣的:(常用脚本)