應用程式開發:設計用戶端應用程式

| | |

DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡

|

使用 DB2 Universal JDBC Driver 類型 4 連線功能存取 DB2 UDB for z/OS(R) 伺服器的 Java 應用程式,可以利用其連線集中器及 Sysplex 工作量平衡函數。

|

這些函數類似於 DB2 Connect 的連線集中器及 Sysplex 工作量平衡函數。

|

DB2 Universal JDBC Driver 連線集中器可以減少 DB2 UDB for z/OS 資料庫伺服器支援大量用戶端應用程式所需的資源,因為它可讓許多連線物件使用相同的實體連線,因而減少資料庫伺服器的實體連線總數。

|

DB2 Universal JDBC Driver Sysplex 工作量平衡可以增進資料共用群組的可用性, |因為驅動程式會取得有關資料共用群組的成員的經常狀態資訊。 |驅動程式會使用這個資訊,判定下一個交易應該遞送到哪一個資料共用成員。 |利用 Sysplex 工作量平衡,DB2 UDB for z/OS 伺服器及 Workload Manager for z/OS |(WLM) 可確保工作有效地分佈在資料共用群組的成員之間,以及確保如果有一個成員失敗, |工作將傳送給資料共用群組的另一個成員。

|

DB2 Universal JDBC Driver 使用傳輸物件及廣域傳輸物件儲存區,支援連線集中器及 Sysplex 工作量平衡。 |資料庫伺服器的每一個實體連線都有一個傳輸物件。 |當啟用連線集中器及 Sysplex 工作量平衡時, |您可以藉由設定最大的傳輸物件數目,來設定資料庫伺服器在任何時間點的最大實體連線數目。

|

在驅動程式層次中,您可以使用 DB2 Universal JDBC Driver 配置內容,對傳輸物件數目設定限制。

|

在連線層次中,您可以啟用及停用 DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡, |並使用 DataSource 內容對傳輸物件數目設定限制。

|

您可以利用下列任一方式,監督廣域傳輸物件儲存區: |

| | |

驅動程式連線集中器及 Sysplex 工作量平衡的 DB2 Universal JDBC Driver 配置內容

|

下列每一個配置內容都是用於連線集中器及 Sysplex 工作量平衡

|
| |
db2.jcc.dumpPool
|
除了寫入的摘要統計資料之外,指定要對廣域傳輸儲存區事件寫入的統計資料類型。 |廣域傳輸儲存區會用於連線集中器及 Sysplex 工作量平衡。 | |

db2.jcc.dumpPool 的資料類型是整數 (int.)。在寫入任何統計資料之前, |也須設定 db2.jcc.dumpPoolStatisticsOnSchedule 及 db2.jcc.dumpPoolStatisticsOnScheduleFile 配置內容,才能寫入統計資料。

| |

您可以利用 db2.jcc.dumpPool 內容,指定下列一或多種類型的統計資料: |

| | |

若要追蹤多種類型的事件,請新增代表您要追蹤的事件類型的值。 |例如,假設您要追蹤 DUMP_GET_OBJECT 及 DUMP_CREATE_OBJECT 事件。 |這些值的數字對等項目是 2 與 16,所以指定 18 作為 db2.jcc.dumpPool 值。

| |

預設值是 0,表示只寫入廣域傳輸儲存區的摘要統計資料。

|
|| |
db2.jcc.dumpPoolStatisticsOnSchedule
|
指定廣域傳輸儲存區統計資料多久寫入檔案一次 (以秒為單位),這個檔案是由 db2.jcc.dumpPoolStatisticsOnScheduleFile 配置內容所指定。 |廣域傳輸儲存區是用於連線集中器及 Sysplex 工作量平衡。 | |

預設值是 -1,表示不寫入廣域傳輸儲存區統計資料。

|
|| |
db2.jcc.dumpPoolStatisticsOnScheduleFile
|
指定廣域傳輸儲存區統計資料要寫入的檔案名稱。 |廣域傳輸儲存區是用於連線集中器及 Sysplex 工作量平衡。 | |

如果未指定 db2.jcc.dumpPoolStatisticsOnScheduleFile 配置內容, |不會寫入廣域傳輸儲存區統計資料。

|
|| |
db2.jcc.maxTransportObjectIdleTime
|
指定未使用的傳輸物件在可以從儲存區刪除之前, |留在廣域傳輸物件儲存區的時間量 (以秒為單位)。 |傳輸物件是用於連線集中器及 Sysplex 工作量平衡。 | |

