答:在講解怎樣進行數據移動之前,你需要了解以下的概念,
DB2中的數據移動,主要包括:
1. 數據的導入(Import),2. 數據的導出(Export) 3. 數據的裝入(Load)
導入和裝入都是利用DB2的相關命令把某種格式的文件中的數據保存到數據庫中的表中,導出是指把DB2數據庫的表中的數據保存到某種格式的文件當中去。
數據移動的作用:
如果要在不同的數據庫管理系統之間轉移數據,數據移動通常是最實用的一種方法,因為任何一種數據庫管理系統都支持常用的幾種文件格式,通過這個通用的接口,就很容易實現不同系統間數據的轉移。
這三個命令中,Export最簡單,因為從表中向文件轉移數據,通常不會出現錯誤,也不會有非法的數據。
在講解命令之前,首先介紹一下文件的格式,用于DB2數據移動的文件格式有四種:
1. ASC——非定界ASCII文件,是一個ASCII字符流。數據流中的行由行定界符分隔,而行中的每一列則通過起始和結束位置來定義。例如:
|
2. DEL——定界ASCII文件,也是一個ASCII字符流。數據流中的行由行定界符分隔,行中的列值由列定界符分隔。文件類型修飾符可用于修改這些定界符的默認值。例如:
|
3. WSF——(work sheet format)為工作表格式,用于與Lotus系列的軟件進行數據交換。
4. PC/IXF——是集成交換格式(Integration Exchange Format,IXF)數據交換體系結構的改編版本,由一些列可變長度的記錄構成,包括頭記錄、表記錄、表中每列的列描述符記錄以及表中每行的一條或多條數據記錄。PC/IXF 文件記錄由包含了字符數據的字段組成。
第一部分:數據的導出(Export)
實例1:把Org表中的所有數據導出到文件C:ORG.TXT中。
|
其中,of del表示導出到的文件的類型,在本例中導出到一個非定界文本文件中;后面的select * from org是一個SQL語句,該語句查詢出來的結果就是要導出的數據。
實例2:改變del格式文件的格式控制符
|
在該例中,modified子句用于控制各種符號,coldel表示字段之間的間隔符,默認情況為逗號,現在改為$號;chardel表示字符串字段用什么符號引用,默認情況下為一對雙引號括起來,現在改為用一對單引號括起來;decplusblank表示對于十進制數據類型,用空格代替最前面的加號,因為默認情況下會在十進制數據前面加上正負號的。
實例3:以ASC格式將數據導出到文件
Export命令是不支持ASC格式文件的,所以如果想導出ASC這樣規整的格式,需要程序員自己進行轉換操作,思路是將各種數據類型都轉換成定長字符串,然后把各個要導出的字段合并成為一個字段。
例如創建如下結構的表n:
|
然后插入兩條數據:
|
要想把這兩條數據以規整的格式導出到文件中,進行如下操作:
|
這樣導出的結果與ASC格式的文件非常類似,只是每一行的前后多出了一對雙引號,對此我們可以使用文本工具(如寫字板、記事本等)把雙引號刪除掉,也可以置之不理,在以后導入的時候直接控制格式(忽略雙引號)
在文件中的格式為:
|
實例4:大數據的導出
export to d:myfile.del of del lobs to d:lob lobfile lobs modified by lobsinfile select * from emp_photo
該命令把emp_photo表的數據導出到d:myfile.del文件中,其結果為:
|
其中第三個字段是BLOB類型,在該文件中只保存了一個標志,相當于一個指針,真正的LOB數據保存在d:lob目錄下的lobs.001、lobs.002、......等一系列文件中。命令中lobs to 后面指定大對象數據保存在什么路徑下(注意,該路徑必須事先已經存在,否則會報錯),lobfile 后面指定大對象數據保存在什么文件中,不要指定擴展名,DB2會根據數據量自動追加.001、.002等擴展名,同時不要忘記加上modified by lobsinfile子句。
實例5:把導出信息保存在消息文件中。
|
這個例子把staff表中dept=20的數據導出到d:awards.ixf文件中,所有的導出信息都保存在d:msgs.txt文件中(無論是成功、警告還是失敗信息),這樣,管理員可以通過觀察信息文件找到問題所在。
實例6:給導出數據列重命名
|
在默認情況下,導出的每一列數據以表中對應的字段名自動命名,我們可以通過method n子句給每一列重新命名,需要注意的是,這個子句只在ixf和wsf格式文件中有效,在文本文件中不能使用。