Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Update 2 发行说明

- Previous: Enterprise Edition 8.1 Update 2 发行版中修复的错误
- Next: Application Server 产品发行版

# 其他 HADB 信息

本节介绍有关 Application Server 8.1 中所包含的 HADB 实现的其他重要信息。

- HADB 增强功能

- HADB 文件系统支持

- 升级高可用性数据库

- 已知 SQL 限制

- 高可用性负载平衡

## HADB 增强功能

- 实现了新的管理命令 `hadbm setadminpassword`，使用该命令可更改用于数据库管理的密码。此命令通过使用相应的选项，来指示要使用的管理代理以及旧密码和新密码。有关更多信息，请参见 `hadbm setadminpassword` 手册页。

- 现有管理命令 `hadbm listpackages` 已被修改。以前，此命令没有操作数，并且会列出相关管理域中的所有软件包。修改后引入了可选的软件包名称操作数，并且只列出具有该名称的软件包。如果不指定相应的操作数，则列出所有软件包。有关更多信息，请参见 `hadbm listpackages` 手册页。

- 现有管理命令 `hadbm createdomain` 已被修改。将 hostlist 操作数的功能扩展为还可以指定管理代理的端口号。通过这种方法，仅使用 hostlist 操作数就可以完全指定该域。旧的行为仍受支持，以保持向下兼容。有关更多信息，请参见 `hadbm createdomain` 手册页。

- 管理系统的某些错误消息已被修改。这些修改旨在改进错误消息的易懂性、一致性和准确性。详细的修改内容未在本发行说明中列出。

- 安装和卸载行为稍有变化。安装或卸载 HADB 时，应始终保留软链接 `/opt/SUNWhadb/4`，但并非始终都这样。

- 不能再在命令行上输入密码作为命令选项。这与所有使用密码作为命令行选项的 `hadbm` 命令相关。对于 `hadbm` 命令，以前可以通过以下方式输入密码：

  1. 密码文件

  2. 命令行选项

  3. 交互式输入

  方法 2（命令行选项）被认为不安全，因此已过时。如果以这种方法输入密码，将发出警告消息。请改为使用方法 1（密码文件）或方法 3（交互式输入）。在命令行中使用密码的方式将在下一个版本中废弃。请注意，这适用于所有使用命令行密码选项的 `hadbm` 命令。

- HADB 已升级为使用 JGroups 2.2 版，其源代码与 HADB 一起分发。为了支持从先前的 HADB 版本联机升级，HADB 同时附带了 JGroups 2.1 和 2.2。对于 JGroups 2.1，仅提供字节代码。

## HADB 文件系统支持

如果您要将 HADB 配置为使用以下文件系统之一，则需考虑几个重要事项：

- ext2 和 ext3—对于 Red Hat Application Server 3.0，HADB 支持 ext2 和 ext3 文件系统。对于 Red Hat Application Server 2.1，HADB 仅支持 ext2 文件系统。

- `Veritas`—在 Solaris 平台上使用 Veritas 文件系统时，消息`“警告:``直接磁盘 I/O 映射失败”`将写入历史文件。此消息指出：HADB 无法打开用于数据和日志设备的直接 I/O。直接 I/O 可以减少写入磁盘页面的 CPU 耗时，从而提高性能。它还可以降低管理操作系统中的脏数据页面的系统开销。

  要结合使用直接 I/O 和 Veritas 文件系统，请使用以下方法之一：

  - 在以选项 `mincache=direct` 进行安装的文件系统上创建数据和日志设备。此选项将应用于该文件系统上创建的所有文件。有关详细信息，请参见 `mount_vxfs(1M)` 命令。

  - 使用 Veritas Quick I/O 工具对文件系统的文件执行原始 I/O。有关详细信息，请参见《VERITAS File System 4.0 Administrator's Guide for Solaris 》。

    请注意，尚未使用 Application Server 8.1 2005Q2 Update 2 对这些配置进行测试。

    有关使用 Application Server 软件安装和配置 HADB 的信息，请参见《 Application Server Enterprise Edition High Availability Administration Guide》。

