oracle SQLcl liquibase 更新不会插入到 DATABASECHANGELOG_ACTIONS 中

问题描述 投票:0回答:1

在使用 liquibase 尝试 Oracle sqlcl“build 23.3.0.270.1251”时,我注意到一些无法解释的事情。 当我使用“generate-schema”和“update”将更改从一种模式应用到另一种模式时,一切正常,并且 DATABASECHANGELOG_ACTIONS 表加载了执行的 DDL 指令。 但在某些情况下,我只需要将部分更改引入生产。

我尝试了从开发到生产的“diff-changelog”,它生成了一个正确的“changes.xml”,仅包含我想要的更改。

这是我的改变:

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet author="ricardo (generated)" id="1698352210917-1">
<modifyDataType columnName="URL_SERVICO" newDataType="varchar(1000 CHAR)" tableName="URL_SERVICO"/>
</changeSet>
</databaseChangeLog>

但是,当我运行“更新”时,在应用更改后,DATABASECHANGELOG_ACTIONS 未加载相应的 DDL。这已通过“update-sql”得到确认。

SQL> liquibase update-sql -chf v20231026r1714/changes.xml

结果:

--Starting Liquibase at 17:30:58 (version 4.18.0 #5864 built at 2022-12-02 18:02+0000)

-- Loaded 1 change(s)
-- *********************************************************************
-- Update Database Script
-- *********************************************************************
-- Change Log: v20231026r1714/changes.xml
-- Ran at: 10/26/23, 5:30 PM
-- Against: PML_DATA_TLIQUIBASE@jdbc:oracle:thin:@PDB_DES.WORLD
-- Liquibase version: 4.18.0
-- *********************************************************************

-- Lock Database
UPDATE PML_DATA_TLIQUIBASE.DATABASECHANGELOGLOCK SET LOCKED = 1, LOCKEDBY = 'ZZZZ (111.11.0.1)', LOCKGRANTED = SYSTIMESTAMP WHERE ID = 1 AND LOCKED = 0;

-- Changeset v20231026r1714/changes.xml::1698352210917-1::ricardo (generated)
ALTER TABLE PML_DATA_TLIQUIBASE.URL_SERVICO MODIFY URL_SERVICO VARCHAR2(1000 CHAR);

INSERT INTO PML_DATA_TLIQUIBASE.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('1698352210917-1', 'ricardo (generated)', 'v20231026r1714/changes.xml', SYSTIMESTAMP, 49, '8:ce272fb18fbb857080c5aeef643a9a5f', 'modifyDataType columnName=URL_SERVICO, tableName=URL_SERVICO', '', 'EXECUTED', NULL, NULL, '4.18.0', '8352268410');

-- Release Database Lock
UPDATE PML_DATA_TLIQUIBASE.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;

Operation completed successfully.

SQL>
oracle-sqldeveloper liquibase sqlcl
1个回答
0
投票

“diff-changelog”命令生成的变更日志不会使用与生成对象和生成模式命令生成的变更日志相同的 SQLcl 逻辑进行处理。

DATABASECHANGELOG_ACTIONS 中记录的 SQL 语句和脚本是由 SQLcl 放置的,而不是由 Liquibase 开源项目放置的。

我们计划增强 diff 命令,为 Oracle 数据库开发人员带来许多新功能,其下游影响之一是生成的变更日志将完全满足您的需求。这是我们 2024 年上半年的路线图。

© www.soinside.com 2019 - 2024. All rights reserved.