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>

サーキュレータ(DKS-20)を買いました

関西電力からも15%の節電要請があったこともあり、東日本大震災の影響による夏の節電対策グッズとして注目されているサーキュレータを購入しました。

各社から多くのサーキュレータが販売されていますが、安いこと、レビュー結果が良いことから「ZEPEAL DKS-20」に決めました。

カラーはツヤなしの黒。
素材はプラスチックで高級感こそありませんがそこまで安っぽくもない感じです。
気になる音ですが、強だとうるさいですが、中・弱だと気にならない程度です。

価格から考えるとコストパフォーマンスは高いと思います。

X06HTの電池パック無料サービス申し込みました

X06HTを購入してから1年間ずっとあんしん保証パックに入っていたので、電池パック無料サービスを申し込みました。
申し込み方法が分からなかったので調べたところ、ここに書いてありました。
それによると3種類の申し込み方法があるようです。

私はオンラインショップで申し込みましたが、在庫不足で納期は6月下旬になるようです。


追記:本日6/20に届きました。

PC椅子買った




3年間ほどホームセンターで買ったイスを使っていましたが、1時間程作業すると腰が痛くなってどうしようもない状態。
そこでイトーキのプラオチェアに買い換えました。中古で一万円。まだ少ししか座っていませんが、座り心地がよくいい感じ。

対話形式でプロジェクトの雛形を作成する方法の覚書

プロジェクトを作成するには次のコマンドを実行します。

mvn archetype:generate

生成したいarchetypeの番号を入力します。

Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: :

選択できるarchetypeは以下のように41種類準備されているようです。