db2.jcc.maxTransportObjectIdleTime 配置內容的預設值是 60。 |將 db2.jcc.maxTransportObjectIdleTime 設為小於 0 的值, |將導致未使用的傳輸物件立即從儲存區刪除。 |建議這個動作,因為它可能導致嚴重效能退化。

|
|| |
db2.jcc.maxTransportObjectWaitTime
|
指定如果已達到 db2.jcc.maxTransportObjects 值, |應用程式將等待傳輸物件的最大時間量 (以秒為單位)。 |傳輸物件是用於連線集中器及 Sysplex 工作量平衡。 |當應用程式等待的時間超過 db2.jcc.maxTransportObjectWaitTime 值時, |廣域傳輸物件儲存區會擲出 SQLException。 | |

db2.jcc.maxTransportObjectWaitTime 配置內容的預設值是 -1。 |任何負值都表示應用程式永久等待。

|
|| |
db2.jcc.maxTransportObjects
|
指定對於連線集中器及 Sysplex 工作量平衡,廣域傳輸物件儲存區中的傳輸物件數目的上限。 |當儲存區中的傳輸物件數目達到 db2.jcc.maxTransportObjects 值時, |未使用的時間超過 db2.jcc.maxTransportObjectIdleTime 值的傳輸物件將從儲存區刪除。 | |

db2.jcc.maxTransportObjects 配置內容的預設值是 -1, |表示廣域傳輸物件儲存區中沒有傳輸物件數目的限制。

|
|| |
db2.jcc.minTransportObjects
|
指定對於連線集中器及 Sysplex 工作量平衡,廣域傳輸物件儲存區中的傳輸物件數目的下限。 |當建立 JVM 時,儲存區中沒有任何傳輸物件。 |傳輸物件會在它們需要時新增到儲存區。在達到 db2.jcc.minTransportObjects 值之後, |廣域傳輸物件儲存區中的傳輸物件數目在 JVM 的生命週期內永遠不會低於 db2.jcc.minTransportObjects 值。 | |

db2.jcc.minTransportObjects 的預設值是 0。任何小於或等於 0 的值表示廣域傳輸物件儲存區可能變成空白。

|
| |
| |

連線集中器及 Sysplex 工作量平衡的 DB2 Universal JDBC Driver DataSource 內容

|

下列每一個 DB2 Universal JDBC Driver DataSource 內容都是用於連線集中器及 Sysplex 工作量平衡

|
| |
enableConnectionConcentrator
|
指出是否啟用 DB2 Universal JDBC Driver 的連線集中器函數。 |連線集中器函數只能用於 DB2 UDB for z/OS 伺服器的連線。 | |

enableConnectionConcentrator 內容的資料類型是 Boolean。 |預設值是 false。不過,如果 enableSysplexWLB |設為 true,則預設值是 true

|
|| |
enableSysplexWLB
|
指出是否啟用 DB2 Universal JDBC Driver 的 Sysplex 工作量平衡函數。 |Sysplex 工作量平衡函數只能用於 DB2 UDB for z/OS 伺服器的連線。 | |

enableSysplexWLB 內容的資料類型是 Boolean。 |預設值是 false。不過,如果 enableSysplexWLB |設為 true,則依預設,enableConnectionConcentrator 會設為 true。

|
|| |
maxTransportObjects
|
指定對於與相關聯的 DataSource 物件的所有連線, |最多可以使用多少個傳輸物件。傳輸物件是用於連線集中器及 Sysplex 工作量平衡。如果 |enableConnectionConcentrator 或 enableSysplexWLB 內容未設為啟用連線集中器或 Sysplex 工作量平衡, |將忽略 maxTransportObjects 值。 | |

這個內容的資料類型是整數 (int.)。

| |

如果未達到 maxTransportObjects 值,且無法在廣域傳輸物件儲存區中取得傳輸物件, |儲存區將建立新的傳輸物件。如果達到了 maxTransportObjects 值, |應用程式將等待 db2.jcc.maxTransportObjectWaitTime 配置內容所指定的時間量。 |在經歷了該時間量之後,如果儲存區中仍然沒有可用的傳輸物件, |儲存區將擲出 SQLException。

| |

maxTransportObjects 內容會置換 db2.jcc.maxTransportObjects |配置內容。maxTransportObjects 內容對來自其它 DataSource 物件的連線沒有作用。 |如果 maxTransportObjects 值大於 db2.jcc.maxTransportObjects 值, |則 maxTransportObjects 不會增加 db2.jcc.maxTransportObjects 值。

| |

maxTransportObjects 內容的預設值是 -1, |表示 DataSource 的傳輸物件數目只受到驅動程式的 |db2.jcc.maxTransportObjects 值的限制。

