数据库连接

数据库包含由已部署消息流写入和访问的业务数据。 您必须使用 ODBC 或 JDBC 创建从集成节点到数据库的连接。

数据库连接是一个配置文件,您可以在其中指定数据库的物理详细信息 (例如数据库类型和版本) 以及用于启用从 IBM® App Connect Enterprise Toolkit 到数据库的 JDBC 连接的参数。

与数据库的 ODBC 连接由集成节点进行内部管理,因此,不应使用任何可用于 ODBC 驱动程序的可配置连接池选项。

即使不同的数据源名称 (DSN) 解析为同一个物理数据库,集成节点也要求消息流中引用的每个 DSN 均有相应的数据库连接。如果消息流以协调方式运行,那么还需要与参与全局协调流的每个 DSN 建立单独的 XA 连接。

集成节点所需的数据库连接数取决于访问数据库的消息流的操作。 对于每个消息流线程,访问数据库的集成节点将为每个数据源名称 (DSN) 建立一个连接。 如果相同线程上的不同节点使用同一个 DSN,那么使用相同的连接,但如果使用了不同的事务方式,就需要使用不同的连接。 有关事务的更多信息,请参阅 协调消息流的数据库连接

通常,集成节点在需要从消息流中使用连接时建立这些连接。 但是,对于到基于 ESQL 的数据源的连接,您可以在流接收到消息之前建立初始连接,从而在消息处理中消除任何连接延迟。 通过在数据源节点上选择 Connect before flow starts 属性来设置此选项。

如果 消息流 包含 DatabaseInput 节点,那么在 消息流 运行时,至少有一个数据库连接保持打开状态。

Linux 平台Windows 平台UNIX 平台Linux®UNIXWindows 上 系统,数据库连接在以下情况下释放:

在选择了 Connect before flow starts 选项的情况下启动的数据库连接不会在消息流变为空闲时释放。 仅在以下情况下才会释放这些类型的连接:

  • 访问数据库时发生错误,需要建立新连接。
  • 消息流 已停止。
  • 集成节点停止。

所有其他数据库连接均保持打开,直至发生以下任一事件:

  • 访问数据库时发生错误,需要建立新连接。
  • 消息流已保持空闲达到 1 分钟。
  • 消息流 已停止。
  • 集成节点停止。

z/OS 平台z/OS®上,如果在 1 分钟内未访问数据库,那么将释放数据库连接。

可以使用 mqsichangeproperties 命令来更改数据库连接的以下值:
  • expireXAConnections

    Linux 平台Windows 平台UNIX 平台缺省情况下,不会释放用作全局协调 (XA) 事务的一部分的数据库连接。 要改变此行为,请将 expireXAConnections 设置为 true。 然后,当全局协调的数据库连接处于空闲状态的时间超过 maxConnectionAge 设置时,将释放这些连接。 此操作涉及与缺省 IBM MQ 队列管理器断开连接并重新连接。

    z/OS 平台缺省情况下,当 XA 事务中使用的数据库连接空闲时间超过 maxConnectionAge 设置时,将释放这些连接。

  • maxConnection年龄

    空闲数据库连接在断开连接之前保持打开状态的时间长度 (以秒为单位)。 此设置不适用于在选择 Connect before flow starts 选项时启动的数据库连接。 缺省值为 60 秒。 如果该值设置为 -1,那么直到集成服务器或集成节点停止后才会释放数据库连接。

  • maxStatement年龄

    在除去之前高速缓存先前执行的数据库查询的时间长度 (以秒计)。 缺省值为 600 秒,从上次执行查询的时间开始。 再次执行查询将重置其计时器。

  • statementCache大小

    可以高速缓存的先前执行的数据库查询的最大数目。 缺省高速缓存大小为 40 个唯一查询。 当语句高速缓存变满时,将从其清除查询,从那些在最长时间之前执行的查询开始。

要更改在单个集成服务器上释放空闲消息流的数据库连接的时间,请使用以下命令:
mqsichangeproperties integration_node -e integration_server -o ComIbmDatabaseConnectionManager -n maxConnectionAge -v newValue
或者使用以下命令来更改所有集成服务器的缺省时间:
mqsichangeproperties integration_node -o ComIbmDatabaseConnectionManager -n maxConnectionAge -v newValue
其中 maxConnectionAge 以秒为单位指定。

如果要将 DB2® 用于数据库,那么缺省操作是将数据库的并发连接数限制为 maxappls 配置参数的值。 maxappls 的缺省值为 40。 如果您认为集成节点可能需要的连接数超过 maxappls 的值,请根据您的计算将此参数及相关 maxagents 参数增大为新值。

对于 z/OS,当您使用 ODBC CAF (调用连接设施) 连接或 RRSAF (可恢复资源服务连接设施) 时,连接数不会更改。

