[IBM i][AIX Solaris HP-UX Linux Windows]

將交易和補償日誌儲存在關聯式資料庫,以提供高可用性

(選用)您可以選擇將 WebSphere® Application Server 交易和補償日誌儲存在關聯式資料庫中,而不是儲存成作業系統檔案。 這個特性在不使用共用檔案系統的情況下,提供高可用性 (HA) 支援。

關於這項作業

每個涉及兩項或更多資源的廣域交易,或分散於多部伺服器的廣域交易,WebSphere Application Server 交易服務會將其資訊寫入交易日誌中。 這些交易由應用程式或儲存器(應用程式部署在其中)來啟動或停止。 交易服務會維護交易日誌,以確保交易的完整性。 資訊是在分散式交易的準備階段寫入交易日誌中。如果含有作用中交易的 WebSphere Application Server 在失敗之後重新啟動,交易服務能夠利用日誌,來重播任何不確定的交易。這種完整性層次可讓整個系統回到一致狀態。

在舊版的 WebSphere Application Server 中,交易日誌會儲存為作業系統檔案。 在 WebSphere Application Server 8.5.5 版以及更新版本中,這項設定會保留預設配置。您也可以選擇將交易日誌儲存在關聯式資料庫中。這個配置選項主要用於高可用性 (HA) 環境。此外,在舊版的 WebSphere Application Server 中,HA 交易支援需要使用共用檔案系統來管理交易日誌,例如:裝載 NFSv4 的網路連接儲存體 (NAS) 或儲存區網路 (SAN)。這項新特性可讓您(尤其是如果您有投資於 HA 資料庫技術) 利用 HA 資料庫作為交易日誌的共用儲存庫,來替代共用檔案系統。

註: 就「將交易和補償日誌儲存在關聯式資料庫」的現行實作來說,支援 DB2® 和 Oracle 中的「高可用性」功能。例如,支援 DB2 HADR 或 Oracle RAC DataGuard 等之類的用戶端特定特性,這些特性可在發生失敗時,重新連線至另一個資料庫實例。目前不支援其他供應商之關聯式資料庫中的高可用性功能。

在現行實作中,如果核心回復日誌功能遇到非預期的 JDBC 異常狀況,並且停用了交易記載,則伺服器必須關閉,好讓進行中的交易回復。在伺服器重新啟動之前,不會嘗試重新連線,現行實作也不會嘗試判斷是否是暫時性狀況。

在 WebSphere Application Server 8.5.5 版及更新版本中,您可以利用類似的機能(也是著眼於在 HA 環境中作業的客戶),將補償回復日誌儲存在關聯式資料庫中。WebSphere Application Server 補償服務可讓不同系統中的應用程式,針對比基本交易更鬆散聯結的活動進行協調。它會將系統失敗之後完成補償所需要的資訊,儲存在它自己專用的回復日誌中。

避免困難 避免困難: 「SQL 回復日誌」的資料來源所需的儲存區大小上限是:
(2 * the number of potential servers being peer recovered) + 2
這個儲存區大小上限可讓您進行足夠的資料庫連線,來關閉所有相關的交易日誌。如果沒有將儲存區大小上限設成此值,則會因可用的連線不足,而可能造成錯誤訊息 J2CA0045E。gotcha

程序

在啟用高可用性之前,您必須先為叢集內的每部伺服器設定 TransactionLogDirectoryCompensationLogDirectory 屬性,來配置每一部伺服器的交易日誌位置的交易日誌位置和補償日誌位置。叢集內每一部伺服器都必須指定不同的 tablesuffix 內容,以參照唯一的交易日誌和補償日誌位置,以免多部伺服器競用關聯式資料庫管理系統 (RDBMS) 資源。舉例來說,如果您有一個名稱是 AppCluster 的叢集,內含下列四部成員伺服器:
  • AppClusterMember1
  • AppClusterMember2
  • AppClusterMember3
  • AppClusterMember4
您可以為 AppCluster 定義下列表格字尾:
  • 將 App1 定義給 AppClusterMember1
  • 將 App2 定義給 AppClusterMember2
  • 將 App3 定義給 AppClusterMember3
  • 將 App4 定義給 AppClusterMember4

