SQL*Loaderメモ書き


# 目的
1. 業務効率化
2. お勉強メモ

# 利用DB
> oracle 11g 

# 使用ツール
1. SQLDeveloper
2. A5SQL

# SQL*Loader ってなに？
> SQL*Loader制御ファイルは、SQL*Loaderジョブ用のデータ定義言語(DDL)命令を含むテキスト・ファイルです。

# SQL*Loader制御ファイルとは
+ SQL*Loaderによってロードされるデータの位置
+ SQL*Loaderによるデータ書式設定の方法
+ データのロード時のSQL*Loaderの設定(メモリー管理、拒否レコード、ロード処理の中断など)
+ SQL*Loaderによるロード中のデータの処理方法  

# サンプル制御ファイルを作成して実行してみる
## 事前準備
1. oracleインストール＆データベース作成まで行う
2. 空のテーブルをcreate tableする
3. csvデータを作成

## 実践編

```vim:sample2.ctl
LOAD DATA CHARACTERSET UTF8
INFILE 'TEST2.csv'
BADFILE 'TEST2.BAD'
DISCARDFILE 'TEST2.DSC'
-- APPEND INTO TABLE TEST2
TRUNCATE INTO TABLE TEST2
-- REPLACE INTO TABLE TEST2
-- INSERT INTO TABLE TEST2
(
TESTCD POSITION(1:4) CHAR,
TESTNM POSITION(5:13) CHAR
)

```

```vim:TEST2.csv
0001あああ
0002いいい
0003かかか
0004かええ
0005おおお
```

## コマンド実行
```vim:CMD
sqlldr TESTUSER/Test1234@orcl CONTROL=C:\work\xxx\csv\20210208_172118\sample2.ctl LOG=C:\work\xxx\csv\20210208_172118\TEST2.log
```

```vim:CMD
SQL*Loader: Release 11.2.0.1.0 - Production on 火 2月 9 20:31:31 2021

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

コミット・ポイントに達しました。 - 論理レコード件数4
コミット・ポイントに達しました。 - 論理レコード件数5

C:\work\xxx\csv\20210208_203131>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57249/cea2bb00-0aa0-7a33-d5db-477bd360cf08.png)


# 日時を取り扱う場合の例

## 事前準備
1. 空のテーブルを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57249/f8bc07ab-f3ad-ec2c-ec02-777253c16373.png)

2. CSVデータ作成
3. ctlファイル作成

## 実践
```vim:sample2.1.ctl
LOAD DATA CHARACTERSET UTF8
INFILE 'TEST2.1.csv'
BADFILE 'TEST2.1.BAD'
DISCARDFILE 'TEST2.1.DSC'
TRUNCATE INTO TABLE TEST6
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
TESTNM,
NOCOLUMN FILLER,
TESTNOTE CONSTANT 'XXXXX',
TESTDATE1 SYSDATE,
TESTDATE2 CHAR "TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')"
)

```

```vim:TEST2.1.csv
あああ,dummy
いいい,dummy
ううう,dummy
えええ,dummy
おおお,dummy
```

## コマンド実行
```vim:CMD
sqlldr TESTUSER/Test1234@orcl CONTROL=C:\work\xxx\csv\20210208_172118\sample2.1.ctl LOG=C:\work\xxx\csv\20210208_172118\TEST2.1.log
```
```vim:CMD
SQL*Loader: Release 11.2.0.1.0 - Production on 火 2月 9 20:50:45 2021

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

コミット・ポイントに達しました。 - 論理レコード件数4
コミット・ポイントに達しました。 - 論理レコード件数5

C:\work\xxx\csv\20210208_205500>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57249/dfe1d461-0dec-72fb-3135-e3eac542d923.png)

#おまけ1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57249/f48ed09e-4e82-e89f-913b-42860037339a.png)

## 初回起動について
> →JVMは32bitを指定すること。64bit選択すると、起動してくれませんので注意!!

#おまけ2
## 表領域の容量確認
```sql:query.sql
SELECT * FROM dba_free_space;
```
```CMD
TABLESPACE_NAME                FILE_ID                BLOCK_ID               BYTES                  BLOCKS                 RELATIVE_FNO           
------------------------------ ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 
SYSTEM                         1                      87968                  786432                 96                     1                      
SYSTEM                         1                      88448                  9437184                1152                   1                      
SYSAUX                         2                      66768                  29753344               3632                   2                      
UNDOTBS1                       3                      4096                   58720256               7168                   3                      
UNDOTBS1                       3                      11392                  7340032                896                    3                      
UNDOTBS1                       3                      12416                  3145728                384                    3                      
USERS                          4                      600                    327680                 40                     4                      
EXAMPLE                        5                      480                    1966080                240                    5                      
EXAMPLE                        5                      1408                   589824                 72                     5                      
EXAMPLE                        5                      10392                  19726336               2408                   5                      
USERS                          4                      584                    65536                  8                      4                      
USERS                          4                      568                    65536                  8                      4                      
USERS                          4                      528                    65536                  8                      4                      
USERS                          4                      576                    65536                  8                      4                      
USERS                          4                      520                    65536                  8                      4                      

15 rows selected
```
## スキーマ一覧を取得
```sql:query2.sql
SELECT DISTINCT owner  FROM all_objects order by owner;
```
```CMD
・
・
・
TESTUSER                       
WMSYS                          
XDB                            
・
・
・
30 rows selected
```

## DBの文字コード確認

```sql:query3.sql
SELECT VALUE FROM nls_database_parameters
WHERE parameter='NLS_CHARACTERSET'
```
```CMD
VALUE                                    
---------------------------------------- 
JA16SJISTILDE                            

1 rows selected
```




# 参考
[SQL*Loader制御ファイル・リファレンス](https://docs.oracle.com/cd/E82638_01/sutil/oracle-sql-loader-control-file-contents.html#GUID-D1762699-8154-40F6-90DE-EFB8EB6A9AB0)

[意外と知らない？！データローディングの基礎](https://www.oracle.com/jp/a/tech/docs/technical-resources/20110720-loader.pdf)