達夢資料庫DM8之資料快速載入工具dmfldr使用方法

一顆小綠芽2022發表於2022-05-05

達夢資料庫DM8之資料快速載入工具dmfldr使用方法


1. 概述

1.1 功能介紹

    dmfldr(DM Fast Loader)是 DM 提供的快速資料裝載命令列工具。使用者通過使用 dmfldr 工具能夠把按照一定格式排序的文字資料以簡單、快速、高效的方式載入到 DM 資料庫中,或把 DM 資料庫中的資料按照一定格式寫入文字檔案。

1.2 系統結構

    dmfldr 的系統結構如圖所示。

如圖所示,dmfldr 實際上除了客戶端工具,還包含一個在資料庫伺服器中的 dmfldr功能模組,它們共同完成 dmfldr 的各項功能。


  • 當進行資料載入時,dmfldr 客戶端接收使用者提交的命令與引數,分析控制檔案與資料檔案,將資料打包傳送給伺服器端的 dmfldr 模組,由伺服器完成資料的真正裝載工作。並分析伺服器返回的訊息,必要時根據使用者引數指定生成日誌檔案與錯誤資料檔案。

  • 當進行資料匯出時,dmfldr 客戶端接收使用者提交的命令與引數,分析控制檔案,將使用者要求轉換成相應訊息傳送給伺服器端的 dmfldr 模組。伺服器解析並打包需要匯出的資料,傳送給 dmfldr 客戶端,客戶端將資料寫入指定的資料檔案,必要時根據使用者引數指定生成日誌檔案。


2. dmfldr命令詳解

2.1 dmfldr命令引數

    安裝好 DM 資料庫管理系統後,在安裝目錄的“bin/”子目錄下可找到 dmfldr 執行檔案。

[dmdba@dmdb01 ~]$ /dm8/dmdbms/bin/dmfldr help

格式: ./dmfldr   KEYWORD=value

例程: ./dmfldr   SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'


USERID 必須是命令列中的第一個引數

CONTROL 必須是命令列中的第二個引數


字串型別引數必須以引號封閉

關鍵字              說明(預設值)

--------------------------------------------------------------------------------

USERID              使用者名稱/口令, 格式:{<username>[/<password>] | /}[@<connect_identifier>][<option>] [<os_auth>]

                    <connect_identifier> : [<svc_name> | host[:port] | <unixsocket_file>]

                    <option> : #{<exetend_option>=<value>[,<extend_option>=<value>]...}

                               --此行外層{}是為了封裝引數之用,書寫時需要保留

                    <os_auth> : AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}

CONTROL             控制檔案,字串型別

LOG                 日誌檔案,字串型別 (fldr.log)

BADFILE             錯誤資料記錄檔案,字串型別 (fldr.bad)

SKIP                初始忽略邏輯行數 (0)

LOAD                需要裝載的行數 (ALL)

ROWS                提交頻次 (50000), DIRECT為FALSE有效

DIRECT              是否使用快速方式裝載 (TRUE)

SET_IDENTITY        是否插入自增列 (FALSE)

SORTED              資料是否已按照聚集索引排序 (FALSE)

INDEX_OPTION        索引選項 (1)

                    1 不重新整理二級索引,資料按照索引先排序,裝載完後再

                    將排序的資料插入索引

                    2 不重新整理二級索引,資料裝載完成後重建所有二級索引

                    3 重新整理二級索引, 資料裝載的同時將資料插入二級索引

ERRORS              允許的最大資料錯誤數 (100)

CHARACTER_CODE      字元編碼,字串型別 (GBK, UTF-8, SINGLE_BYTE, EUC-KR)

MODE                裝載方式,字串型別 IN表示載入,OUT表示載出,

                    OUTORA表示載出ORACLE (IN)

CLIENT_LOB          大欄位目錄是否在本地 (FALSE)

LOB_DIRECTORY       大欄位資料檔案存放目錄

LOB_FILE_NAME       大欄位資料檔名稱,僅匯出有效 (dmfldr.lob)

BUFFER_NODE_SIZE    讀入檔案緩衝區的大小 (10),有效值範圍1~2048

LOG_SIZE            日誌資訊緩衝區的大小 (1),有效值範圍1~100

READ_ROWS           工作執行緒一次最大處理的行數 (100000),最大支援2^26-10000

NULL_MODE           載入時NULL字串是否處理為NULL

                    載出時空值是否處理為NULL字串 (FALSE)

NULL_STR            載入時視為NULL值處理的字串

SEND_NODE_NUMBER    執行時傳送節點的個數 (20),有效值範圍16~65535

TASK_THREAD_NUMBER  處理使用者資料的執行緒數目,預設與處理器核數量相同,有效值範圍1~128

BLDR_NUM            伺服器BLDR數目 (64),有效值範圍1~1024

BDTA_SIZE           bdta的大小 (5000),有效值範圍100~10000

COMPRESS_FLAG       是否壓縮bdta (FALSE)

MPP_CLIENT          MPP環境,是否本地分發 (TRUE)

