需求說明:不同操作系統(tǒng)平臺下,數(shù)據(jù)庫之間的同步。
一、操作系統(tǒng)相同之脫機備份
DB2命令:BACKUP 和 RESTORE 進行備份和還原解決。
--斷開連接
db2 force application all
--備份數(shù)據(jù)庫
db2 backup database <db_name> to <location>
--恢復(fù)數(shù)據(jù)庫,20161101134642 為備份文件時間戳
db2 restore database <db_name> from <location> taken at 20161101134642
據(jù)向下兼容原則,版本相同或者低版本的數(shù)據(jù)庫可以還原在高版本上。
二、操作系統(tǒng)不同,或者源數(shù)據(jù)庫版本較高
DB2 提供了兩個非常實用的工具:
★數(shù)據(jù)遷移工具 db2move
★數(shù)據(jù)字典獲取工具 db2look
以下為Windows 環(huán)境遷移到Linux下操作小結(jié):
1、登錄Windows>db2cmd,使用 db2move 命令將源數(shù)據(jù)庫(TEST)數(shù)據(jù)導(dǎo)出至指定的文件夾D:\db2move 下:
D:\db2move>db2move TEST export -u db2inst1 -p 123456
ps:另可以將導(dǎo)出操作限制在特定的表(-tn)、表空間(-ts)、表創(chuàng)建者(-tc)、表模式 (-sn)的范圍內(nèi)。
-- db2move TEST export -sn test -u db2inst1 -p 123456(密碼)
-- 將test模式下的所有數(shù)據(jù)導(dǎo)出。
執(zhí)行成功后會顯示 Disconnecting from database ... successful!
2、使用 db2look 命令將數(shù)據(jù)庫結(jié)構(gòu)(DDL文件) 導(dǎo)出至指定的文件夾D:\db2look下:
D:\db2look> db2look -d TEST -e -a -o db2look_TEST.sql
ps:參數(shù)說明:
-d 為指定數(shù)據(jù)庫,必須參數(shù)
-e 抽取數(shù)據(jù)庫對象的DDL,必須參數(shù)
-a 所有用戶和模式,(-u test01 可以指定用戶, -a 和 -u 都沒有時默認(rèn)當(dāng)前登錄用戶)
-o 指定輸出文件名稱
3、將db2move和db2look文件上傳至Linux系統(tǒng)下:
4、Linux下db2用戶登錄,同步數(shù)據(jù)結(jié)構(gòu),載入數(shù)據(jù):
★更新表結(jié)構(gòu):
su - db2inst1:
password:123456
db2inst1@localhost:~/db2back/db2look> db2 -tvf db2look_TEST.sql
★裝載數(shù)據(jù):
db2inst1@localhost:~/db2back/db2move> db2move TEST load
操作順利的話,數(shù)據(jù)已遷移至linux>db2。要注意幾個問題:
★關(guān)于表模式
關(guān)于表模式,Windows下面默認(rèn)用戶db2admin ,默認(rèn)表模式也是db2admin ,而linux下面的默認(rèn)用戶是db2inst1 表模式也是db2inst1,
所以需要做以下處理:
D:\DBBack\CNAS\db2look\TEST\db2look_TEST.sql里面的db2admin字符全部替換成db2inst1
D:\DBBack\CNAS\db2move\TEST\db2move.lst 也做同樣的操作
★CHECK表狀態(tài),修改暫掛狀態(tài)的表
在db2move過程中會有些表因為檢查約束可能會處于暫掛狀態(tài),需要執(zhí)行SET INTEGRITY命令來恢復(fù)它的暫掛狀態(tài)。
可以從系統(tǒng)表中檢索處于檢查暫掛狀態(tài)的表信息 Select tabname from syscat.tables where status='C' ---暫掛狀態(tài)的表信息
對暫掛的表執(zhí)行
set integrity for usertbl ALLOW NO ACCESS immediate checked
★遺漏的表
導(dǎo)出的時候,可能會有個別表的數(shù)據(jù)丟失,這時候只能對相應(yīng)的表執(zhí)行db2move命令重新load了,如果還是不行就重建表再load
load單個表的命令
db2 load from tab11.ixf of ixf terminate into db2admin.tablename --tab11.ixf對應(yīng)的是tablename表