本文接Oracle SQL*Loader 使用指南(第一部分)
5, 設定行結束标志 (STR) , 在導入大對象時很有用!
LOAD DATA
INFILE 'c:\data\mydata.csv' "str '*****'"
REPLACE INTO TABLE book
fields terminated by "," optionally enclosed by '"'
(
book_title ,
book_price ,
book_pages ,
book_id
)
Mydata.csv 檔案内容:
Oracle Essentials bbbbbbbbbbbbb
,3495,355,1 *****
SQL*Plus: The Definitive
Guide ,3995,502,2 *****
Oracle PL/SQL
Programming ,4495,87,3 *****
Oracle8 Design Tips ,1495,115,4 *****
例子:
SQL> truncate table book;
表被截斷。
SQL> host sqlldr hr/hr control =c:\data\loader.ctl log=c:\data\log.log
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 8月 14 10:16:49 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
達到送出點 - 邏輯記錄計數 4
SQL> select * from book;
BOOK_ID BOOK_TITLE BOOK_PRICE BOOK_PAGES
---------- ----------------------------------- ---------- ----------
1 Oracle Essentials bbbbbbbbbbbbb 3495 355
2 SQL*Plus: The Definitive 3995 502
3 Oracle PL/SQL 4495 87
4 Oracle8 Design Tips 1495 115
6, 将多個資料flat 檔案同時load 進資料庫
INFILE 'c:\data\mydata2.csv' "str '*****'"
Mydata.csv 資料内容如下:
Oracle8 Design Tips ,1495,115,4 *****
Mydata2.csv 資料内容如下:
新概念1
新概念2
,3995,502,2 *****
新概念3
,4495,87,3 *****
新概念4 ,1495,115,4 *****
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 8月 14 10:32:55 2008
達到送出點 - 邏輯記錄計數 8
1 新概念1 3495 355
2 新概念2 3995 502
3 新概念3 4495 87
4 新概念4 1495 115
已選擇8行。
7, 如果檔案名中包含有特殊字元,可以使用“\” 逃逸字元
如以下例子
INFILE 'mi_\'deci' 實際檔案名為:mi_'deci
INFILE "mi_\"deci' 實際檔案名為:mi_"deci
INFILE "mi_\\deci' 實際檔案名為:mi_\deci
8,load 資料到表分區:
REPLACE INTO TABLE book PARTITION (p1)
create table BOOK
BOOK_ID NUMBER,
BOOK_TITLE VARCHAR2(35),
BOOK_PRICE NUMBER,
BOOK_PAGES NUMBER
partition by range (book_id)(
partition p1 values less than (10),
partition p2 values less than (20))
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 8月 14 11:01:13 2008
SQL> select * from book partition (p1);
SQL> select * from book partition (p2);
未標明行
SQL>
9, null if 空替代:
INFILE *
REPLACE INTO TABLE michigan_features
feature_name ,
short_feature_name ,
elevation
NULLIF elevation = ' 0',
feature_type
NULLIF feature_type = 'ppl',
county
begindata
MI ,Chatham,0,dl,Alger
MI ,Shingleton,821,al,Alger
MI, Rumely,0,ppl,Alger
MI ,Sundell,1049,,,
drop table michigan_features;
create table michigan_features(
feature_name varchar2(100),
short_feature_name varchar2(100),
elevation number,
feature_type varchar2(100),
county varchar2(100))
SQL> select feature_type from michigan_features;
FEATURE_TYPE
-----------------------------------------------------------
dl
al
SQL*Loader 資料的送出:
一般情況下是在導入資料檔案資料後送出的。
也可以通過指定 ROWS= 參數來指定每次送出記錄數。
提高 SQL*Loader 的性能:
1) 一個簡單而容易忽略的問題是,沒有對導入的表使用任何索引和/或限制(主鍵)。如果這樣做,甚至在使用ROWS=參數時,會很明顯降低資料庫導入性能。
2) 可以添加 DIRECT=TRUE來提高導入資料的性能。當然,在很多情況下,不能使用此參數。
3) 通過指定 UNRECOVERABLE選項,可以關閉資料庫的日志。這個選項隻能和 direct 一起使用。
4) 可以同時運作多個導入任務.
5)可以使用readsize 參數加大讀入區記憶體大小, 預設為64K 一般的系統最大支援到20M
6)SKIP_INDEX_MAINTENANCE = {TRUE | FALSE}
在DIRECT 方式load 資料的時候,設定是否維護索引可以通過 此參數來設定
7)SKIP_UNUSABLE_INDEXES = {TRUE | FALSE}
在DIRECT 方式load 資料的時候 如果有索引為unusable 是否繼續load 資料
正常導入與direct導入方式的差別:
正常導入可以通過使用 INSERT語句來導入資料。Direct導入可以跳過資料庫的相關邏輯(DIRECT=TRUE),而直接将資料導入到資料檔案中。
正常導入的過程
STEP 1
Generate SQL commands for the data to be loaded.
STEP 2
Process the SQL commands (parse, fetch, execute).
STEP 3
Find partial data blocks, or get new extents.
STEP 4
If required blocks are not in the buffer cache, read
the data blocks from disk.
STEP 5
Fill the appropriate data blocks in the buffer cache.
STEP 6
Write data blocks to the disk.
Direct 導入過程
Format the input data into Oracle data blocks.
Get new extents for the table to be loaded.
Write the formatted data blocks to the disk.
使用direct 方式導入的一些限制:
Restrictions on Direct Path Loads
• Clustered tables
• Object columns (Oracle9i can handle these)
• LOB columns (Oracle9i can handle these)
• VARRAY columns
• Nested tables (Oracle9i can handle these when they are loaded separately)
• REF columns (Oracle9i can handle these)
• BFILE columns
本文轉自 hsbxxl 51CTO部落格,原文連結:http://blog.51cto.com/hsbxxl/648637,如需轉載請自行聯系原作者