1. 程式人生 > >oracle spool定期匯出文字檔案資料,並載入到teradata

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://wallimn.iteye.com/blog/472182