|
| |
| |

在 WebSphere Application Server 中啟用 DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡函數的範例

|

下列程序是利用 WebSphere(R) Application Server 啟用 DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡函數的範例。

|
|先決條件 |

伺服器需求: |

| |

用戶端需求: |

|
|
|程序 |

若要利用 WebSphere Application Server 啟用 DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡函數:

|
    |
  1. 在 z/OS 上的命令行處理器,或在 UNIX 上的「系統服務」,發出下列命令, |驗證 DB2 Universal JDBC Driver 是否位於支援連線集中器及 Sysplex 工作量平衡函數的正確層次: | |
    java com.ibm.db2.jcc.DB2Jcc -version
    |在輸出中尋找如下的一行: | |
    [ibm][db2][jcc] Driver: IBM DB2 JDBC Universal Driver Architecture n n
    |n 應該是 2.7 或更新版本。
  2. |
  3. 設定 DB2 Universal JDBC Driver 配置內容,為在驅動程式下建立的所有 DataSource 實例, |啟用連線集中器或 Sysplex 工作量平衡。 | |

    在 DB2JccConfiguration.properties 檔案中設定配置內容。 |

    |
      |
    1. 建立 DB2JccConfiguration.properties 檔案或編輯現存的 |DB2JccConfiguration.properties 檔案。
    2. |
    3. 設定下列配置內容: | |
        |
      • db2.jcc.minTransportObjects
      • |
      • db2.jcc.maxTransportObjects
      • |
      • db2.jcc.maxTransportObjectWaitTime
      • |
      • db2.jcc.dumpPool
      • |
      • db2.jcc.dumpPoolStatisticsOnScheduleFile
      |從如下的設定開始: | |
      db2.jcc.minTransportObjects=0
      |db2.jcc.maxTransportObjects=1500
      |db2.jcc.maxTransportObjectWaitTime=-1
      |db2.jcc.dumpPool=0
      |db2.jcc.dumpPoolStatisticsOnScheduleFile=
      |  /home/WAS/logs/srv1/poolstats
      
    4. |
    5. 將 DB2JccConfiguration.properties 的目錄路徑新增到 WebSphere Application Server DB2 Universal JDBC Driver 類別路徑。
  4. |
  5. 設定 DB2 Universal JDBC Driver 資料來源內容,以啟用連線集中器或 Sysplex 工作量平衡函數。 | |

    在 WebSphere Application Server 管理主控台中, |為應用程式用來連接到資料庫伺服器的資料來源設定下列內容:

    | |
      |
    • enableSysplexWLB
    • |
    • enableConnectionConcentrator
    • |
    • maxTransportObjects
    |假設您想要連線集中器函數以及 Sysplex 工作量平衡函數。 |從如下的設定開始: | ||||||||||||||||||||||
    表 26. DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡函數的資料來源內容設定的範例
    內容 設定
    enableSysplexWLB true1
    maxTransportObjects 100
    | |
    註:
    |
      |
    1. 依預設,enableConnectionConcentrator 內容會設為 true, |因為 enableSysplexWLB 內容設為 true。
    2. |
  6. |
  7. 重新啟動 WebSphere Application Server。
| |

監督 DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡函數的方法

|

若要監督 DB2 Universal JDBC Driver 連線集中器及 Sysplex 工作量平衡函數, |您需要監督廣域傳輸物件儲存區。您可以利用下列任一方式,監督廣域傳輸物件儲存區: |

| | |
監督廣域傳輸物件儲存區的配置內容
|

db2.jcc.dumpPool、db2.jcc.dumpPoolStatisticsOnSchedule 及 db2.jcc.dumpPoolStatisticsOnScheduleFile |配置內容可控制廣域傳輸物件儲存區的追蹤。

|

例如,下列一組配置內容設定會導致 Sysplex 錯誤訊息及傾出儲存區錯誤訊息每隔 60 秒寫入名為 /home/WAS/logs/srv1/poolstats 的檔案: |

|
db2.jcc.dumpPool=DUMP_SYSPLEX_MSG|DUMP_POOL_ERROR
|db2.jcc.dumpPoolStatisticsOnSchedule=60
|db2.jcc.dumpPoolStatisticsOnScheduleFile=/home/WAS/logs/srv1/poolstats
|

儲存區統計資料檔案中的項目看起來像這樣: |

|
time Scheduled PoolStatistics npr:2575 nsr:2575 lwroc:439 
|hwroc:1764 coc:372 aooc:362 rmoc:362 nbr:2872 tbt:857520 tpo:10

