将事务日志存储在关系数据库中

可选择将 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