日常DBA的工作就是擷取SP的代碼,以便於分析或者移植到別的環境,如何快速擷取SP的DDL呢,總結了下,DB2在擷取SP的DDL語提供的方法還是比較多,可以供參考:
1 select routinename,text from sysibm.sysroutines;
上面是通過資料字典表查詢擷取,與其等效的系統檢視表查詢擷取方法
DB2 SELECT CHAR(ROUTINESCHEMA,20), CHAR(ROUTINENAME,20), TEXT FROM SYSCAT.ROUTINES > <輸出檔案名>
此方法的缺陷是當text>32767時,匯出的該條預存程序是不完整的。
2 GET ROUTINE
1)擷取所有預存程序的名稱:
DB2 SELECT CHAR(ROUTINESCHEMA,20) AS SCHEMA, CHAR(ROUTINENAME,20) AS NAME FROM SYSCAT.ROUTINES WHERE SUBSTR(VARCHAR(TEXT),1,16) = 'CREATE PROCEDURE' > <輸出檔案名>
2)根據輸出檔案中預存程序的名稱,分別對每個預存程序執行如下操作,以便將完整的建立語句輸出到指定檔案中:
DB2 GET ROUTINE INTO <輸出檔案名> FROM PROCEDURE <預存程序模式名>.<預存程序名>
當然上面方法的好處就是均可以指定具體SP名稱,對單獨的SP進行DDL的結構匯出。
3 DB2LOOK 命令的 -e 選項中增加了對預存程序的建立語句的提取
db2look -d <資料庫名> -cor -e -o <輸出檔案名>
4 使用export:
db2 "EXPORT TO procudure.del OF del lobs to sp.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 ORDER BY create_time ; "
注意必須加lobs to選項,否則大的預存程序定義只能匯出一部分
上面的第三和第四種方法無法指定SP名稱,基本是全庫的SP的所有結構,所以可以根據工作中的需求選擇合適快捷的方法,總而言之,DB2提供了足夠多的方法便利了DBA在日常工作需求。
DB2資料庫效能調整和最佳化(第1、2版) PDF
DB2資料庫效能最佳化介紹
DB2 9.7 for Linux 5.4安裝詳細步驟
本文永久更新連結地址: