2008年6月13日金曜日

コマンドプロンプトでOracleに接続、SQLLoader実行

環境: Windows XP pro Ver. 2002 SP2 英語版/ Oracle 10g

Enterprise Managerを開いて画面からSQLLoaderを実行する方法(http://korokay-stakenote.blogspot.com/2008/06/oracle-10g-enterprise-manager-sqlloader.html)を載せたが、
以下の部分が面倒くさくていらいら。

  1. 自前の制御ファイルを利用しようとすると、データファイルをOracleを入れているサーバ内に入れないといけない。(面倒くさい)
  2. 画面遷移が。。。遅い!(サーバのせい?)
  3. とにかく時間がかかる。(画面遷移とステータス確認と、間違えたときに前の画面に戻る行為)

ということで、コマンドプロンプトを使ってSQLLoaderを実行することにした。
必要条件はTNSが設定されていること。(http://korokay-stakenote.blogspot.com/2008/06/windowsoracle-odbc.html 参照)

  1. コマンドプロンプトで必要な制御ファイル、データファイルを格納しているフォルダに移動
  2. C:\Documents and Settings\Administrator>cd Desktop\TestData
  3. 以下のコマンドを入力
  4. sqlldr username/password@TNSName control = xxxxx.ctl log = yyyyy.log
  5. *1.ctlファイルは1で移動したフォルダにあること。
  6. *2.ctlファイルの中で、データファイル名を記述しておくこと
  7. ---------------------------------------
  8. LOAD DATA
  9. INFILE 'CUSTOMER.csv'
  10. APPEND
  11. INTO TABLE CUSTOMER
  12. FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  13. ( NAME CHAR,
  14.   ADDRESS CHAR,...
  15. ---------------------------------------
  16. *3.logファイル名は任意で指定 log = yyyyy.log を宣言しないと、ログははかれない。
  17. ↓のようなプロセスが表示される
  18. -----------------------------------
  19. SQL*Loader: Release 10.2.0.1.0 - Production on 金 6月 13 09:29:08 2008
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    コミット・ポイントに達しました。 - 論理レコード件数1コミット・ポイントに達しました。 - 論理レコード件数2
  20. -----------------------------------
  21. 処理が終わると、ログファイルがフォルダに格納されている。↓
  22. -----------------------------------
  23. レコード1: 拒否されました。- 表WCR_DT_DTCでエラーが発生しました。ORA-00001: unique constraint (SYS_C008070) violated
    レコード2: 拒否されました。- 表WCR_DT_DTCでエラーが発生しました。ORA-00001: unique constraint (SYS_C008070) violated
    レコード3: 拒否されました。- 表WCR_DT_DTCでエラーが発生しました。ORA-00001: unique constraint (SYS_C008070) violated
    レコード4: 拒否されました。- 表WCR_DT_DTCでエラーが発生しました。ORA-00001: unique constraint (SYS_C008070) violated
    表WCR_DT_DTC: 2行のロードに成功しました。 4行はデータ・エラーのためロードされませんでした。 0行はWHEN句のエラーのためロードされませんでした。 0行はすべてのフィールドがNULLのためロードされませんでした。
  24. -------------------------------------

以下、コマンドプロンプトのほうが使いやすいと判断した理由

  1. Oracleサーバにリモートでつないでいる場合でも、自分のPCにおいているファイルでインポート処理が完結すること。
  2. 処理が早い。実行分を秀丸マクロとかで大量に作っておけば、処理は簡単。
  3. ファイルの修正もしやすい(1の理由に準拠)

0 件のコメント: