sqluldr2使用幾例

guoge發表於2016-01-22

 

 

 

sqluldr2 是樓方鑫(d.b.c.a)編寫的一個快速匯出oracle 資料的工具。本文主要介紹如何使用這個工具實現工作中的幾個需求。

 

一、匯出檔案分卷

對於壓縮檔案winrar, 一個比較深的功能就是壓縮後的檔案還是比較大時,不方便複製時,可以進行分卷壓縮,制定每個壓縮分卷檔案的大小。同樣,對於使用Toad 或者PL/SQL developer 工具導成檔案檔案時,由於缺乏這個功能,常常造成單個檔案過大,生成時間過長。

sqluldr2 工具有一個rows引數,除了類似exp 工具的feedback 引數,每匯出<rows>行資料,自動輸出一行提示資訊外,還可以結合batch 引數,如果batch 引數設為yes, 則每<rows>行資料生成一個匯出檔案。

此外size 引數可以指定匯出檔案的最大的大小。它與rows引數 取更嚴厲的要求來確定分卷檔案的大小。

由於按多個檔案輸出,因此在指定輸出檔名時,需使用動態檔名,例如指定file引數為orders_%B.csv,其中%B表示在多個檔案匯出時,表示檔案序號。

例如,sqluldr2.par 定義為如下:

user=system/manager@dbserver

query=select   /*+ parallel(8)  */  * from  orders 

head=no

rows=1000000

file=d:\data\orders_%B.csv

log=d:\data\sqluldr.log

text=CSV

fast=yes

batch=yes

size=500

control=d:\data\order.ctl

mode=truncate

table=orders

 

執行起來:sqluldr2  parfile=./sqluldr2.par 

 

二、ORACLE跨資料庫的匯入匯出

我們將資料導成文字,其最終目的還是要匯入到其它資料庫。 匯入其它ORACLE資料庫,最快的方法就是使用ORACLE 自帶的sqlldr 工具。

Sqlldr 使用的控制檔案,可以在第一部分中controlmodetable 引數指定後,生成控制檔案,可以修改這個檔案以適合實際使用。

如果我們先把資料導成文字檔案,再使用sqlldr 匯入到資料庫,由於涉及到磁碟的寫入讀取,可能在大資料量時影響速度。因此可以將sqluldr2 的輸出到標準輸出裝置(螢幕),而sqlldr從標準輸出裝置上讀取入庫。

可以將sqluldr2file 引數設定為”-“, sqluldr2將輸出到標準輸出裝置,修改sqlldr 中的控制檔案的INFILE 引數為"-" (對於windows unix 引數),使用管道模式,進行資料匯出裝載。

此外,由於源(sqluldr2匯出的苦)和目標資料庫(sqlldr 匯入庫)的字符集不一樣(這也是我們之所以採用文字匯出方式的原因), 我們可以在NLS_LANG 環境變數和目標資料庫字符集一致的情況下, 設定sqluldr2charset 引數與源資料庫字符集一致,避免來回修改NLS_LANG 環境變數。

舉例:

sqlldr 中的控制檔案 指定INFILE 引數:

 LOAD DATA

INFILE "-"

源資料庫字符集為US7ASCII ,目標資料庫字符集ZHS16GBK, 當前NLS_LANG AMERICAN_AMERICA.ZHS16GBK

sqluldr2  user=system/manager@dbserver1   query="select   /*+ parallel(8)  */   * from  orders where rownum <10" charset=US7ASCII      file=- |  sqlldr guoge/guoge@dbserver 2control=D:\order.ctl

注意,的INFILE 引數為"-" 對於XE 下的sqlldr 彷彿無效。

 

三、MYSQL 資料庫的匯入

ORACLE 資料也可以匯入到MYSQL 資料庫,sqluldr2的引數format指定為mysql, 輸出的則為MYSQL語句,可以直接執行。例如:

sqluldr2 comm/comm@dbserver  table=app_roles format=mysql quote=0x27 escape=0x53 null=null  query=" select * from app_roles" file=- | mysql -h 21.103.117.51  -uroot -pqwxtpwd  test

 

 

四、匯出後壓縮

sqluldr2 其實可以在匯出是就進行壓縮,文件上說“當檔名(“FILE”選項)的字尾以小寫的“.gz”結尾時,會將記錄直接寫入到GZIP格式的壓縮檔案中”,但彷彿對WINDOWS無效。其實我們可以結合組合命令。例如:

sqluldr2  parfile=./sqluldr2.par  &&  winrar a  -afrar  -ibck -m5   -df    -ep -r orders.rar d:\data

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9036/viewspace-1980591/,如需轉載,請註明出處,否則將追究法律責任。

相關文章