|欄位的意義如下:

|
|
npr
|
自從建立儲存區後,DB2 Universal JDBC Driver 已對儲存區提出的要求總數。 |
|
nsr
|
自從建立儲存區後,DB2 Universal JDBC Driver 已對儲存區提出的成功要求數目。成功要求表示儲存區傳回了物件。 |
|
lwroc
|
已重覆使用但不在儲存區的物件數目。如果連線物件在交易界限釋放傳輸物件, |就可能會發生這種情況。如果連線物件稍後需要傳輸物件, |而且任何其它連線物件未使用原始傳輸物件,則連線物件可以使用該傳輸物件。 |
|
hwroc
|
已從儲存區重覆使用的物件數目。 |
|
coc
|
自從建立儲存區後,DB2 Universal JDBC Driver 已建立的物件數目。 |
|
aooc
|
超出 db2.jcc.maxTransportObjectIdleTime 配置內容所指定的閒置時間,而從儲存區刪除的物件數目。 |
|
rmoc
|
自從建立儲存區後,已從儲存區刪除的物件數目。 |
|
nbr
|
DB2 Universal JDBC Driver 已向儲存區提出,但因為儲存區已達到其最大容量而遭儲存區封鎖的要求數目。 |在超出 db2.jcc.maxTransportObjectWaitTime 配置值並擲出異常狀況之前, |如果物件傳回到儲存區,則遭封鎖的要求可能會成功。 |
|
tbt
|
已被儲存區封鎖的要求的時間總數 (以毫秒為單位)。 |如果應用程式使用多個執行緒,則這個時間可能遠大於應用程式的執行經歷時間。 |
|
tpo
|
目前位於儲存區的物件數目。 |
|
| |
監督廣域傳輸物件儲存區的應用程式設計介面
|

您可以撰寫應用程式,來收集有關廣域傳輸物件儲存區的統計資料。 |那些應用程式會以 DB2PoolMonitor 類別建立物件,並呼叫方法來擷取儲存區的相關資訊。

|

例如,下列程式碼建立用於監督廣域傳輸物件儲存區的物件: |

|
import com.ibm.db2.jcc.DB2PoolMonitor;
|DB2PoolMonitor transportObjectPoolMonitor =  
|	DB2PoolMonitor.getPoolMonitor (DB2PoolMonitor.TRANSPORT_OBJECT);
|

在建立 DB2PoolMonitor 物件之後,您可以使用下列方法,監督廣域傳輸物件儲存區。

|
|
getMonitorVersion
|
格式: | |
public int getMonitorVersion()
| |

擷取 DB2 Universal JDBC Driver 隨附的 DB2PoolMonitor 類別的版本。

|
|
totalRequestsToPool
|
格式: | |
public int totalRequestsToPool()
| |

擷取自從建立儲存區後,DB2 Universal JDBC Driver 已對儲存區提出的要求總數。

|
|
successfullRequestsFromPool
|
格式: | |
public int successfullRequestsFromPool()
| |

擷取自從建立儲存區後,DB2 Universal JDBC Driver 已對儲存區提出的成功要求數目。成功要求表示儲存區傳回了物件。

|
|
numberOfRequestsBlocked
|
格式: | |
public int numberOfRequestsBlocked()
| |

擷取 DB2 Universal JDBC Driver 已向儲存區提出,但因為儲存區已達到其最大容量而遭儲存區封鎖的要求數目。 |在超出 db2.jcc.maxTransportObjectWaitTime 配置值並擲出異常狀況之前, |如果物件傳回到儲存區,則遭封鎖的要求可能會成功。

|
|
totalTimeBlocked
|
格式: | |
public long totalTimeBlocked()
| |

擷取已被儲存區封鎖的要求的時間總數 (以毫秒為單位)。 |如果應用程式使用多個執行緒,則這個時間可能遠大於應用程式的執行經歷時間。

|
|
lightWeightReusedObjectCount
|
格式: | |
public int lightWeightReusedObjectCount()
| |

擷取已重覆使用但不在儲存區的物件數目。如果連線物件在交易界限釋放傳輸物件, |就可能會發生這種情況。如果連線物件稍後需要傳輸物件, |而且任何其它連線物件未使用原始傳輸物件,則連線物件可以使用該傳輸物件。

|
|
heavyWeightReusedObjectCount
|
格式: | |
public int heavyWeightReusedObjectCount()
| |

擷取已從儲存區重覆使用的物件數目。

|
|
createdObjectCount
|
格式: | |
public int createdObjectCount()
| |

擷取自從建立儲存區後,DB2 Universal JDBC Driver 已建立的物件數目。