請完成下列步驟:

  1. 配置交易和補償回復日誌儲存體的非交易式資料來源:
    1. 建立 JDBC 提供者來實作您的特定 RDBMS。 請指定非 XA 的實作類型。
    2. 建立 JAAS J2C 鑑別資料別名。這個資料別名會定義用來連接 RDBMS 的安全認證。RDBMS 中所定義的認證必須有足以在資料庫中建立表格的權限。
    3. 利用步驟 a 所建立的 JDBC 提供者,來建立資料來源。 它的元件管理鑑別別名必須設為步驟 b 所建立的 JAAS 別名。請定義資料來源的 URL 來指定 RDBMS 連線。
    4. 完成下列步驟,將新的資料來源配置為非交易式:
      1. 開啟新建的資料來源。
      2. 其他內容之下,按一下 WebSphere Application Server 資料來源內容
      3. 選取非交易式資料來源勾選框。
      4. 儲存您的變更。
  2. 配置交易服務,將交易儲存在關聯式資料庫中:
    1. 在 WebSphere Application Server 管理主控台中,按一下伺服器 > 伺服器類型 > WebSphere Application Server > server_name 這時會顯示指定應用程式伺服器的內容。
    2. 儲存器設定區段中,按一下儲存器服務 > 交易服務 這時會顯示「交易服務設定」頁面。
    3. 如果還沒有顯示配置標籤,請選取它。
    4. 交易日誌目錄欄位中,輸入一個自訂字串,指示您想要將日誌儲存在資料庫中。 這個字串必須符合下列格式:
      custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=data_source_jndi_name,tablesuffix=suffix
      其中 data_source_jndi_name 是先前建立的非交易式資料來源的 JNDI 名稱,suffix 是唯一標示 HA 叢集各成員所需設定的字串。
      限制: 如果您使用 Oracle 資料庫,suffix 字串的長度不能超出 15 個字元。
  3. (選用)如果您打算在 WebSphere Application Server 中使用「補償」或「活動」服務,請配置補償服務,以便將交易儲存在關聯式資料庫中。
    1. 在 WebSphere Application Server 管理主控台中,按一下伺服器 > 伺服器類型 > WebSphere Application Server > server_name 這時會顯示指定應用程式伺服器的內容。
    2. 儲存器設定區段中,按一下儲存器服務 > 補償服務 這時會顯示「補償服務設定」頁面。
    3. 如果還沒有顯示配置標籤,請選取它。
    4. 回復日誌目錄欄位中,輸入一個自訂字串,指示您想要將日誌儲存在資料庫中。 這個字串必須符合下列格式:
      custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=data_source_jndi_name,tablesuffix=suffix
      其中 data_source_jndi_name 是先前建立的非交易式資料來源的 JNDI 名稱,suffix 是唯一標示 HA 叢集各成員所需設定的字串。
      限制: 如果您使用 Oracle 資料庫,suffix 字串的長度不能超出 15 個字元。
  4. (選用)建立資料庫表格。

    WebSphere Application Server 第一次啟動時,會嘗試建立必要的資料庫表格。 如果無法執行這項建立作業(例如權限不足之故),伺服器將無法啟動。在這些情況之下,您必須手動建立三份資料庫表格。

    以下是代表性的 DDL,並且適用於獨立式伺服器環境。在獨立式環境中,需要兩個資料庫表格、一個交易日誌以及一個夥伴日誌表格,以支援交易服務。如果您打算使用「補償」或「活動」服務,還需要第三個補償日誌表格。

    您可以根據您的環境來自訂表格名稱。舉例來說,如果您有一個名稱是 AppCluster 的叢集,內含下列四部成員伺服器,您必須四個交易日誌表格、四個夥伴日誌表格,以及四個選用的補償日誌表格:
    • AppClusterMember1
    • AppClusterMember2
    • AppClusterMember3
    • AppClusterMember4
    因此,您可以為 AppCluster 定義下列表格:
    叢集名稱 伺服器名稱 交易日誌表格 夥伴日誌表格 補償日誌表格
    AppCluster AppClusterMember1 WAS_TRAN_LOGApp1 WAS_PARTNER_LOGApp1 WAS_COMP_LOGApp1
      AppClusterMember2 WAS_TRAN_LOGApp2 WAS_PARTNER_LOGApp2 WAS_COMP_LOGApp2
      AppClusterMember3 WAS_TRAN_LOGApp3 WAS_PARTNER_LOGApp3 WAS_COMP_LOGApp3
      AppClusterMember4 WAS_TRAN_LOGApp4 WAS_PARTNER_LOGApp4 WAS_COMP_LOGApp4
    下列 DDL 顯示如何在 DB2 上建立資料庫表格,且其表格字尾是 App1:
    CREATE TABLE WAS_TRAN_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    CREATE TABLE WAS_PARTNER_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    CREATE TABLE WAS_COMP_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    下列 DDL 結構顯示如何在 Oracle 上建立資料庫表格:
    CREATE TABLE WAS_TRAN_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_PARTNER_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_COMP_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)

範例

如果您有一個名稱是 AppCluster 的叢集,內含四部成員伺服器,分別是 AppClusterMember1、AppClusterMember2、AppClusterMember3 和 AppClusterMember4,請依類似下列作法,來配置日誌位置:
叢集名稱 伺服器名稱 交易日誌表格 補償日誌表格
AppCluster AppClusterMember1 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App1 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App1
AppClusterMember2 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App2 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App2
AppClusterMember3 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App3 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App3
AppClusterMember4 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App4 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App4
在本例中,所設定的表格字尾如下:
  • AppClusterMember1
  • AppClusterMember2
  • AppClusterMember3
  • AppClusterMember4
所建立的資料庫表格名稱如下:
  • WAS_TRAN_LOGApp1
  • WAS_TRAN_LOGApp2
  • WAS_TRAN_LOGApp3
  • WAS_TRAN_LOGApp4
  • WAS_PARTNER_LOGApp1
  • WAS_PARTNER_LOGApp2
  • WAS_PARTNER_LOGApp3
  • WAS_PARTNER_LOGApp4
  • WAS_COMP_LOGApp1
  • WAS_COMP_LOGApp2
  • WAS_COMP_LOGApp3
  • WAS_COMP_LOGApp4

指出主題類型的圖示 作業主題



時間戳記圖示 前次更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_store_logs_in_rdb
檔名:tjta_store_logs_in_rdb.html