zoukankan      html  css  js  c++  java
  • SQL*Loader

    業務で大量データをテーブルに投入する必要がありSQL*Loaderを使った。その際に調べた内容を備忘録として残しておきます。

    SQLLoaderとは?

    固定長やCSV形式の外部ファイルからOracleデータベースにロードするユーティリティ。制御ファイルで指定した内容をもとにデータファイルのデータをデータベースに格納する。

    データファイル
    ロードするデータを保持するファイル。固定長やCSV形式等を指定することができる。
    制御ファイル
    データファイルの場所やデータの解釈方法などロードに必要な制御情報を保持するファイル
    ログファイル
    ロード件数やエラーログなどが記録される。
    不良ファイル
    エラーによりロードされなかったレコードが記録される
    廃棄ファイル
    エラー以外の理由でロードされなかったレコードが記録される

    制御ファイル記述例

    • サンプルテーブル
    CREATE TABLE EMP ( 
    	EMPNO						NUMBER(4)		NOT NULL,
    	ENAME						VARCHAR2(10),
    	JOB						VARCHAR2(9),
    	MGR						NUMBER(4),
    	HIREDATE					DATE,
    	SAL						NUMBER(7,2),
    	COMM						NUMBER(7,2),
    	DEPTNO						NUMBER(2), 
    	CONSTRAINT PK_EMP PRIMARY KEY(EMPNO) 
    ) 
    /
    
    • CSVファイル
    1,101,10,,20100101,10000,10,10
    2,102,10,,20100101,10001,10,20
    3,103,10,,20100101,10002,10,30
    4,104,10,,20100101,10003,10,40
    5,105,10,,20100101,10004,10,10
    6,106,10,,20100101,10005,10,20
    7,107,10,,20100101,10006,10,30
    8,108,10,,20100101,10007,10,40
    9,109,10,,20100101,10008,10,10
    ・・・
    
    • 制御ファイル
    LOAD DATA
      INFILE      'C:\DATA.csv'
      APPEND INTO TABLE EMP
      FIELDS TERMINATED BY ','
      TRAILING NULLCOLS
      (
        empno,
        ename,
        job,
        mgr,
        hiredate DATE 'YYYYMMDD',
        sal,
        comm,
        deptno
      )
    
    1. INFILE句には、データ・ファイルの名前を指定します。
    2. BADFILE句には、不良ファイルの名前を指定します。指定しない場合は制御ファイル名.BAD。
    3. DISCARDFILE句には、破棄ファイルの名前を指定します。指定しない場合は制御ファイル名.DSC。
    4. INTO TABLE句にははデータをロードするモードを指定する。
      1. INSERT:表にデータを追加する。ただしテーブルが空でない場合はエラーとなる。
      2. APPEND:表にデータを追加する。既にデータがある場合、重複しないレコードのみが追加される
      3. REPLACE:表のデータをすべて入れ替える。
      4. TRUNCATE:表のデータを切り捨てて追加する。
    5. FIELDS句には全ての列に対するオプションを指定する
      1. カンマ区切りの場合:TERMINATED BY ','
      2. タブ区切りの場合:TERMINATED BY X'09'
      3. ダブルクォーテーションで囲まれている場合は「OPTIONALLY ENCLOSED BY '"'」を指定する
      4. データがない場合にNULLを入れるように指定する場合は「TRAILING NULLCOLS」を指定する
      5. 通常空白文字は切り捨てられるが、これを行わないようにする場合は「PRESERVE BLANKS」を指定する
    • 実行
    C:\Documents and Settings\Administrator>sqlldr user/passwd@orcl control="C:\DATA.CTL" log="C:\DATA.log"
    
    SQL*Loader: Release 11.2.0.1.0 - Production on 月 7月 18 20:07:03 2011
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    コミット・ポイントに達しました。 - 論理レコード件数64
    コミット・ポイントに達しました。 - 論理レコード件数128
    コミット・ポイントに達しました。 - 論理レコード件数192
    コミット・ポイントに達しました。 - 論理レコード件数256
    コミット・ポイントに達しました。 - 論理レコード件数320
    コミット・ポイントに達しました。 - 論理レコード件数384
    コミット・ポイントに達しました。 - 論理レコード件数448
    コミット・ポイントに達しました。 - 論理レコード件数512
    コミット・ポイントに達しました。 - 論理レコード件数576
    コミット・ポイントに達しました。 - 論理レコード件数640
    コミット・ポイントに達しました。 - 論理レコード件数704
    コミット・ポイントに達しました。 - 論理レコード件数768
    コミット・ポイントに達しました。 - 論理レコード件数832
    コミット・ポイントに達しました。 - 論理レコード件数896
    コミット・ポイントに達しました。 - 論理レコード件数960
    コミット・ポイントに達しました。 - 論理レコード件数1000
    
    C:\Documents and Settings\Administrator>
  • 相关阅读:
    Notepad++64插件安装方法
    lucene、solr、nutch三者的关系
    更改MySQL数据库的编码为utf8mb4
    对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
    登录页面的表单验证(登录+密码 )
    MSYS2 环境搭建,并整合Qt
    QAbstractItemView为截断的项显示ToolTip(使用事件过滤)
    TraceTool 跟踪工具的瑞士军刀(C++版使用)
    Indy9的TIdFTPServer封装类
    Delphi 7学习开发控件(继承TGraphicControl只画一条线)
  • 原文地址:https://www.cnblogs.com/aggavara/p/2717112.html
Copyright © 2011-2022 走看看