SINGLE_FILE         MPP環境,是否只生成單個資料檔案(FALSE)

LAN_MODE            MPP環境,是否以內網模式裝載資料(FALSE)

UNREP_CHAR_MODE     非法字元處理選項(0),為0時表示跳過該資料行,為1時表示使用(*)替換錯誤位元組

SILENT              是否靜默方式裝載資料(FALSE)

BLOB_TYPE           BLOB型別欄位資料值的實際型別,字串型別 (HEX_CHAR)

                    HEX表示值為十六進位制,HEX_CHAR表示值為十六進位制字元型別

                    僅在direct=FALSE有效

OCI_DIRECTORY       OCI動態庫所在的目錄

DATA                指定資料檔案路徑

ENABLE_CLASS_TYPE   允許使用者匯入CLASS型別資料 (FALSE)

FLUSH_FLAG          提交時是否立即刷盤 (FALSE)

IGNORE_BATCH_ERRORS 是否忽略錯誤資料繼續匯入 (FALSE)

SINGLE_HLDR_HP      是否使用單個HLDR裝載HUGE水平分割槽表 (TRUE)

EP                  指定需要傳送資料的站點序號列表,僅向MPP環境匯入資料時有效

PARALLEL            是否開啟並行裝載(FALSE)

SQL                 使用自定義查詢語句,僅匯出模式有效

HELP                列印幫助資訊

[dmdba@dmdb01 ~]$ 


2.2 dmfldr使用樣例:

/dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240  control='/dm8/dmdbms/data/dmfldr/fldr.ctl'  log='/dm8/dmdbms/data/dmfldr/fldr.log' badfile='/dm8/dmdbms/data/dmfldr/fldr.bad'  errors=999 load=10000 rows=500 character_code= ’SINGLE_BYTE ’


2.3 dmfldr控制檔案樣例

例:一個 dmfldr 控制檔案的例子

OPTIONS

(

SKIP = 0    --跳過資料檔案起始的邏輯行數,整型數值。預設的跳過起始行數為 0 行

ROWS = 50000    --每次提交的行數,整形數值。預設的提交行數為 50000 行

DIRECT = TRUE    --快速的載入模式

INDEX_OPTION = 2    --代表伺服器在快速裝載過程中不重新整理二級索引資料,只在裝載完成時重建所有二級索引;

)

LOAD DATA 

INFILE '/opt/data/test1.txt' STR X '0A'

BADFILE '/opt/data/test1.bad'

INTO TABLE test1

FIELDS '|'              ---列分隔符,使用者應當指定 FIELDS 或者 coldef_option 中的至少一種

(

F1,

F2 DATE FORMAT 'YYYY-MM-DD',

F3 NULL,

F4 TERMINATED BY WHITESPACE ENCLOSE BY '(',

F5 CONSTANT "test",

F6 "trim()"

)

LOAD DATA 

INFILE '/opt/data/test2.txt' STR X '0A'

BADFILE '/opt/data/test2.bad'

INTO TABLE test2

FIELDS '|'

(

C1 TERMINATED BY ' ',

C2,

C3 "sysdate"

)


3. dmfldr命令實戰測試

--測試1:使用 DATA引數指定資料檔案

也可以使用 DATA 引數指定 dmfldr 的資料檔案,資料檔案路徑的優先選擇順序為先控制檔案,後引數選項。如果控制檔案中資料檔案路徑指定為‘*’,在命令列通過 DATA引數指定資料檔案路徑,DATA 所指定的檔案路徑會替換‘*’。

1) 建表 TEST1

SQL> DROP TABLE ww.TEST1;

CREATE TABLE ww.TEST1(C1 INT,C2 INT,C3 DATE);操作已執行

已用時間: 39.348(毫秒). 執行號:1701.

SQL> 

操作已執行

已用時間: 3.974(毫秒). 執行號:1702.

SQL> 

2) 編輯資料檔案 test1.txt,存放路徑為/dm8/dmdbms/data/dmfldr/test1.txt,檔案內容如下

1 1|2022-04-26

2 2|2022-04-25

3 3|2022-04-24

3) 編輯控制檔案 test.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/test1.ctl,內容如下:

LOAD DATA

INFILE *

INTO TABLE ww.test1

FIELDS '|'

(

C1 TERMINATED BY ' ',

C2,

C3 DATE FORMAT 'yyyy-mm-dd'

)

4) 使用 dmfldr 進行資料載入

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test1.ctl\' data=\'/dm8/dmdbms/data/dmfldr/test1.txt\'

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/test1.txt

錯誤檔案:fldr.bad

目標表:WW.TEST1

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            WHT

C2                                                                                                                               CHARACTER            |

C3                                                                                                                               yyyy-mm-dd           |

行緩衝區數量: 2

任務執行緒數量: 2

3行記錄已提交

目標表:WW.TEST1

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:6.681(ms)

5) 檢查資料是否匯入成功

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.715(ms)

disql V8

SQL> select * from ww.test1;

行號     C1          C2          C3        

---------- ----------- ----------- ----------

1          1           1           2022-04-26

2          2           2           2022-04-25

