在進行數據遷移時,使用DB2MOVE導入導出數據是比較方便的。數據庫
(一)使用db2move導出所有數據服務器
db2move是一個集成式的數據移動工具,它支持導出(export)、導入(import)、裝入(load)三種操做方式。其實db2move的這三種工做方式分別是經過簡單使用db2 export, db2 import, db2 load指令來完成的。ide
此部分僅僅介紹其export功能,import和load將在稍後的部分介紹。使用db2move導出的數據文件格式是IXF。工具
創建並進入數據存放目錄:
$ mkdir /home/backup/mydata
$ cd /home/backup/mydatafetch
導出指定的數據庫中的所有數據:
$ db2move testdb export –u db2inst1 –p passwordspa
說明:
1,這將會把數據庫testdb中的所有數據提取到當前目錄(/home/backup/mydata)中。每一個表的內容都存儲在一個.ixf文件中,每一個.ixf文件都有一個與之相對應的.msg文件,.msg文件是描述從表中導出數據時的信息的。另外還有兩個文件,db2move.lst用來記錄.ixf文件、.msg文件與表的一一對應關係,EXPORT.out記錄的是導出數據時的屏幕輸出。
2,有關db2move指令更多的細節,請直接執行該指令,將會打印出其幫助信息。code
(二)使用db2move導入(import)數據it
以db2inst1用戶身份登陸到Host 2。table
建立數據庫mytestdb:
$ db2
db2 => create database mytestdb on ‘/home/db2inst1’ using codeset UTF-8 territory CN
db2 => connect to mytestdb user db2inst1 using thepasswdclass
建立一個pagesize爲16K的bufferpool,名爲mybigpool:
db2 => create bufferpool mybigpool immediate size 1000 pagesize 16K (此步驟 能夠省略)
建立一個tablespace使用上面建立的bufferpool,名爲mybigspace:
db2 => create regular tablespace mybigspace pagesize 16K managed by system using (‘/home/db2inst1/db2inst1/NODE0000/SQL00004/SQLT0003.0’) extentsize 16 overhead 12.67 prefetchsize 16 transferrate 0.18 bufferpool mybigpool dropped table recovery off (此步驟 能夠省略)
注:
extentsize, overhead, prefetchsize, transferrate這幾個參數值與所使用的服務器有關,我這裏使用的值是基於普通的、使用SCSI硬盤的PC服務器的。
完成空庫的建立:
db2 => commit work
db2 => connect reset
db2 => terminate
導入(import)數據:
使用import方式不須要先建表結構,即,準備好一個空庫就好了。這一點與load方式不同,load方式須要先創建表結構。
我將從Host1上導出的所有數據文件(位於Host1的 /home/backup/mydata下)複製到Host2下某個目錄下,假定爲 /home/movedata
$ cd /home/movedata
$ db2move mytestdb import –u db2inst1 –p thepasswd
此時屏幕上會顯示有關導入數據的信息。
存在的問題:
db2move import方式只能導入「普通」的表,若是表中存在自增加的IDENTITY列,那麼使用db2move import時,會出錯。這是由於,若是IDENTITY列建立表的時候都是定義成always的話,那麼在導入數據的時候該列數據是不能被賦值的,而是應該由系統生成,使用db2move沒法導入這樣的表。對於這種含有IDENTITY列的表,只能使用db2 import指令來進行導入,相關的參數是IDENTITYIGNORE,IDENTITYMISSING。我將在下一部分給出具體的指令操做。
一句題外話:
若是須要實現惟一主鍵,能夠沒必要使用IDENTITY列,改而使用sequence,這樣比較便於維護和管理。
(三)db2move 裝載數據
db2move mytestdb load
若是發現有表導入失敗,須要手工處理。
注意點:
mybigspace可能要根據實際狀況設值
導入的時候把數據庫的一些表結構中的約束等等都去掉,導完以後再加上.