5.
數(shù)據(jù)庫配置
從
MySQL:
|
|
Oracle:
|
在該目錄下,你還可以發(fā)現(xiàn)其他版本的轉(zhuǎn)換腳本。另外,需要注意的是,如果你是從更早期的版本升級到當前版本,則需要依次執(zhí)行相應(yīng)腳本,比如,如果你要從
Sakai
支持的產(chǎn)品級的數(shù)據(jù)庫包括
MySQL
MySQL:
|
|
Oracle:
|
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
|
5.3.
創(chuàng)建數(shù)據(jù)庫和用戶
在使用
sakai
之前,必須先創(chuàng)建一個
sakai
數(shù)據(jù)庫,并建立相應(yīng)的特權(quán)用戶,下面以
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:
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database
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ù)庫時,必須確保使用
UTF-8
字符集,就像
tomcat
也必須配置成
UTF-8
字符集一樣。如果你不確定你的數(shù)據(jù)庫的當前配置,你可以通過
sql
來查詢,下面是以
oralce
為例,說明如何確定你的數(shù)據(jù)庫使用的字符集:
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
AL32UTF8
數(shù)據(jù)庫的屬性也是在
sakai.properties
文件中進行配置,以下分別是
mysql
和
oracle
數(shù)據(jù)庫的配置信息,你所需要的是根據(jù)自己的具體設(shè)置來進行本地化的修改:
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
可能會出現(xiàn)一些性能方面的問題,因此
sakai
強烈建議采用
oracle
數(shù)據(jù)庫時采用以下配置來避免可能出現(xiàn)的性能問題:
# For improved Oracle performance (from the
validationQuery@javax.sql.BaseDataSource=
defaultTransactionIsolationString@javax.sql.BaseDataSource=
testOnBorrow@javax.sql.BaseDataSource=false
oracle
將自動配置前兩項的值。
一旦你修改了數(shù)據(jù)庫的配置,你只需重起
tomcat
即可生效,可以查看啟動日志,看是否有數(shù)據(jù)庫連接方面的錯誤。
Oracle and Tests&Quizzes
如果你使用的是
oracle
數(shù)據(jù)庫,你還必須檢查
SAM_MEDIA_T
表中的
MEDIA
字段,
hibernate
能夠為每個字段選擇正確的數(shù)據(jù)類型,但是在這個字段上,對于
oracle
經(jīng)常會出現(xiàn)錯誤。對于不同數(shù)據(jù)庫,正確的數(shù)據(jù)類型應(yīng)該是如下:
HSQL:
|
varbinary |
MySQL:
|
longblob |
Oracle:
|
blob |
如果你需要在你的數(shù)據(jù)庫中改變這個字段的數(shù)據(jù)類型,你還必須重建該表的主鍵,以下是一個例子:
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.