3          3           3           2022-04-24

已用時間: 2.364(毫秒). 執行號:1900.

SQL> 


--測試2:資料轉換與錯誤資料檔案

1) 建表 TEST2

SQL> DROP TABLE WW.TEST2;

CREATE TABLE WW.TEST2(C1 INT,C2 INT,C3 DATE);DROP TABLE WW.TEST2;

已用時間: 0.296(毫秒). 執行號:0.

SQL> 

操作已執行

已用時間: 14.244(毫秒). 執行號:1901.

SQL> 

2) 編輯資料檔案 test2.txt,存放路徑為/dm8/dmdbms/data/dmfldr/test2.txt,檔案內容如下

1 1|2022-04-26

2 2|2022-04-25

3 3|2022-04-24

44|aaaa-bbb-ccc

3) 編輯控制檔案 test2.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/test2.ctl,內容如下:

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/test2.txt'

INTO TABLE WW.test2

FIELDS '|'

(

C1 TERMINATED BY ' ',

C2,

C3 DATE FORMAT 'yyyy-mm-dd'

)

4) 使用 dmfldr 進行資料載入

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test2.ctl\' badfile=\'/dm8/dmdbms/data/dmfldr/test2.bad\'

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/test2.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/test2.bad

目標表:WW.TEST2

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            WHT

C2                                                                                                                               CHARACTER            |

C3                                                                                                                               yyyy-mm-dd           |

行緩衝區數量: 2

任務執行緒數量: 2

資料檔案少列

3行記錄已提交

目標表:WW.TEST2

3 行載入成功。

由於資料格式錯誤,1行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:4

拒絕的邏輯記錄總數:0

用時:2.423(ms)

[dmdba@dmdb01 dmfldr]$ 

5) 檢視錯誤資料檔案 test2.bad,其內容如下

[dmdba@dmdb01 dmfldr]$ cat /dm8/dmdbms/data/dmfldr/test2.bad

dmfldr: 2022-04-27 13:04:54 WW->TEST2 44|aaaa-bbb-ccc

SQL> select * from ww.test2;

行號     C1          C2          C3        

---------- ----------- ----------- ----------

1          1           1           2022-04-26

2          2           2           2022-04-25

3          3           3           2022-04-24

已用時間: 2.364(毫秒). 執行號:1900.

SQL> 


--測試3: 大欄位資料匯出

當 dmfldr 工作在匯出模式即 MODE 為 OUT 時,dmfldr 生成大欄位對應的資料檔名由 LOB_FILE_NAME 指定,若未指定預設為 dmfldr.lob,檔案存放於LOB_DIRECTORY 指定的目錄,如果未指定 LOB_DIRECTORY 則存放於指定的匯出資料檔案同一目錄。


1) 建表 TEST3

SQL> DROP TABLE WW.TEST3;

CREATE TABLE WW.TEST3(C1 INT,C2 BLOB,C3 CLOB);DROP TABLE WW.TEST3;

已用時間: 0.535(毫秒). 執行號:0.

SQL> 

操作已執行

已用時間: 5.187(毫秒). 執行號:2100.

SQL> 

2) 插入資料

SQL> INSERT INTO WW.TEST3 VALUES(1,0XAB121032DE,'abcdefg');

DMSQL 過程已成功完成

已用時間: 0.801(毫秒). 執行號:2101.

SQL> INSERT INTO WW.TEST3 VALUES(2,0XAB121032DE,'abcdefg');

影響行數 1

已用時間: 0.423(毫秒). 執行號:2102.

SQL> COMMIT;

操作已執行

已用時間: 1.416(毫秒). 執行號:2103.

SQL> 

3) 編輯控制檔案 test3.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/test3.ctl,內容如下:

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/test3.txt'

INTO TABLE ww.test3

FIELDS '|'

(

C1,

C2,

C3

)

4) 使用 dmfldr 進行匯出資料

在這個例子中,指定了 LOB_DIRECTORY,而沒有指定 LOB_FILE_NAME,匯出的大欄位資料檔案將存放在 LOB_DIRECTORY 指定的/dm8/dmdbms/data/dmfldr 目錄,檔名為dmfldr.lob。

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test3.ctl\' LOB_DIRECTORY=\'/dm8/dmdbms/data/dmfldr/\' mode=\'out\'

dmfldr V8

2 rows is load out

總共匯出 2 行資料

用時:819.980(ms)

說明:預設生成dmfldr.lob的檔案


[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test3.ctl\' LOB_DIRECTORY=\'/dm8/dmdbms/data/dmfldr/\' LOB_FILE_NAME=\'dmfldr3.lob\' mode=\'out\'

dmfldr V8

2 rows is load out

總共匯出 2 行資料

用時:60.851(ms)

說明:也可以指定 LOB_FILE_NAME引數設定檔名稱dmfldr3.lob

5) 檢查 test3.txt 內容

[dmdba@dmdb01 dmfldr]$ cat test3.txt 

1|dmfldr.lob:0:5|dmfldr.lob:5:7

2|dmfldr.lob:12:5|dmfldr.lob:17:7

