首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由于DATABASECHANGELOG表被锁定,Grails应用程序在启动时被卡住

由于DATABASECHANGELOG表被锁定,Grails应用程序在启动时被卡住
EN

Stack Overflow用户
提问于 2012-11-12 11:56:35
回答 1查看 1.4K关注 0票数 3

我有一个托管在Heroku上的Grails应用程序,它使用数据库迁移插件。有时,当应用程序重新启动时,它会在没有任何帮助消息的情况下被塞进启动程序:

代码语言:javascript
运行
复制
2012-11-12T11:21:06+00:00 app[web.1]: Configuring Spring Security Core ...
2012-11-12T11:21:06+00:00 app[web.1]: ... finished configuring Spring Security Core
2012-11-12T11:21:06+00:00 app[web.1]:
2012-11-12T11:21:22+00:00 heroku[web.1]: Stopping process with SIGKILL
2012-11-12T11:21:22+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2012-11-12T11:21:24+00:00 heroku[web.1]: Process exited with status 137
2012-11-12T11:21:34+00:00 heroku[router]: Error H20 (App boot timeout) -> GET abc.herokuapp.com/ dyno= queue= wait=75000ms service= status=503 bytes=
2012-11-12T11:22:34+00:00 heroku[router]: Error H20 (App boot timeout) -> GET abc.herokuapp.com/ dyno= queue= wait=75000ms service= status=503 bytes=
2012-11-12T11:25:10+00:00 heroku[router]: Error H10 (App crashed) -> GET abc.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=

经过一些调查后,我发现发生这种情况是因为在DATABASECHANGELOGLOCK表中记录了列LOCKED=TRUE。当我手动将锁定的值设置为FALSE并重新启动应用程序时,启动过程就会顺利完成。

我的问题是:

  1. 如何才能找到数据库变更被锁定的原因,以及如何避免它。
  2. 如果无法避免锁定,那么在应用程序启动进程被阻塞之前,有什么方法可以清除锁吗?
EN

回答 1

Stack Overflow用户

发布于 2012-11-12 12:56:09

此问题发生在我的项目中,当应用程序在引导过程中被杀死,而且数据库迁移无法完成其db事务时。

清算库(数据库迁移所使用的底层库)所做的是创建锁条目,然后启动数据库事务来处理所有需要应用的更改集。如果db事务没有成功提交,则锁条目将保留在DATABASECHANGELOGLOCK中。

同样的问题在一段时间前已经在液基论坛被问到了。

DATABASECHANGELOG表保存成功应用的db更改集的记录,您可以使用dbm-db-docDbDocController来可视化这些信息(当然,您也可以使用SQL直接访问db表)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13343283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档