runAlways without inserting to databasechange

For Oracle, it is recommended to execute “ALTER SESSION set NLS_LENGTH_SEMANTICS = ‘CHAR’;” before executing table creation or alter scripts

I can define a changeset as follows

<?xml version="1.0" encoding="UTF-8"?>

<changeSet id="liquibase-0" author="liquibase" runAlways="true" dbms="oracle">
    <sql>
        ALTER SESSION set NLS_LENGTH_SEMANTICS = 'CHAR';
    </sql>
</changeSet>

However, this will always create an insert statement to databasechangelog table. databasechangelog has an unique index on id,author and filename which it means it will fail on next db update.

Am I doing it correctly?

When you use “runAlways” Liquibase will update the existing changeset row in the databasechangelog table. The EXECTYPE will be set to “RERAN”.