1|dmfldr3.lob:0:5|dmfldr3.lob:5:7

2|dmfldr3.lob:12:5|dmfldr3.lob:17:7

6) 檢查生成的lob檔案

[dmdba@dmdb01 dmfldr]$ ls -l dmfldr*

-rw-r--r-- 1 dmdba dinstall   24 Apr 27 13:21 dmfldr3.lob

-rw-r--r-- 1 dmdba dinstall   24 Apr 27 13:18 dmfldr.lob


--測試4:DIRECT 為 為 TRUE  時大欄位資料的載入

1) 建表 TEST4

SQL> DROP TABLE WW.TEST4;

已用時間: 0.844(毫秒). 執行號:0.

SQL> CREATE TABLE WW.TEST4(C1 INT,C2 BLOB,C3 CLOB);

操作已執行

已用時間: 4.929(毫秒). 執行號:2500.

SQL> 

2) 編輯資料檔案 test4.txt,存放路徑為 DM 伺服器所在主庫的/dm8/dmdbms/data/dmfldr/test4.txt,檔案內容如下

1|testblob.txt:0:10|testclob.txt:0:10

2|testblob.txt:10:20|testclob.txt:10:20

3|testblob.txt:20:30|testclob.txt:20:30

其中,testblob.txt、testclob.txt 為文字檔案,長度大於 30 位元組,存放路徑為/dm8/dmdbms/data/dmfldr/。

[dmdba@dmdb01 dmfldr]$ cat testblob.txt 

1|testblobtestblobtestblobtestblob1|testblobtestblobtestblobtestblob1

2|testblobtestblobtestblobtestblob2|testblobtestblobtestblobtestblob2

3|testblobtestblobtestblobtestblob3|testblobtestblobtestblobtestblob3

[dmdba@dmdb01 dmfldr]$ cat testclob.txt 

1|testclobtestclobtestclobtestclob1|testclobtestclobtestclobtestclob1

2|testclobtestclobtestclobtestclob2|testclobtestclobtestclobtestclob2

3|testclobtestclobtestclobtestclob3|testclobtestclobtestclobtestclob3

[dmdba@dmdb01 dmfldr]$ 

3) 編輯控制檔案 test4.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/test4.ctl,內容如下:

OPTIONS

(

SKIP = 0

DIRECT = TRUE

INDEX_OPTION = 2

)

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/test4.txt'

BADFILE '/dm8/dmdbms/data/dmfldr/test4.bad'

INTO TABLE ww.test4

FIELDS '|'

(

C1,

C2,

C3

)

4) 使用 dmfldr 進行匯入資料

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test4.ctl\' LOB_DIRECTORY=\'/dm8/dmdbms/data/dmfldr/\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_test4.log\'

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/test4.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/test4.bad

目標表:WW.TEST4

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

C3                                                                                                                               CHARACTER            |

行緩衝區數量: 2

任務執行緒數量: 2

3行記錄已提交

目標表:WW.TEST4

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:3.716(ms)

5) 檢查表內容

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.773(ms)

disql V8

SQL> select * from ww.test4;

行號     C1          C2                                                             C3                            

---------- ----------- -------------------------------------------------------------- ------------------------------

1          1           0x317C74657374626C6F62                                         1|testclob

2          2           0x74657374626C6F6274657374626C6F6274657374                     testclobtestclobtest

3          3           0x7374626C6F6274657374626C6F62317C74657374626C6F6274657374626C stclobtestclob1|testclobtestcl

已用時間: 1.978(毫秒). 執行號:3600.

SQL> 


--測試5:DIRECT為 FALSE  時大欄位資料的載入

當 MODE 為 IN 且 DIRECT 為 FALSE 時,資料檔案中大欄位列資料即欄位內容。

BLOB_TYPE 引數指定 BLOB 列內容為十六進位制或者字串:

  BLOB_TYPE 為 HEX_CHAR 時,資料檔案中 BLOB 列當作為十六進位制內容;

  BLOB_TYPE 為 HEX 時,資料檔案中 BLOB 列為字串形式內容,匯入後會轉換為十六進位制。

BLOB_TYPE 引數只對 DIRECT 為 FALSE 時有效,預設為 HEX_CHAR。

例 1:

1) 建表 TEST5

SQL> CREATE TABLE WW.TEST5(C1 INT,C2 BLOB,C3 CLOB);

操作已執行

已用時間: 8.982(毫秒). 執行號:3700.

SQL> 

2) 編輯資料檔案 test5.txt,存放路徑為/dm8/dmdbms/data/dmfldr/test5.txt,檔案內容如下

1|0x12d3c8a7|abcdefg

2|0x12a4cbac|hijlkmn

3|0x22d3c8b3|adefhjd

3) 編輯控制檔案 test5.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/test5.ctl,內容如下:

OPTIONS

(

SKIP = 0

DIRECT = FALSE

INDEX_OPTION = 2

)

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/test5.txt'

BADFILE '/dm8/dmdbms/data/dmfldr/test5.bad'

INTO TABLE ww.test5

FIELDS '|'

