數(shù)據(jù)移動手段
DB2的數(shù)據(jù)移動手段,可以分為邏輯結(jié)構(gòu)層面的數(shù)據(jù)移動和物理結(jié)構(gòu)層面的數(shù)據(jù)移動:邏輯結(jié)構(gòu)層面的數(shù)據(jù)移動主要是指數(shù)據(jù)庫對象的變化,和業(yè)務關(guān)聯(lián)性很大;物理結(jié)構(gòu)層面的數(shù)據(jù)移動主要在于數(shù)據(jù)底層存儲位置的變化,比如表空間路徑的變化,或數(shù)據(jù)庫整體被物理地搬到另一臺機器上。
-
邏輯結(jié)構(gòu)層面的數(shù)據(jù)移動方法
| 級別 | 名稱 | 方式 |
|---|---|---|
| 單表級別 | 導出(EXPORT) | 使用SELECT語句或XQuery語句抽取數(shù)據(jù),并將其放到文件中 |
| 單表級別 | 導入(IMPORT) | 使用INSERT語句向表、類型表(使用用戶自定義類型而建立的表)或試圖 填充數(shù)據(jù) |
| 單表級別 | LOAD導入 | 能夠高效地將大量數(shù)據(jù)導入到表中。LOAD導入速度快于IMPORT |
| 單表級別 | 表移動存儲過程(ADMIN_MOVE_TABLE) | DB2 V9.7中新出現(xiàn)的存儲過程。它能夠在不影響系 統(tǒng)可用性的情況下把表從一個空間移動到另一個表空間 |
| 多表級別 | DB2MOVE | 通常用于跨平臺遷移數(shù)據(jù)庫 |
| 復制模式存儲過程(ADMIN_COPY_SCHEMA) | 將同一個數(shù)據(jù)庫中某模式(SCHEMA)中的隊形和數(shù)據(jù)復制到另外一個模式中 |
-
物理層面的數(shù)據(jù)移動方法
| 名稱 | 方式 |
|---|---|
| 數(shù)據(jù)庫備份與恢復 | 如果兩個平臺是二進制兼容的,那么可以使用一個平臺的備份,在另外一個平臺恢復,從而實現(xiàn)數(shù)據(jù)庫在平臺間的移動。另外,可以將低版本的數(shù)據(jù)庫備份恢復到高版本實例中,比如可以將DB2 V9.1的數(shù)據(jù)庫備份恢復到DB2 V9.5的實例中,這實現(xiàn)了恢復過程中數(shù)據(jù)庫的升級 |
| 重定向恢復 | 在使用數(shù)據(jù)庫備份恢復的時候,可以改變目標數(shù)據(jù)庫的物理存儲位置 |
| 重定位數(shù)據(jù)庫(db2relocatedb) | 通過修改數(shù)據(jù)庫控制文件,來重命名數(shù)據(jù)庫或者改變數(shù)據(jù)庫的存儲路徑,從而實現(xiàn)數(shù)據(jù)移動的目標。不過,數(shù)據(jù)庫對象的變化需要手動完成。執(zhí)行這個實用程序時,數(shù)據(jù)庫實例必須處于停止狀態(tài) |
數(shù)據(jù)移動手段多種多樣,剛接觸,目前先從EXPORT,IMPORT,LOAD這三種最常用的方法說走。
數(shù)據(jù)準備
- 建立一張測試表test,并向其中插入一組數(shù)據(jù)
create table test(
c1 int,
c2 int,
c3 char(10)
);
insert into test values(100,200,'xin ');
select * from test;
- 建立一張測試表mytab1
create table mytab1(
c1 INT,
c2 INT,
c3 char(32),
c4 char(32)
);
select * from mytab1;
效果如圖

-
建立一個asc格式的文件,并向其中輸入如圖測試數(shù)據(jù)
導出(EXPORT)
在使用EXPROT命令時,常用的三種類型的數(shù)據(jù):常規(guī)類型數(shù)據(jù)、LOB數(shù)據(jù)和XML數(shù)據(jù)。這次只簡單介紹常規(guī)類型數(shù)據(jù)的使用。
常用的使用格式如下:
EXPORT TO file_name OF file_type
MODIFIED BY file_type_modifiers
MESSAGES message_file
selet_statement
其中
- file_type 包含的格式有:DEL、IXF、WSF等
- message_file用于保存export過程中輸出的信息
- file_type_modifiers是指文件類型修飾符,常見的文件類型修飾符如下:
- CHARDELx:x表示用來指定的字符串定界符。默認值是雙引號(“”)。
- COLDELx :x表示的列定界符。默認值是雙引號(,)。
- CODEPAGE=x:x用來表示將字符串導入文本數(shù)據(jù)時使用的編碼。
- Timestampformat=”x”:x是源表中時間戳記的格式。(YYYY/MM/DD HH:MM:SS.UUUUUU、YYYY/MM/DD HH、YYYY-MM-DD HH:MM:SS TT、MMM DD YYYY HH:MM:SS:UUUTT、MMM DD YYYY HH:MM:SSTT)
在EXPORT中使用文件修飾符的方法如下:
MODIFIED BY chardel! Coldel# codepage=1208 timestampformat=\"yyyy.mm.dd hh:mm\"
示例
- 連接到測試數(shù)據(jù)庫
db2 connect to database
db2 "EXPORT TO /file_path/test.del OF DEL MESSAGES msg.out SELECT * from test"

