在Oracle数据库上运行"generateChangelog"后,changelogFile对于某些字段具有错误的类型(甚至更好,只是错误的值),与使用的驱动程序无关。更接近的是,一些RAW列被翻译成STRING(听起来不错),但像"E01005C6842100020200000E10000000"这样的值被翻译成"[B@433defed"。这似乎是一些类似斑点的实体。此外,这些是原始数据库内容和备份之间唯一与数据相关的差异。当我尝试通过"更新"恢复数据库时,这些列显示问题"运行 Liquibase 时出现意外错误:*****:无效的十六进制数"。
有没有办法强制liquibase"按原样"保存问题列,或者其他任何方法可以克服这种情况?还是错误?
我认为需要更多的信息来诊断这一点。理想情况下,如果您怀疑某些内容可能是错误,请提供三件事:
-
您采取了哪些步骤(这将包括正在使用的内容的版本、相关配置、发出的命令等)
-
实际结果是什么
-
预期成果是什么
现在我们对 1 有一些想法(在 Oracle 上运行 generateChangelog,然后尝试运行更新),但我们缺少诸如 Oracle 数据库的结构、Oracle/Liquibase 的版本以及实际发出的命令是什么。我们对实际结果有一些了解(Oracle 中 RAW 类型的列在更改日志中转换为 STRING,并且它还可能将这些列中的数据转换为与您预期的值不同的值)和预期结果的一些想法(您希望将 RAW 数据保存在更改日志中,然后能够重新部署该更改)。
话虽如此,使用 Liquibase 备份和还原数据库(尤其是具有 RAW/CLOB/BLOB 类型的列的数据库)可能不是一个好主意。
Liquibase的主要目的是帮助管理数据库结构的变化,而不是其中包含的数据。