SQLLDRを使用したログのインポート



Load data               --    
append into table TEST  --   TEST
fields terminated by ':' --     “:”  
trailing nullcols
(----       
DNAME  "nvl(:DNAME,'-')", --  DNAME null,      “-”
MENO,
ID "SEQ_TEST.nextval" --    
) 

ここで、シーケンスを使用する場合、DIRECT=TRUEを追加することはできません.
コマンドの実行:
sqlldr userid=アカウント/パスワード@SID control=f:test.ctl data=f:\test.log
参照リンク:
http://hi.baidu.com/danghj/blog/item/393dca1baf79faddad6e75dd.html
http://topic.csdn.net/u/20090901/16/6f47eca3-169b-4ecc-9e6c-063055d9a392.html
http://wxy0327.itpub.net/post/16888/96826
http://chinapkw.iteye.com/blog/568948
=============================================================
shellを使用してデータをインポートする方法
vi import_data.sh
内容:
. /home/oracle/.bash_profile 
lastLogDate=`date -d "-1 minute" +%Y%m%d.%H.%M`
/data/oracle/10.2.0.1/bin/sqlldr userid=webtrace/webtrace@webtrace control=/data/jsp/wt.39.net/WebRoot/clt/import_data_to_db.ctl data=/data/jsp/wt.39.net/log4j/trace/base.log.$lastLogDate log=/data/oracle/info/trace_info.log.$lastLogDate bad=/data/oracle/bad/trace_bad.log.$lastLogDate

前の分を取得してからsqlldrを実行
sqlldrのパラメータの意味は:
コントロールは制御スクリプトパス
dataはソースデータファイルパス
badは、挿入に失敗したデータログであり、後で挿入を再実行するために使用されます.
logは実行ログを挿入する
最後にタイミングタスクを書きます
タイミングタスクoracleユーザーの下でcrontabで
ここは注意が必要だ
1.import_data.shとimport_data_to_db.ctlの2つのファイルはresinユーザーの下にあるので、oracleアカウントの下で実行するにはchmod 755が必要です.そうしないと、権限がありません.shでshellを直接実行するのとcrontabでshellを直接実行するのは違います.shellに対してまだ入門レベルなので、友达に聞いてから、shellファイル内にoracleの環境変数を増やすことを知っていました./home/oracle/.bash_profileという言葉です.そうしないと、sqlldrを実行すると次の異常が表示されます.
Message 2100 not found; No message file for product=RDBMS...... facility=UL

3.crontabが実行タスクをこのように設定できるかどうか分からない場合は、
*/1 * * * * /data/jsp/xxxx/WebRoot/task/import_data_to_db.sh >/data/oracle/mc.log 2>/data/oracle/mc.err

これで異常があれば/data/oracle/mcに着くことができます.ロゴはこちら
参考サイト:
http://hi.baidu.com/danghj/blog/item/393dca1baf79faddad6e75dd.html
http://linjianqing.iteye.com/blog/501563
http://bbs.chinaunix.net/archiver/?tid-851346.html
http://www.lslnet.com/linux/dosc1/38/linux-277903.htm
またctl制御ファイルにおいて、判定条件により選択する挿入データがあれば、
eg:
値が空でないと判断して挿入します
Load data
append into table TEST
WHEN DNAME != ''
        fields terminated by '`'
        trailing nullcols
        (
                ID "SEQ_TEST.nextval",
                DNAME,
                MENO
        )

もう1人増えた
具体的な例は、このサイトを参照してください.
http://space.itpub.net/7607759/viewspace-623965
http://www.itpub.net/threadqui.php?id=3&tid=869886(3階)
http://hi.baidu.com/danghj/blog/item/393dca1baf79faddad6e75dd.html
===============================2011-03-21==============================================
今日1つの問題を発見してデータをインポートしていつも1、2つの発見がインポートして報告しませんでした
Field in data file exceeds maximum length異常
調べてみると、元のctlファイルは、デフォルトの値の長さは255ですが、私のこのフィールドはちょうど超えていて、憂鬱で、フィールドの値の長さを指定する必要があります.以下のようにします.
REFER_URL char(3000) "nvl(:REFER_URL,'-')",