大家在遷移數據庫時,存儲過程一般也要遷移過去,但一般有兩個問題:
1. 非常多存儲過程有先后關系(存儲過程調用存儲過程),假設存儲過程數量少,還能手動操作。假設量大,那真是要瘋了。
2. 存儲過程過大(行數過多),導致異常
這邊有個方法,也許能夠解決問題。
一. 導出存儲過程
EXPORT TO G:/PROCUDURE/procudure.del OF del MODIFIED BY LOBSINFILE
SELECT 'SET CURRENT SCHEMA '||rtrim(procschema)||'@'||chr(10)||'SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,'||rtrim(procschema)||' @'||chr(10)||text||chr(10)||'@'||chr(10)
FROM syscat.procedures WHERE PROCSCHEMA = 'ILS' ORDER BY create_time ;
運行以上導出語句,則是把schema為ils以下的存儲過程導出為文件,由於有ORDER BY create_time。所以導出的順序也是依照原有存儲過程的順序建立的。
運行完了,應該在G:/PROCUDURE看到兩個文件
1. procudure.del
2. procudure.del.001.lob
如圖:
會出現procudure.del.001.lob這個文件,由於我這邊有存儲過程太大(使用MODIFIED BY LOBSINFILE)。所以導出為lob文件,這樣不easy出錯。
二. 導入存儲過程
下一步當然是在其它db以下導入存儲過程啦:
1. 命令行下進入到G:/PROCUDURE
2. 連接到要導入的db: connect to ilsdb user xxx用戶 using xxxpassword
3. db2 -td@ -vf procudure.del.001.lob
ok。順便看看log。有沒有報錯。
有報錯,在運行一次(盡管是依照創建時間排序的,但不能保證有人后期改動過父存儲過程,導致創建時間不正確)。
導入過程見圖:
打開后輸入下面命令