Grails应用程序被卡在启动上,因为数据Abasechangelog表已锁定



我在Heroku上托管了使用数据库迁移插件的Grails应用程序。该应用程序重新启动时,它会不时地卡在启动上,而无需任何帮助消息:

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=

经过一些调查后,我发现这发生了,因为locked = true的databasechangeloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglock

。当我手动将锁定值设置为false并重新启动应用程序时,启动过程就不会出现问题。

我的问题是:

  1. 我如何找到离开数据库锁定的内容以及如何避免它。
  2. 如果无法避免锁定,则有任何方法可以清除应用程序启动过程的锁定?

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

Liquibase(数据库迁移使用的基础库)是,它创建锁定条目,然后启动数据库事务,以通过所有需要应用的更改集工作。如果有机会,数据库交易没有成功提交,则锁定条目将留在DATABASECHANGELOGLOCK中。

一段时间以前在Liquibase论坛上提出了同样的问题。

DATABASECHANGELOG表保留了成功应用的DB更改集的记录,您可以使用dbm-db-doc或dbdoccontroller可视化此信息(或者您可以直接使用SQL访问DB表)。

相关内容

最新更新