SakaiCLE2.9數據庫遷移

最近作了不少關於Sakai數據庫遷移的工做,服務器和服務器之間,Oralcle和Mysql之間導來導去。儘管最後發現都是無用功,但把數據庫遷移的過程記下來,也算沒白忙活。 php

Oracle版本:Oracle11g2 java

Mysql版本:Mysql5.5.30 mysql

Sakai版本:CLE2.9.1 sql

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的位置,以下圖所示。 api

2.新建兩個鏈接,一個是源服務器鏈接,一個是目標服務器鏈接,而後使用Data Transfer的功能,選擇好Schema,須要遷移的表,視圖,序列等,開始便可。以下圖所示。 tomcat

2、Mysql到Mysql 服務器

須要使用的工具:mysql-gui-tools-5.0-r17-win32.msi oracle

下載地址:http://pan.baidu.com/share/link?shareid=457410&uk=2819378455 app

服務器與服務器之間的遷移使用該工具提供的MySQL Migration Toolkit便可完成,遷移過程在下面Oracle到Mysql的遷移中會詳細介紹,這裏相似。

一臺服務器中數據庫的複製,根據要求,要把名爲system數據庫徹底複製到sakai數據庫,因爲一些外鍵的限制,使用phpMysqlAdmin工具提供的複製數據庫的功能沒法順利完成,而使用該工具進行Backup,而後Restore就能夠了。備份system數據庫,而後restore到sakai數據庫,就ok了,以下圖所示。

3、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中的表結構建好了。

一、打開MySQL Migration Toolkit工具,點擊next,選擇Direct Magration,而後next

二、配置源數據庫(Oracle)與目標數據庫(Mysql)的鏈接(地址,端口,用戶名密碼),選擇須要遷移的Schema

三、點擊details,選擇須要遷移的表,視圖等,以下圖所示

4.設置參數,選擇Multilanguage(sakai僅支持utf8),以下圖

5.一直點next,到下一步,選擇show all objects with messages,把advance展開,把每張表的建表語句都刪掉(建表讓Sakai在Mysql裏本身作,這裏再也不作,須要刪300多張表),apply change便可,如圖所示。

六、後面一直next便可。這樣既可完成Oracle到Mysql的遷移。

4、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,就完成了資源從數據庫到文件系統的轉移,而後再遷移到別的機器上就方便了。只要把資源文件遷移到目標服務器相同的目錄下便可。
相關文章
相關標籤/搜索