## 升级高可用性数据库

- 升级前任务/数据迁移

- 升级过程

- 测试升级

- 特殊的部署和升级信息

### 升级前任务/数据迁移

##### 开始之前

用户应保留 HADB 历史文件、管理代理配置文件、日志文件、系统信息库以及安装路径以外的所有数据设备。如果尚未这样做，应在升级前完成此操作。要移动管理系统信息库和配置文件，请执行以下操作：

1. 停止所有旧的管理代理，但继续运行 HADB 节点。

2. 在每台主机上，将系统信息库目录移到新位置。

3. 在每台主机上，将 `dbconfig` 目录复制到新位置。

4. 在每台主机上，更新 `mgt.cfg` 文件，并为 `dbconfig` 和系统信息库目录设置正确的路径。

5. 使用更新后的 `mgt.cfg` 文件启动管理代理。

### 升级过程

要从 HADB 4.4.x 版升级到 4.4.2-7 版，请执行以下步骤：

1. 根据需要执行上述的升级前任务。

2. 将 HADB 4.4.2-7 版安装到所有 HADB 主机上（安装到不同于 4.4.x 版路径的其他路径中，例如 `/opt/SUNWhadb/4.4.2-7` 中）。

3. 将 HADB 4.4.2-7 版安装到 `hadbm` 客户机主机上（如果该客户机主机的路径与 HADB 主机的不同）。

4. 停止所有 HADB 主机上运行的全部管理代理。

5. 使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中，请使用在新版本的 `bin` 目录中找到的 `hadbm` 命令。

6. 在管理域中注册该软件包（由于默认的软件包名称为 V4.4，因此可能需要使用其他软件包名称，以免与现有的同名软件包冲突）：

       hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.2-7 V4.4.2-7

7. 运行 `hadbm listpackages` 命令并检查新软件包是否已在该域中注册。

8. 使用新的 `hadbm` 4.4.2-7 版重新启动数据库。如果需要移动设备和历史文件，请运行联机升级，并在同一操作中为设备和历史文件设置新路径：

       hadbm set packagename=V4.4.2-7,devicepath=new_devpath,
       historypath=new_histpath

   否则，如果设备和历史文件位于安装目录之外，则运行以下命令后，将仅滚动重新启动这些节点：

       hadbm set packagename=V4.4.2-7 database name

9. 检查数据库是否处于“正在运行”状态（使用 `hadbm status` 命令）并且能够正常处理客户机事务。

10. 如果结果有效，随后就可以删除旧安装。在取消注册旧软件包之前，先从 `ma` 系统信息库中删除对旧软件包的所有引用。否则，`hadbm unregisterpackage` 将失败，并显示消息“软件包正在使用”。伪重新配置操作（例如 `hadbm set connectiontrace=same as previous value`）将删除对旧软件包的所有引用。现在，取消注册旧软件包：

        hadbm unregisterpackage [--hosts=host-list] old pacakge name

11. 从文件系统中删除旧安装。

### 测试升级

在 Solaris 上，要测试升级是否成功，请检查是否已正确执行升级：

1. 确保运行的进程使用了新的二进制。在所有 HADB 节点上检查以下路径：

       new path/bin/ma -v
       new path/bin/hadbm -v

2. 检查数据库是否处于运行状态。使用以下命令应该显示所有 HADB 节点都处于“正在运行”状态。

       new path/bin/hadbm status -n

3. 确保使用 HADB 的产品已将其指针更改为指向新的 HADB 路径。

4. 使用 HADB 的产品可以运行自己的升级测试，以检验 HADB 升级是否有效。

   联机升级后，如果新版本无法正常运行，请转回使用以前的 HADB 版本。但是，如果已对管理代理系统信息库进行了更改，则可降级 HADB 本身，但新的管理代理必须继续运行。

### 特殊的部署和升级信息

