SakaiCLE2.9数据库迁移

假装没事ソ 提交于 2019-12-03 20:25:49

最近做了很多关于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中):

bodyPath@org.sakaiproject.content.api.ContentHostingService = /app/elearndata

bodyVolumes@org.sakaiproject.content.api.ContentHostingService =vol1,vol2,vol3

如果已经放到数据库中了,想转移到文件系统中,就加上下面的配置项:

convertToFile@org.sakaiproject.content.api.ContentHostingService = 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,就完成了资源从数据库到文件系统的转移,然后再迁移到别的机器上就方便了。只要把资源文件迁移到目标服务器相同的目录下即可。






易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!