|
|
agedOutObjectCount
|
格式: | |
public int agedOutObjectCount()
| |

擷取超出 db2.jcc.maxTransportObjectIdleTime 配置內容所指定的閒置時間,而從儲存區刪除的物件數目。

|
|
removedObjectCount
|
格式: | |
public int removedObjectCount()
| |

擷取自從建立儲存區後,已從儲存區刪除的物件數目。

|
|
totalPoolObjects
|
格式: | |
public int totalPoolObjects()
| |

目前位於儲存區的物件數目。

|
|

OleDbReportIsLongForLongTypes CLI/ODBC 配置關鍵字

下列資料庫伺服器支援 OleDbReportIsLongForLongTypes 關鍵字:

關鍵字說明:
利用 DBCOLUMNFLAGS_ISLONG 使 OLE DB 旗標成為 LONG 資料類型。
db2cli.ini 關鍵字語法:
OleDbReportIsLongForLongTypes = 0 | 1
相等的陳述式屬性:
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
預設值:
LONG 類型 (LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 及 LONG VARGRAPHIC FOR BIT DATA) 沒有 DBCOLUMNFLAGS_ISLONG 旗標集, 這可能導致 WHERE 子句中使用直欄。
用法附註:
 

OLE DB 的用戶端游標引擎及 OLE DB .NET Data Provider 的 CommandBuilder 產生更新,並刪除以 IBM(R) DB2(R) OLE DB Provider 提供的直欄資訊為基礎的陳述式。如果所產生的陳述式在 WHERE 子句中包含 LONG 類型, 則陳述式將失敗,因為無法在具有等號運算子的搜尋中使用 LONG 類型。 將關鍵字 OleDbReportIsLongForLongTypes 設為 1,將使得 IBM DB2 OLE DB Provider 報告成為 DBCOLUMNFLAGS_ISLONG 旗標集的 LONG 類型 (LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 及 LONG VARGRAPHIC FOR BIT DATA)。 這將防止在 WHERE 子句中使用長直欄。

OleDbSQLColumnsSortByOrdinal CLI/ODBC 配置關鍵字

下列資料庫伺服器支援 OleDbSQLColumnsSortByOrdinal 關鍵字:

關鍵字說明:
使得 OLE DB 的 IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 傳回 ORDINAL_POSITION 直欄排序的橫列集。
db2cli.ini 關鍵字語法:
OleDbSQLColumnsSortByOrdinal = 0 | 1
相等的陳述式屬性:
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
預設值:
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 傳回直欄 TABLE_CATALOG、 TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME 所排序的橫列集。
用法附註:
 

Microsoft(R) OLE DB 規格需要 IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 傳回直欄 TABLE_CATALOG、 TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME 所排序的橫列集。 IBM DB2 OLE DB Provider 符合規格。然而, 使用 Microsoft ODBC Bridge 提供者 (MSDASQL) 的應用程式通常已編寫為取得 ORDINAL_POSITION 所排序的橫列集。 將 OleDbSQLColumnsSortByOrdinal 關鍵字設為 1 將使得提供者傳回 ORDINAL_POSITION 所排序的橫列集。

IBM DB2 OLE DB Provider 的 DB2 資料來源內容群組

IBM DB2 OLE DB Provider 已新增新的內容群組:「DB2 資料來源」。 「DB2 資料來源」的內容集是 DBPROPSET_DB2DATASOURCE。

