DSpace 3.5迁移至6.2:Flyway脚本报错及Tomcat启动异常求助
DSpace 3.5 → 6.2 迁移问题全解:Flyway脚本崩溃、空AssetStore异常及界面修复
我之前帮团队做过类似的跨大版本迁移,碰到过几乎一模一样的问题,给你梳理下落地性强的解决思路:
一、Flyway执行V6.0脚本崩溃的修复
这两个脚本都是DSpace 6.0引入的核心优化脚本,崩溃基本都是老版本数据库的schema存在不一致或依赖缺失导致的:
针对 V6.0_2016.04.04__DS-3086-OAI-Performance-fix.sql
这个脚本主要给OAI相关表加索引,崩溃大概率是你的3.5数据库里oai_records表结构不符,或者已有重复索引:
- 先手动查数据库里
oai_records表的现有索引,看看是否已经存在脚本要创建的idx_oai_records_date和idx_oai_records_set_spec - 如果索引已存在,直接注释掉脚本里对应的
CREATE INDEX语句;如果表缺失datestamp/set_spec字段(这俩是3.5原生字段,可能之前操作导致丢失),先补全字段再执行 - 重新启动Flyway迁移
针对 V6.0_2016.07.21__DS-2775.sql
这个脚本处理权限与资源政策的关联,崩溃通常是resourcepolicy表存在无效外键引用:
- 先运行查询定位无效数据:
-- 找出关联无效用户的资源政策 SELECT * FROM resourcepolicy rp WHERE NOT EXISTS (SELECT 1 FROM eperson e WHERE e.eperson_id = rp.eperson_id); -- 找出关联无效资源的资源政策 SELECT * FROM resourcepolicy rp WHERE NOT EXISTS (SELECT 1 FROM resource r WHERE r.resource_id = rp.resource_id); - 把查询到的无效记录删除(或根据业务需求关联到有效用户/资源)
- 再重新执行该脚本
二、空AssetStore引发的异常处理
你清空了原AssetStore但没调整配置,DSpace启动时会默认扫描所有配置的assetstore目录,找不到文件就会抛异常:
- 调整配置文件:
- 打开
local.cfg,找到assetstore.dir相关配置,移除未使用的assetstore目录;如果全清空了,把assetstore.dir指向一个空但存在的目录,同时确保Tomcat用户有读写权限 - 开启
assetstore.allow-missing = true(DSpace 6.x支持),让系统忽略缺失的资源文件,避免抛出致命异常
- 打开
- 数据库清理(可选):
如果数据库里还存着指向原AssetStore的bitstream记录,可批量更新bitstream表的store_number和internal_id到新配置的assetstore,或标记这些比特流为已删除(根据业务需求)
三、界面显示异常排查
JSPUI能显示基础配置但界面异常,通常和这几点有关:
- 静态资源部署问题:DSpace 6.x的JSPUI静态资源(CSS、JS、图片)位置和3.5不同,检查
[dspace]/webapps/jspui下的static文件夹是否完整,Tomcat是否正确解压了war包 - 自定义主题兼容问题:3.5的主题结构和6.x不兼容,如果你用了自定义主题,需要把代码迁移到6.x的主题框架下,同时检查
local.cfg里的theme.jspui配置是否正确 - 缓存残留问题:清空Tomcat的
work和temp目录,重启Tomcat,避免旧的JSP编译文件导致显示错乱
内容的提问来源于stack exchange,提问作者CledsonJr
相关产品推荐
相关产品推荐

