將交易日誌儲存在關聯式資料庫中

您可以選擇將 Liberty 交易日誌儲存在關聯式資料庫中,而不是儲存成作業系統檔案。這個特性可在不必使用共用檔案系統的情況下,提供高可用性 (HA) 支援。 支援將交易服務日誌儲存在關聯式資料庫中,以便在正式作業中使用。

關於這項作業

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

預設配置是將交易日誌儲存成作業系統檔案。這項 HA 交易支援需要利用共用檔案系統來代管交易日誌,例如:NFSv4 裝載的網路連接儲存體 (NAS) 或儲存區域網路 (SAN)。

但是您可以選擇將交易日誌儲存在關聯式資料庫管理系統 (RDBMS) 中。這個配置選項是著眼於在 HA 環境中工作的客戶。 這項特性可讓客戶(尤其是投資 HA 資料庫技術的客戶)利用他們的 HA 資料庫來作為交易日誌的共用儲存庫,以及作為使用共用檔案系統的替代方案。 您可以使用 Liberty 支援的任何資料庫類型。

您可以配置一部應用程式伺服器,來回復不同應用程式伺服器的日誌。 當使用這項程序時,原始的擁有端應用程式伺服器不能正在執行。當有可用的交易服務日誌,但原始的擁有端應用程式伺服器卻無法啟動時,通常就會使用它來執行未完成的交易回復。

Liberty 的回復主體與 WebSphere Application Server 傳統版 的相同。有關回復的相關資訊,請參閱下列資源:

記住: 請勿將應用程式伺服器配置成使用相同的表格。這樣做可能導致資料完整性問題和日誌毀損。如果指定字尾,則該字尾會直接同時附加至表格和索引兩者的名稱。

程序

如果要將 Liberty 交易日誌配置成儲存在 RDBMS 中,請完成下列步驟:

  1. Liberty server.xml 檔中,配置一個專用的非交易式資料來源。
    下列 server.xml 檔範例摘錄顯示如何將 Liberty 配置成將交易日誌儲存在 DB2® 資料庫中:
    <transaction> 
      <dataSource transactional="false">
        <jdbcDriver libraryRef="DB2JCC4LIB"/>
        <properties.db2.jcc currentSchema="CBIVP"
          databaseName="SAMPLE" driverType="4"
          portNumber="50000" serverName="localhost"
          user="db2admin" password="{xor}Oz1tPjsyNjE=" />
      </dataSource> 
    </transaction> 
    
    <library id="DB2JCC4LIB">
      <fileset dir="C:/SQLLIB/java" includes="db2jcc4.jar db2jcc_license_cu.jar"/>
    </library>
  2. 選擇性的: 建立資料庫表格。

    在伺服器最初啟動時,Liberty 會嘗試建立必要的資料庫表格。當無法建立這些資料庫(例如,因許可權不足)時,伺服器會無法啟動。 在這些情況之下,您必須手動建立兩份資料庫表格。

    如果要將應用程式伺服器的交易日誌儲存在 RDBMS 中,每一部伺服器都必須各有各的表格。若為 WebSphere Application Server 傳統版 配置,請在每一部應用程式伺服器的唯一自訂 URL 中,指定表格字尾。WebSphere Application Server:將交易和補償日誌儲存在關聯式資料庫,以達到高可用性適用於傳統產品,但會示範如何建立字尾和表格名稱。在 Liberty 中,則是使用交易元素 transactionLogDBTableSuffix 屬性來指定字尾。如需 transactionLogDBTableSuffix 的相關資訊,請參閱交易管理程式(交易)

    下列 DDL 結構顯示如何在 DB2 上建立表格:
    CREATE TABLE WAS_TRAN_LOG(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_PARTNER_LOG(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    下列 DDL 結構顯示如何在舊版 Db2 上建立表格:
    CREATE TABLE WAS_TRAN_LOG(
      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_LOG(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    下列 DDL 結構顯示如何建立這些表格的索引:
    CREATE INDEX IXWSTRAN_LOG ON WAS_TRAN_LOG (RU_ID ASC, SERVICE_ID ASC, SERVER_NAME ASC)
    CREATE INDEX IXWSPARTNER_LOG ON WAS_PARTNER_LOG (RU_ID ASC, SERVICE_ID ASC, SERVER_NAME ASC)
    下列 DDL 結構顯示如何在 Oracle 上建立資料庫表格:
    CREATE TABLE WAS_TRAN_LOG(
      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_LOG(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)

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

檔名:twlp_store_logs_in_rdb.html