內容集的 GUID 是 {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

DBPROPSET_DB2DATASOURCE 具有三個內容:

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Property group: DB2 Data Source
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Report IsLong for Long Types

OLE DB 的用戶端游標引擎及 OLE DB .NET Data Provider 的 CommandBuilder 產生更新,並刪除以 IBM DB2 OLE DB Provider 提供的直欄資訊為基礎的陳述式。如果所產生的陳述式在 WHERE 子句中包含 LONG 類型, 則陳述式將失敗,因為無法在具有等號運算子的搜尋中使用 LONG 類型。

表 27. DB2PROP_REPORTISLONGFORLONGTYPES 值
意義
VARIANT_TRUE 將使得 IBM DB2 OLE DB Provider 報告成為 DBCOLUMNFLAGS_ISLONG 旗標集的 LONG 類型 (LONGVARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 及 LONG VARGRAPHIC FOR BIT DATA)。 這將防止在 WHERE 子句中使用長直欄。
VARIANT_FALSE DBCOLUMNFLAGS_ISLONG 不是針對 LONG VARCHAR、LONG VARCHAR FOR BIT DATA、LONG VARGRAPHIC 及 LONG VARGRAPHIC FOR BIT DATA 設定。這是預設值。
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Property group: DB2 Data Source
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Return Char as WChar

表 28. DB2PROP_RETURNCHARASWCHAR 值
意義
VARIANT_TRUE OLE DB 將類型 CHAR、VARCHAR、LONG VARCHAR 或 CLOB 的直欄說明為 DBTYPE_WSTR。 ISequentialStream 中暗示之資料的字碼頁將是 UCS-2。這是預設值。
VARIANT_FALSE OLE DB 將類型 CHAR、VARCHAR、LONG VARCHAR 或 CLOB 的直欄說明為 DBTYPE_STR。 ISequentialStream 中暗示之資料的字碼頁將是用戶端的本端字碼頁。
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Property group: DB2 Data Source
Property set: DB2PROPSET_DATASOURCE
Type: VT_BOOL
Typical R/W: R/W
Description: Sort By Ordinal

Microsoft OLE DB 規格需要 IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) 傳回直欄 TABLE_CATALOG、 TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME 所排序的橫列集。 IBM DB2 OLE DB Provider 符合規格。然而, 使用 Microsoft ODBC Bridge 提供者 (MSDASQL) 的應用程式通常已編寫為取得 ORDINAL_POSITION 所排序的橫列集。

表 29. DB2PROP_SORTBYORDINAL 值
意義
VARIANT_TRUE 將使得提供者傳回 ORDINAL_POSITION 所排序的橫列集。
VARIANT_FALSE 將使得提供者傳回 TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、 COLUMN_NAME 所排序的橫列集。這是預設值。

DB2Binder 語法圖中的不正確 URL 語法

在主題「安裝 DB2 Universal JDBC Driver」中,DB2Binder 語法圖不正確地定義 DB2 Universal JDBC Driver 的 URL 語法。下列圖解顯示 DB2Binder 的 URL 語法的正確表示法:

DB2Binder 語法
讀取語法圖表略過語法圖表>>-Java--com.ibm.db2.jcc.DB2Binder------------------------------>

>---url jdbc:db2://server-+---------+-/database----------------->
                          '-:--port-'

>---user user-ID---password password--+---------------+--------->
                                      '--size integer-'

>--+-----------------------------+------------------------------>
   '--collection collection-name-'

>--+-------------------------------+--+-------+----------------><
   |              .-,------------. |  '--help-'
   |              V              | |
   '--tracelevel ---trace-option-+-'

重新遞送 DB2 Universal JDBC Driver 用戶端

DB2 Universal Database(TM) (UDB) for Linux(TM)、UNIX(R)及 Windows(R) 中的自動用戶端重新遞送特性,容許用戶端應用程式從與伺服器失去通訊的情況下回復, 以便它們可以繼續工作,將連線岔斷的情形降至最低。

每當伺服器鎖定時,每一個連接至該伺服器的用戶端都會收到一個通訊錯誤,指出終止連線並導致應用程式錯誤。當可用性是重要時,您應該考慮具有備份設定或失效接手支援。 (失效接手就是伺服器能夠在另一個伺服器失敗時接管作業的功能。) 在任一種情況中, DB2 Universal JDBC Driver 用戶端都會嘗試重新建立與新伺服器的連線, 或與原始伺服器 (可能正在失效接手節點上執行的伺服器) 的連線。當重新建立連線時, 應用程式將收到 SQLException,通知它交易失敗,但是應用程式可以繼續處理下一個交易。

限制

程序

在資料庫管理員於伺服器實例中的特殊資料庫上指定了替代伺服器位置後, 主要與替代伺服器位置會在連接時傳回至用戶端。DB2 Universal JDBC Driver 會建立「可參照」物件 DB2ClientRerouteServerList 的實例, 並將該實例儲存在它的暫時記憶體中。如果失去通訊, DB2 Universal JDBC Driver 會嘗試使用從伺服器傳回的伺服器資訊,來重新建立連線。

clientRerouteServerListJNDIName DataSource 內容在用戶端中提供其他的用戶端重新遞送支援; clientRerouteServerListJNDIName 具有兩個函數:

在替代伺服器資訊的 JNDI 儲存庫中,clientRerouteServerListJNDIName 識別 DB2ClientRerouteServerList 實例的 JNDI 參照。 在順利連線至主要伺服器後,來自伺服器的資訊就會改寫 clientRerouteServerListJNDIName 所提供的替代伺服器資訊。如果定義了 clientRerouteServerListJNDIName 內容, 則在失效接手後,DB2 Universal JDBC Driver 會嘗試將已更新的資訊傳達至 JNDI 儲存庫。 如果指定了clientRerouteServerListJNDIName,將使用 DB2ClientRerouteServerList 中指定的主要伺服器資訊來進行連線。 如果未指定主要伺服器,將使用資料來源上指定的 serverName 資訊。

