自己整理的學習資料——DB2 V8資料庫基礎(二十七)

rheet1978發表於2008-10-30

6       資料移動

DB2中所謂的資料移動,包括: 

n         資料的匯入(Import  :支援DEL,ASC,IXF,WSF

n         資料的匯出(Export  :支援DEL,IXF,WS,不支援ASC

n         資料的裝入(Load   :支援DEL,ASC,IXF,不支援WSF

 

DB2MOVE支援IXF

 

在講解命令之前,首先介紹一下檔案的格式,用於DB2資料移動的檔案格式有四種: 

n         ASC——非定界ASCII檔案,是一個ASCII字元流。資料流中的行由行定界符分隔,而行中的每一列則通過起始和結束位置來定義。 

n         DEL——定界ASCII檔案,也是一個ASCII字元流。資料流中的行由行定界符分隔,行中的列值由列定界符分隔。檔案型別修飾符可用於修改這些定界符的預設值。

n         WSF——(work sheet format)為工作表格式,用於與Lotus系列的軟體進行資料交換。 

n         PC/IXF——是整合交換格式Integration Exchange FormatIXF)資料交換體系結構的改編版本,由一些列可變長度的記錄構成,包括頭記錄、表記錄、表中每列的列描述符記錄以及表中每行的一條或多條資料記錄。PC/IXF 檔案記錄由包含了字元資料的欄位組成。

 

6.1     del格式的倒入倒出(del檔案可視

6.1.1   概述

db2  export  to  f:\test.del  of del     select * from local.test1 

//把模式為local表名為test1的表匯出到f盤的test.del

db2  import  from  f:\test.del of del  insert  into  local.test2 

//匯入,import換成load,就能換成高速匯入,load這裡只能作為匯入的方式,而且load不使用緩衝池,不觸發觸發器, insert換成replace就能變成替代插入(就是把表裡原來的資料都清空,重新插入),CREATE REPLACE_CREATE關鍵字時,檔案型別必須是 IXF

 

6.1.2   改變del格式檔案的格式控制符 

export to c:\staff.txt of del modified by coldel$ chardel'' decplusblank select * from staff 

在該例中,modified子句用於控制各種符號,coldel表示欄位之間的間隔符,預設情況為逗號,現在改為$號;chardel表示字串欄位用什麼符號引用,預設情況下為一對雙引號括起來,現在改為用一對單引號括起來;decplusblank表示對於十進位制資料型別,用空格代替最前面的加號,因為預設情況下會在十進位制資料前面加上正負號的。

使匯出文字中的字元型欄位不帶雙引號

db2 "export to para.del of del modified by  nochardel select * from tmp_table_para"

 

6.1.3   大資料的匯出

export to d:\myfile.del of del lobs to d:\lob\ lobfile lobs modified by lobsinfile select * from emp_photo 

 

其中第三個欄位是BLOB型別,在該檔案中只儲存了一個標誌,相當於一個指標,真正的LOB資料儲存在d:\lob目錄下的lobs.001lobs.002......等一系列檔案中。命令中lobs to 後面指定大物件資料儲存在什麼路徑下(注意,該路徑必須事先已經存在,否則會報錯)lobfile 後面指定大物件資料儲存在什麼檔案中,不要指定副檔名,DB2會根據資料量自動追加.001.002等副檔名,同時不要忘記加上modified by lobsinfile子句。

 

6.2    ixf格式的倒入倒出(ixf檔案不可視)

6.2.1   概述

db2  export  to  f:\test.ixf  of ixf      select * from local.test1

db2  import  from f:\test.ixf   of ixf    insert into local.test2

                            create into local.test2

//匯入,import換成load,就能換成高速匯入,load這裡只能作為匯入的方式,而且load不使用緩衝池,不觸發觸發器, insert換成replace就能變成替代插入(就是把表裡原來的資料都清空,重新插入),換成create就是建立新的

 

//匯出一個表的一部分資料並把這些資料刪除

db2  export  to ttt.ixf of ixf select * from old table ( delete from (select  * from test1 fetch first 1 rows only))

 

//匯出一個表的全部資料並把這些資料刪除

 

db2  export to ttt.ixf of ixf selcet * from old table(delete from local.test1 )

6.2.2   把匯出資訊儲存在訊息檔案中

export to d:\awards.ixf of ixf messages d:\msgs.txt select * from staff

 

這個例子把staff表中的資料匯出到d:\awards.ixf檔案中,所有的匯出資訊都儲存在d:\msgs.txt檔案中(無論是成功、警告還是失敗資訊),這樣,管理員可以通過觀察資訊檔案找到問題所在。

6.2.3   給匯出資料列重新命名

export to d:\awards.ixf of ixf method n(c1,c2,c3,c4,c5,c6,c7)  select * from staff 

 

在預設情況下,匯出的每一列資料以表中對應的欄位名自動命名,我們可以通過method n子句給每一列重新命名,需要注意的是,這個子句只在ixfwsf格式檔案中有效,在文字檔案中不能使用。

6.3    ASC格式的匯入匯出

6.3.1   ASC格式將資料匯出到檔案 

Export命令是不支援ASC格式檔案的,所以如果想匯出ASC這樣規整的格式,需要程式設計師自己進行轉換操作,思路是將各種資料型別都轉換成定長字串,然後把各個要匯出的欄位合併成為一個欄位。 

例如建立如下結構的表n 

create table n(a int,b date,c time,d varchar(5),e char(4),f double) 

然後插入兩條資料: 

insert into n values(15,'2004-10-21','23:12:23','abc','hh',35.2) 

insert into n values(5,'2004-1-21','3:12:23','bc','hhh',35.672) 

要想把這兩條資料以規整的格式匯出到檔案中,進行如下操作: 

export to c:\test.txt of del select char(a) || char(b) || char(c) || char(d,5) || e || char(f) as tmp from n 

這樣匯出的結果與ASC格式的檔案非常類似,只是每一行的前後多出了一對雙引號,對此我們可以使用文字工具(如寫字板、記事本等)把雙引號刪除掉,也可以置之不理,在以後匯入的時候直接控制格式(忽略雙引號) 

在檔案中的格式為: 

 

"15         2004-10-2123.12.23abc  hh  3.52E1                  " 

"5          2004-01-2103.12.23bc   hhh 3.5672E1                " 

6.3.2   ASC格式檔案中匯入資料

import from  c:\org2.txt of asc method l(1 5,6 19,20 25,26 37,38 50) insert into org

其中 method l 子句用於指定文字檔案中每一個欄位的起始位置和終止位置,每個起始位置和終止位置間用空格分開,欄位之間用逗號分開。

除了l方法之外,還有n方法和p方法,下面會敘述。

 

 

1:利用n方法匯入資料,並且建立新表。

首先匯出一個用例檔案:

export to d:\org.ixf of ixf method n(a,b,c,d,e) select * from org

這樣org.ixf檔案中有五列資料,對應的列名分別為abcde

然後在從該檔案中匯入資料到一個新表中

import from d:\org.ixf of ixf method n(d,e,b) replace_create into orgtest

該命令從檔案中選取三列匯入到表中,順序可以不按照檔案中原有的列的順序。replace_create方式的敘述見下。

 

插入方式有:

INSERT 方式——在表中現有資料的基礎之上追加新的資料。

INSERT_UPDATE 方式——這種方式只能用於有主鍵的表,如果插入的資料與原有資料主鍵不衝突,則直接插入,如果主鍵衝突,則用新的資料代替原有資料。

REPLACE 方式——先把表中現有的資料都刪除,然後向空表中插入資料。

REPLACE_CREATE 方式——表示如果表存在,則先把表中的資料都刪除,然後向空表中插入資料;如果表不存在,則先根據檔案中的欄位建立表,然後再向表中插入資料。這種方式只能把IXF格式的檔案中的資料插入到表中。

 

2:利用p方法匯入資料

import from d:\org.ixf of ixf method p(4,5,2) replace into orgtest

該例子執行的效果和例九類似,只是把n方法換成了p方法,p方法後面的列表中指明列的序號即可,不需要指明列名。另外,此例中使用了replace方式插入資料,這會把表中現有的資料都刪除,然後向空表中插入資料。

 

3:關於空值的匯入

對於ixf格式的檔案,匯入空值非常方便,因為裡面已經記錄了空值的資訊。但是,對於ASC格式檔案就有一定的難度了,因為DB2會直接插入空格,而不是空值。為此,DB2提供了一個子句進行控制:NULL INDICATORS

 

import from  c:\org2.txt of asc MODIFIED BY nullindchar=# method l(1 5,6 19,20 25,26 37,38 50) NULL INDICATORS(0,0,0,0,38 ) replace into org

 

在這個例子中,NULL INDICATORS子句後面是一個列表,表示前面四個欄位都不會存在空值,而第五個欄位從38列開始,可能存在空值,而 MODIFIED BY nullindchar=# 子句表示在檔案中第五個欄位如果遇到 # 號,則表示為空值。

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

相關文章