5.
數(shù)據(jù)庫(kù)配置
5.1.
從早期版本移植
從
2.2.0
到
2.2.1
,
sakai
提供了
mysql
和
oracle
的轉(zhuǎn)換腳本,保存在以下目錄
reference/docs/updating
,從以下網(wǎng)址也可以獲得:
在該目錄下,你還可以發(fā)現(xiàn)其他版本的轉(zhuǎn)換腳本。另外,需要注意的是,如果你是從更早期的版本升級(jí)到當(dāng)前版本,則需要依次執(zhí)行相應(yīng)腳本,比如,如果你要從
2.1.2
升級(jí)到
2.2.1
,則需要先執(zhí)行
2.1.2
到
2.2.0
的轉(zhuǎn)換腳本,然后再執(zhí)行
2.2.0
到
2.2.1
的轉(zhuǎn)換腳本。
5.2.
驅(qū)動(dòng)配置
Sakai
支持的產(chǎn)品級(jí)的數(shù)據(jù)庫(kù)包括
MySQL 4.1.12+
(注意,
MySQL 5.0
還未經(jīng)過(guò)充分測(cè)試)和
oracle9i+
。
JDBC
驅(qū)動(dòng)的版本也很重要,
對(duì)于
mysql
來(lái)說(shuō),需要用
MySQL a 3.1.12+
連接器,對(duì)于
oracle
來(lái)說(shuō)必須用
10g
的驅(qū)動(dòng),即使數(shù)據(jù)庫(kù)版本是
9i
,這些驅(qū)動(dòng)應(yīng)該放到
$CATALINA_HOME/common/lib
目錄下,相應(yīng)的驅(qū)動(dòng)可以從以下網(wǎng)址獲得:
5.3.
創(chuàng)建數(shù)據(jù)庫(kù)和用戶
在使用
sakai
之前,必須先創(chuàng)建一個(gè)
sakai
數(shù)據(jù)庫(kù),并建立相應(yīng)的特權(quán)用戶,下面以
mysql
為例說(shuō)明操作的過(guò)程:
C:\sakai\reference\sql\legacy\mysql\>
mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
?
Your MySQL connection id is 51 to server version: 4.1.5-gamma-nt
?
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
?
mysql> create database sakai default character set utf8;
Query OK, 1 row affected (0.00 sec)
?
mysql> grant all on sakai.* to sakaiuser@'localhost' identified by 'sakaipassword';
Query OK, 0 rows affected (0.00 sec
?
mysql> grant all on sakai.* to sakaiuser@'127.0.0.1' identified by 'sakaipassword';
Query OK, 0 rows affected (0.00 sec)
?
mysql> quit
UTF-8
字符集
創(chuàng)建數(shù)據(jù)庫(kù)時(shí),必須確保使用
UTF-8
字符集,就像
tomcat
也必須配置成
UTF-8
字符集一樣。如果你不確定你的數(shù)據(jù)庫(kù)的當(dāng)前配置,你可以通過(guò)
sql
來(lái)查詢,下面是以
oralce
為例,說(shuō)明如何確定你的數(shù)據(jù)庫(kù)使用的字符集:
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
AL32UTF8
5.4. Database
屬性
數(shù)據(jù)庫(kù)的屬性也是在
sakai.properties
文件中進(jìn)行配置,以下分別是
mysql
和
oracle
數(shù)據(jù)庫(kù)的配置信息,你所需要的是根據(jù)自己的具體設(shè)置來(lái)進(jìn)行本地化的修改:
MySQL:
|
hibernate.dialect=org.hibernate.dialect.MySQLDialect
vendor@org.sakaiproject.db.api.SqlService=mysql
driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver
url@javax.sql.BaseDataSource=jdbc:mysql://SERVER:3306/DB?useUnicode=true&characterEncoding=UTF-8
username@javax.sql.BaseDataSource=USER
password@javax.sql.BaseDataSource=PASSWORD
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED
|
Oracle:
|
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
vendor@org.sakaiproject.db.api.SqlService=oracle
driverClassName@javax.sql.BaseDataSource=oracle.jdbc.driver.OracleDriver
url@javax.sql.BaseDataSource=jdbc:oracle:thin:@SERVER:1521:DB
username@javax.sql.BaseDataSource=USER
password@javax.sql.BaseDataSource=PASSWORD
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED
|
Oracle
的性能
如果采用和
mysql
或者
HSQL
類(lèi)似的配置,
oracle
可能會(huì)出現(xiàn)一些性能方面的問(wèn)題,因此
sakai
強(qiáng)烈建議采用
oracle
數(shù)據(jù)庫(kù)時(shí)采用以下配置來(lái)避免可能出現(xiàn)的性能問(wèn)題:
# For improved Oracle performance (from the University of Michigan)
validationQuery@javax.sql.BaseDataSource=
defaultTransactionIsolationString@javax.sql.BaseDataSource=
testOnBorrow@javax.sql.BaseDataSource=false
oracle
將自動(dòng)配置前兩項(xiàng)的值。
一旦你修改了數(shù)據(jù)庫(kù)的配置,你只需重起
tomcat
即可生效,可以查看啟動(dòng)日志,看是否有數(shù)據(jù)庫(kù)連接方面的錯(cuò)誤。
Oracle and Tests&Quizzes
如果你使用的是
oracle
數(shù)據(jù)庫(kù),你還必須檢查
SAM_MEDIA_T
表中的
MEDIA
字段,
hibernate
能夠?yàn)槊總€(gè)字段選擇正確的數(shù)據(jù)類(lèi)型,但是在這個(gè)字段上,對(duì)于
oracle
經(jīng)常會(huì)出現(xiàn)錯(cuò)誤。對(duì)于不同數(shù)據(jù)庫(kù),正確的數(shù)據(jù)類(lèi)型應(yīng)該是如下:
HSQL:
|
varbinary
|
MySQL:
|
longblob
|
Oracle:
|
blob
|
如果你需要在你的數(shù)據(jù)庫(kù)中改變這個(gè)字段的數(shù)據(jù)類(lèi)型,你還必須重建該表的主鍵,以下是一個(gè)例子:
SQL> alter table SAM_MEDIA_T modify MEDIA BLOB;
Table altered.
SQL> select constraint_name from user_constraints where table_name='SAM_MEDIA_T'
and CONSTRAINT_TYPE='P';
CONSTRAINT_NAME
------------------------------
SYS_C0064435
SQL> alter table sam_media_t drop constraint SYS_C0064435;
Table altered.
SQL> alter table SAM_MEDIA_T add constraint SYS_C0064435 primary key (MEDIAID);
Table altered.
SQL> desc SAM_MEDIA_T;
[table with BLOB type]
SQL> select constraint_name from user_constraints where table_name='SAM_MEDIA_T'
and CONSTRAINT_TYPE='P';
CONSTRAINT_NAME
------------------------------
SYS_C0064435
SQL> commit;
Commit complete.