Maven rollbackOneChangeSet
Note: This is a Liquibase Pro goal, so you need a Liquibase Pro License Key to use it.
rollbackOneChangeSet
rolls back one non-sequential changeset that is deployed to your database. It is only available for Liquibase Pro users.
Uses
rollbackOneChangeSet
is typically used when you want to undo a change made to your database and revert it to a previous state without affecting any other changes made to your database.
While the Maven rollback goal reverts all the deployed changesets sequentially to a specified point, the rollbackOneChangeSet
goal allows you to target a specific changeset without impacting changesets that came before or after it.
The image shows changesets A
through I
, with changeset I
being the most recently deployed. As you can see, the rollbackOneChangeSet
goal allows you to target changeset B
and revert it to its previous state without impacting the others.
The impacts of rollbackOneChangeSet
Using the rollbackOneChangeSet
goal comes with risks of unintended consequences. For this reason, it is a best practice to run the Maven rollbackOneChangeSetSQL goal because it allows you to inspect the rollback SQL and search for any potential mistakes before you execute rollbackOneChangeSet
.
Also, as the use of rollbackOneChangeSet
comes with risks of unintended consequences, the goal requires a liquibase.force
attribute to specify that you intend to run the goal.
Maven configuration
You can configure Liquibase Maven in multiple ways. You can pass arguments like <changeLogFile>
in Maven directly in your pom.xml
file, in a liquibase.properties
file referenced in your POM, as environment variables, or as JVM system properties.
Tip: For more information about the Maven configuration, see Configuring Maven.
Ensure that you add <ProLicenseKey>specify your Liquibase Pro license key here</ProLicenseKey>
to pom.xml
or specify it in another valid way.
Running the rollbackOneChangeSet
Maven goal
Before running the rollbackOneChangeSet
goal, gather the following information from your DATABASECHANGELOG table:
- The
author
of the changeset you want to revert - The
id
of the changeset you want to revert - The
filename
(changeset path) of the changeset you want to revert
Note: The liquibase.rollbackScript
script is only needed if the rollback
is not yet defined in the changelog and if it is not a rollback
that is automatically provided by Liquibase.
Also, you can run the Maven history goal to see the history of all deployments against the configured database:
mvn liquibase:history
Next, run the rollbackOneChangeSet
goal, with your information:
Note: Running the rollbackOneChangeSet
goal requires a Maven project to be implemented.
mvn liquibase:rollbackOneChangeSet
-Dliquibase.changeSetAuthor="LiquibaseProUser"
-Dliquibase.changeSetId="createProSchema"
-Dliquibase.changeSetPath="changelog.xml" -Dliquibase.force
Note: Enter the name of the changeset author, id, and the path with the changelog filename that you want to use in place of LiquibaseProUser
, createProSchema
, and changelog.xml
. For more information, run mvn liquibase:help -Ddetail=true -Dgoal=rollbackOneChangeSet
.
When successful, the rollbackOneChangeSet
Maven goal produces the following output:
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.example:liquibase-project >--------------------
[INFO] Building liquibase-project 05XII19
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] --- liquibase-maven-plugin:4.1.1:rollbackOneChangeSet (default-cli) @ liquibase-project ---
[INFO] ------------------------------------------------------------------------
[INFO] Successfully installed license from Base64 string starting with 'ABwwGgQUvH' (property liquibaseProLicenseKey).
[INFO] Liquibase Pro 4.1.1 by Liquibase licensed to support until Wed Sep 22 23:59:59 CDT 2021
[INFO] Liquibase Pro 4.1.1 by Liquibase licensed to support until Wed Sep 22 23:59:59 CDT 2021
[INFO] ####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Get advanced features and support at ##
## liquibase.com/support ##
## ##
####################################################
Starting Liquibase at 05:45:35 (version 4.1.1 #10 built at 2020-10-12 19:24+0000)
[INFO] Parsing Liquibase Properties File local.liquibase.properties for changeLog parameters
[INFO] Executing on Database: jdbc:oracle:thin:@localhost:1521/ORCL
[INFO] Successfully installed license from Base64 string starting with 'ABwwGgQUvH' (property liquibaseProLicenseKey).
[INFO] Liquibase Pro 4.1.1 by Liquibase licensed to support until Wed Sep 22 23:59:59 CDT 2021
[INFO] Liquibase Pro 4.1.1 by Liquibase licensed to support until Wed Sep 22 23:59:59 CDT 2021
[INFO] Successfully acquired change log lock
[INFO] Reading from DATABASECHANGELOG
Rolling Back Changeset:changelog.xml::createProSchema::LiquibaseProUser
[INFO] Successfully released change log lock
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.356 s
[INFO] Finished at: 2020-11-27T05:45:37-06:00
[INFO] ------------------------------------------------------------------------
rollbackOneChangeSet
required Maven configuration attributes
Attribute | Definition |
---|---|
liquibase.changeSetAuthor
|
Specifies the author of the changeset you want to roll back. |
liquibase.changeSetId
|
Specifies the changeset Id to roll back. |
liquibase.changeSetPath
|
Specifies the path to the changelog, which contains the changeset you want to roll back. |
liquibase.force
|
Specifies a required flag that indicates you intend to run this command. |
liquibase.licenseKey
|
Specifies your Liquibase Pro license key. |
rollbackOneChangeSet
optional Maven configuration attributes
Attribute | Definition |
---|---|
liquibase.changeLogDirectory
|
Specifies the path to the directory where Liquibase can find your changelog file. |
liquibase.changeLogFile
|
The changelog file for Liquibase to use. |
liquibase.changelogCatalogName
|
Specifies the catalog Liquibase will use to create your changelog tables. |
liquibase.changelogSchemaName
|
Specifies the schema Liquibase will use to create your changelog tables. |
liquibase.clearCheckSums
|
Boolean. Forces checksums to be cleared from the DATABASECHANGELOG table. Default value is: false. |
liquibase.contexts
|
Specifies which contexts Liquibase will execute, which can be separated by a comma if multiple contexts are required. If a context is not specified, then all contexts will be executed. |
liquibase.databaseChangeLogLockTableName
|
Specifies the table name to use for the DATABASECHANGELOGLOCK table. |
liquibase.databaseChangeLogTableName
|
Specifies the table name to use for the DATABASECHANGELOG table. |
liquibase.databaseClass
|
Specifies the database object class. |
liquibase.defaultCatalogName
|
Specifies the default catalog name to use for the database connection. |
liquibase.defaultSchemaName
|
Specifies the default schema name to use for the database connection. |
liquibase.driver
|
Specifies the driver class name to use for the database connection. |
driverPropertiesFile
|
Specifies the location of a JDBC connection properties file which contains properties the driver will use. |
liquibase.emptyPassword
|
Deprecated. Boolean. Use an empty or null value for the password instead. Default value is: false. |
expressionVariables
|
Specifies a map-based collection of changelog properties to apply. |
expressionVars
|
Specifies a property-based collection of changelog properties to apply. |
liquibase.includeArtifact
|
Boolean. Includes a Maven project artifact in the class loader, which obtains the Liquibase properties file and changelog files. Default value is |
liquibase.includeTestOutputDirectory
|
Boolean. Includes the Maven test output directory in the class loader which obtains the Liquibase properties file and changelog files. Default value is |
liquibase.labels
|
Specifies which labels Liquibase runs, and which can be separated by a comma if multiple labels are required or you need to designate a more complex expression. If no label is specified, then all labels are run. |
liquibase.outputDefaultCatalog
|
Boolean. Specifies whether to ignore the catalog or database name. Default value is: false. |
liquibase.outputDefaultSchema
|
Boolean. Specifies whether to ignore the schema name. Default value is: false. |
liquibase.outputFileEncoding
|
Indicates that you want to set the character encoding of the output file during the |
liquibase.password
|
Specifies the database password for the database connection. |
liquibase.promptOnNonLocalDatabase
|
Deprecated. Boolean. Controls whether users are prompted before executing changesets to a non-local database. Default value is: true. |
liquibase.propertyFile
|
Specifies the Liquibase properties file to use for configuration, like |
liquibase.propertyFileWillOverride
|
Boolean. Indicates that you want the |
liquibase.propertyProviderClass
|
Specifies the property provider, which must be a |
liquibase.rollbackScript
|
Specifies the path to a rollback script. |
liquibase.server
|
Specifies the server ID in the Maven |
liquibase.skip
|
Boolean. Specifies whether to skip running Liquibase. The use of this attribute is not recommended but can be used when needed. Default value is: false. |
systemProperties
|
Specifies a list of system properties you want to pass to the database. |
liquibase.url
|
Specifies the database URL you want to use to execute Liquibase. |
liquibase.username
|
Specifies the database username for the database connection. |
liquibase.verbose
|
Boolean. Controls the amount of output detail when you call the plugin. Default value is: false. |