(

C1,

C2,

C3

)

4) 使用 dmfldr 進行匯入資料,BLOB_TYPE 為 HEX_CHAR

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test5.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_test5.log\' direct=false blob_type=\'hex_char\'

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:No

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/test5.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/test5.bad

目標表:WW.TEST5

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

C3                                                                                                                               CHARACTER            |

3 rows processed.

目標表:WW.TEST5

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:2.676(ms)

[dmdba@dmdb01 dmfldr]$ 

5) 查詢表資料

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.853(ms)

disql V8

SQL> select * from ww.test5;

行號     C1          C2         C3     

---------- ----------- ---------- -------

1          1           0x12D3C8A7 abcdefg

2          2           0x12A4CBAC hijlkmn

3          3           0x22D3C8B3 adefhjd

已用時間: 2.366(毫秒). 執行號:3900.

SQL> 


例 2:

步驟 1)、2)、3)同例 1

4) 使用 dmfldr 進行匯入資料,BLOB_TYPE 為 HEX

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/test5.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_test5_1.log\' direct=false blob_type=\'HEX\'

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:No

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/test5.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/test5.bad

目標表:WW.TEST5

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

C3                                                                                                                               CHARACTER            |

3 rows processed.

目標表:WW.TEST5

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:2.353(ms)

5) 查詢表資料

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 1.096(ms)

disql V8

SQL> select * from ww.test5;     

行號     C1          C2                     C3     

---------- ----------- ---------------------- -------

1          1           0x30783132643363386137 abcdefg

2          2           0x30783132613463626163 hijlkmn

3          3           0x30783232643363386233 adefhjd

已用時間: 2.225(毫秒). 執行號:4100.

SQL> 


--測試6:自增列裝載

自增列是比較特殊的列,為了保證資料庫中自增列列值的正確性,使用者在進行資料載入時需要特別注意。

當 DIRECT 引數為 FALSE 時, dmfldr 將把從資料檔案中讀取的自增列值作為目標值插入資料庫表中,使用者應當保證每一行的自增列的值符合自增列的規則,否則將造成資料混亂。

當 DIRECT 引數為 TRUE 時, dmfldr 提供了 SET_IDENTITY 引數(預設為 FALSE)對資料載入時自增列的處理進行設定:

(1)如果指定 SET_IDENTITY 選項值為 TRUE,則 dmfldr 將把從資料檔案中讀取的自增列值作為目標值插入資料庫表中,使用者應當保證每一行的自增列的值符合自增列的規則,否則將造成資料混亂;

(2)如果 SET_IDENTITY 選項值設定為 FALSE,則 dmfldr 將忽略資料檔案中對應自增列的值,伺服器將根據自增列定義和表中已有資料自動生成自增列的值插入每一行的對應列。


例1:DIRECT=TRUE,SET_IDENTITY=FALSE

1)建立測試表

DROP TABLE ww.TEST6;

CREATE TABLE ww.TEST6(C1 INT IDENTITY(1,1),C2 VARCHAR);

INSERT INTO  ww.TEST6(C2) VALUES('AAA');

INSERT INTO  ww.TEST6(C2) VALUES('BBB');

COMMIT;


[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.891(ms)

disql V8

SQL> CREATE TABLE ww.TEST6(C1 INT IDENTITY(1,1),C2 VARCHAR);

操作已執行

已用時間: 4.538(毫秒). 執行號:4200.

SQL> INSERT INTO  ww.TEST6(C2) VALUES('AAA');

INSERT INTO  ww.TEST6(C2) VALUES('BBB');

COMMIT;影響行數 1

已用時間: 0.601(毫秒). 執行號:4201.

SQL> 影響行數 1

已用時間: 0.169(毫秒). 執行號:4202.

SQL> 

操作已執行

已用時間: 0.915(毫秒). 執行號:4203.

SQL> 

---查詢

SQL> select *from ww.TEST6;

行號     C1          C2 

---------- ----------- ---

1          1           AAA

2          2           BBB

已用時間: 1.071(毫秒). 執行號:4204.

SQL> 

2)編輯資料檔案TEST6.txt,存放路徑/dm8/dmdbms/data/dmfldr/,內容如下:

2|aaa

3|bbb

4|ccc

3)編輯控制檔案TEST6.ctl,存放路徑/dm8/dmdbms/data/dmfldr/,內容如下:

OPTIONS

(

SKIP = 0

ROWS = 50000

INDEX_OPTION = 2

DIRECT=TRUE

SET_IDENTITY=FALSE

)

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/TEST6.txt'

BADFILE '/dm8/dmdbms/data/dmfldr/TEST6.bad'

INTO TABLE ww.TEST6

FIELDS '|'

(C1,

C2

)

4)裝載資料(DIRECT=TRUE SET_IDENTITY=FALSE)

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST6.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_TEST6.log\' 

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST6.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/TEST6.bad

目標表:WW.TEST6

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

行緩衝區數量: 2

任務執行緒數量: 2

3行記錄已提交

目標表:WW.TEST6

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:1.435(ms)