本节列出有关 HADB 部署和升级的其他信息。

- 部署

- 从 4.4.1 联机升级到 4.4.2

#### 部署

- 仅将设备文件、日志文件和历史文件存储在本地磁盘中，请勿使用远程安装的文件系统。

- 如果在一台主机上存在多个节点，建议将属于每个节点的设备分别存放在不同的磁盘上。否则，磁盘争用会导致性能降低。通过在历史文件中查找此类消息“`注意 - 上次 flush/fputs 时间过长`”可以查看此问题的症状。如果一个节点拥有多个数据设备文件，建议对这些设备文件使用单独的磁盘。

- 使用本地磁盘（最好是与数据设备所用不同的磁盘）在 HADB 主机上安装 HADB 二进制。NFS 延迟或磁盘争用可能导致节点重新启动，并且历史文件中出现警告“`进程已阻塞` `nnn``，最长阻塞时间为` `nnn`”。

- 不要将 hadb 设备、历史文件、管理代理目录和代理配置文件放在 hadb 软件包路径下。因为这会导致在升级更新版本和删除旧软件包路径时出现问题。

- 正常情况下，此版 HADB 最多支持 28 个节点（24 个活动数据节点和 4 个备用节点）。

- 建议使用相同版本的 JDBC 驱动程序和 HADB 服务器。

- 不支持 IPv6，仅支持 IPv4。

- 在 Windows 上，命令行长度限制为 2048 字节。

- 必须将网络配置为可以进行 UDP 多址广播。

- 由于在 RedHat Enterprise Linux 3.0 的 Update 1 到 Update 3 上发现了过度交换，建议不要将其用作部署平台。此问题已在 RedHat Enterprise Linux 3.0 Update 4 中修复。

- 使用实时优先级运行 `NSUP` 时可能出现的情况。

  节点的监控 (`NSUP`) 进程 (`clu_nsup_srv`) 通过及时交换 "heartbeat" 消息来确保 HADB 的高可用性。如果 `NSUP` 与导致资源耗尽的其他进程位于同一位置，则会影响计时。这将导致错误的网络分区和节点重新启动（在此之前，历史文件中会记录一条警告“进程被阻塞 `n` 秒”），同时导致出现异常中止的事务和其他异常情况。

  要解决这一问题，`clu_nsup_srv`（可在 `installpath``/lib/server` 中找到）必须设置 `suid` 位且该文件必须属于超级用户。这可以通过使用以下命令手动实现：

      # chown root clu_nsup_srv
      # chmod u+s clu_nsup_srv

  这将导致 `clu_nsup_srv` 进程以`超级用户`的身份启动，而这又使该进程在启动后能够自动为其本身分配实时优先级。要通过使用 `setuid` 来避免任何安全性影响，请尽早设置实时优先级，并在更改优先级后立即将进程返回到有效的 uid。其他 HADB 进程会将其优先级降低为分时优先级。

  如果 NSUP 无法设置实时优先级，则它会发出一条警告“无法设置实时优先级”（`unix: errno 将设置为 EPERM`），该警告将记录在 `ma.log` 文件中，并且 NSUP 在没有实时优先级的情况下继续运行。

  以下是无法设置实时优先级的情况，例如：

  - 安装在 Solaris 10 非全局区域中时

  - 在 Solaris 10 中调用 `PRIV_PROC_LOCK_MEMORY`（允许进程锁定物理内存中的页）和/或 `PRIV_PROC_PRIOCNTL` 权限时

  - 用户关闭 `setuid` 权限时

  - 用户将本软件安装为 tar 文件（`App.server` 的非根安装选项）时

  `clu_nsup_srv` 进程不会大量占用 CPU，其资源占用少，并且在使用实时优先级运行时不会影响系统性能。