DB2ClientRerouteServerList 是序列讀取 Java(TM) Bean,具有四個內容:

提供了存取這些內容的 Getter 及 Setter 方法。 DB2ClientRerouteServerList 類別的定義如下:

package com.ibm.db2.jcc;
public class DB2ClientRerouteServerList
  implements java.io.Serializable,
  javax.naming.Referenceable
{
  public String[] alternateServerName;
  public synchronized void 
    setAlternateServerName(String[] alternateServer);
  public String[] getAlternateServerName();
  public int[] alternatePortNumber;
  public synchronized void 
    setAlternatePortNumber(int[] alternatePortNumberList);
  public int[] getAlternatePortNumber();
  
  public synchronized void 
    setPrimaryServerName (String primaryServerName);
  public String getPrimaryServerName ();
  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
  public int getPrimaryPortNumber ();
}

新建的失效接手連線是利用原始資料來源內容來配置, 但伺服器名稱及埠號除外。此外,在失效接手連線時,DB2 Universal Driver JDBC Driver 將重新建立任何在原始連線期間所修改的 DB2 UDB 特別暫存區。

當發生通訊失敗時,DB2 Universal JDBC Driver 首先會嘗試回復至主要伺服器。 如果回復失敗,驅動程式將嘗試連接至替代位置 (失效接手)。在重新建立連線之後, 驅動程式即會擲出一個含 SQLCODE -4498 的 java.sql.SQLException 至應用程式, 向應用程式指出已自動重新建立替代伺服器的連線。然後,應用程式可以重試交易。

使 DB2ClientRerouteServerList 持續存在的程序

若要設定儲存體使 DB2ClientRerouteServerList 持續存在,請遵循下列步驟:

  1. 建立 DB2ClientRerouteServerList 的實例並將該實例連結至 JNDI 登錄。例如:
    // 建立具名作業的開始環境定義
    InitialContext registry = new InitialContext();
    // 建立 DB2ClientRerouteServerList 物件
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // 設定主要伺服器的埠號及伺服器名稱
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // 設定替代伺服器的埠號及伺服器名稱
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. 將 DB2ClientRerouteServerList 物件的 JNDI 名稱指定給 DataSource 內容 clientRerouteServerListJNDIName。例如:
    datasource.setClientRerouteServerListJNDIName("serverList");

自訂 DB2 Universal JDBC Driver 配置內容

DB2 Universal JDBC Driver 配置內容可讓您設定具有全驅動程式範圍的內容值。 那些設定適用於所有應用程式及 DataSource 實例。 您可以變更這些設定,而不需變更應用程式原始碼或 DataSource 性質。

每一個 DB2 Universal JDBC Driver 配置內容設定都具有下列格式:

property=value

如果配置內容是以 db2.jcc.override 開始,則配置內容適用於所有連線, 並將任何 Connection 或 DataSource 內容置換成相同的內容名稱。 如果配置內容是以 db2.jcc 或 db2.jcc.default 開始,則配置內容值是預設值。 Connection 或 DataSource 內容設定會置換該值。

程序

若要設定配置內容:

您可以設定下列 DB2 Universal JDBC Driver 配置內容。 所有內容都是選用的。

db2.jcc.override.traceFile
為 Java 驅動程式碼啟用 DB2 Universal JDBC Driver 追蹤, 並指定追蹤檔名稱所依據的名稱。

指定 db2.jcc.override.traceFile 內容值的完整檔名。

db2.jcc.override.traceFile 內容會置換 Connection 或 DataSource 物件的 traceFile 內容。

例如,指定下列設定給 db2.jcc.override.traceFile,可對名為 /SYSTEM/tmp/jdbctrace 的檔案啟用 DB2 Universal JDBC Driver Java 程式碼的追蹤:

db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

您應該依照「IBM 軟體支援中心」的指示,來設定追蹤內容。

db2.jcc.sqljUncustomizedWarningOrException
指定當不是自訂的 SQLJ 應用程式執行時,DB2 Universal JDBC Driver 所採取的動作。 db2.jcc.sqljUncustomizedWarningOrException 可以具有下列值:
0
當不是自訂的 SQLJ 應用程式執行時,DB2 Universal JDBC Driver 不會產生「警告」或「異常狀況」。這是預設值。
1
當不是自訂的 SQLJ 應用程式執行時,DB2 Universal JDBC Driver 會產生「警告」。
2
當不是自訂的 SQLJ 應用程式執行時,DB2 Universal JDBC Driver 會產生「異常狀況」。

