SlideShare a Scribd company logo
1 of 53
SQL LOADER & BULK INSERT
新增資料到資料庫
 一般寫程式,大部分的寫法都是直接
 Insert Into [資料表] …
 視情況使用
 Commit:一筆一筆寫入
 Transation:全部完成之後再 Commit
.NET使用ADO.NET
string sql="";
string connectionString =
"Data Source=[DB];
User ID=[ACT];
Password=[PWD];";
//建立連線
OracleConnection dbcon = null;
dbcon =
new OracleConnection (connectionString);
dbcon.Open();
.NET使用ADO.NET
//建立資料庫命令物件
OracleCommand dbcmd =
dbcon.CreateCommand();
......
//執行迴圈產生 Insert 語法
for (...)
{ ......
dbcmd.CommandText = sql; dbcmd.ExecuteNonQuery();
}
.NET使用ADO.NET
//釋放資源
dbcmd.Dispose ();
dbcmd = null;
dbcon.Close ();
dbcon = null;
資料量較大
 當資料量大到一定程度的時候,就不一定可行
 例如批次作業將大量Log資料新增進入資料庫
全部的INSERT語法放到文字檔案
// 原本 For 迴圈變成僅產生 Insert 語法
StringBuilder TextContent = new StringBuilder();
for (...) { ...... TextContent.Append(sql); }
// 全部產生完後,放入 Text File 內
using (System.IO.StreamWriter sw =
new System.IO.StreamWriter("[FileName]", false))
{
sw.Write(AllContent);
sw.Close();
}
CONSOLE程式裡面開啟PROCESS
...
System.Diagnostics.ProcessStartInfo PSI = new
System.Diagnostics.ProcessStartInfo("cmd.exe");
PSI.RedirectStandardInput = true;
PSI.RedirectStandardOutput = false;
PSI.RedirectStandardError = true;
PSI.UseShellExecute = false;
PSI.WorkingDirectory = [Path];
System.Diagnostics.Process p = System.Diagnostics.Process.Start(PSI);
...
呼叫COMMAND LINE來執行TEXT FILE
...
p.Start();
// ConnectionString 來自 Web.Config 的連線字串p.StandardInput.WriteLine(
"sqlplus " + ConnectionString + " @"[FileName]" ");
p.StandardInput.WriteLine("exit");
p.WaitForExit();
p.Close();
p.Dispose();
...
更快的方法
 Oracle
 SQL Loader
 MS SQL
 Data Transformation Services
 SQL Server Integration Services
 BULK INSERT
 bcp 公用程式
AGENDA
簡介
使用的設定檔案
資料來源常見格式
資料來源的匯入方式
使用方法
簡介
SQL LOADER
SQL LOADER
 Oracle的資料匯入工具,通常用來將大量的資料新增進入Oracle資料庫中。
 SQL*Loader由一個控制檔來定義整個資料匯入的對應。
使用的設定檔案
SQL LOADER
設定檔
• 資料檔,格式需參照控制檔定義Input Datafiles
• 控制檔(.ctl),定義匯入資料表、欄位對應與分隔符號號等Loader Control file
• record檔(.log)Log File
• 錯誤檔(.bad),被過濾的不符設定的資料Bad Files
• 丟棄檔(.dsc),不滿足控制檔中設定的資料Discard Files
設定檔
• 控制檔(.ctl),定義匯入資料表、欄位Loader Control file
• 參數檔(.par),可以將控制檔的參數獨
立成一個文件
Parameter File
控制檔
 控制檔是一個文字檔,控制檔中record的訊息告訴SQL*Loader在哪裡尋找資料、如何翻譯資料,以及將資
料新增到哪裡等。
控制檔的組成
•主要是關於通外部會話的相關訊息
•如一些全域選項、行訊息、是否跳過特殊record等
•infile子句指明了從哪裡尋找源資料
第一部分
•由一個或多個Into table塊,每一個塊包含一些被導入表的相關訊息,如表名,列名等第二部分
•為可選項,如果存在則包含導入的源資料第三部分
控制檔寫法的注意事項
 語法結構自由
 不區分大小寫
 在行開始處使用--來作為註釋行,在控制檔中的第三部分使用--來註釋不被支持
 關鍵保留字constant 和zone
範例
load data
infile '[資料檔名]' discard file.dsc
Badfile result.bad
append Insert、append、truncate、replace
into table "[資料表]"
fields terminated by X'09' optionally enclosed by '“' 欄位間用Tab分隔(X‘09‘)
而字串值用雙引號括起來(“)
(
ID INTEGER EXTERNAL, 數字欄位
NO FLOAT, 浮點數欄位
NAME CHAR(4000) 字串欄位
)
範例
load data
infile '[資料檔名]' discard file.dsc
Badfile result.bad
append Insert、append、truncate、replace
into table "[資料表]"
fields terminated by X'09' optionally enclosed by '“' 欄位間用Tab分隔(X‘09‘)
而字串值用雙引號括起來(“)
(
DATE Date "yyyy/mm/dd hh24:mi:ss", 日期欄位及格式
DATE Date "yyyy/mm/dd" NULLIF(DATE="null") 日期欄位,遇到空值則放null值
)
資料來源常見格式
SQL LOADER
資料檔
 資料檔可以有多個,這些資料檔需要在控制檔中指定
 從SQL*Loader角度來看,資料檔中的資料被當做一條條record
