Posted on 2006-09-08 17:16
毛里求斯的化石 阅读(1947)
评论(1) 编辑 收藏 所属分类:
开源
5.
数据库配置
5.1.
从早期版本移植
从
2.2.0
到
2.2.1
,
sakai
提供了
mysql
和
oracle
的转换脚本,保存在以下目录
reference/docs/updating
,从以下网址也可以获得:
在该目录下,你还可以发现其他版本的转换脚本。另外,需要注意的是,如果你是从更早期的版本升级到当前版本,则需要依次执行相应脚本,比如,如果你要从
2.1.2
升级到
2.2.1
,则需要先执行
2.1.2
到
2.2.0
的转换脚本,然后再执行
2.2.0
到
2.2.1
的转换脚本。
5.2.
驱动配置
Sakai
支持的产品级的数据库包括
MySQL 4.1.12+
(注意,
MySQL 5.0
还未经过充分测试)和
oracle9i+
。
JDBC
驱动的版本也很重要,
对于
mysql
来说,需要用
MySQL a 3.1.12+
连接器,对于
oracle
来说必须用
10g
的驱动,即使数据库版本是
9i
,这些驱动应该放到
$CATALINA_HOME/common/lib
目录下,相应的驱动可以从以下网址获得:
5.3.
创建数据库和用户
在使用
sakai
之前,必须先创建一个
sakai
数据库,并建立相应的特权用户,下面以
mysql
为例说明操作的过程:
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
字符集
创建数据库时,必须确保使用
UTF-8
字符集,就像
tomcat
也必须配置成
UTF-8
字符集一样。如果你不确定你的数据库的当前配置,你可以通过
sql
来查询,下面是以
oralce
为例,说明如何确定你的数据库使用的字符集:
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
AL32UTF8
5.4. Database
属性
数据库的属性也是在
sakai.properties
文件中进行配置,以下分别是
mysql
和
oracle
数据库的配置信息,你所需要的是根据自己的具体设置来进行本地化的修改:
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
类似的配置,
oracle
可能会出现一些性能方面的问题,因此
sakai
强烈建议采用
oracle
数据库时采用以下配置来避免可能出现的性能问题:
# For improved Oracle performance (from the University of Michigan)
validationQuery@javax.sql.BaseDataSource=
defaultTransactionIsolationString@javax.sql.BaseDataSource=
testOnBorrow@javax.sql.BaseDataSource=false
oracle
将自动配置前两项的值。
一旦你修改了数据库的配置,你只需重起
tomcat
即可生效,可以查看启动日志,看是否有数据库连接方面的错误。
Oracle and Tests&Quizzes
如果你使用的是
oracle
数据库,你还必须检查
SAM_MEDIA_T
表中的
MEDIA
字段,
hibernate
能够为每个字段选择正确的数据类型,但是在这个字段上,对于
oracle
经常会出现错误。对于不同数据库,正确的数据类型应该是如下:
HSQL:
|
varbinary
|
MySQL:
|
longblob
|
Oracle:
|
blob
|
如果你需要在你的数据库中改变这个字段的数据类型,你还必须重建该表的主键,以下是一个例子:
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.