|
Gwyneth Evans (grevans@ca.ibm.com), 軟件開發(fā)人員, IBM Canada, Inc. 2004 年 11 月 01 日 如果您要從 32 位 DB2® 實(shí)例遷移到 64 位 DB2 實(shí)例,或者將 32 位應(yīng)用程序部署到 64 位的平臺(tái)上,抑或只是想以后能夠很容易實(shí)現(xiàn)這種遷移,那么本文很適合您。本文將概述 DB2 Universal Database™(DB2 UDB) 的 32 位和 64 位應(yīng)用程序以及例程,同時(shí)還將解釋有關(guān)開發(fā) DB2 應(yīng)用程序和例程以及將它們部署到 64 位平臺(tái)的一些考慮事項(xiàng)及最佳實(shí)踐。 在討論 DB2 對 32 位和 64 位的支持之前,首先將查看并理解本文的上下文中牽涉到的一些術(shù)語和重要概念,這十分重要:
您是否計(jì)劃將數(shù)據(jù)庫客戶機(jī)或服務(wù)器遷移到 64 位平臺(tái),或者只是想構(gòu)建和部署適合 64 位 DB2 實(shí)例的應(yīng)用程序或例程,那么理解 DB2 對 32 位和 64 位應(yīng)用程序開發(fā)的支持十分重要。同樣重要的是,采用一些最佳實(shí)踐有助于應(yīng)用程序和例程的部署,并確保它們在目標(biāo)環(huán)境中的功能與預(yù)期的一致。 本文分為三部分:首先將向您介紹 32 位和 64 位對象的概念,然后幫助您了解有關(guān) 32 位和 64 位 DB2 配置和特性支持的信息,最后幫助您制定出用于開發(fā)和部署適合 64 位 DB2 實(shí)例的應(yīng)用程序的策略。
廣泛理解 32 位和 64 位對象在計(jì)算環(huán)境中的相關(guān)性十分重要,因?yàn)樗鼈冎g的某些依賴性可能影響到各個(gè)方面,包括所需購買的硬件,部署應(yīng)用程序的方式等。 32 位計(jì)算機(jī)硬件使用 32 位來表示內(nèi)存地址以及處理指令和數(shù)據(jù)。64 位硬件使用 64 位來做同樣的事情。通常,32 位操作系統(tǒng)運(yùn)行在 32 位的硬件上,而 64 位操作系統(tǒng)則運(yùn)行在 64 位的硬件上,不過在某些 64 位的硬件上運(yùn)行 32 位操作系統(tǒng)也是可能的。 操作系統(tǒng)由一個(gè)內(nèi)核和一組操作系統(tǒng)庫組成,其中內(nèi)核直接與硬件打交道。操作系統(tǒng)要么帶有 32 位的內(nèi)核,要么帶有 64 位的內(nèi)核,或者,在某些情況下同時(shí)帶有這兩種內(nèi)核。通常,32 位操作系統(tǒng)內(nèi)核可以使用 4 GB 的實(shí)際內(nèi)存(即操作系統(tǒng)和正在運(yùn)行的應(yīng)用程序共享的物理 RAM),而 64 位操作系統(tǒng)內(nèi)核可以使用更多的實(shí)際內(nèi)存。當(dāng)然,有些 32 位操作系統(tǒng)內(nèi)核可以使用多于 4 GB 的內(nèi)存,但是在這一點(diǎn)上仍然不如 64 位的內(nèi)核。在某些操作系統(tǒng)上,可能必須有 64 位內(nèi)核來運(yùn)行 64 位應(yīng)用程序,因?yàn)檫@種應(yīng)用程序在使用 32 位內(nèi)核的情況下是不能運(yùn)行的。所有 UNIX® 操作系統(tǒng)都屬于這種情況,只有 AIX® 例外。在 AIX 上,情況十分特殊,您可以任意使用 32 位或 64 位內(nèi)核來運(yùn)行 32 位和 64 位應(yīng)用程序。然而,為了防止可伸縮性問題,在運(yùn)行 32 位應(yīng)用程序時(shí)最好使用 64 位內(nèi)核。 操作系統(tǒng)庫很重要,因?yàn)橛辛诉@些系統(tǒng)庫才能構(gòu)建和運(yùn)行應(yīng)用程序。為了構(gòu)建 32 位應(yīng)用程序,必須鏈接 32 位系統(tǒng)庫。同樣,為了構(gòu)建 64 位應(yīng)用程序,必須有 64 位系統(tǒng)庫。不過,在一個(gè)特定的操作系統(tǒng)中,即使提供了 64 位系統(tǒng)庫,也不一定意味著這個(gè)系統(tǒng)真正可以運(yùn)行 64 位應(yīng)用程序。這種情況對于 32 位 Windows® 操作系統(tǒng)更是常見,在 32 位 Windows 上,雖然有些 64 位應(yīng)用程序不能運(yùn)行,但是可以編譯和鏈接它們。對于 UNIX 平臺(tái)也是如此,因?yàn)樵谀承┣闆r下,您可以在 32 位的硬件上安裝帶 64 位支持的操作系統(tǒng),還有一些情況下,32 位內(nèi)核不能運(yùn)行 64 位應(yīng)用程序。實(shí)際上,可以把 32 位操作系統(tǒng)看作只能運(yùn)行 32 位應(yīng)用程序的操作系統(tǒng),盡管 64 位操作系統(tǒng)也能運(yùn)行 64 位應(yīng)用程序,但需要使用 64 位硬件,而且可能還需要使用 64 位操作系統(tǒng)內(nèi)核。 32 位應(yīng)用程序是按照內(nèi)存地址的大小為 32 位(4 個(gè)字節(jié))來編譯的。這些應(yīng)用程序可以直接使用至多 4 GB 的虛擬內(nèi)存 —— 即一臺(tái)計(jì)算機(jī)上可以提供的潛在內(nèi)存。不管系統(tǒng)上可用于操作系統(tǒng)和其他應(yīng)用程序之間共享的實(shí)際內(nèi)存(RAM)有多少,這一虛擬內(nèi)存限制始終存在。另一方面,64 位應(yīng)用程序按照內(nèi)存為 64 位(8 個(gè)字節(jié))來編譯,可以使用多于 4 GB 的虛擬內(nèi)存,這不受限制。操作系統(tǒng)通常還會(huì)對應(yīng)用程序施加更多的虛擬內(nèi)存限制,因此,雖然應(yīng)用程序具有 32 位的尋址能力,但理論上每個(gè)應(yīng)用程序的最大虛擬內(nèi)存可能只有 1-2 GB。 當(dāng)您在 32 位或 64 位平臺(tái)上編譯應(yīng)用程序時(shí),默認(rèn)情況下應(yīng)用程序被編譯為在某種特定平臺(tái)上運(yùn)行。通過使用特殊的特定于編譯器的編譯選項(xiàng),并適當(dāng)?shù)劓溄拥胶线m的 32 位或 64 位庫,也可以在帶有某些編譯器的 32 位操作系統(tǒng)上創(chuàng)建 64 位應(yīng)用程序,或者在 64 位操作系統(tǒng)上創(chuàng)建 32 位應(yīng)用程序。 32 位應(yīng)用程序通常可以同時(shí)在 32 位和 64 位操作系統(tǒng)上運(yùn)行,不過在很多采用 32 位內(nèi)核的操作系統(tǒng)上不能運(yùn)行 64 位應(yīng)用程序。 從 DB2 的角度來看,當(dāng)然也存在 32 位和 64 位的 DB2 對象。32 位和 64 位 DB2 實(shí)例就是其中的一個(gè)例子。您可以在 32 位或 64 位操作系統(tǒng)上創(chuàng)建 32 位 DB2 實(shí)例,但是只能在 64 位操作系統(tǒng)上創(chuàng)建 64 位 DB2 實(shí)例。有些混合 32 位和 64 位操作系統(tǒng),例如 AIX Version 5.1,便支持這兩種類型的 DB2 實(shí)例。同一個(gè)數(shù)據(jù)庫服務(wù)器上可以存在多個(gè) DB2 實(shí)例,以服務(wù)不同的用戶需求(測試實(shí)例與生成實(shí)例),并且不一定要有相同的位數(shù)。 DB2 應(yīng)用程序可以同時(shí)在具有大多數(shù)編譯器的 32 位和 64 位 DB2 實(shí)例中創(chuàng)建為 32 位或 64 位的對象,但是為了得到應(yīng)有的功能,必須將 32 位或 64 位 DB2 應(yīng)用程序分別鏈接到 DB2 的 32 位和 64 位庫,兩種 DB2 實(shí)例都提供了這樣的庫。 32 位 DB2 外部例程是在被調(diào)用時(shí)裝載和運(yùn)行 32 位外部庫的 DB2 外部例程(過程,用戶定義函數(shù))。在調(diào)用 64 位外部例程時(shí),則裝載和運(yùn)行 64 位外部庫。 對 32 位和 64 位對象之間的關(guān)系有了基本的理解之后,就更容易明白必須如何管理 DB2 應(yīng)用程序開發(fā)實(shí)踐,以便系統(tǒng)可以支持 32 位和 64 位應(yīng)用程序的開發(fā)和部署。
第 II 部分:DB2 32 位和 64 位應(yīng)用程序和例程支持 就 32 位和 64 位跨平臺(tái)開發(fā)而言,DB2 UDB 確實(shí)是一種通用的數(shù)據(jù)庫。沒有哪種數(shù)據(jù)庫像 DB2 那樣,為在如此多的平臺(tái)上開發(fā)和部署應(yīng)用程序提供了如此多的支持。談到 32 位和 64 位應(yīng)用程序的開發(fā)支持,DB2 走在了前列。下面的小節(jié)將介紹 DB2 的關(guān)鍵 32 位和 64 位平臺(tái)和應(yīng)用程序開發(fā)支持。 受支持的 32 位和 64 位 DB2 UDB 產(chǎn)品 下面的 Linux、UNIX 和 Windows 平臺(tái)上的 DB2 Universal Database 產(chǎn)品在 32 位和 64 位平臺(tái)上都可以使用:
您可以使用 Personal Developer’s Edition 或任何其他產(chǎn)品開發(fā)數(shù)據(jù)庫應(yīng)用程序,前提是在客戶機(jī)上安裝了 DB2 Application Development Client。 要了解更多關(guān)于 DB2 產(chǎn)品、擴(kuò)展器、工具以及其他信息管理軟件產(chǎn)品的信息,請參閱 http://www.ibm.com/software/data/db2/udb。 一旦確定了哪種 DB2 產(chǎn)品能滿足您的需要,就必須為數(shù)據(jù)庫系統(tǒng)選擇硬件。下面的表列出了可用作 DB2 數(shù)據(jù)庫服務(wù)器或 DB2 客戶機(jī)的受支持的 32 位和 64 位平臺(tái)。.
有很多因素可能影響對用于開發(fā)和測試系統(tǒng)或生產(chǎn)系統(tǒng)的平臺(tái)的選擇。通常,這種決定最終歸結(jié)為價(jià)格、性能、可伸縮性和可靠性。當(dāng)需要為了數(shù)據(jù)庫服務(wù)器在 32 位或 64 位硬件平臺(tái)作出選擇時(shí),應(yīng)該考慮使用 64 位平臺(tái)的以下優(yōu)點(diǎn):
通常,生產(chǎn)系統(tǒng)的效率對于數(shù)據(jù)管理策略的成功十分關(guān)鍵,這就是為什么常常在生產(chǎn)系統(tǒng)中使用更快的 64 位硬件作為數(shù)據(jù)庫服務(wù)器的原因。 如果單獨(dú)運(yùn)行開發(fā)、測試和生產(chǎn)系統(tǒng),那么顯然當(dāng)開發(fā)和生產(chǎn)系統(tǒng)在相同的平臺(tái)上,或者至少運(yùn)行相同的操作系統(tǒng)時(shí),應(yīng)用程序的部署是最容易的。 DB2 32 位和 64 位數(shù)據(jù)庫連接支持 您可以混合和匹配選作 DB2 數(shù)據(jù)庫客戶機(jī)和服務(wù)器的平臺(tái),因?yàn)?DB2 支持從 32 位和 64 位客戶機(jī)到數(shù)據(jù)庫服務(wù)器的本地和遠(yuǎn)程連接。 本地?cái)?shù)據(jù)庫連接用于將 DB2 客戶機(jī)或客戶機(jī)應(yīng)用程序連接到與客戶機(jī)駐留在同一臺(tái)計(jì)算機(jī)上的 DB2 數(shù)據(jù)庫服務(wù)器,而不需要網(wǎng)絡(luò)協(xié)議。另一方面,遠(yuǎn)程數(shù)據(jù)庫連接是連接到駐留在不同計(jì)算機(jī)上的 DB2 數(shù)據(jù)庫服務(wù)器,因而需要 TCPIP 之類的網(wǎng)絡(luò)協(xié)議。下面的表展示了 DB2 對 32 位和 64 位客戶機(jī)與 32 位和 64 位 DB2 數(shù)據(jù)庫服務(wù)器之間本地和遠(yuǎn)程連接的全部支持。 表 3. DB2 對從 32 位和 64 位客戶機(jī)到 32 位和 64 位服務(wù)器的支持
如果 DB2 客戶機(jī)和 DB2 數(shù)據(jù)庫服務(wù)器在不同類型的平臺(tái)上,那么這種廣泛的支持是一個(gè)重要特性。這還意味著 32 位和 64 位應(yīng)用程序可以連接 32 位和 64 位數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)庫并與這些數(shù)據(jù)庫通信。 要獲得對 DB2 受支持的 32 位和 64 位硬件以及用于 DB2 Versions 7 和 8 的客戶機(jī)-服務(wù)器配置的詳細(xì)描述,請參閱主題 “Supported and non-supported client configurations”,在 DB2 Quick Beginnings Guide (PDF) 和 Information Center (HTML) 中都可以找到這個(gè)主題。 DB2 的 32 位和 64 位客戶機(jī)應(yīng)用程序支持 DB2 支持用于各個(gè)受支持平臺(tái)的多種編譯器、解釋器和相關(guān)開發(fā)軟件。您可以在 32 位或 64 位 DB2 實(shí)例中的任何一種 DB2 實(shí)例中構(gòu)建 DB2 32 位和 64 位應(yīng)用程序,只要該 DB2 實(shí)例中帶有前面提到的差不多所有 DB2 都支持的編譯器,這些編譯器提供了 32 位和 64 位應(yīng)用程序編譯支持。 在開始編寫應(yīng)用程序之前,應(yīng)確認(rèn)您所想要的編譯器或開發(fā)軟件能夠支持 32 位和 64 位應(yīng)用程序的開發(fā)需要。要獲得關(guān)于用于各種硬件平臺(tái)的 DB2 受支持的開發(fā)軟件的詳細(xì)描述,請參閱主題 “Supported development software”,在 DB2 Application Development Guide: Building and Running Applications (PDF) 和 Information Center (HTML) 中都可以找到這個(gè)主題。 在構(gòu)建和鏈接 32 位或 64 位 DB2 應(yīng)用程序之前,最好要確切地知道將來可以在哪里運(yùn)行這些應(yīng)用程序。下面的表展示了可以在其上運(yùn)行 DB2 32 位和 64 位客戶機(jī)應(yīng)用程序的硬件和操作系統(tǒng),這里假設(shè)這些應(yīng)用程序被正確地編譯和鏈接: 表 4. DB2 對于 32 位和 64 位平臺(tái)上 32 位和 64 位應(yīng)用程序的運(yùn)行時(shí)支持
(1) Windows 32 位應(yīng)用程序可以在 Windows 64 位平臺(tái)上運(yùn)行,而不需要對環(huán)境作任何改變。在 UNIX 上,通過重新綁定應(yīng)用程序并以適當(dāng)?shù)膸炻窂皆O(shè)置運(yùn)行應(yīng)用程序,便可以將已有的 32 位應(yīng)用程序部署到所有 64 位平臺(tái)上,只有 Linux IA64 和 Linux for zSeries® 例外。 關(guān)于如何正確地構(gòu)建、鏈接和鏈接要部署到不同平臺(tái)的應(yīng)用程序的建議,將在本文的 第 III 部分 中詳細(xì)討論。 例程(存儲(chǔ)過程、UDF 和方法)不同于應(yīng)用程序。例程 – 封裝了數(shù)據(jù)庫和編程邏輯的數(shù)據(jù)庫對象 - 運(yùn)行在數(shù)據(jù)庫服務(wù)器上,是通過執(zhí)行特定于例程的 CREATE 語句創(chuàng)建的,該語句定義了例程的一些特征。 SQL 例程支持 對于 DB2 Version 8.2,SQL 過程定義像 SQL 函數(shù)、表、觸發(fā)器和其他數(shù)據(jù)庫對象定義一樣,完全保存在數(shù)據(jù)庫中。SQL 過程不再與任何駐留在數(shù)據(jù)庫服務(wù)器上的可執(zhí)行代碼產(chǎn)生關(guān)聯(lián),這意味著不存在與 SQL 例程的創(chuàng)建、調(diào)用、部署或遷移有關(guān)聯(lián)的 32 位或 64 位相關(guān)因素。 外部例程支持 外部例程的例程體是以一種編程語言編寫的,它被編譯成一個(gè)庫,當(dāng)例程被調(diào)用時(shí),就要裝載并運(yùn)行這個(gè)庫。在 CREATE 語句中有兩個(gè)子句用于外部例程,它們是 FENCED 和 NOT FENCED,這兩個(gè)子句將決定外部例程是在一個(gè)不同于數(shù)據(jù)庫管理器的 fenced 環(huán)境中運(yùn)行,還是在與數(shù)據(jù)庫管理器相同的尋址空間中運(yùn)行。通常,unfenced 例程比 fenced 例程執(zhí)行起來要更好一些,因?yàn)樗鼈兺ㄟ^共享內(nèi)存與數(shù)據(jù)庫管理器通信,而不是通過 TCPIP 通信。默認(rèn)情況下,不管 CREATE 語句中使用了哪些其他的子句,例程總是被創(chuàng)建為 fenced 例程。 下面的表說明了 DB2 對在運(yùn)行相同操作系統(tǒng)的 32 位和 64 位數(shù)據(jù)庫服務(wù)器上運(yùn)行 fenced 和 unfenced 32 位和 64 位例程的支持: 表 5. DB2 對在 32 位和 64 位服務(wù)器上運(yùn)行過程和 UDF 的支持
(1) 在 64 位服務(wù)器上運(yùn)行 32 位例程不如在 64 位服務(wù)器上運(yùn)行 64 位例程那么快。 在表 5 中要注意的重要一點(diǎn)是,32 位 unfenced 過程不能在 64 位 DB2 服務(wù)器上運(yùn)行。如果必須將 32 位 unfenced 例程部署到 64 位平臺(tái),那么應(yīng)該在編目這些例程之前將 NOT FENCED 子句從用于這些例程的 CREATE 語句中去掉。 32 位和 64 位外部例程解析 當(dāng)執(zhí)行引用例程的 SQL 語句(例如用于調(diào)用過程的 CALL 語句或者可以在 select 列表中包含列函數(shù)的 SELECT 查詢)時(shí),DB2 根據(jù) DB2 系統(tǒng)編目表中的例程定義解析例程引用,并在 SQL 語句的執(zhí)行過程中調(diào)用例程。 當(dāng)調(diào)用外部例程時(shí),DB2 根據(jù)名稱在數(shù)據(jù)庫服務(wù)器上找到例程的外部類或庫文件,然后裝載并運(yùn)行外部類或庫文件。在 32 位平臺(tái)上,外部例程總是作為 32 位對象來裝載和運(yùn)行。在 64 位平臺(tái)上,出于性能考慮,DB2 假設(shè)例程調(diào)用的目標(biāo)庫是 64 位的對象。因此,DB2 首先嘗試作為 64 位的對象來執(zhí)行例程的外部庫或類。如果不行的話,DB2 便自動(dòng)嘗試作為 32 位 fenced 例程庫來裝載和運(yùn)行該庫。 如果在數(shù)據(jù)庫服務(wù)器的文件系統(tǒng)中同時(shí)具有一個(gè)例程的庫或類的 32 位和 64 位版本,那么為了得到最佳性能,應(yīng)該確保該例程的 CREATE 語句標(biāo)識(shí)了正確的外部庫或類文件,而不是讓 DB2 去搜索正確的版本來運(yùn)行。 要了解關(guān)于例程解析和調(diào)用的更多信息,請參閱 Routine invocation —— 一個(gè) IBM DB2 文檔主題。 64 位數(shù)據(jù)庫服務(wù)器上 32 位外部例程的性能 由于對實(shí)現(xiàn)外部例程的選擇常?;谔岣呖蛻魴C(jī)應(yīng)用程序性能的需要,因此從外部例程中獲得最大性能通常被優(yōu)先考慮。在 64 位數(shù)據(jù)庫服務(wù)器上,外部例程的性能部分上是由外部例程是裝載 32 位還是 64 位外部例程庫來決定的。 除了 Java™ 例程以外,在 64 位服務(wù)器上調(diào)用 32 位例程在性能上不如在 64 位服務(wù)器上調(diào)用 64 位例程,因?yàn)槌鲇谛阅芸紤],DB2 首先嘗試將例程當(dāng)作 64 位對象來執(zhí)行,然后才嘗試將例程作為 32 位對象來執(zhí)行,而后者要求特殊的 32 位 fenced 模式處理。對于單獨(dú)的 32 位例程調(diào)用,其開銷顯得微不足道,但是當(dāng)這個(gè)例程被調(diào)用很多次時(shí),開銷就變得比較顯著了。如果您關(guān)心性能的話,那么建議您重新構(gòu)建(編譯、綁定和鏈接)例程源代碼來創(chuàng)建 64 位例程庫。 64 位數(shù)據(jù)庫服務(wù)器上 32 位 Java 例程的性能 關(guān)于運(yùn)行在 64 位數(shù)據(jù)庫服務(wù)器上的 32 位 Java 例程的一個(gè)好消息是,如果使用 32 位 JVM 來運(yùn)行這些 Java 例程,那么它們的性能與使用 64 位 JVM 時(shí)的 64 位 Java 例程的性能不相上下,所以您可以不需要 64 位 JVM。 32 位 Java Virtual Machines (JVM) 可以在 64 位 DB2 數(shù)據(jù)庫服務(wù)器上運(yùn)行,并且可用于運(yùn)行 32 位 Java 例程。然而,運(yùn)行在 64 位數(shù)據(jù)庫服務(wù)器 上的 32 位 Java 例程伸縮性不是很好,因?yàn)樗鼈儽仨毦幠砍?FENCED NOT THREADSAFE,并以這種形式運(yùn)行,這意味著每次調(diào)用這樣的例程時(shí),都需要使用它們自己的 JVM。如果您預(yù)測到需要例程有高度的可伸縮性,那么應(yīng)使用不同的編程語言來從創(chuàng)建在這些例程。 32 位和 64 位平臺(tái)上的 DB2 Development Center 支持 DB2 Development Center 為開發(fā)、構(gòu)建、調(diào)試和部署 SQL 和 Java 例程提供了一個(gè)圖形化的用戶界面,它是作為 DB2 Application Development Client 的一個(gè)可選組件提供的。DB2 Development Center 作為以下客戶機(jī)應(yīng)用程序中的一種受到支持:
DB2 Development Center 服務(wù)器支持 DB2 Development Center 支持到以下 DB2 數(shù)據(jù)庫服務(wù)器的連接:
DB2 Development Center 例程開發(fā)和調(diào)試支持 DB2 Development Center 支持到很多 DB2 服務(wù)器的連接,并支持用于很多 DB2 服務(wù)器的 SQL 和 Java(JDBC 和 SQLJ)例程的構(gòu)建和調(diào)試。下面的表總結(jié)了 DB2 Development Center 對例程開發(fā)和調(diào)試的支持: 表 6. DB2 Development Center 32 位和 64 位例程開發(fā)和調(diào)試支持
(1) 在這種服務(wù)器上開發(fā)的 Java 存儲(chǔ)過程只能在 Windows 32 位 和 AIX 32 位 Development Center 客戶機(jī)中進(jìn)行調(diào)試。 有了 Development Center,便可以執(zhí)行其他 32 位/ 64 位獨(dú)立應(yīng)用程序開發(fā)活動(dòng),包括創(chuàng)建和運(yùn)行:可以讀 WebSphere MQ® Queues 的 UDF、訪問 OLE DB 數(shù)據(jù)提供程序的 UDF,以及使用 XML 數(shù)據(jù)的 UDF。用 SQL 或 Java 以外的編程語言編寫的例程可以通過命令行和 CLP 創(chuàng)建和運(yùn)行。還可以在 Development Center 的 Server View 中執(zhí)行這些過程。這些過程不能在 Development Center 中修改或調(diào)試。要獲得 Development Center 特性和功能的完整列表,請參閱:
DB2 Development Center 例程導(dǎo)入、導(dǎo)出和部署支持 DB2 Development Center 提供了 Import Wizard、Export Wizard 和 Deployment Wizard,這些向?qū)Э捎糜趲椭D(zhuǎn)移例程定義和部署例程。Import 和 Export 向?qū)Э捎糜趯⑽淳幾g的 SQL 或 Java 例程定義從源機(jī)器轉(zhuǎn)移到目標(biāo)機(jī)器。通過使用這些向?qū)?,還可以將編譯過的例程庫和源文件一起轉(zhuǎn)移。 一旦將先前導(dǎo)出的例程定義導(dǎo)入到一個(gè) Development Center 項(xiàng)目中,便可以使用 Deployment Wizard 來部署 SQL 或 Java 例程。部署向?qū)峁┝酥匦聵?gòu)建導(dǎo)出的例程源代碼,或者使用編譯過的與例程定義一起導(dǎo)入的必需的庫來部署例程這兩個(gè)選項(xiàng)。 Deployment Wizard 在目標(biāo)服務(wù)器上編目例程,并在必要時(shí)在目標(biāo)服務(wù)器上重新構(gòu)建例程庫或類。Deployment Wizard 為重新使用已有的例程庫或類(如果適用的話)提供了一種選擇,然而,如果目標(biāo)數(shù)據(jù)庫服務(wù)器運(yùn)行的操作系統(tǒng)不同于源數(shù)據(jù)庫服務(wù)器運(yùn)行機(jī)的操作系統(tǒng),那么這就變得不可能了,因此 Deployment Wizard 將重新構(gòu)建所需的庫或類。 SQL 例程部署支持(非 Development Center 支持) 在 DB2 Version 8.2 中,SQL 過程是本地實(shí)現(xiàn)的 —— 也就是說,它們是完全在數(shù)據(jù)庫管理器中通過執(zhí)行相關(guān)的 CREATE 語句來實(shí)現(xiàn)的數(shù)據(jù)庫對象。SQL 的實(shí)現(xiàn)不存在處于數(shù)據(jù)庫管理器之外的部分。這意味著,在 DB2 Version 8.2 中創(chuàng)建或部署 SQL 過程時(shí),不需要考慮 64 位平臺(tái)。SQL 函數(shù)總是本地實(shí)現(xiàn)的,因此在創(chuàng)建或部署時(shí)也不需要考慮 64 位的問題。 在 DB2 Version 8.2 之前,DB2 的 SQL 存儲(chǔ)過程是作為可以在數(shù)據(jù)庫服務(wù)器上運(yùn)行的嵌入式 SQL C 代碼實(shí)現(xiàn)的。通過在目標(biāo)機(jī)器上重新創(chuàng)建例程,或者通過 GET ROUTINE 和 PUT ROUTINE 命令轉(zhuǎn)移編譯過的存儲(chǔ)過程,可以將這些 SQL 過程部署到另外一臺(tái)計(jì)算機(jī)上。如果目標(biāo)計(jì)算機(jī)與創(chuàng)建該過程所在的機(jī)器上運(yùn)行相同的操作系統(tǒng)和相同級(jí)別的 DB2,但是沒有安裝 C 編譯器,那么可以使用這些命令。如果您想將用 DB2 Version 8.2 之前版本的 DB2 創(chuàng)建的 32 位 SQL 過程部署到具有相同版本 DB2 的 64 位 目標(biāo)平臺(tái)上,那么必須顯式地在目標(biāo)平臺(tái)上重新創(chuàng)建 SQL 過程。 外部例程部署支持(非 Development Center 支持) 部署外部例程時(shí)需要兩個(gè)主要步驟:
外部例程庫和類實(shí)際上是和客戶機(jī)應(yīng)用程序一樣創(chuàng)建的,不同的是還需要一些附加的鏈接器(linker)選項(xiàng)。因此,在不使用 Development Center 的情況下,例程的部署非常類似于客戶機(jī)應(yīng)用程序的部署??蛻魴C(jī)應(yīng)用程序的部署在本文的第 II 部分討論。
第 III 部分:開發(fā)和部署可移植的 32 位和 64 位 DB2 應(yīng)用程序 不管您是想在 32 位 DB2 實(shí)例上開發(fā) 64 位應(yīng)用程序、部署 32 位應(yīng)用程序到 64 位實(shí)例,還是想保證以后這樣做時(shí)沒有障礙,都應(yīng)該遵循下面這一節(jié)中列出的最佳實(shí)踐。 開發(fā)平臺(tái)獨(dú)立的應(yīng)用程序和例程 作為一條通用法則,如果您使用 32 位 DB2 實(shí)例開發(fā)數(shù)據(jù)庫應(yīng)用程序或例程,并預(yù)測到將來要將它們部署到 64 位 DB2 實(shí)例上,那么在開發(fā)這種數(shù)據(jù)庫應(yīng)用程序或例程時(shí)應(yīng)該特別小心,盡可能使它們具有可移植性。為了使應(yīng)用程序和例程有可移植性,應(yīng)使用標(biāo)準(zhǔn)的平臺(tái)無關(guān)的代碼。例如,如果保持采用 ISO 中提供的功能性的一個(gè)子集的習(xí)慣,那么 C 規(guī)范將確保代碼更有可能具有可移植性。當(dāng)然,在代碼中避免使用特定于平臺(tái)的方法或硬編碼的文件或目錄名同樣有所幫助。當(dāng)部署應(yīng)用程序時(shí),您不想看到某些方法在目標(biāo)平臺(tái)上不受支持,或者因?yàn)槟繕?biāo)環(huán)境不同于開發(fā)環(huán)境而導(dǎo)致路徑名無效。 使用 DB2 可移植數(shù)據(jù)類型作為數(shù)字宿主變量 在 32 位和 64 位應(yīng)用程序中,數(shù)字?jǐn)?shù)據(jù)類型可以用不同的位數(shù)來表示。例如,在 C 或 C++ 編程中,int 和 long 數(shù)據(jù)類型的長度沒有指定。對于 DB2 支持的所有 UNIX 平臺(tái),在 32 位應(yīng)用程序 中 long 類型總是用 32 位表示,而在 64 位應(yīng)用程序中則用 64 位來表示。在 Windows 中,long 類型總是用 32 位表示。表 7 展示了 C 和 C++ 數(shù)據(jù)類型需要的位數(shù)在 32 位和 64 位應(yīng)用程序之間的區(qū)別。 表 7:32 位 和 64 位應(yīng)用程序中 C 和 C++ 數(shù)據(jù)類型表示需要的位數(shù)
如果將一開始為 32 位平臺(tái)編寫的應(yīng)用程序重新構(gòu)建為 64 位應(yīng)用程序,那么各種數(shù)據(jù)類型可能需要的不同長度將導(dǎo)致不正確的功能。例如,當(dāng)運(yùn)行那樣的應(yīng)用程序時(shí),您可能會(huì)碰到數(shù)字?jǐn)?shù)據(jù)被截?cái)嗟那闆r,以及由于內(nèi)存地址被截?cái)喽鴮?dǎo)致的無效數(shù)據(jù),或者空指針引用錯(cuò)誤。 為舉例說明為什么應(yīng)該使用推薦的可移植數(shù)據(jù)類型,請考慮下面的例子。假設(shè)您決定使用下面某一種本地?cái)?shù)據(jù)類型來表示一個(gè) BIGINT SQL 數(shù)據(jù)類型:
您可以使用上面任何一種數(shù)據(jù)類型來表示 BIGINT,但是您必須愿意接受下面對應(yīng)用程序的限制:
為了防止這類移植性問題的發(fā)生,DB2 提供了一套可移植的宿主變量數(shù)據(jù)類型,您應(yīng)該使用這些數(shù)據(jù)類型,而不是使用特定于平臺(tái)的本地?cái)?shù)據(jù)類型。位于 SQLLIB\include (Windows) 或 sqllib/include/ (UNIX) 目錄中的 DB2 頭文件 表 7: 32 位 和 64 位應(yīng)用程序中 C 和 C++ 數(shù)據(jù)類型表示所需的位數(shù)
C/ C++ 與 Java 的比較:在 Java 中,long 總是 64 位,因此適合 BIG INTEGER 值。同樣,在 Java 中,整型(integer)數(shù)據(jù)類型總是以 32 位表示,因此總是適合 SQL INTEGER 值。 要了解對于每種編程語言的建議數(shù)據(jù)類型的完整集合,請參閱本文后面的 參考資料部分中的相關(guān)鏈接。 使用 LONGERROR YES 選項(xiàng)預(yù)編譯 C / C++ 應(yīng)用程序 為了幫助您找出 C 和 C++ 代碼中對 long 數(shù)據(jù)類型潛在的有問題的使用,DB2 提供了 LONGERROR 預(yù)編譯選項(xiàng)。在將此選項(xiàng)顯式地設(shè)為 YES 的情況下,在預(yù)編譯 32 位 DB2 實(shí)例中的應(yīng)用程序時(shí),DB2 的預(yù)編譯器一碰到類型為 long 的宿主變量就會(huì)返回一個(gè)錯(cuò)誤。 使用 LONGERROR 選項(xiàng)預(yù)編譯 32 位 DB2 實(shí)例中的應(yīng)用程序代碼是確保應(yīng)用程序代碼可以在 64 位 DB2 實(shí)例中成功運(yùn)行的一種好方法。下面的步驟列出了如何做到這一點(diǎn):
在構(gòu)建 32 位還是 64 位應(yīng)用程序或例程之間作出選擇 您應(yīng)該將應(yīng)用程序和例程構(gòu)建為 32 位還是 64 位的對象呢?對于 Java 和 COBOL 以外的大多數(shù)編程語言,如果您知道應(yīng)用程序或外部例程將被部署到 64 位的平臺(tái),并且將在 64 位 DB2 實(shí)例中運(yùn)行,那么肯定應(yīng)該編譯它們的 64 位的版本。如果關(guān)心可移植性,那么應(yīng)該選擇 32 位,以簡化開發(fā)和測試。如果有一組數(shù)量很多的應(yīng)用程序和例程,那么可能需要概況出它們的執(zhí)行時(shí)間,并將最常用的應(yīng)用程序和例程編譯成本地的 64 位代碼。 對于 Java 應(yīng)用程序和例程,情況要復(fù)雜一點(diǎn),因?yàn)樵诒疚陌l(fā)表之際,IBM 還沒有發(fā)布 64 位的 Java 虛擬機(jī)。然而,讓 32 位 DB2 應(yīng)用程序和例程在帶有 IBM 的 Java 1.4-level 32 位 JVM 的 64 位 DB2 實(shí)例仍是可能的。注意,所有 32 位 Java 與 DB2 數(shù)據(jù)庫的通信都限于使用 Type 1 或 Type 2 JDBC 驅(qū)動(dòng)程序。 至于 COBOL,DB2 只支持在所有受支持的 32 位操作系統(tǒng)上和除 Linux IA 64 位 和 Linux zSeries 以外的所有受支持的 64 位操作系統(tǒng)平臺(tái)上運(yùn)行 32 位 COBOL 應(yīng)用程序。 通常,應(yīng)盡可能為 32 位 DB2 實(shí)例構(gòu)建 32 位的應(yīng)用程序,而為 64 位 DB2 實(shí)例構(gòu)建 64 位的應(yīng)用程序,只有在這種支持不存在的情況下才可以例外。下一節(jié)將談?wù)撊绾巫?32 位應(yīng)用程序在 64 位 DB2 實(shí)例中運(yùn)行。 構(gòu)建支持跨平臺(tái)(32 位/ 64 位)部署的應(yīng)用程序 為了減少應(yīng)用程序運(yùn)行時(shí)問題出現(xiàn)的可能性,應(yīng)該在應(yīng)用程序?qū)硭诘钠脚_(tái)上構(gòu)建和測試應(yīng)用程序代碼。如果這一點(diǎn)不合實(shí)際,例如沒有所需的編譯器,那么可以在一個(gè)平臺(tái)上構(gòu)建應(yīng)用程序,而將應(yīng)用程序部署到它們將來運(yùn)行時(shí)所在的平臺(tái)上,但是在鏈接應(yīng)用程序和指定運(yùn)行時(shí)庫路徑時(shí),應(yīng)特別小心。 為了使功能正常,32 位 DB2 應(yīng)用程序必須鏈接到一套 32 位的 DB2 庫,而 64 位 DB2 應(yīng)用程序必須鏈接到一套 64 位的 DB2 庫。這些庫的特定于 32 位或 64 位的版本,可以在下面的默認(rèn)目錄路徑中找到,它們因平臺(tái)而異:
其中 $INSTHOME 是 DB2 實(shí)例所有者的主目錄。 默認(rèn)情況下,在 32 位 DB2 實(shí)例中,該目錄包含 32 位版本的 DB2 庫,在 64 位 DB2 實(shí)例中,該目錄包含 64 位版本的相同的庫。您也可以在 64 位 DB2 實(shí)例中訪問 32 位版本的庫,而在 32 位 DB2 實(shí)例中訪問 64 位版本的庫,以執(zhí)行跨平臺(tái)開發(fā)。32 位和 64 位 DB2 庫放在下面的目錄中: 表 7: 32 位和 64 位應(yīng)用程序中 C 和 C++ 數(shù)據(jù)類型表示所需的位數(shù)
注意: $INSTHOME 是 DB2 實(shí)例所有者的主目錄。 您必須在編譯/鏈接時(shí)將應(yīng)用程序鏈接到適當(dāng)?shù)囊唤M DB2 庫。而且還必須確保在編譯/鏈接時(shí),所鏈接到的庫在應(yīng)用程序運(yùn)行時(shí)是可用的。您可以依賴于可用的默認(rèn)庫路徑,或者顯式地指定要使用的運(yùn)行時(shí)庫路徑。下面的步驟列出了在不同場景中應(yīng)該如何編譯和鏈接應(yīng)用程序: 構(gòu)建要部署到 32 或 64 位 DB2 實(shí)例中的 32 位和 64 位應(yīng)用程序的步驟
使用絕對路徑指定應(yīng)用程序運(yùn)行時(shí)庫路徑 當(dāng)把應(yīng)用程序從源計(jì)算機(jī)部署到另一臺(tái)目標(biāo)計(jì)算機(jī)時(shí),考慮目標(biāo)計(jì)算機(jī)上運(yùn)行時(shí)庫路徑的規(guī)范很重要,因?yàn)樵谠从?jì)算機(jī)上鏈接庫時(shí)所使用的所有相對路徑在目標(biāo)計(jì)算機(jī)上都可能是無效的。因此,在鏈接應(yīng)用程序時(shí),或者在運(yùn)行應(yīng)用程序之前,通過一個(gè)附加的鏈接器選項(xiàng)使用絕對路徑來指定運(yùn)行時(shí)庫路徑常常很有用 —— 大多數(shù)編譯器都提供了對該選項(xiàng)的支持。 下面的例子研究了用來指定運(yùn)行時(shí)庫路徑的一些選項(xiàng): 例 1: 將應(yīng)用程序部署到不同計(jì)算機(jī)上的相似的(32 位 / 64 位)實(shí)例中。 Joe 在他的 DB2 開發(fā)計(jì)算機(jī)上的一個(gè) 32 位 DB2 實(shí)例中,使用默認(rèn)的 DB2 庫路徑構(gòu)建了一個(gè) 32 位應(yīng)用程序。Joe 想將這個(gè)應(yīng)用程序部署到另一臺(tái)計(jì)算機(jī)(他的生產(chǎn)計(jì)算機(jī))上的一個(gè) 32 位的生產(chǎn)實(shí)例中。在這臺(tái)部署計(jì)算機(jī)上,Joe 的本地 DB2 實(shí)例名是
Joe 的生產(chǎn)計(jì)算機(jī)有一個(gè)具有相同名稱的 DB2 實(shí)例;然而,在這臺(tái)計(jì)算機(jī)上 Joe 的主目錄不同:
Joe 在鏈接時(shí)指定了一個(gè)運(yùn)行時(shí)庫路徑,它包括相對路徑值:
當(dāng) Joe 試圖在生產(chǎn)計(jì)算機(jī)上運(yùn)行該應(yīng)用程序時(shí),由于裝載器錯(cuò)誤,運(yùn)行將遭到失敗,因?yàn)樯a(chǎn)計(jì)算機(jī)上的 解決這一問題的一種方法是在運(yùn)行時(shí)裝載路徑中不使用
只要生產(chǎn)環(huán)境中的 DB2 的版本和開發(fā)環(huán)境中 DB2 的版本相同(相同的版本和修復(fù)包),并且開發(fā)平臺(tái)和生產(chǎn)平臺(tái)都同時(shí)是 32 位或 64 位,那么這項(xiàng)技術(shù)就是有效的。 例 2:將應(yīng)用程序從同一臺(tái)計(jì)算機(jī)上的 32 位實(shí)例部署到 64 位實(shí)例 Azuma 在一個(gè) 32 位 AIX DB2 實(shí)例中開發(fā)了一個(gè)應(yīng)用程序。當(dāng) Azuma 構(gòu)建最近的應(yīng)用程序時(shí),他用下面的鏈接器選項(xiàng)指定了一個(gè)運(yùn)行時(shí)庫路徑:
如果 Azuma 將他的實(shí)例更新為 64 位 DB2 實(shí)例,而保持所有其他目錄路徑不變,然后他嘗試運(yùn)行應(yīng)用程序,結(jié)果由于裝載器錯(cuò)誤,導(dǎo)致應(yīng)用程序不能運(yùn)行,因?yàn)樗溄討?yīng)用程序時(shí)使用的運(yùn)行時(shí)庫路徑現(xiàn)在被鏈接到 為了避免發(fā)生這種情況,Azuma 應(yīng)該顯式地將他的應(yīng)用程序鏈接到
如果在 32 位實(shí)例上開發(fā) 32 位應(yīng)用程序,并預(yù)測到可能要更新到 64 位 DB2 實(shí)例,或者不得不將應(yīng)用程序部署到帶有相同版本 DB2 的 64 位 DB2 安裝的計(jì)算機(jī)上,那么這樣指定庫裝載路徑是一種很好的選擇,因?yàn)榘惭b路徑是一樣的。 但是,如果您合理地預(yù)測到要周期性地更新到將來版本的 DB2,那么這樣指定庫路徑就不是很好。新版本的 DB2 和 DB2 修復(fù)包可能有不同的安裝路徑。如果 DB2 安裝路徑發(fā)生了變化,那么與基于 DB2 安裝路徑指定的運(yùn)行時(shí)庫路徑鏈接的應(yīng)用程序?qū)o法再運(yùn)行。 例 3:將應(yīng)用程序從不同計(jì)算機(jī)上的 32 位實(shí)例部署到 64 位實(shí)例 例 2 中描述的技術(shù)也適用于將應(yīng)用程序從不同計(jì)算機(jī)上的 32 位實(shí)例部署到 64 位實(shí)例,前提是這兩臺(tái)計(jì)算機(jī)都安裝了相同版本的 DB2,并運(yùn)行相同的操作系統(tǒng)。 您可以看到,您計(jì)劃執(zhí)行的部署類型將影響到應(yīng)該如何在鏈接時(shí)為應(yīng)用程序指定運(yùn)行時(shí)庫路徑。只要開發(fā)環(huán)境和生產(chǎn)環(huán)境中 DB2 的版本是一樣的,使用絕對路徑來指定運(yùn)行時(shí)庫路徑可以簡化部署。 使 32 位應(yīng)用程序可以在 64 位環(huán)境中運(yùn)行 如果您將數(shù)據(jù)庫客戶機(jī)或服務(wù)器更新到 64 位的平臺(tái),并希望將已有的經(jīng)過編譯和鏈接的應(yīng)用程序移植到新的 DB2 實(shí)例中,那么根據(jù)平臺(tái)的不同,您可能需要在新 DB2 實(shí)例中重新構(gòu)建應(yīng)用程序,或者重新綁定應(yīng)用程序并覆蓋以前指定的運(yùn)行時(shí)庫路徑。前面我們已討論過,這樣做的原因是,在 64 位 DB2 實(shí)例中默認(rèn)的 DB2 庫路徑可能不包含鏈接應(yīng)用程序時(shí)和運(yùn)行時(shí)所使用的運(yùn)行時(shí)庫。 在部署應(yīng)用程序之前,在一個(gè)模擬生產(chǎn)環(huán)境的測試環(huán)境中重新構(gòu)建和編譯應(yīng)用程序仍然是最佳選擇,但是如果時(shí)間限制或者不能訪問原始應(yīng)用程序源代碼等原因阻礙了我們這么做,那么可以使用下面描述的技術(shù)。 將 Windows 32 位應(yīng)用程序部署到 Windows IA 64 位平臺(tái) 幸運(yùn)的是,Windows 32 位客戶機(jī)應(yīng)用程序和例程可以在 Windows IA 64 位服務(wù)器上運(yùn)行,而不需要對 64 位環(huán)境作任何更改。為了使這些應(yīng)用程序可以運(yùn)行,不需要重新構(gòu)建應(yīng)用程序來覆蓋運(yùn)行時(shí)庫路徑。然而,32 位 Windows 應(yīng)用程序在 Windows IA 64 平臺(tái)上的性能不是很好,所以,如果性能比較重要,那么強(qiáng)烈建議您將應(yīng)用程序重新構(gòu)建為 64 位 Windows 應(yīng)用程序。 將 UNIX 32 位應(yīng)用程序部署到 UNIX 64 位平臺(tái) 除了 Linux IA 64 位、Linux PPC 64 位和 Linux zSeries 之外,所有受支持的 64 位版本的 DB2 都支持已有 32 位客戶機(jī)應(yīng)用程序的移植。為了在這些平臺(tái)上移植 32 位客戶機(jī)應(yīng)用程序,必須重新綁定應(yīng)用程序,并在正確地設(shè)置了庫路徑的情況下運(yùn)行應(yīng)用程序。 在 HP-UX 上,如果應(yīng)用程序一開始是以 +s 選項(xiàng)鏈接的,那么只能移植 32 位客戶機(jī)應(yīng)用程序。如果一開始應(yīng)用程序不是以 +s 選項(xiàng)鏈接,那么必須用 +s 編譯器選項(xiàng)重新構(gòu)建應(yīng)用程序,或者用嵌入式運(yùn)行時(shí)路徑設(shè)置重新構(gòu)建應(yīng)用程序,以包括 32 位 DB2 庫(參見下面內(nèi)容)。 在 UNIX 上,64 位環(huán)境中用于 32 位 DB2 應(yīng)用程序的正確的庫路徑是 INSTHOME/sqllib/lib32,其中 INSTHOME 是 Version 8 實(shí)例所有者的主目錄;然而,如果您讓 64 位應(yīng)用程序也在這種環(huán)境中運(yùn)行(或者打算這么做),那么不應(yīng)該將 LIBPATH 環(huán)境變量的默認(rèn)設(shè)置從 INSTHOME/sqllib/lib64 改為 INSTHOME/sqllib/lib32,因?yàn)樾碌脑O(shè)置將影響 DB2 實(shí)例中所有的應(yīng)用程序(32 位和 64 位)。 所以,32 位和 64 位應(yīng)用程序都應(yīng)該各自引用適當(dāng)?shù)?DB2 庫目錄,您可以創(chuàng)建一個(gè)包裝器腳本來運(yùn)行應(yīng)用程序,在運(yùn)行應(yīng)用程序之前讓這個(gè)腳本來設(shè)置運(yùn)行時(shí)庫路徑(或者任何其他必需的環(huán)境變量),在運(yùn)行之后再重置這些設(shè)置。下面是一個(gè)可以使用的包裝器腳本的例子:
其中 表 7: 32 位和 64 位應(yīng)用程序中 C 和 C++ 數(shù)據(jù)類型表示所需的位數(shù)
注意:如果應(yīng)用程序是以 +s 選項(xiàng)鏈接的,則該包裝器只能在 HP-UX 上運(yùn)行。 您可以通過在命令行中輸入包裝器腳本名稱,后面跟上可執(zhí)行文件名來運(yùn)行這個(gè)包裝器程序:
如果包裝器腳本的庫路徑與被調(diào)用的可執(zhí)行文件不兼容,那么對于調(diào)用其他可執(zhí)行文件(例如帶有 C 系統(tǒng)調(diào)用)的應(yīng)用程序來說,在包裝器內(nèi)更改環(huán)境變量是不可行的。為了移植這些應(yīng)用程序,必須重新鏈接目標(biāo)文件,然后重新構(gòu)建應(yīng)用程序。 通常,應(yīng)該用運(yùn)行時(shí)庫路徑 lib32 來鏈接目標(biāo)文件,而不是用平臺(tái)上的環(huán)境變量。示例程序的 C、C++ 和 CLI 構(gòu)建腳本使用適當(dāng)?shù)倪\(yùn)行時(shí)路徑來允許將新的應(yīng)用程序輕松地移植到 64 位平臺(tái)上去。 應(yīng)該使用相同的鏈接選項(xiàng)來鏈接 64 位平臺(tái)上已有 32 位應(yīng)用程序的目標(biāo)文件(請從下面查看示例中構(gòu)建腳本的相關(guān)鏈接)。下面的標(biāo)記可用于將 32 位 db2 庫包括到運(yùn)行時(shí)庫路徑中:
對于 AIX,可以使用 注意: 這些命令都假設(shè)使用編譯器進(jìn)行鏈接,而不是使用
要了解更多關(guān)于何時(shí)以及如何創(chuàng)建特定于平臺(tái)的、可用于設(shè)置運(yùn)行時(shí)庫路徑的腳本的信息,請參閱下面的主題:
DB2 對跨平臺(tái)開發(fā)的支持使您可以靈活地開發(fā)數(shù)據(jù)庫應(yīng)用程序,將它們部署到不同的平臺(tái)上。本文提供了關(guān)于 DB2 32 位和 64 位應(yīng)用程序和例程支持的信息,并展示了開發(fā)和構(gòu)建應(yīng)用程序時(shí)考慮數(shù)據(jù)庫向不同平臺(tái)的移植、同時(shí)使應(yīng)用程序更易于部署的重要性。 本文應(yīng)該有助于您:
通常,您應(yīng)該為開發(fā)和部署應(yīng)用程序采取單一的策略,以減少對一些特殊情形的管理,從而可以節(jié)省不少時(shí)間,減少了一些挫折。在開發(fā)跨平臺(tái)部署的應(yīng)用程序的過程當(dāng)中,真正的教訓(xùn)就是“想在前頭”。在應(yīng)用程序開發(fā)時(shí),一點(diǎn)點(diǎn)的計(jì)劃就可以令應(yīng)用程序的部署順利完成,換來無比的快樂。
感謝 Peeter Joot、Ryan Mayor、Ronald Trueblood 和 Dan Behman,他們?yōu)槲姨峁┝藢氋F的信息,并抽時(shí)間審校了本文。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|