使用 maxConnectionUseCount 配置参数,可在线程上的事务数达到指定数目后释放与数据库的 ODBC 连接。 要激活此功能,请将 maxConnectionUseCount 设置为大于零的值。

将按线程监视 maxConnectionUseCount。 例如,如果消息流中还有其他实例(这意味着正在并行运行多个线程),那么只有在达到 maxConnectionUseCount 中指定值的那些线程上才会释放与数据库的连接。

对于由集成节点管理的集成服务器,可以使用 mqsichangeproperties 命令来设置 maxConnectionUseCount 的值。 例如,要在线程的每个数据源连接的事务数达到 100 个(包括提交和回滚进程)后重置 ODBC 连接,请发出以下命令:
mqsichangeproperties integration_node -e integration_server -o ComIbmDatabaseConnectionManager -n maxConnectionUseCount -v 100

重新启动集成服务器以使更新生效。

使用 mqsireportproperties 命令可发现每个数据源连接上当前已完成的事务数。 将在 transactionCount 字段中报告该值。 例如:
mqsireportproperties integration_node -e integration_server -o ComIbmDatabaseConnectionManager -r


ComIbmDatabaseConnectionManager
  name='DatabaseConnectionManager'
  identifier='ComIbmDatabaseConnectionManager'
  type='resourceManager'
  enableODBCTraceBridge='true'
  expireXAConnections='false'
  maxConnectionAge='60'
  maxConnectionUseCount='100'
  maxStatementAge='600'
  statementCacheSize='40'
  useDefaultSchemaForStoredProcedures='true'
  active
    activityLogUri='/apiv2/servers/default/resource-managers/activity-log-manager?log_type=RM&resource_manager=ODBC'
    expireXAConnections='false'
    maxConnectionAge='60'
    serverRestartRequired='false'
    detailed
      databaseContexts
        databaseContext
          threadNumber='27546'
          ODBC_Version_3
            envHandle='139789946390048'
            dataSources
              dataSource
                connectionAge='34'
                coordinated='false'
                name='TESTDB'
                state='2'
                timeoutEnabled='true'
                transactionCount='2'
                managedStatements
                  managedStatement
                    createTime='2020-08-11 04:50:15.285704 (1599799815)'
                    executeCount='2'
                    lastExecuteTime='2020-08-11 04:50:40.404019 (1599799840)'
                    text='INSERT INTO TEST VALUES (?)'
                statements
对于独立集成服务器,您可以在 server.conf.yaml 文件的 ResourceManagers 部分中更新 maxConnectionUseCount 的值。 例如:
ResourceManagers:
  DatabaseConnectionManager:
     maxConnectionUseCount: '100'

重新启动集成服务器以使更新生效。

如果通过将 maxConnectionUseCount 设置为大于零的值来激活释放功能,那么不论是先达到 maxConnectionAge 值还是先达到 maxConnectionUseCount 值,都会立即提示系统释放连接。 例如,将 maxConnectionUseCount 设置为 100 并将 maxConnectionAge 设置为 60。 在这种场景中:
  • 如果在创建 ODBC 连接后的 30 秒内处理了 100 个事务,那么在事务数达到 100 后会立即释放该 ODBC 连接。 对于下一条消息,将建立新的 ODBC 连接。
  • 如果在创建 ODBC 连接后 30 秒内处理了 10 个事务,并且在随后的 60 秒或更长时间内,此 ODBC 连接上未处理任何消息,那么此时已达到 maxConnectionAge 中指定的值,并且会释放该连接。
  • 如果每 30 秒处理了 10 个事务,并且该连接的空闲时间永远不超过 60 秒,那么在总事务数达到 100(本示例中是在 300 秒后达到)后,将释放该 ODBC 连接。
注: 作为 mqsireportproperties 命令输出的一部分返回的 connectionAge 字段不是可配置属性; 它是指示连接存在时间的运行时度量。 connectionAgemaxConnectionAge 之间没有任何关系。 如以上示例场景描述(其中 connectionAge 为 300 且 maxConnectionAge 为 60)中所示,connectionAge 中的值可以超过 maxConnectionAge 中的值。

如果要使用其他数据库,请查看数据库文档获取关于连接的信息以及可能适用的限制。

消息流 处于空闲状态时,集成服务器会定期释放尚未使用 Connect before flow starts 选项启动的数据库连接。 因此,集成节点占用的连接将反映其当前使用这些资源的情况。 如果数据库管理器支持停顿,那么这一情况使集成节点能够对数据库停顿作出响应。 不是所有的数据库都支持停顿功能,并且不是所有的数据库都以相同的方式停顿。 请查看您的数据库文档,以获取有关数据库停顿的信息。