5)檢查匯入後表資訊

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.666(ms)

disql V8

SQL> select * from ww.TEST6;

行號     C1          C2 

---------- ----------- ---

1          1           AAA

2          2           BBB

3          3           aaa

4          4           bbb

5          5           ccc

已用時間: 1.263(毫秒). 執行號:4400.

SQL> 


例2:DIRECT=TRUE,SET_IDENTITY=TRUE

重複上面(1)(2)(3)步驟;

4)裝載資料 DIRECT=TRUE SET_IDENTITY=TRUE

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST6.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_TEST6_1.log\' DIRECT=TRUE SET_IDENTITY=TRUE

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:Yes

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST6.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/TEST6.bad

目標表:WW.TEST6

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

行緩衝區數量: 2

任務執行緒數量: 2

3行記錄已提交

目標表:WW.TEST6

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:1.513(ms)

5)查詢資料

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.743(ms)

disql V8

SQL> select * from ww.TEST6;

行號     C1          C2 

---------- ----------- ---

1          1           AAA

2          2           BBB

3          2           aaa

4          3           bbb

5          4           ccc

已用時間: 0.857(毫秒). 執行號:4600.

SQL> 

注意: 在表中有自增列的情況下裝載時,dmfldr引數direct=false效果與direct=true set_identity=true相同,都是將把從dmfldr資料檔案中讀取的自增列值作為目標值插入資料庫表中,這種情況需要保證每一行的自增列的值符合自增列的規則,否則將造成資料混亂。


--測試7:空值處理

dmfldr 通過設定 NULL_MODE 引數來處理空值。

設定為TRUE,載入時NULL字串處理為NULL,載出時空值處理為NULL字串;

設定為FALSE,載入時NULL字串處理為字串,載出時空值處理為空串。


例1:匯入NULL_MODE=TRUE

1)建立測試表TEST7

drop table ww.TEST7;

create table ww.TEST7(c1 int,c2 varchar(20));


SQL> create table ww.TEST7(c1 int,c2 varchar(20));

操作已執行

已用時間: 11.521(毫秒). 執行號:4700.

SQL> 

2)編輯資料檔案TEST7.txt,存放路徑/dm8/dmdbms/data/dmfldr,內容如下:

1|aaa

2|NULL

3|null

3)編輯控制檔案TEST7.ctl,存放路徑/dm8/dmdbms/data/dmfldr,內容如下:

OPTIONS

(

SKIP = 0

ROWS = 50000

INDEX_OPTION = 2

)

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/TEST7.txt'

BADFILE '/dm8/dmdbms/data/dmfldr/TEST7.bad'

INTO table ww.TEST7

FIELDS '|'

(C1,

C2

)

4)裝載資料 null_mode=true

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST7.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_TEST7.log\' null_mode=true 

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST7.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/TEST7.bad

目標表:WW.TEST7

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

行緩衝區數量: 2

任務執行緒數量: 2

3行記錄已提交

目標表:WW.TEST7

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:1.608(ms)

5)檢視資料

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.738(ms)

disql V8

SQL> select * from ww.TEST7;

行號     C1          C2  

---------- ----------- ----

1          1           aaa

2          2           NULL

3          3           NULL

已用時間: 1.383(毫秒). 執行號:4900.

SQL> 

SQL> select c1 ,ifnull(c2,'null value') from ww.TEST7;

行號     C1          "IFNULL"(C2,'nullvalue')

---------- ----------- ------------------------

1          1           aaa

2          2           null value

3          3           null value

已用時間: 0.884(毫秒). 執行號:4901.

SQL> 


例2:匯入NULL_MODE=FALSE

執行上面 1)2)3)步驟;

4)裝載資料 null_mode=false

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST7.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_TEST7_1.log\' null_mode=false 

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST7.txt

錯誤檔案:/dm8/dmdbms/data/dmfldr/TEST7.bad

目標表:WW.TEST7

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

行緩衝區數量: 2

任務執行緒數量: 2

3行記錄已提交

目標表:WW.TEST7

3 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:3

拒絕的邏輯記錄總數:0

用時:1.192(ms)

5)檢查匯入後表資訊

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 0.631(ms)

disql V8

SQL> select * from ww.TEST7;

行號     C1          C2  

---------- ----------- ----

1          1           aaa

2          2           NULL

3          3           null

已用時間: 1.326(毫秒). 執行號:5100.

SQL> select c1 ,ifnull(c2,'null value') from ww.TEST7;

行號     C1          "IFNULL"(C2,'nullvalue')

---------- ----------- ------------------------

1          1           aaa

2          2           NULL

3          3           null

已用時間: 0.607(毫秒). 執行號:5101.

SQL> 

注意:可以看到當設定null_mode=false時,裝載資料時"NULL"、“null"會被作為"NULL”、"null"兩個字串插入到表中;


例3:匯出NULL_MODE=TRUE

執行"匯入NULL_MODE=TRUE"的所有步驟,然後修改控制檔案內容如下:

OPTIONS

(

SKIP = 0

ROWS = 50000

INDEX_OPTION = 2

)

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/TEST7_1.txt' 