1 appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2 appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
3 appfuse-basic-struts (AppFuse archetype for creating a web application with Hibernate, Spring and Struts 2)
4 appfuse-basic-tapestry (AppFuse archetype for creating a web application with Hibernate, Spring and Tapestry 4)
5 appfuse-core (AppFuse archetype for creating a jar application with Hibernate and Spring and XFire)
6 appfuse-modular-jsf (AppFuse archetype for creating a modular application with Hibernate, Spring and JSF)
7 appfuse-modular-spring (AppFuse archetype for creating a modular application with Hibernate, Spring and Spring MVC)
8 appfuse-modular-struts (AppFuse archetype for creating a modular application with Hibernate, Spring and Struts 2)
9 appfuse-modular-tapestry (AppFuse archetype for creating a modular application with Hibernate, Spring and Tapestry 4)
10 maven-archetype-j2ee-simple (A simple J2EE Java application)
11 maven-archetype-marmalade-mojo (A Maven plugin development project using marmalade)
12 maven-archetype-mojo (A Maven Java plugin development project)
13 maven-archetype-portlet (A simple portlet application)
14 maven-archetype-profiles ()
15 maven-archetype-quickstart ()
16 maven-archetype-site-simple (A simple site generation project)
17 maven-archetype-site (A more complex site project)
18 maven-archetype-webapp (A simple Java web application)
19 jini-service-archetype (Archetype for Jini service project creation)
20 softeu-archetype-seam (JSF+Facelets+Seam Archetype)
21 softeu-archetype-seam-simple (JSF+Facelets+Seam (no persistence) Archetype)
22 softeu-archetype-jsf (JSF+Facelets Archetype)
23 jpa-maven-archetype (JPA application)
24 spring-osgi-bundle-archetype (Spring-OSGi archetype)
25 confluence-plugin-archetype (Atlassian Confluence plugin archetype)
26 jira-plugin-archetype (Atlassian JIRA plugin archetype)
27 maven-archetype-har (Hibernate Archive)
28 maven-archetype-sar (JBoss Service Archive)
29 wicket-archetype-quickstart (A simple Apache Wicket project)
30 scala-archetype-simple (A simple scala project)
31 lift-archetype-blank (A blank/empty liftweb project)
32 lift-archetype-basic (The basic (liftweb) project)
33 cocoon-22-archetype-block-plain (http://cocoon.apache.org/2.2/maven-plugins/)
34 cocoon-22-archetype-block (http://cocoon.apache.org/2.2/maven-plugins/)
35 cocoon-22-archetype-webapp (http://cocoon.apache.org/2.2/maven-plugins/)
36 myfaces-archetype-helloworld (A simple archetype using MyFaces)
37 myfaces-archetype-helloworld-facelets (A simple archetype using MyFaces and facelets)
38 myfaces-archetype-trinidad (A simple archetype using Myfaces and Trinidad)
39 myfaces-archetype-jsfcomponents (A simple archetype for create custom JSF components using MyFaces)
40 gmaven-archetype-basic (Groovy basic archetype)
41 gmaven-archetype-mojo (Groovy mojo archetype)

groupIdを指定します。

ここにはプロジェクトのルートパッケージ名を指定します。

Define value for groupId: : com.example

artifactIdを指定します。

ここにはプロジェクト名を入力します。

Define value for artifactId: : app

バージョンを指定します。

Define value for version:  1.0-SNAPSHOT: :

パッケージを指定します。

Define value for package:  com.example: :

以上でプロジェクトの雛形が作成されます。

Eclipseプロジェクトに変換する手順についての覚書

M2_REPO の設定

MavenのローカルリポジトリのパスをEclipseに教えてあげます。
Eclipseワークスペースに移動し以下のコマンドを実行。

mvn eclipse:add-maven-repo -Declipse.workspace=.

Eclipseのビルドパス変数に「M2_REPO」が追加されます。

※この設定はEclipseワークスペースに対して行うので何度も行う必要はありません。

プロジェクトソースをダウンロード

svn co リポジトリパス

Eclipseプロジェクトに変換

プロジェクトのトップフォルダ(pom.xmlのある場所)に移動し以下のコマンドを実行します。

mvn eclipse:eclipse

プロジェクト直下に「.project」「.classpath」の2ファイルが生成され、Eclipseプロジェクトになります。

Eclipseでプロジェクトをインポート

Eclipseで「ファイル」→「インポート」→「既存プロジェクトをワークスペースへ」を選択しプロジェクトをインポートします。

build.xml

Antではbuild.xmlというXMLファイルを使って、antの動作を制御します。ここではbuild.xmlファイルの基本的な使い方と実行方法について確認していきます。

ビルドファイルの構成

project要素

projectはビルドファイルのルート要素でビルドに関する情報を記述します。projectには次の3つの属性があります。

属性 説明 必須
name projectの名前
default ターゲットが指定されない時に使用するデフォルトターゲット
basedir パスの計算を行う場合に用いるベースディレクト
target要素

projectには一つ以上のターゲットを定義します。一つのtargetは実行したいtaskの集合です。

属性 説明 必須
name ターゲットの名前
depends このターゲットが依存するターゲット名のリスト(カンマ区切り)
if このターゲットを実行するために設定されていなければならないプロパティ名
unless このターゲットを実行するために設定されていてはならないプロパティ名
description このターゲットの機能の簡単な説明
task要素

taskとは実行可能なコードのひとまとまりです。
taskは、次のような共通の構造になっています

    <名前 属性1="値1" 属性2="値2" ... />

Antで用意されているTaskはユーザマニュアルに記載されており、何かの処理を行い時は以下よりタスクを探すこととなります。

property要素

プロジェクトには、複数のプロパティを設定することができます。プロパティは名前と値からなり、タスクの中において、属性の値を設定する場所に "${" と "}" で挟んでプロパティ名を書くことにより、属性の値として使用することができます。

Antの実行について

Antを実行するには単にantと入力するだけです。引数が指定されなかった場合はカレントディレクトリの build.xmlファイルを探しprojectタグのdefault 属性で指定されたターゲットを実行します。

ant

build.xmlでないビルドファイルを使うには以下のようにビルドファイルを指定します。

ant -buildfile file

find [file]オプションを使った場合、カレントディレクトリでビルドファイルを探し次に親ディレクトリで探し、順次その上をビルドファイルが見つかるかファイルシステムのルートに到達するまで探します。デフォルトではbuild.xmlという名前のビルドファイルが検索されます。build.xml以外のビルドファイルを探させる場合にはファイル引数を指定します。

ant -find [file]

Dproperty=valueオプションを使用することでプロパティを設定することができます。プロパティはビルドファイルから${property}としてアクセスできます。

ant -Dproperty=value

例)AntでHelloWorld

簡単なAntのビルドファイルを書いて、実行してみましょう。ここではHelloWorldと出力するだけのビルドファイルを作成します。次のコードをテキストエディタで記述し、"build.xml"という名前で保存してください。



    
		        
    

DOSプロンプトを開きファイルを作成したディレクトリに移動し、次のコマンドを入力して下さい。成功すると以下のようなメッセージが出力されます。

ant

Buildfile: build.xml
helloWorld:
     [echo] HelloWorld
BUILD SUCCESSFUL
Total time: 297 milliseconds