1. 程式人生 > >DB2匯入、匯出資料

DB2匯入、匯出資料

1:db2 backup  指令備份 (首先關閉所有資料庫連線,將資料庫設定為“靜默”狀態) $ db2 connect to  tipsqdb user  db2inst1(使用者名稱) using  db2inst1(密碼) $ db2 quiesce data immediate force connections $ db2 connect reset 現在進行備份: $ db backup database tipsqdb to "/home/backup" user db2inst1 using db2inst1 解除資料庫的“靜默”狀態: $db2 connect to tipsqdb user db2inst1 using db2inst1 $db2 unquiesce database  $db2 connect reset 注意: 1:以上指令把資料庫tipsqdb備份到指定目錄 /home/backup下,所以一定要確定當前登入使用者(db2inst1)對該目錄有讀寫許可權,否則會備份失敗。 另外:若打算使用root使用者來執行備份的話,請先編輯 /etc/group,將root使用者加入到與db2相關的幾個組:db2grp1,db2fgrp1,dasadm1. 2:生成的備份檔名如下: tipsqdb.0.db2inst1.NODE000,CATN0000.20050131205259.001 二:使用db2 restore指令恢復資料
相同資料庫名恢復: $ db2 restore database tipsqdb from "/home/backup"(備份路徑) 說明:這將會從指定備份路徑恢復資料tipsqdb. 不同資料庫名恢復: $ db2 restore database tipsqdb from "/home/backup" into new_database_name 說明:這將會建立一個新的資料庫名,其結構和內容與原先tipsqdb完全相同。 使用db2look提取資料庫結構DDL 提取DDL $ db2look -d tipsqdb -a -e -x -o  tipsqdb.sql 注意:使用db2look得到的DDL檔案無法直接使用,因為其中存在一些與當前系統相關的特殊資訊,所以需要對該檔案進行編輯。共有以下幾個方面: 1:去點檔案頭、檔案尾的指令 CONNECT TO TIPSQDB; COMMIT WORK; CONNECT RESET; TERMINATE; 位於這幾句指令之間的就是定義該資料庫的DDL語句,去掉這幾句話就會讓這個檔案變成一個純粹的DDL檔案,另外,有時候很容易出現DB2指令執行錯誤,所以把這些指令手動執行,有利於發現、定位錯誤。 三、資料移動的檔案格式
資料移動的檔案儲存格式有ASC,DEL,PC/IXF,WSF. db2move是一個整合式的資料移動工具,它支援匯出(Export),匯入(Import),裝入(load)三種操作方式。其實db2move的這三種方式分別通過簡單實用db2  export,db2 import ,db2 load指令來完成。 此部分僅介紹exoprt,使用db2move匯出的資料檔案格式IXF(無法檢視)。 建立並進入資料存放目錄: $ mkdir /home/backup/mydata $ cd /home/backup/mydata 匯出指定額資料庫的所有資料: db2move tipsqdb export -u db2inst1 -p db2inst1 說明: 1.這將會該資料庫資料全部導到當前目錄(/home/backup/mydata)中。每個表內容儲存在一個.ixf檔案中,每個.ixf檔案都有一個與之對應的.msg檔案,.msg檔案時描述從表中匯出資料的資訊。另外兩個檔案,db2move.lst用來記錄.ixf檔案,.msg檔案與表的一一對應關係。Export.out記錄匯出資料是的螢幕輸出。 四、使用db2 export匯出資料
與上面提到DB2Move的export不同,db2 export 是一個更加精細的匯出資料語句,它僅支援三種資料檔案格式:DEL,WSF,IXF。 以下示範將tipsqdb的td_con_node資料表資料匯出到/home/backup下。 建立資料庫連線: $ db2 connect to tipsqdb user db2inst1 using db2inst1 以del格式匯出: $db2 "export to /home/backup/td_con_node.del of del select * from td_con_node" 以ixf格式匯出: $db2 "export to /home/backup/td_con_node.ixf of ixf select * from td_con_node" 注意:若需要記錄匯出過程中的message,使用: db2 "export to /home/backup/td_con_node.ixf of ixf messages /home/backup/td_con_node.msg select * from td_con_node" 斷開連線: db2 connect reset db2 quit (可用db2 ? export 檢視更多幫助) 五、使用db2move 匯入(import)資料 以db2inst1使用者身份登入到host 2. 建立資料庫testdb2(在/home/db2inst1路徑下): $ db2 "create database testdb2  on '/home/db2inst1' using codeset UTF-8 territory CN $ db2 connect to testdb2 user db2inst1 using db2inst1 建立一個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') extensize 16 overhead 12.67  perfetchsize 16 transferrate 0.18 bufferpool mybigpool dropped table recovery off 注意:extensize ,overhead,prefetchsize,transferrate這幾個引數值與所使用的伺服器有關 完成空庫建立: $ db2 commit work $ db2 connect reset
$ db2 terminate
匯入(import)資料 使用import方式不需要建表結構,即準備一個空庫就行。這一點和load不一樣,load需要先建表結構。 我將從host1上匯出的全部資料(位於host1下的/home/backup/mydata)複製到host2下的/home/movedata $ cd /home/movedate $ db2move mytestdb import  -u db2inst1 -p db2inst1 此時顯示所有倒入資料資訊 問題:db2move import方式只能倒入“普通”的表,如果表中存在自增長的IDENTITY列,那麼使用db2move import時會出錯。因為IDENTITY列建立表的時候都定義成always的話,那麼在匯入資料時該列資料是系統生成,而不能被賦值,使用db2move import 無法匯入這樣的表,對於這樣的表,只能用db2 import 指令來匯入,相關引數是IDENTITYIGNORE,IDENTITYMISSING(另,如需實現唯一主角,可不必使用IDENTITY,改為使用SEQUENCE,易維護,管理. 使用db2 import 匯入資料 import 和export是一對存在對應關係的指令。只一點差異:import支援資料格式:ASC,DEL,WSF,IXF,export支援三種資料格式:DEL,WSF,IXF。 以下將資料檔案/home/data/testTB.ixf匯入到資料庫TestDB中。 $ db2 connect to TestDB user db2inst1 using db2inst1
$ db2 "import from  /home/data/testTB.ixf  of ixf insert into testTB"
$ db2 commi work $ db2 quit
注意:仍如上面db2move import,若表中有IDENTITY自增列,需要使用相應引數才能匯入 $ db2 "import from  /home/data/testDB.ixf of ixf modified by identityignore insert into testDB.
更多db2 import 檢視db2 ? import