2.4 安裝資料庫

「使用者應用程式」會使用資料庫執行各種任務,例如,儲存組態資料,以及為任何工作流程活動儲存資料。必須安裝和設定您平台所支援的其中一個資料庫,才能安裝角色提供模組和使用者應用程式。這包含:

附註:如果要移轉到新版的角色提供模組,必須使用之前安裝 (也就是您要移轉的安裝來源) 所使用的使用者應用程式資料庫。

2.4.1 設定 MySQL 資料庫的說明

使用者應用程式需要使用 MySQL 的特定組態選項。如果您是自行安裝 MySQL,請設定這些設定。如果您使用 JBossMySQL 公用程式來安裝 MySQL,則公用程式會為您設定正確的值,但您必須知道那些值是什麼,才能維護下列項目:

INNODB 存放引擎和表格類型

「使用者應用程式」使用了 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 程序檔中的建立表格陳述式。

字元集

指定 UTF-8 做為整個伺服器或只有資料庫的字元集。 將下列選項納入 my.cnf (Linux 或 Solaris) 或 my.ini (Windows),以涵蓋整個伺服器的基礎來指定 UTF-8:

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 安裝程式,需要在 my.cnf (Linux) 或 my.ini 檔案 (Windows) 中新增 ansi 項目。如果沒有新增此項目,RBPM 表格仍然會建立,但不會執行表格的初始資料載入,而且您可能還會看到找不到訪客容器頁面定義的錯誤訊息。

以下便是新增 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)

使用者帳戶要求

安裝期間使用的使用者帳戶對使用者應用程式使用的資料庫必須具有完全存取權限 (擁有者)。此外,此帳戶還需要具備對系統中表格的存取權限。不同環境下,表格可能會有所不同。

建立使用者以登入 MySQL 伺服器,並將權限授予該使用者,例如:

GRANT ALL PRIVILEGES ON <資料庫名稱.>* TO <使用者名稱>@<主機> IDENTIFIED BY '密碼'

最小權限組為 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 IDM 使用者 IDENTIFIED BY 密碼

GRANT CONNECT, RESOURCE to IDM 使用者

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 伺服器。

  2. 連接到伺服器,並開啟用來建立資料庫與資料庫使用者的應用程式 (一般為 SQL Server Management Studio 應用程式)。

  3. 建立資料庫。SQL 伺服器不允許使用者選取資料庫使用的字元集。IDM 使用者應用程式在支援 UTF-8 的 NCHAR 欄類型中儲存 SQL Server 字元資料。

  4. 建立登入。

  5. 將登入新增為資料庫的使用者。

  6. 將這些權限授予登入:CREATE TABLE、CREATE INDEX、SELECT、INSERT、UPDATE 與 DELETE。

使用者應用程式需要 1.0.809.102 版的 Microsoft SQL Server 2005 JDBC 驅動程式。請注意,正式對此 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 內容。

  • 使用「資料庫組態顧問」,並最佳化以加快異動速度。

  • 將所有的「使用者應用程式」表改變為 VOLATILE,以讓最佳化程式了解,表格基數將明顯改變。例如,若要將 AFACTIVITY 表變成 VOLATILE 表,您可發出命令:ALTER TABLE AFACTIVITY VOLATILE

    在「使用者應用程式」已啟動且資料庫表已建立後,必須執行 ALTER TABLE 命令。如需此陳述式的詳細資訊,請參閱 ALTER TABLE 文件。以下是所有「使用者應用程式」表的 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