BADFILE '/dm8/dmdbms/data/dmfldr/TEST7_1.bad'

INTO table ww.TEST7

FIELDS '|'

(C1,

C2

)

4)執行匯出 NULL_MODE=TRUE

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST7_1.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_TEST7_3.log\' null_mode=TRUE mode=\'out\'

dmfldr V8

3 rows is load out

總共匯出 3 行資料

用時:59.265(ms)

[dmdba@dmdb01 dmfldr]$ 

5)檢視匯出檔案內容

[dmdba@dmdb01 dmfldr]$ cat /dm8/dmdbms/data/dmfldr/TEST7_1.txt 

1|aaa

2|NULL

3|NULL

[dmdba@dmdb01 dmfldr]$ 

注意:可以看到匯出值為NULL字串。


例4:匯出NULL_MODE=FALSE

執行"匯入NULL_MODE=TRUE"的所有步驟,然後修改控制檔案內容如下:

OPTIONS

(

SKIP = 0

ROWS = 50000

INDEX_OPTION = 2

)

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/TEST7_2.txt' 

BADFILE '/dm8/dmdbms/data/dmfldr/test_2.bad'

INTO table ww.TEST7

FIELDS '|'

(C1,

C2

)

4)執行匯出 NULL_MODE=FALSE

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST7_2.ctl\' LOG=\'/dm8/dmdbms/data/dmfldr/dmfldr_TEST7_3.log\' null_mode=FALSE mode=\'out\'

dmfldr V8

3 rows is load out

總共匯出 3 行資料

用時:66.175(ms)

[dmdba@dmdb01 dmfldr]$ 

5)檢視匯出檔案內容

[dmdba@dmdb01 dmfldr]$ cat TEST7_2.txt 

1|aaa

2|

3|

[dmdba@dmdb01 dmfldr]$ 

注意:可以看到,設定null_mode=false,匯出檔案內容值為空字串。


dmfldr使用限制

(1)不支援向臨時表、外部表裝載資料

(2)不支援向系統表裝載資料

(3)不支援向帶有點陣圖索引的表裝載資料

(4)不支援向帶有函式索引的表裝載資料

(5)不支援向帶有全文索引的表裝載資料

(6)不支援向 DCP 代理裝載資料

(7)dmfldr裝載時,對約束進行檢查.


--測試8:多表裝載

通過在控制檔案中指定多個 INTO TABLE 子句,可以將一批資料同時向多個表進行裝載。每個 INTO TABLE 子句中都可以指定 WHEN 過濾條件、FIELDS 子句和列定義子句。

對於多表裝載的使用需注意以下幾點:

  對於第二個及其之後的 INTO TABLE 子句,在其 coldef_option 中,必須為所有列指定 POSITION 選項;

  在 INTO TABLE 子句的目標表中,如果目標表各不相同,則一個批次就可以完成裝載完成(不管含有多少表,只需掃描一次資料檔案即可);如果含有重複的目標表,則相同的表需要分批次匯入(每當遇到相同的表時,就需要再掃描一遍原始檔。N 個重複的表,就需要掃描 N 次原始檔)。


1) 建表 TEST1、TEST2

DROP TABLE TEST1;

DROP TABLE TEST2;

CREATE TABLE TEST1(C1 INT,C2 INT);

CREATE TABLE TEST2(C1 INT,C2 INT);


SQL> DROP TABLE TEST1;

DROP TABLE TEST2;

CREATE TABLE TEST1(C1 INT,C2 INT);

CREATE TABLE TEST2(C1 INT,C2 INT);DROP TABLE TEST1;

已用時間: 0.414(毫秒). 執行號:0.

SQL> 操作已執行

已用時間: 11.541(毫秒). 執行號:7106.

SQL> 操作已執行

已用時間: 3.193(毫秒). 執行號:7107.

SQL> 

操作已執行

已用時間: 12.095(毫秒). 執行號:7108.

SQL> 

2) 編輯資料檔案 TEST8.txt,存放路徑為/dm8/dmdbms/data/dmfldr/TEST8.txt,檔案內容如下

1,2

2,3

3,2

4,8

9,1

3) 編輯控制檔案 TEST8.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/TEST8.ctl,內容如下:

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/TEST8.txt'

INTO TABLE test1

WHEN C1 != '1'

FIELDS ','

(

c1 position (1:1),

c2 position (3:3)

)

INTO TABLE test2

WHEN (3:3) = '2' AND c1 != '3'

FIELDS ','

(

c1 position (1:1),

c2 position (3:3)

)

4) 使用 dmfldr 進行資料載入

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST8.ctl\'

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:全部

每次提交伺服器行數:50000

跳過行數:0

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST8.txt

錯誤檔案:fldr.bad

目標表:TEST1

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            ,

C2                                                                                                                               CHARACTER            ,

行緩衝區數量: 2

任務執行緒數量: 2

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST8.txt

錯誤檔案:fldr.bad

目標表:TEST2

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            ,

C2                                                                                                                               CHARACTER            ,

