Using Liquibase with Oracle Autonomous Database with ATP & ADW
Oracle Autonomous Database is an Oracle Cloud product with a set of services that deliver automated patching, upgrades, and tuning. It includes:
- Autonomous Transaction Processing (ATP) – an Autonomous Database service that can instantly scale to meet demands of mission critical transaction processing and mixed workload applications.
- Autonomous Data Warehouse (ADW) – a fully autonomous data warehousing environment that scales elastically, delivers fast query performance, and requires no database administration.
For more information, see the Oracle Cloud documentation page.
Verified database versions
- 19c
Prerequisites
- Introduction to Liquibase: Dive into Liquibase concepts.
- Install Liquibase: Download Liquibase on your machine.
- Ensure Java is installed: Liquibase requires Java to run. If you used the Liquibase Installer, Java is included automatically. Otherwise, you must install Java manually.
- Get Started with Liquibase: Learn how to use Liquibase with an example database.
- Design Your Liquibase Project: Create a new Liquibase project folder and organize your changelogs.
- How to Apply Your Liquibase Pro License Key: If you use Liquibase Pro, activate your license.
Install drivers
CLI users
To use Liquibase and Oracle Autonomous Database with ATP or Oracle ADW, you need the JDBC driver JAR file:
Ensure you downloaded the Oracle JDBC driver JAR file (Maven download) to connect to the Oracle Autonomous Database. You can download ojdbc8.jar
or ojdbc10.jar
. The ojdbc10.jar
file is certified with JDK10 and JDK11, and the ojdbc8.jar
file is certified with JDK8, JDK9, and JDK11.
Note: It is best practice to use the Oracle Database 18c (or higher) drivers. Also, the following additional .jar
files are required: oraclepki.jar
, osdt_cert.jar
, and osdt_core.jar
. For more information, see Using Oracle Autonomous Database on Shared Exadata Infrastructure.
liquibase/lib
directory.
Maven users
To use Liquibase with Maven, pom.xml
file. Using this information, Maven automatically downloads the driver JAR from Maven Central when you build your project.
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.5.0.0</version>
</dependency>
Configure connection
Ensure that you have created:
- An Oracle Autonomous Database with ATP or ADW via the Oracle Cloud Infrastructure Console.
- An access control list while providing your IP address.
Ensure that your Oracle ATP or ADW database is configured:
- Download the Wallet to connect to the database:
- Log into your Oracle Cloud account.
- Navigate to Autonomous Database and select DB Connection > Wallet Type > Download.
- Enter a secure password for the Wallet and download the ZIP file to save the client security credentials.
- Unzip the Wallet and place it somewhere safe in your file system to prevent unauthorized database access.
- Navigate to the Wallet folder and update the
ojdbc.properties
file with the following:- Comment out the
oracle.net.wallet_location
line. - Set
javax.net.ssl.trustStorePassword
to the Wallet password that you entered to download the Wallet. - Set
javax.net.ssl.keyStorePassword
to the Wallet password that you entered to download the Wallet.
#oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=${TNS_ADMIN}))) javax.net.ssl.trustStore=${TNS_ADMIN}/truststore.jks javax.net.ssl.trustStorePassword=my_wallet_password javax.net.ssl.keyStore=${TNS_ADMIN}/keystore.jks javax.net.ssl.keyStorePassword=my_wallet_password
- Comment out the
- In the Wallet folder, open the
sqlnet.ora
and ensure thatSSL_SERVER_DN_MATCH=yes
.
- Specify the database URL in the
liquibase.properties
file (defaults file), along with other properties you want to set a default value for. Liquibase does not parse the URL. You can either specify the full database connection string or specify the URL using your database's standard connection format:
Note: For alternative secure connection methods, see Connecting to Autonomous Database.
url: jdbc:oracle:thin:@<database_name>_high?TNS_ADMIN=/path/to/Wallet_<database_name>
Note: If you use Windows, ensure the TNS_ADMIN
path to your wallet folder includes double slashes in the URL property.
Example: url: jdbc:oracle:thin:@databaseName_high?TNS_ADMIN=path//to//Wallet_databaseName
Tip: To apply a Liquibase Pro key to your project, add the following property to the Liquibase properties file: licenseKey: <paste code here>
Test connection
-
Create a text file called
changelog
(.sql
,.yaml
,.json
, or.xml
) in your project directory and add a changeset.If you already created a changelog using the
init project
command, you can use that instead of creating a new file. When adding onto an existing changelog, be sure to only add the changeset and to not duplicate the changelog header. - Navigate to your project folder in the CLI and run the Liquibase
status
command to see whether the connection is successful: - Inspect the deployment SQL with the
update-sql
command: - Then execute these changes to your database with the
update
command: - From a database UI tool, ensure that your database contains the
test_table
object you added along with the DATABASECHANGELOG table and DATABASECHANGELOGLOCK table.
--liquibase formatted sql
--changeset your.name:1
CREATE TABLE test_table (test_id INT NOT NULL, test_column INT, PRIMARY KEY (test_id))
Tip: Formatted SQL changelogs generated from Liquibase versions before 4.2.0 might cause issues because of the lack of space after a double dash ( --
). To fix this, add a space after the double dash. For example: -- liquibase formatted sql
instead of --liquibase formatted sql
and -- changeset myname:create-table
instead of --changeset myname:create-table
.
databaseChangeLog:
- changeSet:
id: 1
author: your.name
changes:
- createTable:
tableName: test_table
columns:
- column:
name: test_id
type: INT
constraints:
primaryKey: true
nullable: false
- column:
name: test_column
type: INT
{
"databaseChangeLog": [
{
"changeSet": {
"id": "1",
"author": "your.name",
"changes": [
{
"createTable": {
"tableName": "test_table",
"columns": [
{
"column": {
"name": "test_id",
"type": "INT",
"constraints": {
"primaryKey": true,
"nullable": false
}
}
},
{
"column": {
"name": "test_column",
"type": "INT"
}
}
]
}
}
]
}
}
]
}
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
http://www.liquibase.org/xml/ns/pro
http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd">
<changeSet id="1" author="your.name">
<createTable tableName="test_table">
<column name="test_id" type="int">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="test_column" type="int"/>
</createTable>
</changeSet>
</databaseChangeLog>
liquibase status --username=test --password=test --changelog-file=<changelog.xml>
Note: You can specify arguments in the CLI or keep them in the Liquibase properties file.
If your connection is successful, you'll see a message like this:
4 changesets have not been applied to <your_connection_url>
Liquibase command 'status' was executed successfully.
liquibase update-sql --changelog-file=<changelog.xml>
If the SQL that Liquibase generates isn't what you expect, you should review your changelog file and make any necessary adjustments.
liquibase update --changelog-file=<changelog.xml>
If your update
is successful, Liquibase runs each changeset and displays a summary message ending with:
Liquibase: Update has been successful.
Liquibase command 'update' was executed successfully.
Now you're ready to start making deployments with Liquibase!