下列是關於在「安裝」中設定 DB2 環境指示的附加說明。
|若需 SQL 程序支援,您必須在伺服器上安裝「應用程式開發從屬站 |(Application Development Client)」。若需安裝「應用程式開發從屬站」的相關資訊, |請參照適用您的平台的 快速入門 書籍。若需您平台中 DB2 支援的 C 及 C++ 編譯器的相關資訊, |請參閱「平台支援的軟體」。
編譯器架構由兩部分組成: 設定編譯器的環境變數及定義編譯指令。 環境變數提供編譯器的二進位檔(bin)、檔案庫(lib)及併入檔的路徑。 編譯指令是 DB2 將用來編譯 SQL 程序所產生的 C 檔案的完整指令。
在 OS/2、Windows 及 UNIX 作業系統上配置環境有不同的規則, 如下所示。 在部分的情況下,不需要作架構;在其它情形時, DB2_SQLROUTINE_COMPILER_PATH DB2 登錄變數必須設定為指向一個 適當的設定環境變數的可執行 Script。
在 OS/2 上:
針對 IBM VisualAge C++ for OS/2 版本 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxo\bin\setenv.cmd" 針對 IBM VisualAge C++ for OS/2 版本 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcpp40\bin\setenv.cmd"
在 Windows 32 位元作業系統上,如果編譯器的環境變數是設定為 SYSTEM 變數, 則不需要作任何配置。 否則,請將 DB2_SQLROUTINE_COMPILER_PATH DB2 登錄變數設定為:
針對 Microsoft Visual C++ 版本 5.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\devstudio\vc\bin\vcvars32.bat" 針對 Microsoft Visual C++ 版本 6.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\Micros~1\vc98\bin\vcvars32.bat" 針對 IBM VisualAge C++ for Windows 版本 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxw\bin\setenv.bat" 針對 IBM VisualAge C++ for Windows 版本 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcppw40\bin\setenv.bat"
在 UNIX 作業系統上,DB2 會在您第一次編譯儲存程序時產生可執行的 Script 檔 $HOME/sqllib/function/routine/sr_cpath (包含編譯器環境變數的預設值)。 您可編輯此檔案,如果預設值不適用於您的編譯器。 另外,您可將 DB2_SQLROUTINE_COMPILER_PATH DB2 登錄變數設為包含另一個可執行 Script 的完整路徑名稱,在 Script 內指定期望的值 (請看上面的範例)。
Application Development Client 的安裝提供了一個預設的編譯指令, 至少可用於每個平台上支援的編譯器之一:
AIX:IBM C Set++ for AIX 版本 3.6.6 Solaris:SPARCompiler C++ 版本 4.2 及 5.0 HP-UX:HP-UX C++ 版本 A.12.00 Linux:GNU/Linux g++ 版本 egcs-2.90.27 980315 (egcs-1.0.2 release) PTX:ptx/C++ 版本 5.2 OS/2:IBM VisualAge C++ for OS/2 版本 3 Windows NT 及 Windows 2000:Microsoft Visual C++ 版本 5.0 及 6.0
若要使用其它編譯器,或要自訂預設指令, 您必須將 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登錄變數設為如下的指令:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=compilation_command
其中 compilation_command 是 C 或 C++ 編譯指令, 包括建立儲存程序所需的選項及參數。
在編譯指令中,請使用關鍵字 SQLROUTINE_FILENAME 來取代所產生的 SQC、C、PDB、DEF、EXP、 訊息日誌及共用檔案庫檔案的檔名。僅針對 AIX,使用 SQLROUTINE_ENTRY 關鍵字來取代登錄名稱。
下列是 C 或 C++ 編譯器在支援的伺服器平台的 DB2_SQLROUTINE_COMPILE_COMMAND 預設值。
AIX
使用 IBM C for AIX 版本 3.6.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlc -H512 -T512 \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \ -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
使用 IBM C Set++ for AIX 版本 3.6.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlC -H512 -T512 \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \ -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
若您在 vacbld 指令之後沒有指定架構檔,DB2 會在首次建立 SQL 程序時, 建立下列預設的架構檔。
$HOME/sqllib/function/routine/sqlproc.icc
若您要使用自己的架構檔,可在設定 DB2_SQLROUTINE_COMPILE_COMMAND 的 DB2 登記值時, 指定您要使用的架構檔:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%/function/sqlproc.icc"
HP-UX
使用 HP C 編譯器版本 A.11.00.03:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc +DAportable +ul -Aa +z \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
使用 HP-UX C++ 版本 A.12.00:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC +DAportable +a1 +z -ext \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
Linux
使用 GNU/Linux gcc 版本 2.7.2.3:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
使用 GNU/Linux g++ 版本 egcs-2.90.27 980315 (egcs-1.0.2 版次):
db2set DB2_SQLROUTINE_COMPILE_COMMAND=g++ \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
PTX
使用 ptx/C 版本 4.5:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -KPIC \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
使用 ptx/C++ 版本 5.2:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=c++ -KPIC \ -D_RWSTD_COMPILE_INSTANTIATE=0 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
OS/2
使用 IBM VisualAge C++ for OS/2 版本 3:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="icc -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/NOFREE /NOI /ST:64000\" SQLROUTINE_FILENAME.def %DB2PATH%\lib\db2api.lib"
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
使用 IBM VisualAge C++ for OS/2 版本 4:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
若您在 vacbld 指令之後沒有指定架構檔,DB2 會在首次建立 SQL 程序時, 建立下列預設的架構檔。
%DB2PATH%\function\routine\sqlproc.icc
若您要使用自己的架構檔,可在設定 DB2_SQLROUTINE_COMPILE_COMMAND 的 DB2 登記值時, 指定您要使用的架構檔:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
Solaris
使用 SPARCompiler C 版本 4.2 和 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
使用 SPARCompiler C++ 版本 4.2 和 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
註:
Windows NT 和 Windows 2000
使用 Microsoft Visual C++ 版本 5.0 和 6.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cl -Od -W2 /TC -D_X86_=1 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll %DB2PATH%\lib\db2api.lib
若沒有設定 DB2_SQLROUTINE_COMPILE_COMMAND DB2 登記變數,則這是預設編譯指令。
使用 IBM VisualAge C++ for Windows 版本 3.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="ilib /GI SQLROUTINE_FILENAME.def &icc -Ti -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/ST:64000 /PM:VIO /DLL\" SQLROUTINE_FILENAME.exp %DB2PATH%\lib\db2api.lib"
使用 IBM VisualAge C++ for Windows 版本 4:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
若您在 vacbld 指令之後沒有指定架構檔,DB2 會在首次建立 SQL 程序時, 建立下列預設的架構檔。
%DB2PATH%\function\routine\sqlproc.icc
若您要使用自己的架構檔,可在設定 DB2_SQLROUTINE_COMPILE_COMMAND 的 DB2 登記值時, 指定您要使用的架構檔:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
若要傳回預設編譯器選項,以下列指令將 DB2_SQLROUTINE_COMPILE_COMMAND 的 DB2 登記值 設定為 NULL:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=
當 SQL 程序沒有成功建立時,您必須手動刪除被丟棄的中間檔。這些檔案位於下列目錄裡:
在此 $DB2PATH 是建立案例的目錄,$DATABASE 是資料庫名稱, 而 $SCHEMA 是用來建立 SQL 程序的綱目名稱。
其中 %DB2PATH% 代表建立案例的目錄,%DATABASE% 代表資料庫名稱, 而 %SCHEMA% 代表用來建立 SQL 程序的綱目名稱。
在建立 SQL 程序時,產生的共用檔案庫/DLL 也會保留在型錄表格中, 如果產生的共用檔案庫/DLL 小於 2 MB。 在備份及復置資料庫時,任何產生的共用檔案庫/DLL 小於 2 MB 的 SQL 程序會使用 型錄表格中所保留的版本來做備份及復置。 如果您有產生的共用檔案庫/DLL 大於 2 MB 的 SQL 程序, 請確定您也用資料庫備份及復置來做檔案系統的備份及復置。 如果沒有,您必須使用 syscat.procedures 型錄表格中的來源自行重建 SQL 程序的共用檔案庫/DLL。
在此 $DB2PATH 是建立案例的目錄,而 $DATABASE 是用來建立 SQL 程序的資料庫名稱。
其中 %DB2PATH% 代表建立案例的目錄, 而 %DATABASE% 代表用來建立 SQL 程序的資料庫名稱。
將資料庫管理程式的架構參數 KEEPDARI 設定為 'NO',以建置 SQL 程序。 若 SQL 程序一旦執行時維持載入狀態,要以同名捨棄和重建儲存程序時可能會遭遇問題, 如同檔案庫無法復新,而可執行檔無法從檔案系統捨棄。當您嘗試復原變更或捨棄資料庫時也會遭遇問題,因為無法刪除可執行檔。
請參閱「應用程式開發手冊,第 2 章 設定」的「更新資料庫管理程式架構檔」,以取得設定 KEEPDARI 參數的詳細資訊。
「使用呼叫指令」中的第一段應該讀取:
欲使用呼叫指令,請輸入儲存程序名稱,以及 IN 或 INOUT 的參數,還有被視為每一個輸出參數之位置保留符號 '?'。 若要取得 CALL 指令的詳細語法,請參閱10.14, "CALL"。
|
步驟 1. | 安裝 FixPak 3 |
步驟 2. | 發出 db2updv7 指令以啟用 DB2 來取出及安裝已編譯的 SQL 程序:
db2updv7 -d database_name
|
|當您定義一個 SQL 程序時,它會轉換為一個 C 程式、預先編譯過、 |對目標資料庫連結、編譯並鏈結以建立一個共用檔案庫。 |編譯及鏈結的步驟需要在資料庫伺服器機器上有可用的 C 或 C++ 編譯器。然而,您在定義 SQL 程序時, |您可將它以已編譯的形式分送到在相同平台上執行的 DB2 資料庫, |而不需要可存取 C 或 C++ 編譯器。DB2 容許使用者從一個資料庫取出已編譯形式的 SQL 程序, |以及安裝已編譯形式的 SQL 程序到另一個資料庫。
|DB2 提供了指令行介面及程式設計介面來執行取出及安裝作業。指令行介面由兩個 CLP 指令組成: |GET ROUTINE 及 PUT ROUTINE。程式設計介面由兩個內建儲存程序組成:GET_ROUTINE_SAR |及 PUT_ROUTINE_SAR。有關指令行介面的詳細資訊,請參照 Command Reference。有關程式設計介面的詳細資訊, |請參照 SQL Reference。
|若要從一個資料庫伺服器分送已編譯的 SQL 程序到另一個資料庫伺服器, |請執行下列步驟:
|
步驟 1. | 開發應用程式,包括定義為應用程式部分的 SQL 程序。 |
在測試程序後,將每一個程序的已編譯版本取出到一個不同的檔案。 若需詳細資訊,請參照 Command Reference 中的 GET ROUTINE 指令或 SQL Reference 中的 GET_ROUTINE_SAR 儲存程序。 | |
步驟 3. | 在每一台伺服器上安裝每一個程序的已編譯版本, 您可發出 PUT ROUTINE 指令,或呼叫 PUT_ROUTINE_SAR 儲存程序 (使用 2 所建立的檔案)。每一個資料庫伺服器的作業系統及 DB2 層次必須相同。
|