2.4 安装数据库

User Application 使用数据库来完成各项任务,如储存配置数据和任何工作流程活动的数据。安装基于角色的供应模块和 User Application 前,必须已安装并配置在您的平台上受支持的数据库之一。其中包括:

注:如果正要迁移到基于角色的供应模块的新版本,则必须使用之前安装(即要迁移的源安装版本)所用的同一 User Application 数据库。

2.4.1 有关配置 MySQL 数据库的说明

对于 MySQL,User Application 要求特定的配置选项。如果自行安装 MySQL,请配置这些设置。如果通过使用 JbossMysql 实用程序安装 MySQL,则实用程序将为您设置正确的值,但需要知道为以下项目保留的值:

INNODB 储存引擎和表类型

User Application 使用了 INNODB 储存引擎,通过它可以选择为 MySQL 指定 INNODB 表类型。如果创建 MySQL 表时没有指定表类型,默认情况下,该表采用 MyISAM 表类型。如果选择在 Identity Manager 安装过程中安装 MySQL,则在此过程中安装的 MySQL 采用指定的 INNODB 表类型。为确保 MySQL 服务器使用 INNODB,请校验 my.cnf(Linux 或 Solaris)或 my.ini (Windows) 中包含以下选项:

default-table-type=innodb

它不应包含 skip-innodb 选项。

设置 default-table-type=innodb 选项的备选方法是,可以将 ENGINE=InnoDB 选项追加到数据库的 SQL 脚本中的 Create Table 语句。

字符集

将整个服务器或仅仅某个数据库的字符集指定为 UTF-8。要在整个服务器范围内指定 UTF-8,可在 my.cnf(Linux 或 Solaris)或者 my.ini (Windows) 中包含以下选项:

character_set_server=utf8

也可以在创建数据库时使用以下命令指定数据库字符集:

create database databasename character set utf8 collate utf8_bin;

如果为数据库设置了字符集,还必须在 IDM-ds.xml 文件的 JDBC* URL 中指定该字符集,如以下示例所示:

<connection-url>jdbc:mysql://localhost:3306/databasename?useUnicode=true&amp;characterEncoding=utf8&amp;connectionCollation=utf8_bin</connection-url>

区分大小写

如果计划跨服务器或平台备份或恢复数据,请确保所有服务器或平台上的大小写保持一致。要确保该一致性,请为所有 my.cnf(Linux 或 Solaris)或 my.ini (Windows) 文件中的 lower_case_table_names 指定相同的值(0 或 1),而不是接受默认值(Windows 默认为 0,而 Linux 默认为 1。) 请在创建数据库保存 Identity Manager 表之前指定该值。例如,对于所有计划备份和恢复数据库的平台,可以指定

lower_case_table_names=1

(在 my.cnfmy.ini 文件中)。

Ansi 设置

如果选择使用您自己的 MySQL 5.1 安装程序,则需要将 ansi 项添加到 my.cnf(在 Linux 上)或 my.ini 文件(在 Windows 上)。 如果不添加此项,则将创建 RBPM 表,但不会执行此表的初始数据加载,并且可能显示找不到 Guest 容器页面定义错误讯息。

添加 ansi 项之后,my.cnf(或 my.ini)文件应类似于如下:

# These variables are required for IDM User Application
character_set_server=utf8
default-table-type=innodb

# Put the server in ANSI SQL mode.
#See http://www.mysql.com/doc/en/ANSI_mode.html
ansi

要确认对使用 ansi 模式的更改是否已生效,可以在您的 MySQL 服务器上执行以下 SQL:

mysql> select @@global.sql_mode;
+-------------------------------------------------------------+
| @@global.sql_mode                                           |
+-------------------------------------------------------------+
| REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

用户帐户要求

在安装过程中所用的用户帐户必须具有对 User Application 将要使用的数据库的完全访问权限(即是此数据库的拥有者)。此外,此帐户还需要对系统中的表的访问权限。根据环境的不同,表可能有所不同。

创建用户以登录 MySQL 服务器并对用户授予特权,例如:

GRANT ALL PRIVILEGES ON <dbname.>* TO <username>@<host> IDENTIFIED BY ‘password’

最低特权集为:CREATE、INDEX、INSERT、UPDATE、DELETE 和 LOCK TABLES。关于 GRANT 命令的文档,请参阅 http://www.mysql.org/doc/refman/5.0/en/grant.html