- 使用cat命令查看數(shù)據(jù)

注意
- select后面是可以加各種條件的,如select c3 from test where c1='100'
- EXPORT不支持ASC文件格式
- file_name所在文件夾應該具有寫和讀的權(quán)限
- file_name不用事先建立,會自動生成
- file _name的格式 由 of del 選項決定,而不是file_name的后綴名。如,可以寫成:test.txt of del、test.csv of del、test.ixf ofixf等
導入(IMPORT)
IMPORT命令導入常規(guī)類型數(shù)據(jù)的基本格式:
IMPORT FORM file_name OF { IXF | ASC | DEL | WSF}
MODIFIED BY file_type_modifiers
[ METHOD {
L (col-start col-end ) [null indicators (col-position ] |
N (col-name ) |
p (col-position)
}]
ALLOW { NO | WRITE } ACCESS
COMMITCOUNT { n | AUTOMATIC}
RESTARTCOUNT | SKIPCONT
ROWCONT n
MESSAGES message_file
[ INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE | CREATE]
INTO target_table_name
字段過濾方式
在導入的時候可以選擇只導入部分字段的數(shù)據(jù),這需要在IMPORT中使用METHOD選項。METHOD選項有三種:METHOD L、METHOD N、METHOD P。下表是三種方式的區(qū)別
| 名稱 | 適用的文件格式 | 帶的參數(shù) |
|---|---|---|
| METHOD L | ASC文件 | 起始位置和終止位置 |
| METHOD N | IXF文件 | 字段名稱 |
| METHOD P | DEL文件和IXF文件 | 字段位置(從1開始) |
下面將通過三個小例子來對這三種方式加以區(qū)分。
- MOTHOD L過濾方式
只能用于從ASC文件里導入數(shù)據(jù),可以實現(xiàn)導入指定字段的一部分或全部。
用戶需要指定每個字段在每行對應的起始位置(col-start)和終止位置(col-end),起始位置和終止位置之間用空格分隔。
示例
* 使用METHOD L 進行導入
db2 "IMPORT from /data/xin/loadtest/test.asc of ASC METHOD L(1 5,10 12,20 30) messages msg.out insert into mytab1(c1,c2,c4)"
* 查看效果

- METHOD N過濾方式
通過名稱過濾導入文件中的字段,支持IXF文件類型。
示例
* 執(zhí)行如下命令
db2 "load from /data/xin/loadtest/test.ixf of ixf method N(C2,C1,C3) insert into mytab1(c1,c2,c4)"
- 查看效果

- METHOD P過濾方式
通過字段位置(從1開始)過濾數(shù)據(jù)文件中要加載的字段。
示例
* 執(zhí)行如下命令
db2 "load from /data/xin/loadtest/test.del of del method P(2,1,3) insert into mytab1(c2,c1,c4)"
-
查看效果
導入方式選項對比情況
|導入方式| 詳情|
|--------|--------|--------|
| INSERT | 在表中現(xiàn)有數(shù)據(jù)的基礎(chǔ)之上追加新的數(shù)據(jù),如果導入的行與已存在行有主鍵沖突,則本行不導入|
|INSERT_UPDATE |此選項只針對有主鍵的表,在導入數(shù)據(jù)時需要對比主鍵,主鍵重復的話就update(用新數(shù)據(jù)替換原來數(shù)據(jù)),否則就insert(直接插入)|
|REPLACE |把表中原有的數(shù)據(jù)都刪除,并導入新的數(shù)據(jù)。由于進行了清空表操作,有風險,選擇需謹慎。|
| REPLACE_CREATE |目標表存在,則和REPLACE選項一樣。如果目標表沒有定義,則建立目標表及索引,使用這個選項的掐你是導入文件為PC/IXF格式|
| CREATE|建立目標表及索引,并導入數(shù)據(jù),使用這個選項的前提是導入文件為PC/IXF格式|
LOAD導入
LOAD
參考
IBM Knowledge Center
運籌帷幄DB2——從Oracle運維轉(zhuǎn)型