- 为 Solaris 的 HADB 配置 IP 网络多路径（仅在 Solaris 9 上进行过测试）。

  Sun 建议对运行 HADB 的 Solaris 主机设置网络多路径，以便尽可能确保最高的网络可用性。《IP Network Multipathing Administration Guide》中详细介绍了网络多路径设置。如果打算将多路径与 HADB 一起使用，请参阅《IP Network Multipathing Administration Guide》中的 "Administering Network Multipathing" 一节，以便先设置多路径，然后按照如下所属针对 HADB 调整多路径设置。《IP Network Multipathing Administration Guide》是 Solaris 9 System Administrator Collection 的一部分，并且可以从 `http://docs.sun.com` 下载。

  - 设置网络接口故障检测时间

    为了使 HADB 能够正确支持多路径故障转移，网络接口故障检测时间不能超过 1000 毫秒，此时间由 `/etc/default/mpathd` 中的 `FAILURE_DETECTION_TIME` 参数指定。如果此参数的原始值较高，请编辑文件并将其值更改为 `1000`：

        FAILURE_DETECTION_TIME=1000

    为了使更改生效，执行以下命令：

        pkill -HUP in.mpathd

  - 与 HADB 一起使用的 IP 地址

    如 Solaris IP Network Multipathing Administration Guide 中所述，多路径功能涉及将物理网络接口分组为多路径接口组。在此类组中，每个物理接口均包含两个与其关联的IP 地址：物理接口地址和测试地址。只有物理接口地址可用于传输数据，而测试地址仅供 Solaris 内部使用。运行 `hadbm create --hosts` 时，应该仅使用多路径组中的一个物理接口地址来指定每台主机。

  - 示例

    假设主机 1 和主机 2 分别具有两个物理网络接口。在每台主机上，均将这两个接口设置为多路径组，并且运行 `ifconfig -a` 将产生如下结果：

    主机1

        bge0: flags=1000843<mtu 1500 index 5 inet 129.159.115.10 netmask ffffff00
        broadcast 129.159.115.255 groupname mp0
        bge0:1: flags=9040843<mtu 1500 index 5 inet 129.159.115.11 netmask ffffff00
        broadcast 129.159.115.255
        bge1: flags=1000843<mtu 1500 index 6 inet 129.159.115.12 netmask ffffff00
        broadcast 129.159.115.255 groupname mp0
        bge1:1: flags=9040843<mtu 1500 index 6 inet 129.159.115.13 netmask ff000000
        broadcast 129.159.115.255

    主机 2

        bge0: flags=1000843<mtu 1500 index 3 inet 129.159.115.20 netmask ffffff00
        broadcast 129.159.115.255 groupname mp0
        bge0:1: flags=9040843<mtu 1500 index 3 inet 129.159.115.21 netmask ff000000
        broadcast 129.159.115.255
        bge1: flags=1000843<mtu 1500 index 4 inet 129.159.115.22 netmask ffffff00
        broadcast 129.159.115.255 groupname mp0
        bge1:1: flags=9040843<mtu 1500 index 4 inet 129.159.115.23 netmask ff000000
        broadcast 129.159.115.255

    在此示例中，两台主机的物理网络接口就是列出的 `bge0` 和 `bge1`。而列出的 `bge0:1` 和 `bge1:1` 是多路径测试接口（它们在 `ifconfig` 输出中标记为 DEPRECATED），如《IP Network Multipathing Administration Guide》中所述。

    要在此环境中设置 HADB，请从每个节点选择一个物理接口地址。在此示例中，我们从主机 1 选择 `129.159.115.10` 并从主机 2 选择 `129.159.115.20`。要使用每台主机的一个数据库节点创建数据库，请对 `hadbm create` 使用以下参数：

        --host 129.159.115.10,129.159.115.20

    要使用每台主机的两个数据库节点创建数据库，请使用以下参数：

        --host 129.159.115.10,129.159.115.20,129.159.115.10,129.159.115.20

    在上述两个示例中，两台主机上的 `ma.server.mainternal.interfaces` 变量应设置为 `129.159.115.0/24`。

#### 从 4.4.1 联机升级到 4.4.2

