數(shù)據(jù)移動(dòng)手段
DB2的數(shù)據(jù)移動(dòng)手段雌团,可以分為邏輯結(jié)構(gòu)層面的數(shù)據(jù)移動(dòng)和物理結(jié)構(gòu)層面的數(shù)據(jù)移動(dòng):邏輯結(jié)構(gòu)層面的數(shù)據(jù)移動(dòng)主要是指數(shù)據(jù)庫(kù)對(duì)象的變化燃领,和業(yè)務(wù)關(guān)聯(lián)性很大;物理結(jié)構(gòu)層面的數(shù)據(jù)移動(dòng)主要在于數(shù)據(jù)底層存儲(chǔ)位置的變化锦援,比如表空間路徑的變化猛蔽,或數(shù)據(jù)庫(kù)整體被物理地搬到另一臺(tái)機(jī)器上。
-
邏輯結(jié)構(gòu)層面的數(shù)據(jù)移動(dòng)方法
級(jí)別 | 名稱 | 方式 |
---|---|---|
單表級(jí)別 | 導(dǎo)出(EXPORT) | 使用SELECT語(yǔ)句或XQuery語(yǔ)句抽取數(shù)據(jù),并將其放到文件中 |
單表級(jí)別 | 導(dǎo)入(IMPORT) | 使用INSERT語(yǔ)句向表曼库、類型表(使用用戶自定義類型而建立的表)或試圖 填充數(shù)據(jù) |
單表級(jí)別 | LOAD導(dǎo)入 | 能夠高效地將大量數(shù)據(jù)導(dǎo)入到表中区岗。LOAD導(dǎo)入速度快于IMPORT |
單表級(jí)別 | 表移動(dòng)存儲(chǔ)過程(ADMIN_MOVE_TABLE) | DB2 V9.7中新出現(xiàn)的存儲(chǔ)過程。它能夠在不影響系 統(tǒng)可用性的情況下把表從一個(gè)空間移動(dòng)到另一個(gè)表空間 |
多表級(jí)別 | DB2MOVE | 通常用于跨平臺(tái)遷移數(shù)據(jù)庫(kù) |
復(fù)制模式存儲(chǔ)過程(ADMIN_COPY_SCHEMA) | 將同一個(gè)數(shù)據(jù)庫(kù)中某模式(SCHEMA)中的隊(duì)形和數(shù)據(jù)復(fù)制到另外一個(gè)模式中 |
-
物理層面的數(shù)據(jù)移動(dòng)方法
名稱 | 方式 |
---|---|
數(shù)據(jù)庫(kù)備份與恢復(fù) | 如果兩個(gè)平臺(tái)是二進(jìn)制兼容的毁枯,那么可以使用一個(gè)平臺(tái)的備份慈缔,在另外一個(gè)平臺(tái)恢復(fù),從而實(shí)現(xiàn)數(shù)據(jù)庫(kù)在平臺(tái)間的移動(dòng)种玛。另外藐鹤,可以將低版本的數(shù)據(jù)庫(kù)備份恢復(fù)到高版本實(shí)例中,比如可以將DB2 V9.1的數(shù)據(jù)庫(kù)備份恢復(fù)到DB2 V9.5的實(shí)例中赂韵,這實(shí)現(xiàn)了恢復(fù)過程中數(shù)據(jù)庫(kù)的升級(jí) |
重定向恢復(fù) | 在使用數(shù)據(jù)庫(kù)備份恢復(fù)的時(shí)候娱节,可以改變目標(biāo)數(shù)據(jù)庫(kù)的物理存儲(chǔ)位置 |
重定位數(shù)據(jù)庫(kù)(db2relocatedb) | 通過修改數(shù)據(jù)庫(kù)控制文件,來重命名數(shù)據(jù)庫(kù)或者改變數(shù)據(jù)庫(kù)的存儲(chǔ)路徑祭示,從而實(shí)現(xiàn)數(shù)據(jù)移動(dòng)的目標(biāo)肄满。不過,數(shù)據(jù)庫(kù)對(duì)象的變化需要手動(dòng)完成绍移。執(zhí)行這個(gè)實(shí)用程序時(shí)悄窃,數(shù)據(jù)庫(kù)實(shí)例必須處于停止?fàn)顟B(tài) |
數(shù)據(jù)移動(dòng)手段多種多樣,剛接觸蹂窖,目前先從EXPORT,IMPORT,LOAD這三種最常用的方法說走轧抗。
數(shù)據(jù)準(zhǔn)備
- 建立一張測(cè)試表test,并向其中插入一組數(shù)據(jù)
create table test(
c1 int,
c2 int,
c3 char(10)
);
insert into test values(100,200,'xin ');
select * from test;
- 建立一張測(cè)試表mytab1
create table mytab1(
c1 INT,
c2 INT,
c3 char(32),
c4 char(32)
);
select * from mytab1;
效果如圖
-
建立一個(gè)asc格式的文件瞬测,并向其中輸入如圖測(cè)試數(shù)據(jù)
導(dǎo)出(EXPORT)
在使用EXPROT命令時(shí)横媚,常用的三種類型的數(shù)據(jù):常規(guī)類型數(shù)據(jù)、LOB數(shù)據(jù)和XML數(shù)據(jù)月趟。這次只簡(jiǎn)單介紹常規(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表示用來指定的字符串定界符。默認(rèn)值是雙引號(hào)(“”)因妇。
- COLDELx :x表示的列定界符问潭。默認(rèn)值是雙引號(hào)(,)婚被。
- CODEPAGE=x:x用來表示將字符串導(dǎo)入文本數(shù)據(jù)時(shí)使用的編碼狡忙。
- Timestampformat=”x”:x是源表中時(shí)間戳記的格式。(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\"
示例
- 連接到測(cè)試數(shù)據(jù)庫(kù)
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所在文件夾應(yīng)該具有寫和讀的權(quán)限
- file_name不用事先建立禀挫,會(huì)自動(dòng)生成
- file _name的格式 由 of del 選項(xiàng)決定,而不是file_name的后綴名逗余。如特咆,可以寫成:test.txt of del、test.csv of del录粱、test.ixf ofixf等
導(dǎo)入(IMPORT)
IMPORT命令導(dǎo)入常規(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
字段過濾方式
在導(dǎo)入的時(shí)候可以選擇只導(dǎo)入部分字段的數(shù)據(jù)腻格,這需要在IMPORT中使用METHOD選項(xiàng)。METHOD選項(xiàng)有三種:METHOD L啥繁、METHOD N菜职、METHOD P。下表是三種方式的區(qū)別
名稱 | 適用的文件格式 | 帶的參數(shù) |
---|---|---|
METHOD L | ASC文件 | 起始位置和終止位置 |
METHOD N | IXF文件 | 字段名稱 |
METHOD P | DEL文件和IXF文件 | 字段位置(從1開始) |
下面將通過三個(gè)小例子來對(duì)這三種方式加以區(qū)分旗闽。
- MOTHOD L過濾方式
只能用于從ASC文件里導(dǎo)入數(shù)據(jù)酬核,可以實(shí)現(xiàn)導(dǎo)入指定字段的一部分或全部。
用戶需要指定每個(gè)字段在每行對(duì)應(yīng)的起始位置(col-start)和終止位置(col-end)适室,起始位置和終止位置之間用空格分隔嫡意。
示例
* 使用METHOD L 進(jìn)行導(dǎo)入
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過濾方式
通過名稱過濾導(dǎo)入文件中的字段,支持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)"
-
查看效果
導(dǎo)入方式選項(xiàng)對(duì)比情況
|導(dǎo)入方式| 詳情|
|--------|--------|--------|
| INSERT | 在表中現(xiàn)有數(shù)據(jù)的基礎(chǔ)之上追加新的數(shù)據(jù),如果導(dǎo)入的行與已存在行有主鍵沖突汽畴,則本行不導(dǎo)入|
|INSERT_UPDATE |此選項(xiàng)只針對(duì)有主鍵的表旧巾,在導(dǎo)入數(shù)據(jù)時(shí)需要對(duì)比主鍵,主鍵重復(fù)的話就update(用新數(shù)據(jù)替換原來數(shù)據(jù))忍些,否則就insert(直接插入)|
|REPLACE |把表中原有的數(shù)據(jù)都刪除鲁猩,并導(dǎo)入新的數(shù)據(jù)。由于進(jìn)行了清空表操作罢坝,有風(fēng)險(xiǎn)廓握,選擇需謹(jǐn)慎。|
| REPLACE_CREATE |目標(biāo)表存在嘁酿,則和REPLACE選項(xiàng)一樣疾棵。如果目標(biāo)表沒有定義,則建立目標(biāo)表及索引痹仙,使用這個(gè)選項(xiàng)的掐你是導(dǎo)入文件為PC/IXF格式|
| CREATE|建立目標(biāo)表及索引,并導(dǎo)入數(shù)據(jù)殉了,使用這個(gè)選項(xiàng)的前提是導(dǎo)入文件為PC/IXF格式|
LOAD導(dǎo)入
LOAD
參考
IBM Knowledge Center
運(yùn)籌帷幄DB2——從Oracle運(yùn)維轉(zhuǎn)型