重要说明:用户帐户还必须具有对 mysql.user 表的选择权限。 以下是授予适当权限所需的 SQL 语法:

USE mysql;
GRANT SELECT ON mysql.user TO <username>@<host>;

2.4.2 有关配置 Oracle 数据库的说明

创建 Oracle 数据库时,需要确保使用 AL32UTF8 来指定基于 Unicode 编码的字符集。(请参见 AL32UTF8。)

为 Oracle 数据库创建用户时,需要使用 SQL Plus 实用程序发出以下语句。这些语句用于创建用户并设置此用户的特权。授予用户 CONNECT 和 RESOURCE 特权,例如:

CREATE USER idmuser IDENTIFIED BY password

GRANT CONNECT, RESOURCE to idmuser

Oracle 11g 上的 UTF-8 在 Oracle 11g 上,可以发出以下命令以确认是否已针对 UTF-8 启用设置:

select * from nls_database_parameters;

如果未针对 UTF-8 进行设置,则将返回以下数据:

NLS_CHARACTERSET
WE8MSWIN1252

如果已针对 UTF-8 进行设置,则将返回以下数据:

NLS_CHARACTERSET
AL32UTF8

2.4.3 有关配置 MS SQL Server 数据库的说明

按以下方式设置 MS SQL Server 数据库:

  1. 安装 MS SQL Server。

  2. 连接服务器并打开创建数据库和数据库用户的应用程序(通常是 SQL Server Management Studio 应用程序)。

  3. 创建一个数据库。SQL Server 不允许用户选择数据库的字符集。 IDM User Application 以支持 UTF-8 的 NCHAR 列类型储存 SQL Server 字符数据。

  4. 创建登录。

  5. 作为数据库用户添加登录。

  6. 将以下特权授予登录:CREATE TABLE、CREATE INDEX、SELECT、INSERT、UPDATE 和 DELETE。

User Application 要求使用 Microsoft SQL Server 2005 JDBC 驱动程序版本 1.0.809.102。 请注意,此 JDBC 驱动程序仅官方支持 Sun Solaris、Red Hat Linux 和 Windows 2000 或更高版本的操作系统。

2.4.4 有关配置 DB2 数据库的说明

本节提供有关 DB2 配置的说明。

提供数据库驱动程序 JAR

安装过程中,需要在数据库用户名和口令屏幕上选定数据库驱动程序 JAR 文件。但数据库驱动程序 JAR 文件字段的浏览按钮仅允许您选择一个 (1) JAR。对于 DB2,必须提供两个 (2) JAR:

  • db2jcc.jar

  • db2jcc_license_cu.jar

因此,如果正在运行针对 WebSphere(DB2 唯一支持的应用程序服务器)的安装程序,可以选择一个 JAR,但应使用对于正在运行安装程序的操作系统而言正确的文件分隔符手动输入第二个 JAR。或者,可以手动输入上述两项。

例如,在 Windows 上:

c:\db2jars\db2jcc.jar;c:\db2jars\db2jcc_license_cu.jar

例如,在 Solaris 和 Linux 上:

/home/lab/db2jars/db2jcc.jar:/home/lab/db2jcc_license_cu.jar

微调 DB2 数据库,防止死锁和超时

使用 DB2 时,如果看到错误“由于死锁或超时,当前事务已回滚”,则问题可能是由用户和数据库并发程度高引起的。

DB2 提供了许多解决锁定冲突的技巧,包括微调基于成本的优化程序。DB2 管理文档中所含的性能指南是包含关于微调主题更多信息的一个很好来源。