不可能从 4.2 或 4.3 联机升级到 4.4。但是，4.4 支持未来版本的联机升级。要从 4.4.1 升级到 4.4.2，请执行以下步骤：

1. 将 4.4.2 安装到所有 HADB 主机上（安装到不同于 4.4.1 版路径的其他路径中，例如在 `/opt/SUNWhadb/4.4.2-6` 中）。

2. 将新版本安装到 `hadbm client` 主机上。

3. 停止 HADB 主机上运行的所有管理代理。

4. 使用新版本的软件和旧的配置文件来启动管理代理进程。在余下的步骤中，请使用在新版本的 `bin` 目录中找到的 `hadbm` 命令。

5. 在管理域中注册该软件包（由于默认的软件包名称为 `V4.4`，因此可能需要使用其他软件包名称，以免与现有的同名软件包冲突）：

       hadbm registerpackage --packagepath=/opt/SUNWhadb/4.4.2-6 V4.4.2

6. 使用新版本重新启动数据库（以下命令将滚动重新启动这些节点）：

       hadbm set packagename=V4.4.2 database_name

7. 检查数据库是否处于“正在运行”状态（使用 `hadbm status` 命令）并且能够正常处理客户机事务。

8. 如果一切运行正常，随后就可以删除旧安装。

   在取消注册旧软件包之前，先从 `ma` 系统信息库中删除对旧软件包的所有引用。否则，`hadbm unregisterpackage` 将失败，并显示消息“软件包正在使用”。伪重新配置操作（例如 hadbm set connectiontrace=`<same_as_previous_value>`）将删除对旧软件包的所有引用。现在，取消注册旧软件包：

       hadbm unregisterpackage [--hosts=<host_list>] <old_package_name>

   如 HADB installation instructions 所述，从文件系统中删除旧安装。

## 已知 SQL 限制

- 无法在表中创建 `UNIQUE` 二级索引。

- 除非表达式 `(DISTINCT column)` 是唯一选定的表达式，否则不允许在聚合表达式中使用该表达式。

- 创建所有表时都必须定义主键（即，不支持没有主键的表）。

- 不支持 `FULL OUTER JOIN`。

- 不支持 `IN` 子查询（此类子查询为表子查询）；例如：

      SELECT SNAME FROM S WHERE (S1#,S2#) IN (SELECT S1#,S2# FROM SP
      WHERE P#='P2')

- 不支持除 `NOT NULL` 和 `PRIMARY KEY` 以外的约束。

- 不能为资源指定新的拥有者。但是，如果执行此操作，授予当前拥有者的权限不会授予新拥有者。

- 两个或两个以上的嵌套 `NOT EXISTS` 子查询中，如果其每个子查询不直接与外层查询关联，则不受支持。

- 不支持列权限。

- 仅允许在 `VALUES` 子句中使用行值构造函数。

- 不能使用子查询作为行值构造函数中的值表达式。

- 创建主键时，不能使用以下数据类型：

  - `REAL`

  - `FLOAT`

  - `DOUBLE PRECISION`

  - `DECIMAL`

  - `NUMERIC`

## 高可用性负载平衡

Application Server 包括 HTTP、IIOP 和 JMS 客户机的负载平衡；HTTP 会话故障转移支持；EJB 群集和故障转移支持；具有高可用性的 EJB 计时器；分布式事务恢复；对持续式应用程序升级的支持；以及一个用于存储 J2EE 应用程序瞬间状态的高可用性数据库。

可用性允许对群集中的 Application Server 实例进行故障转移保护。一个 Application Server 实例出现故障时，其他 Application Server 实例将接管指定给该故障服务器的会话。会话信息存储在 HADB 中。HADB 支持 HTTP 会话的持久性、有状态会话 Bean 和单点登录证书。

- Previous: Enterprise Edition 8.1 Update 2 发行版中修复的错误
- Next: Application Server 产品发行版

- © 2010, Oracle Corporation and/or its affiliates