5.
數據庫配置
從
MySQL:
|
|
Oracle:
|
在該目錄下,你還可以發現其他版本的轉換腳本。另外,需要注意的是,如果你是從更早期的版本升級到當前版本,則需要依次執行相應腳本,比如,如果你要從
Sakai
支持的產品級的數據庫包括
MySQL
MySQL:
|
|
Oracle:
|
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
|
在使用
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:
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
字符集
創建數據庫時,必須確保使用
UTF-8
字符集,就像
tomcat
也必須配置成
UTF-8
字符集一樣。如果你不確定你的數據庫的當前配置,你可以通過
sql
來查詢,下面是以
oralce
為例,說明如何確定你的數據庫使用的字符集:
SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
VALUE
--------------------------------------------------------------------------------
AL32UTF8
數據庫的屬性也是在
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
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.