今天負責把多個系統的db2數據庫遷移到另外一臺機器上。同時要修改WebSphere的數據源,讓它指向新的數據庫。以前沒做過,對于數據庫操作,我向來是要用的時候再去翻資料的。開始考慮使用備份、還原的方式,但版本不一樣,原來是7現在是8,操作系統也不一樣,原來是AIX,現在是Windows,這樣備份還原是行不通的,于是采用db2move。
看看db2move的命令說明,大致就明白怎么做了,于是我就開始實戰了。我采用最簡單的方式,原機器上使用db2move &dbname export生成文件,在目標機上ftp拿到生成的文件,然后使用db2move &dbname import。目標機上只要創建一個新庫,無需使用DDL生成表。信息顯示所有表都ok,很快就搞定一個數據庫,connect上去查看,表自動生成,數據也完全一致。然后在WebSphere所在機器上重新catalog新的數據庫,語法也是現查的,現記錄如下:catalog tcpip node &nodename remote &ip server &port, terminate, catalog db &remotedbname as &dbaliesname at node &nodename,terminate。加&表示根據實際設置的值。Db2 connect試試,新的連接正常。進入Administartor Console修改數據源配置,然后保存。重啟server,測試完全正常。一個數據庫搞定。
下面一個是我幫別人遷移的數據庫,我對其表結構,表空間等都不知道。不管三七二十一,我先照著剛才辦法做。Export一切正常,import前面的表都正常,快結束發現報錯了,報創建表失敗。到相應表的msg文件發現錯誤描述如下:
SQL3319N 創建表時發生 SQL 錯誤 "-286"。
SQL0286N 找不到頁大小至少為 "8192"、許可使用授權標識 "DB2ADMIN"
的缺省表空間。 SQLSTATE=42727
原來需要8k頁大小的表空間。這簡單,使用控制中心新建一個8k的表空間。然后需要讓出錯的表使用這個表空間,也就是說要要使用DDL語句先創建這個表了。連上原來的數據庫,生成這個表的DDL語句,修改tablespace名,改為新建的表空間,然后到新的數據庫上執行。我不想重新再import所有表了,怎么做到呢,先看看生成的那些文件,有個db2move.lst,然后是每個表的ixf和msg文件,lst文件居然可以用文本打開,發現里面一行就是一個表,估計這就是需要導入表的列表了。刪除那些已經正常導入的表信息,只留沒導入的表,然后重新運行db2move &dbname import,這下一切正常了。然后就是剩下的同樣工作了。
值得注意的是,db2move只導入表的信息,其它如view,trigger等均需通過DDL語句或控制中心添加。忙了一天,是為此記。