由于数据的并发程度和大小各异,不存在适用于所有安装的规定微调值。但是,有一些可能和您的安装相关的 DB2 微调提示:

  • reorgchk update statistics 命令会更新优化程序所用的统计数字。定期更新这些统计数字可能就足以缓解该问题了。

  • 使用 DB2 注册表参数 DB2_RR_TO_RS 可通过不锁定插入或更新的行的下个键值,改进并发性能。

  • 增大数据库的 MAXLOCKS 和 LOCKLIST 参数。

  • 增大数据库连接池的 currentLockTimeout 属性。

  • 使用 Database Configuration Advisor,为加快事务处理进行优化。

  • 将所有 User Application 表变为 VOLATILE,向优化程序指示表的基数将有显著变化。例如,要使 AFACTIVITY 表变为 VOLATILE,可发出命令:ALTER TABLE AFACTIVITY VOLATILE

    User Application 启动一次并且创建数据库表之后,必须运行 ALTER TABLE 命令。有关该语句的更多信息,请参阅 ALTER TABLE 文档。以下是适用于所有 User Application 表的 SQL 语句:

    ALTER TABLE AFACTIVITY VOLATILE
    ALTER TABLE AFACTIVITYTIMERTASKS VOLATILE
    ALTER TABLE AFBRANCH VOLATILE
    ALTER TABLE AFCOMMENT VOLATILE
    ALTER TABLE AFDOCUMENT VOLATILE
    ALTER TABLE AFENGINE VOLATILE
    ALTER TABLE AFENGINESTATE VOLATILE
    ALTER TABLE AFMODEL VOLATILE
    ALTER TABLE AFPROCESS VOLATILE
    ALTER TABLE AFPROVISIONINGSTATUS VOLATILE
    ALTER TABLE AFQUORUM VOLATILE
    ALTER TABLE AFRESOURCEREQUESTINFO VOLATILE
    ALTER TABLE AFWORKTASK VOLATILE
    ALTER TABLE AF_ROLE_REQUEST_STATUS VOLATILE
    ALTER TABLE ATTESTATION_ATTESTER VOLATILE
    ALTER TABLE ATTESTATION_ATTRIBUTE VOLATILE
    ALTER TABLE ATTESTATION_QUESTION VOLATILE
    ALTER TABLE ATTESTATION_REPORT VOLATILE
    ALTER TABLE ATTESTATION_REQUEST VOLATILE
    ALTER TABLE ATTESTATION_RESPONSE VOLATILE
    ALTER TABLE ATTESTATION_SURVEY_QUESTION VOLATILE
    ALTER TABLE ATTESTATION_TARGET VOLATILE
    ALTER TABLE AUTHPROPS VOLATILE
    ALTER TABLE DATABASECHANGELOG VOLATILE
    ALTER TABLE DATABASECHANGELOGLOCK VOLATILE
    ALTER TABLE DSS_APPLET_BROWSER_TYPES VOLATILE
    ALTER TABLE DSS_APPLET_CFG VOLATILE
    ALTER TABLE DSS_APPLET_CFG_MAP VOLATILE
    ALTER TABLE DSS_BROWSER_TYPE VOLATILE
    ALTER TABLE DSS_CONFIG VOLATILE
    ALTER TABLE DSS_EXT_KEY_USAGE_RESTRICTION VOLATILE
    ALTER TABLE DSS_USR_POLICY_SET VOLATILE
    ALTER TABLE JBM_COUNTER VOLATILE
    ALTER TABLE JBM_DUAL VOLATILE
    ALTER TABLE JBM_ID_CACHE VOLATILE
    ALTER TABLE JBM_MSG VOLATILE
    ALTER TABLE JBM_MSG_REF VOLATILE
    ALTER TABLE JBM_POSTOFFICE VOLATILE
    ALTER TABLE JBM_ROLE VOLATILE
    ALTER TABLE JBM_TX VOLATILE
    ALTER TABLE JBM_USER VOLATILE
    ALTER TABLE PORTALCATEGORY VOLATILE
    ALTER TABLE PORTALPORTLETHANDLES VOLATILE
    ALTER TABLE PORTALPORTLETSETTINGS VOLATILE
    ALTER TABLE PORTALPRODUCERREGISTRY VOLATILE
    ALTER TABLE PORTALPRODUCERS VOLATILE
    ALTER TABLE PORTALREGISTRY VOLATILE
    ALTER TABLE PROFILEGROUPPREFERENCES VOLATILE
    ALTER TABLE PROFILEUSERPREFERENCES VOLATILE
    ALTER TABLE PROVISIONING_CODE_MAP VOLATILE
    ALTER TABLE PROVISIONING_CODE_MAP_LABEL VOLATILE
    ALTER TABLE PROVISIONING_VIEW_VALUE VOLATILE
    ALTER TABLE PROVISIONING_VIEW_VALUE_LABEL VOLATILE
    ALTER TABLE SECURITYACCESSRIGHTS VOLATILE
    ALTER TABLE SECURITYPERMISSIONMETA VOLATILE
    ALTER TABLE SECURITYPERMISSIONS VOLATILE
    ALTER TABLE SEC_DELPROXY_CFG VOLATILE
    ALTER TABLE SEC_DELPROXY_SRV_CFG VOLATILE
    ALTER TABLE SEC_SYNC_CLEANUP_QUEUE VOLATILE