已除去 db2secFreeToken 函數

db2secFreeToken 函數 (符記所保留的可用記憶體) 不再是 db2secGssapiServerAuthFunctions_1 使用者鑑別外掛程式 API 的一部份。

小心地部署自訂機密保護外掛程式

如果沒有充分地編寫、複查及測試機密保護外掛程式的部署,則可能會危及 DB2 Universal Database (UDB) 安裝的完整性。DB2 UDB 會採取預防措施來防範許多常見的失敗類型, 但是當使用者撰寫的機密保護外掛程式進行部署時,它無法保證是否完整。

機密保護外掛程式

如果使用的是您自訂的機密保護外掛程式,則您可以在透過 CLP 或動態 SQL 陳述式發出的 connect 陳述式上, 使用最多 255 個字元的使用者 ID。

機密保護外掛程式 API

若為 db2secGetGroupsForUser、db2secValidatePassword 及 db2secGetAuthIDs API,輸入參數 dbname 可以是 NULL, 而且其對應長度輸入參數 dbnamelen 將設為 0。

機密保護外掛程式命名慣例 (Linux 及 UNIX)

在所有 Linux 及 UNIX 平台上,現在可接受 .so 作為使用者撰寫之機密保護外掛程式檔案庫的副檔名。

在 AIX(R) 上,機密保護外掛程式檔案庫可以具有副檔名 .a.so。如果這兩個版本的外掛程式檔案庫存在, 將使用 .a 版本。

若為 HP-UX on PA-RISC,機密保護外掛程式檔案庫可以具有副檔名 .sl.so。如果這兩個版本的外掛程式檔案庫存在, 將使用 .sl 版本。

在所有其他 Linux 及 UNIX 平台上,.so 是機密保護外掛程式檔案庫唯一支援的副檔名。

機密保護外掛程式檔案庫上的限制

在 AIX 上,機密保護外掛程式檔案庫可以具有副檔名 .a.so。用來尋找外掛程式檔案庫的機制取決於使用哪一個副檔名而定:

副檔名為 .a 的外掛程式檔案庫
副檔名為 .a 的外掛程式檔案庫將假設為包含共用物件成員的保存檔。這些成員的名稱必須是 shr.o (32 位元) 或 shr64.o (64 位元)。 單一保存檔可以同時包含 32 位元及 64 位元成員,因此容許它部署在這兩種類型的平台上。

例如,若要建立 32 位元保存檔樣式外掛程式檔案庫:

  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
  ar rv MyPlugin.a shr.o
副檔名為 .so 的外掛程式檔案庫
副檔名為 .so 的外掛程式檔案庫將假設為可動態載入的共用物件。 這樣的物件是 32 位元或 64 位元,取決於當建置它時所使用的編譯器及鏈結器選項而定。 例如,若要建立 32 位元外掛程式檔案庫:
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp

在 AIX 除外的所有平台上,機密保護外掛程式檔案庫永遠都會假設為可動態載入的共用物件。

GSS-API 機密保護外掛程式不支援多串流鑑別

GSS-API 鑑別已被限制為只能將一個符記從用戶端串流至伺服器, 以及將一個符記從伺服器串流至用戶端。這些符記取自於用戶端上的 gss_init_sec_context(),及伺服器上的 gss_accept_sec_context()。嘗試額外串流的 GSS-API 外掛程式,將產生機密保護外掛程式的非預期錯誤, 導致連線失敗。

GSS-API 機密保護外掛程式不支援訊息加密及簽名

GSS-API 機密保護外掛程式中無法使用訊息加密及簽名。

在獨立式應用程式中隱含地結束交易

不管使用哪一種作業系統,所有應用程式終止 (正常及異常) 都會隱含地 Rollback 未執行的工作單元。

分散式交易支援

在 DB2 Universal Database (UDB) 8.2 版的「新增功能」文件中,DB2 Universal JDBC Driver 改善一節中的「分散式」交易支援資訊具有不正確資訊。 此節的最後一句不正確。正確資訊如下:

從 8.2 版開始,DB2 UDB 提供符合 XA 規格之分散式交易處理的支援。 這個支援會實作 Java 2 Platform Enterprise Edition (J2EE) Java Transaction Service (JTS) 及 Java Transaction API (JTA) 規格。

[ 頁面頂端 |前一頁 | 下一頁 | 目錄 ]