行緩衝區數量: 2

任務執行緒數量: 2

4行記錄已提交

1行記錄已提交

目標表:TEST1

4 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:5

拒絕的邏輯記錄總數:0

用時:2.934(ms)

目標表:TEST2

1 行載入成功。

由於資料格式錯誤,0行 丟棄資料錯誤,DM8之數0行 沒有載入。

跳過的邏輯記錄總數:0

讀取的邏輯記錄總數:5

拒絕的邏輯記錄總數:0

用時:2.934(ms)

[dmdba@dmdb01 dmfldr]$ 

5) 檢視錶 TEST1 和 TEST2 的資料如下

SQL> SELECT * FROM TEST1;

行號     C1          C2         

---------- ----------- -----------

1          2           3

2          3           2

3          4           8

4          9           1

已用時間: 0.533(毫秒). 執行號:7109.

SQL> 

SQL> SELECT * FROM TEST2;

行號     C1          C2         

---------- ----------- -----------

1          1           2

已用時間: 0.638(毫秒). 執行號:7110.

SQL> 


---- 測試9:個性化設定

使用者通過設定 dmfldr 的 SKIP、LOAD、ROWS 引數,可以根據自己的需求調整裝載的起始行、裝載最大行數以及每次提交的行數。

SKIP 引數用來設定跳過資料檔案起始的邏輯行數,整形數值。預設的跳過起始行數為0 行。如果使用者指定了多個檔案,且起始檔案中的行數不足 SKIP 所指定的行數,則dmfldr 工具會掃描下一個檔案直至累加的行數等於 SKIP 所設定的行數或者所有檔案都已掃描結束。

LOAD 引數用來設定裝載的最大行數,整形數值。預設的最大裝載行數為資料檔案中的所有行數。LOAD 指定的值不包括 SKIP 指定的跳過的行數。

ROWS 引數用來設定每次提交的行數,整形數值。預設的提交行數為 50000 行。提交行數的值表示提交到伺服器的行數,並不一定代表按照資料檔案中的資料順序的行數。使用者可以根據實際情況調整每次提交的行數,以達到效能的最佳點。ROWS 引數作用於 MODE 為IN 的情況下,當 MODE 為 OUT 時無效。

例如:

1) 建表 TEST9

DROP TABLE ww.TEST9;

CREATE TABLE ww.TEST9(C1 INT,C2 VARCHAR);

SQL> CREATE TABLE ww.TEST9(C1 INT,C2 VARCHAR);

操作已執行

已用時間: 33.578(毫秒). 執行號:500.

SQL> 

2) 編輯資料檔案 TEST9.txt,存放路徑為/dm8/dmdbms/data/dmfldr/TEST9.txt,檔案內容如下

1|aaa

2|bbb

3|ccc

4|ddd

5|eee

6|fff

7|ggg

8|hhh

9|iii

10|jjj

3) 編輯控制檔案 test.ctl,存放路徑為/dm8/dmdbms/data/dmfldr/TEST9.ctl,內容如下:

LOAD DATA

INFILE '/dm8/dmdbms/data/dmfldr/TEST9.txt'

INTO TABLE ww.TEST9

FIELDS '|'

(

C1,

C2

)

4) 使用 dmfldr 進行資料載入

[dmdba@dmdb01 dmfldr]$ /dm8/dmdbms/bin/dmfldr userid=SYSDBA/SYSDBA@192.168.186.128:5240 control=\'/dm8/dmdbms/data/dmfldr/TEST9.ctl\' skip=3 load=5

dmfldr V8

dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制檔案:

載入行數:5

每次提交伺服器行數:50000

跳過行數:3

允許錯誤數:100

是否直接載入:Yes

是否插入自增列:No

資料是否已按照聚集索引排序:No

字符集:GBK

資料檔案共1個:

/dm8/dmdbms/data/dmfldr/TEST9.txt

錯誤檔案:fldr.bad

目標表:WW.TEST9

列名                                                                                                                           包裝資料型別   終止

C1                                                                                                                               CHARACTER            |

C2                                                                                                                               CHARACTER            |

行緩衝區數量: 2

任務執行緒數量: 2

5行記錄已提交

目標表:WW.TEST9

5 行載入成功。

由於資料格式錯誤,0行 丟棄。

由於資料錯誤,0行 沒有載入。

跳過的邏輯記錄總數:3

讀取的邏輯記錄總數:5

拒絕的邏輯記錄總數:0

用時:4.863(ms)

[dmdba@dmdb01 dmfldr]$ 

5) 檢視錶 TEST 的資料,載入時跳過了資料檔案的前 3 行資料,且只載入了 5 條資料。

[dmdba@dmdb01 dmfldr]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 1.070(ms)

disql V8

SQL> select * from ww.TEST9;

行號     C1          C2 

---------- ----------- ---

1          4           ddd

2          5           eee

3          6           fff

4          7           ggg

5          8           hhh

已用時間: 9.083(毫秒). 執行號:800.

SQL> 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017402/viewspace-2890763/,如需轉載,請註明出處,否則將追究法律責任。

相關文章