資料檔格式
 一個資料檔描述資料檔record有三種可選的格式
 Fixed Record Format
 Variable Record Format
 Stream Record Format
 這些record格式在控制檔使用infile參數時,如果record的格式未指定,則預設值為Stream Record Format
FIXED RECORD FORMAT
infile datafile_name "fix n"
範例
load data
infile '[資料檔名]' "fix 11" 表明每一行record長度固定為幾個字節
into table "[資料表]"
fields terminated by ',' optionally enclosed by '"' 欄位間用逗號分隔(',')
而字串值用雙引號括起來(")
(
col1 CHAR(5),
col2 CHAR(7)
)
範例
example.dat
396,...ty,.4922,beth,n record列一為396,…ty,.
record列二為4922,beth,n
68773,ben,. col1= 68773
col2= ben
1,.."dave", col1= 1
col2= dave
5455,mike,. col1= 5455
col2= mike
VARIABLE RECORD FORMAT
infile "datafile_name" "var n"
範例
load data
infile '[資料檔名]' "var 3" 使用3位來描述一列record的長度
into table "[資料表]"
fields terminated by ',' optionally enclosed by '"' 欄位間用逗號分隔(',')
而字串值用雙引號括起來(")
(
col1 CHAR(5),
col2 CHAR(7)
)
範例
example.dat
009hello,cd,010world,im, record列一為hello,cd,
record列二為world,im,/n
012my,name is, col1= my
col2= name is
STREAM RECORD FORMAT
infile '[資料檔名]' ["str terminator_string"]
範例
load data
infile '[資料檔名]' "str '|/n'" 使用| 或換行符來作為一條record的終止
into table "[資料表]"
fields terminated by ',' optionally enclosed by '"' 欄位間用逗號分隔(',')
而字串值用雙引號括起來(")
(
col1 CHAR(5),
col2 CHAR(7)
)
範例
example.dat
hello,world,| col1= hello
col2= world
james,bond,| col1= james
col2= bond
LOGICAL RECORDS
 邏輯record的概念
 通常情況下,資料檔中的一條物理record即是一條邏輯record,即資料檔的一條record對應於資料庫的一
條資料列,SQL*Loader擴展了該功能可以將多條物理record形成一條邏輯record,而由這個組合再來生成
一條資料庫中的record
邏輯形成RECORD策略
 組合固定條數的物理record來形成邏輯record
 將滿足特定條件的物理record組合併形成邏輯
資料來源的匯入方式
SQL LOADER
資料來源的匯入方式
direct = false
• 等同於insert語法
direct = true
• 繞過SGA,將資料直接匯入HWM以上,性能較高
名詞解釋
System Global Area
• Oracle啟動時設定的記憶體區域,其中包含了儲存資料及控制資訊的記憶體結構
High Water Mark
• 在資料庫segments中,用來標記已經有多少已經使用過的數據區塊
National Language Support
• 區域格式設定
SYSTEM GLOBAL AREA
HIGH WATER MARK
HIGH WATER MARK
HIGH WATER MARK
NATIONAL LANGUAGE SUPPORT
DIRECT = FALSE
 使用SQL Insert語句來處理資料,並且通過commit提交保存資料
 每次資料導入將產生一些交易紀錄
DIRECT = TRUE
 直接將資料寫到Oracle資料表,並更所使用塊的高水位線標記來保存資料
 資料轉換發生在客戶端而非服務器端
 位於服務器端參數文件中NLS參數不會被使用
DIRECT = TRUE
可以透過在控制檔中設置NLS參數或設置服務器端合適的環境變量,如下面的例子
--為控制檔中的HIREDATE指定格式
HIREDATE DATE 'YYYYMMDD'
--在服務器端設定NLS_DATE_FORMAT
% export LS_DATE_FORMAT='YYYYMMDD'
兩者對比
direct = false direct = true
保存資料 commit 更新HWM
交易紀錄 redo 無
constraints 所有 primary key
unique
not null
trigger 觸發insert觸發器 不會觸發insert觸發器
使用方法
SQL LOADER
SQLDR 語法
sqlldr userid = [帳號]/[密碼]@資料庫名稱 control = [控制檔名]
log = [產生的Log檔名]
bad = [產生的bad檔名]
選擇參數
Rows = 300 (每 300 個一次載入到資料庫中)
Errors = 100 (遇到 100 個錯誤就終止執行)
執行檔(SQLLDR)所在的位置
 Linrx
 $ORACLE_HOME/bin/
 Windows
 C:oraclexeapporacleproduct[版本]serverbin
C# 呼叫SQL LOADER
...
p.StandardInput.WriteLine(
"sqlldr userid=" + ConnectionString +
" control=[控制檔] log=[Log檔]
rows=300 errors=100");
...
DEMO
Q&A

More Related Content

What's hot

OpenFOAMにおける相変化解析
OpenFOAMにおける相変化解析OpenFOAMにおける相変化解析
OpenFOAMにおける相変化解析takuyayamamoto1800
 
Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)Jonathan Katz
 
ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...
ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...
ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...Alfresco Software
 
Participia in het Grieks
Participia in het GrieksParticipia in het Grieks
Participia in het Griekslbrounen
 
Mixer vessel by cfmesh
Mixer vessel by cfmeshMixer vessel by cfmesh
Mixer vessel by cfmeshEtsuji Nomura
 
Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?Alan Cafruni Gularte
 
Boundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAMBoundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAMFumiya Nozaki
 

What's hot (7)

OpenFOAMにおける相変化解析
OpenFOAMにおける相変化解析OpenFOAMにおける相変化解析
OpenFOAMにおける相変化解析
 
Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)Accelerating Local Search with PostgreSQL (KNN-Search)
Accelerating Local Search with PostgreSQL (KNN-Search)
 
ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...
ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...
ECM Decision Matrix - Deciding Between Alfresco Community Edition, Alfresco E...
 
Participia in het Grieks
Participia in het GrieksParticipia in het Grieks
Participia in het Grieks
 
Mixer vessel by cfmesh
Mixer vessel by cfmeshMixer vessel by cfmesh
Mixer vessel by cfmesh
 
Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?Testes de Performance: Por Onde Começar?
Testes de Performance: Por Onde Começar?
 
Boundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAMBoundary Conditions in OpenFOAM
Boundary Conditions in OpenFOAM
 

Similar to SQL Loader & Bulk Insert 大量資料匯入工具

竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程kidmany2001
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程Lixun Peng
 
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入鍾誠 陳鍾誠
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Bob Huang
 
Robotis Servo 與 RoBoard 之連接介面
Robotis Servo 與 RoBoard 之連接介面Robotis Servo 與 RoBoard 之連接介面
Robotis Servo 與 RoBoard 之連接介面roboard
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
Flex 4.5 action data communication
Flex 4.5 action data communicationFlex 4.5 action data communication
Flex 4.5 action data communicationjexchan
 
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现ideawu
 
接口芯片
接口芯片接口芯片
接口芯片jugn
 
第7章 常用接口芯片
第7章 常用接口芯片第7章 常用接口芯片
第7章 常用接口芯片jugn
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
09 結構、聯合、列舉與定義型態
09 結構、聯合、列舉與定義型態09 結構、聯合、列舉與定義型態
09 結構、聯合、列舉與定義型態shademoon
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務台灣資料科學年會
 

Similar to SQL Loader & Bulk Insert 大量資料匯入工具 (20)

竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入
 
系統程式 -- 第 5 章
系統程式 -- 第 5 章系統程式 -- 第 5 章
系統程式 -- 第 5 章
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01
 
Robotis Servo 與 RoBoard 之連接介面
Robotis Servo 與 RoBoard 之連接介面Robotis Servo 與 RoBoard 之連接介面
Robotis Servo 與 RoBoard 之連接介面
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
Flex 4.5 action data communication
Flex 4.5 action data communicationFlex 4.5 action data communication
Flex 4.5 action data communication
 
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
 
接口芯片
接口芯片接口芯片
接口芯片
 
第7章 常用接口芯片
第7章 常用接口芯片第7章 常用接口芯片
第7章 常用接口芯片
 
系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
09 結構、聯合、列舉與定義型態
09 結構、聯合、列舉與定義型態09 結構、聯合、列舉與定義型態
09 結構、聯合、列舉與定義型態
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 

More from HO-HSUN LIN

以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.jsHO-HSUN LIN
 
區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)HO-HSUN LIN
 
Tensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI GymTensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI GymHO-HSUN LIN
 
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具HO-HSUN LIN
 
Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發HO-HSUN LIN
 
Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序HO-HSUN LIN
 

More from HO-HSUN LIN (7)

以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js以太坊(Ethereum) solidity & web3.js
以太坊(Ethereum) solidity & web3.js
 
區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)區塊鏈與金融科技(Blockchain and Fintech)
區塊鏈與金融科技(Blockchain and Fintech)
 
Tensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI GymTensorflow + Keras & Open AI Gym
Tensorflow + Keras & Open AI Gym
 
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
Microsoft CNTK, Cognitive Toolkit 微軟深度學習工具
 
Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發Chaincode Development 區塊鏈鏈碼開發
Chaincode Development 區塊鏈鏈碼開發
 
Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序
 
ASP.NET AJAX
ASP.NET AJAXASP.NET AJAX
ASP.NET AJAX
 

SQL Loader & Bulk Insert 大量資料匯入工具