数据库资源紧急解锁后产品锁失效与channel staging启动失败求助
问题根因
你执行的SQL仅清理了关联故障StagingProcess的锁记录,未处理ISRESOURCE与RESOURCELOCK表的关联数据一致性,且没有清空应用节点的资源锁缓存,最终导致锁写入不完整、残留孤立锁记录的问题。
修复步骤
1. 修复数据库锁记录一致性
首先删除ISRESOURCE表中点击锁定生成的无效半完成记录:
DELETE FROM ISRESOURCE WHERE RESOURCEOWNERID IS NULL AND LOCKCREATIONDATE IS NULL AND LOCKEXPIRATIONDATE IS NULL;
删除RESOURCELOCK表中无对应ISRESOURCE记录的孤立锁数据:
DELETE FROM RESOURCELOCK rl WHERE NOT EXISTS ( SELECT 1 FROM ISRESOURCE ir WHERE ir.UUID = rl.LOCKID );
清理报错对应的MARKETING_Promotion资源残留锁记录:
-- 清空该资源的锁字段 UPDATE ISRESOURCE SET RESOURCEOWNERID = NULL, LOCKEXPIRATIONDATE = NULL, LOCKCREATIONDATE = NULL, LOCKINGTHREADID = NULL WHERE RESOURCETYPE = 'MARKETING_Promotion'; -- 删除对应锁表记录 DELETE FROM RESOURCELOCK WHERE LOCKID = '.0kK_SlyFFUAAAFlhGJujvES';
2. 清空应用节点缓存
Intershop的资源锁会缓存在应用节点本地,仅修改数据库无法生效:
- 停止所有生产环境的Intershop应用节点
- 清空所有节点的本地缓存目录,默认路径为
$IS_HOME/share/system/cache - 按管理节点优先、前端节点在后的顺序重启所有应用节点
3. 功能验证
- 测试手动锁定产品,确认
ISRESOURCE表生成的记录完整包含RESOURCEOWNERID、锁创建/过期日期字段 - 先触发小范围staging测试,确认无锁报错后再运行全量channel staging
后续注意事项
后续遇到staging进程挂死的场景时,不要直接删除锁表记录:先在PROCESS表中查询到挂死的StagingProcess记录,将状态更新为终止后再清理对应锁记录,避免出现数据不一致问题。
内容的提问来源于stack exchange,提问作者mihallievich
相关产品推荐
相关产品推荐

