Database 无法使用Liquibase标记数据库以备将来回滚

Database 无法使用Liquibase标记数据库以备将来回滚,database,version-control,liquibase,Database,Version Control,Liquibase,我正在尝试使用标记数据库以备将来回滚,但出现以下错误: 将更新应用于数据库。这可能需要几分钟。。。 运行Liquibase时出现意外错误:分析ppsdb/ebidb_lb_upgrade_c43_sql_1.xml第12行第6列时出错:cvc复杂类型。2.4.a:发现以元素“sql”开头的无效内容。应为“{”“:modifySql}”之一 这是我的变更集文件: cat ebidb_lb_升级_c43_sql_1.xml <?xml version="1.0" encoding="UTF-8

我正在尝试使用标记数据库以备将来回滚,但出现以下错误:

将更新应用于数据库。这可能需要几分钟。。。 运行Liquibase时出现意外错误:分析ppsdb/ebidb_lb_upgrade_c43_sql_1.xml第12行第6列时出错:cvc复杂类型。2.4.a:发现以元素“sql”开头的无效内容。应为“{”“:modifySql}”之一

这是我的变更集文件:

cat ebidb_lb_升级_c43_sql_1.xml

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
<changeSet author="avnish_plsql_upgrade" id="1">
<tagDatabase tag="version_1.3"/>
<sql
        stripComments="false"
>
create table test (id number);
</sql>
</changeSet>
</databaseChangeLog>

创建表测试(id号);
当我从文件中删除tagDatabase标记时,并没有收到任何错误。 只有当我添加这个标签时,我才发现上面的错误。
如果我在这里遗漏了任何东西或犯了任何错误,请告诉我。

我认为问题可能是您使用的xsd非常过时。在XML文件的标题中,将
1.9
的所有实例替换为
3.6

以下是我最近的一个环境中的一个示例:

<databaseChangeLog 
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">

我一直面临着同样的问题。在搜索了一段时间之后,我决定看看XSD,看看元素是如何声明的

根据最新版本的XSD is 3.1

如果查看3.1 XSD,您可以看到
tagDatabase
changeSet
允许的其余元素是互斥的(它们是XSD:CHOICE的一部分)


为了验证我的理论,我创建了一个新的
changeSet
,只使用
tagDatabase
元素,可以看出迁移是成功的,但显然第二个
changeSet
是唯一一个标记了release标签的

现在,我将对DATABASECHANGELOG表进行数据更新,以更新标记列


我希望liquibase的家伙们能拿出一个新的XSD来解决这个问题。

按照SteveDonie的建议进行了修改。使用或不使用tagDatabase标记获取以下错误:运行Liquibase时出现意外错误:分析ppsdb/ebidb\u lb\u upgrade\u c43\u plsql.xml第6行第136列时出错:架构\u引用。4:读取架构文档“”失败,因为1)找不到文档;2) 文件无法读取;3) 文档的根元素不是。您使用的是哪个版本的liquibase JAR?您可能需要使用高于1.9(非常旧)但低于3.6(可能太新)的版本。我们的liquibase版本是3.5.3。因此您可能应该使用“3.5”作为XML中databaseChangelog节点XSD部分的版本。如果您尝试了,但仍然失败,请再次评论。如果你尝试了这个方法并且成功了,请注意这是正确的答案。
<xsd:choice>
              <xsd:element ref="tagDatabase" maxOccurs="1"/>
              <xsd:group ref="changeSetChildren" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>