SQL*Loader使用方法
--=====================
-- SQL*Loader使用方法
--=====================
一、SQL*Loader的體系結構
SQL*Loader由一個輸入控制檔案來控制整個裝載的相關描述資訊,一個或多個資料檔案作為原始資料,其詳細組成結構包括
Input Datafiles -->裝載到資料庫的原始資料檔案
Loader Control file -->提供給QL*Loader尋找及翻譯資料的相關資訊
Log File -->裝載過程中產生的日誌資訊
Bad Files -->被剔除的一些不合乎規範化的資料,由SQL*Loader剔除,也可能被Oracle剔除
Discard Files -->對不滿足控制檔案中記錄選擇標準的一些物理記錄
以上五個完整的部分最終將資料匯入到資料庫,當然,部分元件可以省略。
二、控制檔案的作用及組成
控制檔案是一個文字檔案,控制檔案中記錄的資訊告訴SQL*Loader在哪裡尋找資料、如何翻譯資料,以及將資料插入到哪裡等
控制檔案的組成分為三個部分
第一部分主要是關於通外部會話的相關資訊
如一些全域性選項、行資訊、是否跳過特殊記錄等
infile子句指明瞭從哪裡尋找源資料
第二部分由一個或多個Into table塊,每一個塊包含一些被匯入表的相關資訊,如表名,列名等
第三部分為可選項,如果存在則包含匯入的源資料
控制檔案寫法的注意事項
語法結構自由
不區分大小寫
在行開始處使用--來作為註釋行,在控制檔案中的第三部分使用--來註釋不被支援
關鍵字constant 和zone被保留
三、資料檔案
資料檔案可以有多個,這些資料檔案需要在控制檔案中指定
從SQL*Loader角度來看,資料檔案中的資料被當做一條條記錄
一個資料檔案描述資料檔案記錄有三種可選的格式
固定記錄格式
可變記錄格式
流記錄格式
這些記錄格式在控制檔案使用infile引數時,如果記錄的格式未指定,則預設的為流記錄格式。如使用infile *時則為流記錄格式
下面給出幾種不同記錄格式的例子
a.固定格式:INFILE datafile_name "fix n"
load data
infile 'example.dat' "fix 11" --表明每條記錄長度固定為個位元組
into table example
fields terminated by ',' optionally enclosed by '"'
(col1, col2)
example.dat:
001, cd, 0002,fghi, --第一條記錄為, cd, 第二條記錄為,fghi, 其中第二條記錄包含了一個換行符
00003,lmn,
1, "pqrs",
0005,uvwx,
b.可變格式:INFILE "datafile_name" "var n"
load data
infile 'example.dat' "var 3" --使用3位來描述一條記錄的長度
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
009hello,cd,010world,im, --009 表明第一條記錄的長度為個9位元組,表明第二條記錄的長度為10個位元組等
012my,name is,
c.流記錄格式:INFILE datafile_name ["str terminator_string"]
load data
infile 'example.dat' "str '|/n'" --使用| 或換行符來作為一條記錄的終止
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
hello,world,|
james,bond,|
邏輯記錄的概念
通常情況下,資料檔案中的一條物理記錄即是一條邏輯記錄,即資料檔案的一條記錄對應於資料庫的一條記錄SQL*Loader擴充套件了該功能可以將多條物理記錄形成一條邏輯記錄,而由這個組合再來生成一條資料庫中的記錄
SQL*Loader支援兩種策略來形成邏輯記錄
組合固定條數的物理記錄來形成邏輯記錄
將滿足特定條件的物理記錄組合並形成邏輯記錄
四、資料檔案裝載方式
1.傳統路徑匯入
使用生成SQL Insert語句來處理源資料,並且透過commit提交儲存資料。每次資料匯入將產生一些事務
在插入資料時尋找可用資料塊,然後將資料填充到資料塊
在插入到分割槽表的單個分割槽時使用下面的語法
INSERT INTO TABLE T PARTITION (P) VALUES ...
基於多cpu系統使用多個裝載會話執行併發。即將資料檔案分割為多個來裝載
2.直接路徑匯入
直接將資料寫到Oracle資料檔案,並更所使用塊的高水位線標記來儲存資料
支援資料的並行匯入
直接路徑匯入期間,資料轉換髮生在客戶端而非伺服器端。即位於伺服器端引數檔案中NLS引數不會被使用
可以透過在控制檔案中設定NLS引數或設定伺服器端合適的環境變數,如下面的例子
HIREDATE DATE 'YYYYMMDD' --為控制檔案中的HIREDATE指定格式
% export NLS_DATE_FORMAT='YYYYMMDD' --在伺服器端設定NLS_DATE_FORMAT
直接路徑裝載單個分割槽或子分割槽,裝載期間的其它分割槽可以執行DML操作
LOAD INTO TABLE T PARTITION (P) VALUES ...
LOAD INTO TABLE T SUBPARTITION (P) VALUES ...
使用直接路徑裝載時,需要指定DIRECT=true
支援兩種不同的併發
1.同時裝載到分割槽表表的不同分割槽或同時裝載到不同的表
2.分成多個伺服器裝載到分割槽表的單個分割槽或單個表,最後將裝載的臨時段合併儲存到分割槽或表
3.兩者對比(下面描述中傳統匯入方式稱為前者,直接匯入方式稱為後者)
a.前者使用commit來儲存資料,後者更新高水位線標記儲存資料
b.前者產生redo記錄,後者基於特定的條件產生redo記錄
c.前者強制所有的約束,後者僅僅強制primary key,unique,not null約束
d.前者將觸發insert觸發器,後者不會觸發insert觸發器
e.前者支援簇表,後者不支援簇表
f.前者插入資料時其它使用者可以DML表,後者則不行
五、演示SQL*Loader
1.SQL*Loader可執行程式(sqlldr)所在的位置
[oracle@oradb ~]$ ls -lh $ORACLE_HOME/bin/sql*
-rwxr-x--x 1 oracle oinstall 634K Sep 13 20:01 /u01/app/oracle/10g/bin/sqlldr
2.檢視sqlldr的幫助資訊,
[oracle@oradb ~]$ sqlldr
SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 10:38:31 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Usage: SQLLDR keyword=value [,keyword=value,...]
Valid Keywords:
userid -- ORACLE username/password
control -- control file name
log -- log file name
bad -- bad file name
data -- data file name
discard -- discard file name
discardmax -- number of discards to allow (Default all)
skip -- number of logical records to skip (Default 0)
load -- number of logical records to load (Default all)
errors -- number of errors to allow (Default 50)
rows -- number of rows in conventional path bind array or between direct path data saves
(Default: Conventional path 64, Direct path all)
bindsize -- size of conventional path bind array in bytes (Default 256000)
silent -- suppress messages during run (header,feedback,errors,discards,partitions)
direct -- use direct path (Default FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- do parallel load (Default FALSE)
file -- file to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (Default FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable (Default FALSE)
commit_discontinued -- commit loaded rows when load is discontinued (Default FALSE)
readsize -- size of read buffer (Default 1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (Default NOT_USED)
columnarrayrows -- number of rows for direct path column array (Default 5000)
streamsize -- size of direct path stream buffer in bytes (Default 256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session (Default FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)
date_cache -- size (in entries) of date conversion cache (Default 1000)
PLEASE NOTE: Command-line parameters may be specified either by
position or by keywords. An example of the former case is 'sqlldr
scott/tiger foo'; an example of the latter is 'sqlldr control=foo
userid=scott/tiger'. One may specify parameters by position before
but not after parameters specified by keywords. For example,
'sqlldr scott/tiger control=foo logfile=log' is allowed, but
'sqlldr scott/tiger control=foo log' is not, even though the
position of the parameter 'log' is correct.
3.將資料檔案和控制檔案組合在一起
[oracle@oradb ~]$ cat sqlldr_demo/demo1.ctl
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO, DNAME, LOC )
BEGINDATA
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia
SQL> show user;
USER is "ROBINSON"
SQL> create table dept
2 (deptno number(2) constraint dept_pk primary key,
3 dname varchar2(20),
4 loc varchar2(20));
Table created.
[oracle@oradb sqlldr_demo]$ sqlldr robinson/robinson control=demo1.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 11:29:34 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 4
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------------- --------------------
10 Sales Virginia
20 Accounting Virginia
30 Consulting Virginia
40 Finance Virginia
4.將資料檔案和控制檔案分離實現資料裝載
[oracle@oradb sqlldr_demo]$ cat demo1.ctl demo1.data --檢視分離後兩者的內容
LOAD DATA
INFILE demo1.data
INTO TABLE DEPT
FIELDS TERMINATED BY ','
(DEPTNO, DNAME, LOC )
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia
[oracle@oradb sqlldr_demo]$ sqlldr robinson/robinson control=demo1.ctl log=demo1.log
SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 12:21:35 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-601: For INSERT option, table must be empty. Error on table DEPT
SQL> truncate table dept; --收到了SQL*Loader-601錯誤提示,清空原表
[oracle@oradb sqlldr_demo]$ sqlldr robinson/robinson control=demo1.ctl log=demo1.log
SQL*Loader: Release 10.2.0.1.0 - Production on Thu Sep 23 12:22:39 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 4 --再次正常匯入
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22578826/viewspace-703476/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL*Loader的使用方法SQL
- SQL LOADER的使用方法SQL
- SQL LOADERSQL
- SQL*Loader 詳解SQL
- Oracle SQL Loader(sqlldr)OracleSQL
- sql loader使用例子SQL
- SQL*Loader 常用知識SQL
- 【SQL*Loader】sqlldr匯入SQL
- Data Utilities : SQL*Loader (56)SQL
- oracle sql loader 的使用OracleSQL
- Maximizing SQL*Loader PerformanceSQLORM
- SQL_LOADER小結SQL
- 【移動資料】SQL*LoaderSQL
- Oracle SQL Loader(sqlldr)+ Externale TablesOracleSQL
- Oracle SQL*Loader使用案例(一)OracleSQL
- Oracle SQL*Loader使用案例(二)OracleSQL
- Oracle SQL*Loader使用案例(三)OracleSQL
- Oracle SQL*Loader使用案例(四)OracleSQL
- Some good articles about SQL*loaderGoSQL
- 使用sql loader導資料SQL
- Oracle SQL*Loader 使用指南OracleSQL
- SQL*LOADER 的使用小結SQL
- windows sql loader批處理WindowsSQL
- SQL*Loader-805的解決SQL
- SQL*Loader的使用總結(四)SQL
- SQL*Loader的使用總結(三)SQL
- SQL*Loader的使用總結(二)SQL
- SQL*Loader的使用總結(一)SQL
- 學習oracle sql loader 的使用OracleSQL
- sql loader的一點總結SQL
- sql中limit使用方法SQLMIT
- Flashback [Oracle SQL] 使用方法OracleSQL
- 使用SQL*Loader建立外部表之二SQL
- 使用SQL*Loader建立外部表之一SQL
- 用SQL*Loader載入外部資料SQL
- SCRIPT TO GENERATE SQL*LOADER CONTROL FILESQL
- SQL*Loader 筆記 (二) 效能優化SQL筆記優化
- ORACLE SQL Loader的詳細語法OracleSQL