最近做了很多关于Sakai数据库迁移的工作,服务器和服务器之间,Oralcle和Mysql之间导来导去。尽管最后发现都是无用功,但把数据库迁移的过程记下来,也算没白忙活。
Oracle版本:Oracle11g2
Mysql版本:Mysql5.5.30
Sakai版本:CLE2.9.1
一、Oracle到Oracle
使用的工具:Navicat For Oracle
下载地址:http://pan.baidu.com/share/link?shareid=457377&uk=2819378455
可能要更新一下oci的版本,需要instantclient-sqlplus-win32-11.2.0.1.0.zip这个包(下载地址:http://pan.baidu.com/share/link?shareid=457381&uk=2819378455)
1.软件安装完成以后启动,选择Tools—Option,即可更新Oci及sqlplus的位置,如下图所示。
2.新建两个连接,一个是源服务器连接,一个是目标服务器连接,然后使用Data Transfer的功能,选择好Schema,需要迁移的表,视图,序列等,开始即可。如下图所示。
二、Mysql到Mysql
需要使用的工具:mysql-gui-tools-5.0-r17-win32.msi
下载地址:http://pan.baidu.com/share/link?shareid=457410&uk=2819378455
服务器与服务器之间的迁移使用该工具提供的MySQL Migration Toolkit即可完成,迁移过程在下面Oracle到Mysql的迁移中会详细介绍,这里类似。
一台服务器中数据库的复制,根据要求,要把名为system数据库完全复制到sakai数据库,由于一些外键的限制,使用phpMysqlAdmin工具提供的复制数据库的功能无法顺利完成,而使用该工具进行Backup,然后Restore就可以了。备份system数据库,然后restore到sakai数据库,就ok了,如下图所示。
三、Oracle到Mysql
实现不同服务器间不同数据库的迁移,特定此方法仅对Sakai的数据库迁移工作有效,因为Sakai在启动的时候可以自动把Mysql的表建立起来,就不用考虑Oracle到Mysql引起的字段不同的问题,只要把数据迁过来就行了。
需要使用的工具1:mysql-gui-tools-5.0-r17-win32.msi
下载地址:http://pan.baidu.com/share/link?shareid=457410&uk=2819378455
需要使用的工具2:phpMysqlAdmin
下载地址:http://pan.baidu.com/share/link?shareid=457429&uk=2819378455
(由于MySQL Migration Toolki不提供仅仅转移数据库结构的功能,所以需要用phpMysqlAdmin来完成)
0、准备工作:将sakai在mysql上的某个空库(如sakaitmp)的基础上运行,就会在sakaitmp中生成sakai的表,然后使用phpMysqlAdmin工具的复制数据库功能将sakaitmp库(注意要选择“仅结构”)复制到另外一个数据库(这个数据库的名字与oracle中需要迁移的schema名字相同),这样就把mysql中的表结构建好了。
1、打开MySQL Migration Toolkit工具,点击next,选择Direct Magration,然后next
2、配置源数据库(Oracle)与目标数据库(Mysql)的连接(地址,端口,用户名密码),选择需要迁移的Schema
3、点击details,选择需要迁移的表,视图等,如下图所示
4.设置参数,选择Multilanguage(sakai仅支持utf8),如下图5.一直点next,到下一步,选择show all objects with messages,把advance展开,把每张表的建表语句都删掉(建表让Sakai在Mysql里自己做,这里不再做,需要删300多张表),apply change即可,如图所示。
6、后面一直next即可。这样既可完成Oracle到Mysql的迁移。
四、Sakai中资源的迁移
Sakai提供两种存放资源的方式,一种是放在数据库中,一种是放在文件系统中,放在文件系统中需要修改配置项(sakai.properties中):
[email protected] = /app/elearndata
[email protected] =vol1,vol2,vol3
如果已经放到数据库中了,想转移到文件系统中,就加上下面的配置项:
[email protected] = true
但对于Oracle数据库好像不管用,参考这里报告的问题https://jira.sakaiproject.org/browse/KNL-164,
修改
/kernel/kernel-impl/src/main/java/org/sakaiproject/content/impl/DbContentService.java
这个代码即可(在kernel-impl)。下面是patch文件:
===================================================================
---src/main/java/org/sakaiproject/content/impl/DbContentService.java (revisão 236)
+++src/main/java/org/sakaiproject/content/impl/DbContentService.java (cópia de trabalho)
@@ -2724,12 +2724,10 @@
try
{
- Object clob = result.getObject(3);
- if(clob != null && clob instanceof byte[])
- {
- edit = new BaseResourceEdit();
- resourceSerializer.parse(edit, (byte[]) clob);
- }
+ Blob clob = result.getBlob(3);
+ edit = new BaseResourceEdit();
+ resourceSerializer.parse(edit, clob.getBytes(1L, (int) clob.length()));
+
}
重新启动tomcat,就完成了资源从数据库到文件系统的转移,然后再迁移到别的机器上就方便了。只要把资源文件迁移到目标服务器相同的目录下即可。