現在我們要把這個資料庫遷移到不同的作業系統(比如從aix到linux),我們應該怎麼辦呢?因為作業系統不同,所以使用backup/restore命令顯然是不行了。那麼是不是可以使用db2move命令呢?也不行,首先db2move命令沒有辦法遷移索引、外來鍵約束、觸發器,更不能遷移含自增欄位資料的表。那麼對每張表都進行export/import操作?天哪,這簡直是一場災難,幾百張表要做到什麼時候啊,更何況import命令並不能保證自增字段的資料和原來一模一樣!下面筆者提供一種方案,感覺還是比較奏效的
現在我們要把這個資料庫遷移到不同的作業系統(比如從aix到linux),我們應該怎麼辦呢?因為作業系統不同,所以使用backup/restore命令顯然是不行了。那麼是不是可以使用db2move命令呢?也不行,首先db2move命令沒有辦法遷移索引、外來鍵約束、觸發器,更不能遷移含自增欄位資料的表。那麼對每張表都進行export/import操作?天哪,這簡直是一場災難,幾百張表要做到什麼時候啊,更何況import命令並不能保證自增字段的資料和原來一模一樣!下面筆者提供一種方案,感覺還是比較奏效的
假設資料庫名為sample,執行在aix上,我們的目標是遷移到linux上。為簡單起見,所有資料庫物件都在db2inst1模式下,db2inst1使用者擁有必須的所有許可權,密碼也是db2inst1
(一)aix系統上的操作:
1) 首先我們用db2look命令得到資料庫物件的ddl指令碼:
db2look -d sample -z db2inst1 -e -o sample.ddl -i db2inst1 -w db2inst1
2) 使用文字編輯器編輯生成的sample.ddl,將建立表及索引的指令碼語句,建立外來鍵約束的語句,建立觸發器的語句分開,製作成三個ddl指令碼,分別是
sample_tabs.ddl
sample_foriegnkeys.ddl
sample_triggers.ddl
3) 使用下面的sql語句生成匯出所有資料的指令碼:exort.sql
db2 "select 'export to ' || rtrim(tabname) || '.ixf of ixf select * from ' || rtrim(tabname) || ';' from syscat.tables where tabschema = 'db2inst1'" > export.sql
4) 編輯生成的export.sql,把頭和尾那些資訊去掉,只保留必要的export命令.
5) 使用下面的sql語句生成倒入所有資料的指令碼(我們使用load命令,而且必須使用)
db2 "select 'load from ' || rtrim(tabname) || '.ixf of ixf insert into ' || rtrim(tabname) || ';' from syscat.tables where tabschema = 'db2inst1'" > load.sql
6) 編輯生成的load.sql,把頭和尾的資訊去掉,只保留必要的load命令.搜尋sample_tabs.ddl檔案中哪些表含有自增字段(含有generated always as identity定義的字段的表),並把load.sql中含有自增字段的表的load命令加入modified by identityoverride語句(加在of ixf和 insert之間,例如: load from mytable.ixf of ixf modified by identityoverride insert into mytable;)
注意:load命令中的modified by identityoverride可以保證匯入資料時那些自增字段的值和原資料庫中的資料一致.
7) 使用db2 -tvf export.sql命令,匯出所有表的資料。
(二)將sample_tabs.ddl,sample_foriegnkeys.ddl,sample_triggers.ddl,load.sql及所有匯出的.ixf資料檔案複製到linux機器上.
(三)linux系統上的操作:
1) 使用create database命令建立資料庫sample,建立必要的表空間及配置必要的資料庫引數.
2) 連線到sample資料庫,使用sample_tabs.dd指令碼檔案建立表(db2 -tvf sample_tabs.ddl).
3) 進入到放置.ixf資料檔案的目錄,使用db2 -tvf load.sql匯入資料.
4) 使用sample_foriegnkeys.ddl和sample_triggers.ddl指令碼檔案建立外來鍵約束和觸發器.
ok,我們的資料庫基本上就遷移成功了!
最後,別忘了對每張表執行runstats命令,你可以參照上面生成export和load命令指令碼的方法來生成runstats指令碼,然後再執行它。
跨平台的DB2資料庫的遷移
現在我們要把這個資料庫遷移到不同的作業系統 比如從aix到linux 我們應該怎麼辦呢?因為作業系統不同,所以使用backup restore命令顯然是不行了。那麼是不是可以使用db2move命令呢?也不行,首先db2move命令沒有辦法遷移索引 外來鍵約束 觸發器,更不能遷移含自增欄位資料的表。那...
Tips 跨平台備份 恢復DB2資料庫
如果你需要在不同的作業系統之間備份 恢復db2資料庫,那麼你很可能遇到麻煩,據說有人成功的把db2資料庫在aix 5上backup然後在windows下restore,反正我是沒那麼幸運了,restore過程中除了備份檔案名和路徑不一致的問題,到最後一步還是報錯,而windows本地資料庫backu...
Db2資料遷移
db2資料遷移的方法大致有以下幾種 通過db2資料庫的備份和復原進行資料遷移 注意點 進行復原的時候要通過手動選擇備份,復原檔案時間設定要和備份的檔案上的時間戳一致 不能進行跨平台的遷移,如 從linux平台資料庫備份的檔案,不能復原到windows平台資料庫中 通過export to和import...