db2move 命令
db2move <database-name> <action> [<option> <value>]
首先,您必須指定數據庫名(想要移動的表所在的數據庫)和要執(zhí)行的操作(export 和 import 或 load),。然后指定一個選項來定義操作的范圍,。例如,,可以將一個操作限制在特定的表(-tn)、表空間(-ts),、表創(chuàng)建者(-tc)或模式名(-sn)范圍內,。指定表、表空間或表的創(chuàng)建者的一個子集只對 export 操作有效,。如果指定多個值,,就必須使用逗號將其分隔開;在值列表項之間不允許有空格,。可以指定的項最多為 10 個,。
另外,,也可以指定 -tf 選項,此時要使用一個文件名作為參數,,其中列出了要導出的表名,;在該文件中,每行只能列出一個完整的表名,。您還可以指定以下內容:
-io import-option
指定 DB2 的 import 工具可以運行的一種模式,。有效的選項有: CREATE、 INSERT,、 INSERT_UPDATE,、 REPLACE 和 REPLACE_CREATE。缺省值為 REPLACE_CREATE,。有關這些模式的更多內容,,請參閱 DB2 的產品文檔,可以從 DB2 技術支持獲得這些文檔,。
-lo load-option
指定 DB2 的 load 工具可以運行的一種模式,。有效的選項有:INSERT 和 REPLACE。缺省值為 INSERT,。 有關這些模式的更多內容,,請參閱 DB2 的產品文檔,可以從 DB2 技術支持獲得這些文檔,。
-l lobpaths
指定要創(chuàng)建或查找的 LOB 文件的位置,。必須指定一個或多個絕對路徑名。如果指定了多個絕對路徑,,就必須使用逗號將其分隔開,;值之間不允許有空格。缺省值是當前目錄,。
-u userid
指定一個用戶 ID,,該工具可以使用這個用戶 ID 登錄到遠程系統(tǒng)上,。
-p password
指定對該用戶進行認證的密碼;該工具需要使用一個有效的用戶 ID 和密碼登錄到遠程系統(tǒng)上,。
例子:
關于DB2MOVE的使用
主要是想修改表的SCHEMA和TABLESPACE
以前用DB2MOVE到過數據,,不過覺得使用時有些限制。所以有時候還是自己寫腳本來倒數,。
這幾天因為BI項目升級,,測試的時候想重構數據庫。主要是想修改表的SCHEMA和TABLESPACE
比較煩瑣的方法是
1>在源系統(tǒng)上運行db2look生成DDL腳本,?;蛘呤褂胐b2cc用圖形界面生成腳本
2>修改script中關于schema和tablespace的信息
3>在目標系統(tǒng)上運行修改后的腳本
4>用sql生成export,import或load的批量腳本,,進行數據遷移
5>實際操作中,,使用load的時候可能會發(fā)生破壞表完整性約束的情況,需要執(zhí)行set integrity for <tablename> immediate checked消除表check pending的狀態(tài),。
現在再說說使用db2move實現的步驟,,通常db2move的操作是在same schema情況下使用的。我以前一直這么理解,。數據庫這東西博大精深,,平時工作中更多的上講實現,能達到目的就行,。很少去關注一些細節(jié)的問題,,所以時常也因此走冤枉路。
1> db2move tkdw_rep export -sn tkpm62,,批量導出
2>觀察生成的文件,,其中有個db2move.lst文件,內容如下:
!"TKPM62 "."OPB_ANALYZE_DEP"!tab1.ixf!tab1.msg!
我試著把內容改成
!"TKPM "."OPB_ANALYZE_DEP"!tab1.ixf!tab1.msg!
“TKPM”是我在目標系統(tǒng)中的schema名稱,,我想看看這樣能不能間接實現schema名稱的轉換
3> db2move rep7 import -u tkpm -p tkpm
成功了,,跟我預想的一樣。
不過有些不理想的地方,,db2move時系統(tǒng)雖然會自動建表,,但是也僅限于表,表上的視圖和索引還需要自行創(chuàng)建)
所以需要在導完數據后,,用腳本創(chuàng)建索引和視圖,,以及授權等操作。這樣可以防止破壞表的完整性
還有中方式就是事先在目標庫上建好對象,,然后再導入數據
提示:不過測試中發(fā)現目標系統(tǒng)也會導入原系統(tǒng)關于索引的授權信息,。雖然這些索引并沒有在目標系統(tǒng)上創(chuàng)建,但是授權信息卻被帶到了目標庫,比較疑惑,!
TKPM有INDEX TKPM62.OPB_ANAL_DEP_IDX的control權限,,所以可能僅僅修改db2move.lst,只能簡單的改變數據移植的某些屬性,,像源表上索引的授權信息好像沒有像改schema這么簡單,。
為了安全期間,建議將那些垃圾權限清理掉,。
DB2 windows版本,,現在數據庫表空間userspace1的容器所在的分區(qū)已滿,無法向DB2中寫數據,;在另外一個較大的分區(qū)上建立一新的表空間,,實現步驟
將當前數據庫進行db2move,再將數據庫進行刪除,,再重新建立同名的數據庫,,將container加大,再將數據導入
例子:
db2move gxkdb export -sn gxkdba -u gxkdba -p 123456 >gxk.log
db2move gxkdb import -io replace -u gxkdba -p 123456 >gxk.log