SlideShare a Scribd company logo
1 of 32
Download to read offline
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
2Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Howdy, I’m Blaine Carter
Oracle Developer Advocate for Open Source
Oracle Corporation
Email: blaine.carter@oracle.com
Twitter: @OraBlaineOS
Blog: learncodeshare.net
Team: community.oracle.com/docs/DOC-917690
3Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Database Script Management – The Hard Way
MasterCreate directory:
RunAllVer5.sql
CreateLB_Groups.sql
CreateLB_People.sql
LoadLB_GroupsData.sql
Update4to5 directory:
UpdateAllVer4to5.sql
AddColGroupsRules.sql
AddColPeopleFavorite_color.sql
Problems:
Which script has been run?
Update or Rollback to a specific version?
Test data? → LoadTestData.sql?
Copyright © 2016 Oracle and/or its affiliates. All rights reserved. 4
Leveraging Open Source for Oracle Database Development
Liquibase
Cross platform database change
management.
http://www.liquibase.org/
https://github.com/liquibase/liquibase
Blaine Carter
5Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Version Control / Change Management
Basics:
● Track changes.
● Rollback / Switch to a specific revision.
● Branch / Merge - http://www.liquibase.org/development/branches.html
● Diffs
6Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
What is Liquibase?
Liquibase is change management for your database.
● Database changes are made using changeSets.
● When you run an update, the changeSets are run in order.
● Liquibase tracks what has been run, when and who ran it.
● You can roll back to a specific version.
● Populate default and/or test data.
● Contexts - http://www.liquibase.org/documentation/contexts.html
● Diffs - http://www.liquibase.org/documentation/diff.html
● Documentation - http://www.liquibase.org/documentation/dbdoc.html
● SQL Output - http://www.liquibase.org/documentation/sql_output.html
● Offline - http://www.liquibase.org/documentation/offline.html
7Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
How Does It Work?
8Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Changelog Master
{
"databaseChangeLog": [
{"include": {"file":"changelog/db.changelog-1.json"}}
]
}
9Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
ChangeSet
{"databaseChangeLog": [
{"preConditions": [{
"runningAs": {
"username": "lb_demo"
}
}]
},
{"changeSet": {
"id": "1",
"author": "BlaineCarter",
"changes": [
{"createTable": {
"tableName": "lb_person",
"columns": [
{"column": {
"name": "id",
"type": "int",
"autoIncrement": true,
"constraints": {
"primaryKey": true,
"nullable": false
…...
10Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Java Command Line
java $JAVA_OPTS -jar /opt/liquibase/liquibase.jar --driver=oracle.jdbc.OracleDriver
--classpath="/usr/lib/oracle/12.1/client64/lib/ojdbc7.jar" --url=jdbc:oracle:thin:lb_demo/dd@dbaccess
--changeLogFile=changelog/db.changelog-master.json updateSQL >> output.sql
options
--logLevel=DEBUG --logFile=liquibase.logFile
$JAVA_OPTS is used for my Oracle Exadata Express cloud connection.
11Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Properties File (liquibase.properties)
driver: oracle.jdbc.OracleDriver
classpath: /usr/lib/oracle/12.1/client64/lib/ojdbc7.jar
url: jdbc:oracle:thin:lb_demo/dd@dbaccess
changeLogFile: changelog/db.changelog-master.json
12Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Liquibase Best Recommended Practices
http://www.liquibase.org/bestpractices.html
Ignore the directory structure I’m using in the demo’s.
13Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Software We’ll Be Using
•
SQL Developer
•
Oracle Exadata Express Cloud Database or Virtual Box
•
Liquibase - http://www.liquibase.org
14Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Install
Download - http://www.liquibase.org/download/index.html
Install – It's just Java, extract it and go.
15Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Enough blah blah, let's see it.
16Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Create Changelog and ChangeSet Files
Changelog Example:
http://www.liquibase.org/quickstart.html - step 1
Changeset Example:
http://www.liquibase.org/quickstart.html - step 2
Recommended to only perform one change per Change set,
but you can do more if you need.
17Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Run It
http://www.liquibase.org/quickstart.html - step 3
Jar File:
java $JAVA_OPTS -jar /opt/liquibase/liquibase.jar updateSQL
Shell Script:
/opt/liquibase/liquibase updateSQL
Batch File:
c:toolsliquibaseliquibase.bat updateSQL
Put the Liquibase directory in your path and run it:
liquibase update
The shell script / batch files use the same JAVA_OPTS environment variable for my cloud connection.
18Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Rollback X Number of Change Sets
Warning: Rolling back anything in the database can be tricky. Be very careful if you ever do this in
Production.
liquibase rollbackCount 1
19Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Tag a Changeset
You can tag a changeset in the file:
"changeSet": {
"id": "1",
"author": "BlaineCarter",
"tagDatabase": {"tag":"ver-1"},
"changes": [
You can also use the command line:
liquibase tag ver-1
20Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Rollback to Tag
http://www.liquibase.org/documentation/rollback.html
liquibase rollback ver-1
Other Options:
http://www.liquibase.org/documentation/command_line.html
21Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Load Data From a File
"changes": [
{
"loadData": {
"file": "changelog/groups.csv",
"schemaName": "lb_demo",
"tableName": "lb_groups"
}
}]
groups.csv
name,description
Trucks,People who like trucks
Rockets,People who like rockets
Horses,People who like horses
Snakes,People who like snakes
22Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Insert Data
"changes": [
{
"insert": {
"schemaName": "lb_demo",
"tableName": "lb_people",
"columns": [
{
"column": {
"name": "firstname",
"value": "Bob"
}
},
{
"column": {
"name": "lastname",
"value": "Trucker"
}
}
...
23Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Context Test
In the change set:
"changeSet": {
"id": "loadData-example",
"author": "liquibase-docs",
"context": "test",
Liquibase.properties
contexts: !test
Command Line overrides the properties file:
liquibase --contexts=test update
Context vs Labels
http://www.liquibase.org/2014/11/contexts-vs-labels.html
24Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Data Changes Are NOT Automatically Rolled Back.
Define your own Rollback
{
"rollback": {
"delete": {
"tableName": "lb_people"
}
}
}
25Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Diff
http://www.liquibase.org/documentation/diff.html
Command Line:
liquibase.sh --driver=oracle.jdbc.OracleDriver 
--url=jdbc:oracle:thin:lb_demo/dd@unknownDB 
diff 
--referenceUrl=jdbc:oracle:thin:lb_demo/dd@goodDB
Liquibase.properties:
referenceUrl: jdbc:oracle:thin:lb_diff_demo/dd@dbaccess
26Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Generate Changelog (Reverse Engineer)
http://www.liquibase.org/documentation/generating_changelogs.html
Note that this command currently has some limitations. It does not export the following types of objects:
Stored procedures, functions, packages & Triggers
liquibase --changeLogFile=generated.json generateChangeLog
27Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Review The Output
The output won’t be perfect.
Generated by update:
id INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL
Generated by generateChangeLog:
ID NUMBER(*, 0) DEFAULT "LB_DEMO"."ISEQ$$_69966".nextval NOT NULL
28Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
DBDoc
http://www.liquibase.org/documentation/dbdoc.html
liquibase DBDoc docs
29Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Extensions / Plugins
https://liquibase.jira.com/wiki/display/CONTRIB/LiquiBase+Extensions+Portal
30Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
We Can Make It Better
•
Github
– Repo
– Fork
– Change
– Pull Request
– Not just code
•
https://github.com/liquibase/liquibase
•
https://github.com/liquibase/liquibase/blob/master/LICENSE.txt
31Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Thank You, Now Go Out And Try It.
Oracle Developer Advocate for Open Source
Oracle Corporation
Email: blaine.carter@oracle.com
Twitter: @OraBlaineOS
Blog: learncodeshare.net
Team: community.oracle.com/docs/DOC-917690
32Copyright © 2016 Oracle and/or its affiliates. All rights reserved.
Commands Used For The Demo (by slide number)
#17
liquibase updateSQL
liquibase update
#18
liquibase rollbackCount 1
liquibase update
#19
liquibase update
liquibase tag myCoolTag
#20
liquibase rollback ver-1
liquibase update
#21
liquibase update
#23
liquibase --contexts=test update
#24
liquibase rollbackCount 2
liquibase rollbackCount 1
liquibase --contexts=test rollbackCount 2
liquibase --contexts=test update
#25
liquibase diff
liquibase --diffTypes=tables,columns diff
liquibase diffChangeLog
#26
liquibase --changeLogFile=generated.json generateChangeLog
#28
liquibase dropAll
liquibase DBDoc docs
liquibase update
liquibase DBDoc docs

More Related Content

What's hot

Simplify your integrations with Apache Camel
Simplify your integrations with Apache CamelSimplify your integrations with Apache Camel
Simplify your integrations with Apache CamelKenneth Peeples
 
Play + scala + reactive mongo
Play + scala + reactive mongoPlay + scala + reactive mongo
Play + scala + reactive mongoMax Kremer
 
Learn you some Ansible for great good!
Learn you some Ansible for great good!Learn you some Ansible for great good!
Learn you some Ansible for great good!David Lapsley
 
Apache Camel Introduction & What's in the box
Apache Camel Introduction & What's in the boxApache Camel Introduction & What's in the box
Apache Camel Introduction & What's in the boxClaus Ibsen
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration libraryClaus Ibsen
 
GitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by ScalaGitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by Scalatakezoe
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disquszeeg
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 
Introduction to Play Framework
Introduction to Play FrameworkIntroduction to Play Framework
Introduction to Play FrameworkWarren Zhou
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache CamelClaus Ibsen
 
Developing Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containersDeveloping Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containersClaus Ibsen
 
Java Play RESTful ebean
Java Play RESTful ebeanJava Play RESTful ebean
Java Play RESTful ebeanFaren faren
 
Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPAFaren faren
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet CampPuppet
 
Getting Started with Apache Camel - Devconf Conference - February 2013
Getting Started with Apache Camel - Devconf Conference - February 2013Getting Started with Apache Camel - Devconf Conference - February 2013
Getting Started with Apache Camel - Devconf Conference - February 2013Claus Ibsen
 
Integration made easy with Apache Camel
Integration made easy with Apache CamelIntegration made easy with Apache Camel
Integration made easy with Apache CamelRosen Spasov
 
FITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingFITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingRami Sayar
 

What's hot (20)

Simplify your integrations with Apache Camel
Simplify your integrations with Apache CamelSimplify your integrations with Apache Camel
Simplify your integrations with Apache Camel
 
Play + scala + reactive mongo
Play + scala + reactive mongoPlay + scala + reactive mongo
Play + scala + reactive mongo
 
Learn you some Ansible for great good!
Learn you some Ansible for great good!Learn you some Ansible for great good!
Learn you some Ansible for great good!
 
Play framework
Play frameworkPlay framework
Play framework
 
Apache Camel Introduction & What's in the box
Apache Camel Introduction & What's in the boxApache Camel Introduction & What's in the box
Apache Camel Introduction & What's in the box
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration library
 
GitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by ScalaGitBucket: The perfect Github clone by Scala
GitBucket: The perfect Github clone by Scala
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
Introduction to Play Framework
Introduction to Play FrameworkIntroduction to Play Framework
Introduction to Play Framework
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
 
Why Play Framework is fast
Why Play Framework is fastWhy Play Framework is fast
Why Play Framework is fast
 
Developing Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containersDeveloping Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containers
 
Java Play RESTful ebean
Java Play RESTful ebeanJava Play RESTful ebean
Java Play RESTful ebean
 
Java Play Restful JPA
Java Play Restful JPAJava Play Restful JPA
Java Play Restful JPA
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
 
Getting Started with Apache Camel - Devconf Conference - February 2013
Getting Started with Apache Camel - Devconf Conference - February 2013Getting Started with Apache Camel - Devconf Conference - February 2013
Getting Started with Apache Camel - Devconf Conference - February 2013
 
Integration made easy with Apache Camel
Integration made easy with Apache CamelIntegration made easy with Apache Camel
Integration made easy with Apache Camel
 
FITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingFITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript Debugging
 

Viewers also liked

Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixAll Things Open
 
BFFs: UX & SEO Partnering to Design Successful Products
BFFs: UX & SEO Partnering to Design Successful ProductsBFFs: UX & SEO Partnering to Design Successful Products
BFFs: UX & SEO Partnering to Design Successful ProductsAll Things Open
 
Contribution & Confidence
Contribution & ConfidenceContribution & Confidence
Contribution & ConfidenceAll Things Open
 
Civic Hacking 201: Successful techniques for civic tech
Civic Hacking 201: Successful techniques for civic techCivic Hacking 201: Successful techniques for civic tech
Civic Hacking 201: Successful techniques for civic techAll Things Open
 
Marketing is not all fluff; engineering is not all math
Marketing is not all fluff; engineering is not all mathMarketing is not all fluff; engineering is not all math
Marketing is not all fluff; engineering is not all mathAll Things Open
 
Modern Container Orchestration (Without Breaking the Bank)
Modern Container Orchestration (Without Breaking the Bank)Modern Container Orchestration (Without Breaking the Bank)
Modern Container Orchestration (Without Breaking the Bank)All Things Open
 
Scaling Your Logging Infrastructure With Syslog-NG
Scaling Your Logging Infrastructure With Syslog-NGScaling Your Logging Infrastructure With Syslog-NG
Scaling Your Logging Infrastructure With Syslog-NGAll Things Open
 
The Datacenter Network You Wish You Had: It's yours for the taking.
The Datacenter Network You Wish You Had: It's yours for the taking.The Datacenter Network You Wish You Had: It's yours for the taking.
The Datacenter Network You Wish You Had: It's yours for the taking.All Things Open
 
Develop and Deploy Cloud-Native Apps as Resilient Microservice Architectures
Develop and Deploy Cloud-Native Apps as Resilient Microservice ArchitecturesDevelop and Deploy Cloud-Native Apps as Resilient Microservice Architectures
Develop and Deploy Cloud-Native Apps as Resilient Microservice ArchitecturesAll Things Open
 
Netflix and Containers: Not Stranger Things
Netflix and Containers: Not Stranger ThingsNetflix and Containers: Not Stranger Things
Netflix and Containers: Not Stranger ThingsAll Things Open
 
Database version control DPC version
Database version control DPC versionDatabase version control DPC version
Database version control DPC versionHarrie Verveer
 
Database version control - pf congres version
Database version control - pf congres versionDatabase version control - pf congres version
Database version control - pf congres versionHarrie Verveer
 
Database version control without pain - the PHP Barcelona version
Database version control without pain - the PHP Barcelona versionDatabase version control without pain - the PHP Barcelona version
Database version control without pain - the PHP Barcelona versionHarrie Verveer
 
Database Change Management
Database Change ManagementDatabase Change Management
Database Change ManagementKate Semizhon
 
Database version control without pain - the PHPNW10 version
Database version control without pain - the PHPNW10 versionDatabase version control without pain - the PHPNW10 version
Database version control without pain - the PHPNW10 versionHarrie Verveer
 

Viewers also liked (20)

Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at Netflix
 
BFFs: UX & SEO Partnering to Design Successful Products
BFFs: UX & SEO Partnering to Design Successful ProductsBFFs: UX & SEO Partnering to Design Successful Products
BFFs: UX & SEO Partnering to Design Successful Products
 
Contribution & Confidence
Contribution & ConfidenceContribution & Confidence
Contribution & Confidence
 
Civic Hacking 201: Successful techniques for civic tech
Civic Hacking 201: Successful techniques for civic techCivic Hacking 201: Successful techniques for civic tech
Civic Hacking 201: Successful techniques for civic tech
 
Marketing is not all fluff; engineering is not all math
Marketing is not all fluff; engineering is not all mathMarketing is not all fluff; engineering is not all math
Marketing is not all fluff; engineering is not all math
 
Modern Container Orchestration (Without Breaking the Bank)
Modern Container Orchestration (Without Breaking the Bank)Modern Container Orchestration (Without Breaking the Bank)
Modern Container Orchestration (Without Breaking the Bank)
 
Scaling Your Logging Infrastructure With Syslog-NG
Scaling Your Logging Infrastructure With Syslog-NGScaling Your Logging Infrastructure With Syslog-NG
Scaling Your Logging Infrastructure With Syslog-NG
 
CSS Grid Layout
CSS Grid LayoutCSS Grid Layout
CSS Grid Layout
 
DevOps for Managers
DevOps for ManagersDevOps for Managers
DevOps for Managers
 
The Datacenter Network You Wish You Had: It's yours for the taking.
The Datacenter Network You Wish You Had: It's yours for the taking.The Datacenter Network You Wish You Had: It's yours for the taking.
The Datacenter Network You Wish You Had: It's yours for the taking.
 
Data Encryption at Rest
Data Encryption at RestData Encryption at Rest
Data Encryption at Rest
 
Develop and Deploy Cloud-Native Apps as Resilient Microservice Architectures
Develop and Deploy Cloud-Native Apps as Resilient Microservice ArchitecturesDevelop and Deploy Cloud-Native Apps as Resilient Microservice Architectures
Develop and Deploy Cloud-Native Apps as Resilient Microservice Architectures
 
Netflix and Containers: Not Stranger Things
Netflix and Containers: Not Stranger ThingsNetflix and Containers: Not Stranger Things
Netflix and Containers: Not Stranger Things
 
Version Control meets Database Control
Version Control meets Database ControlVersion Control meets Database Control
Version Control meets Database Control
 
Database version control DPC version
Database version control DPC versionDatabase version control DPC version
Database version control DPC version
 
Database version control - pf congres version
Database version control - pf congres versionDatabase version control - pf congres version
Database version control - pf congres version
 
Database version control without pain - the PHP Barcelona version
Database version control without pain - the PHP Barcelona versionDatabase version control without pain - the PHP Barcelona version
Database version control without pain - the PHP Barcelona version
 
Database Change Management
Database Change ManagementDatabase Change Management
Database Change Management
 
Database version control without pain - the PHPNW10 version
Database version control without pain - the PHPNW10 versionDatabase version control without pain - the PHPNW10 version
Database version control without pain - the PHPNW10 version
 
Database versioning with liquibase
Database versioning with liquibaseDatabase versioning with liquibase
Database versioning with liquibase
 

Similar to Leveraging Open Source for Database Development: Database Version Control with Liquibase

Liquibase - Open Source version control for your database
Liquibase - Open Source version control for your databaseLiquibase - Open Source version control for your database
Liquibase - Open Source version control for your databaseBlaine Carter
 
MySQL Document Store
MySQL Document StoreMySQL Document Store
MySQL Document StoreMario Beck
 
Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Jeff Smith
 
OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeGeorgi Kodinov
 
MySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQLMySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQLMiguel Araújo
 
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...Frederic Descamps
 
20151010 my sq-landjavav2a
20151010 my sq-landjavav2a20151010 my sq-landjavav2a
20151010 my sq-landjavav2aIvan Ma
 
Configuration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and TamayaConfiguration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and TamayaDmitry Kornilov
 
Oracle Database Management REST API
Oracle Database Management REST APIOracle Database Management REST API
Oracle Database Management REST APIJeff Smith
 
Oracle database 12c_and_DevOps
Oracle database 12c_and_DevOpsOracle database 12c_and_DevOps
Oracle database 12c_and_DevOpsMaria Colgan
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?Olivier DASINI
 
Jmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidcloneJmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidcloneMlx Le
 
Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...
Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...
Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...Timothy Schubert
 
Reducing the Risks of Migrating Off Oracle
Reducing the Risks of Migrating Off OracleReducing the Risks of Migrating Off Oracle
Reducing the Risks of Migrating Off OracleEDB
 
20190713_MySQL開発最新動向
20190713_MySQL開発最新動向20190713_MySQL開発最新動向
20190713_MySQL開発最新動向Machiko Ikoma
 
State of The Dolphin - May 2021
State of The Dolphin - May 2021State of The Dolphin - May 2021
State of The Dolphin - May 2021Frederic Descamps
 

Similar to Leveraging Open Source for Database Development: Database Version Control with Liquibase (20)

Liquibase - Open Source version control for your database
Liquibase - Open Source version control for your databaseLiquibase - Open Source version control for your database
Liquibase - Open Source version control for your database
 
Marcin Szałowicz - MySQL Workbench
Marcin Szałowicz - MySQL WorkbenchMarcin Szałowicz - MySQL Workbench
Marcin Szałowicz - MySQL Workbench
 
MySQL Document Store
MySQL Document StoreMySQL Document Store
MySQL Document Store
 
Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl
 
OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source Code
 
MySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQLMySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQL
 
My sql8 innodb_cluster
My sql8 innodb_clusterMy sql8 innodb_cluster
My sql8 innodb_cluster
 
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
 
20151010 my sq-landjavav2a
20151010 my sq-landjavav2a20151010 my sq-landjavav2a
20151010 my sq-landjavav2a
 
Configuration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and TamayaConfiguration for Java EE: Config JSR and Tamaya
Configuration for Java EE: Config JSR and Tamaya
 
Oracle Database Management REST API
Oracle Database Management REST APIOracle Database Management REST API
Oracle Database Management REST API
 
Oracle database 12c_and_DevOps
Oracle database 12c_and_DevOpsOracle database 12c_and_DevOps
Oracle database 12c_and_DevOps
 
MySQL Shell for DBAs
MySQL Shell for DBAsMySQL Shell for DBAs
MySQL Shell for DBAs
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
 
Java Cloud and Container Ready
Java Cloud and Container ReadyJava Cloud and Container Ready
Java Cloud and Container Ready
 
Jmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidcloneJmorrow rtv den_auto_config_rapidclone
Jmorrow rtv den_auto_config_rapidclone
 
Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...
Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...
Suffering from Chronic Patching Pain? Get Relief with Fleet Maintenance [CON6...
 
Reducing the Risks of Migrating Off Oracle
Reducing the Risks of Migrating Off OracleReducing the Risks of Migrating Off Oracle
Reducing the Risks of Migrating Off Oracle
 
20190713_MySQL開発最新動向
20190713_MySQL開発最新動向20190713_MySQL開発最新動向
20190713_MySQL開発最新動向
 
State of The Dolphin - May 2021
State of The Dolphin - May 2021State of The Dolphin - May 2021
State of The Dolphin - May 2021
 

More from All Things Open

Building Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityBuilding Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityAll Things Open
 
Modern Database Best Practices
Modern Database Best PracticesModern Database Best Practices
Modern Database Best PracticesAll Things Open
 
Open Source and Public Policy
Open Source and Public PolicyOpen Source and Public Policy
Open Source and Public PolicyAll Things Open
 
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...All Things Open
 
The State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashThe State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashAll Things Open
 
Total ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptTotal ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptAll Things Open
 
What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?All Things Open
 
How to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractHow to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractAll Things Open
 
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlowAll Things Open
 
DEI Challenges and Success
DEI Challenges and SuccessDEI Challenges and Success
DEI Challenges and SuccessAll Things Open
 
Scaling Web Applications with Background
Scaling Web Applications with BackgroundScaling Web Applications with Background
Scaling Web Applications with BackgroundAll Things Open
 
Supercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblySupercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblyAll Things Open
 
Using SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksUsing SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksAll Things Open
 
Configuration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptConfiguration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptAll Things Open
 
Scaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramScaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramAll Things Open
 
Build Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceBuild Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceAll Things Open
 
Deploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamDeploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamAll Things Open
 
Sudo – Giving access while staying in control
Sudo – Giving access while staying in controlSudo – Giving access while staying in control
Sudo – Giving access while staying in controlAll Things Open
 
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsFortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsAll Things Open
 
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...All Things Open
 

More from All Things Open (20)

Building Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityBuilding Reliability - The Realities of Observability
Building Reliability - The Realities of Observability
 
Modern Database Best Practices
Modern Database Best PracticesModern Database Best Practices
Modern Database Best Practices
 
Open Source and Public Policy
Open Source and Public PolicyOpen Source and Public Policy
Open Source and Public Policy
 
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
 
The State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashThe State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil Nash
 
Total ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptTotal ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScript
 
What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?
 
How to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractHow to Write & Deploy a Smart Contract
How to Write & Deploy a Smart Contract
 
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 
DEI Challenges and Success
DEI Challenges and SuccessDEI Challenges and Success
DEI Challenges and Success
 
Scaling Web Applications with Background
Scaling Web Applications with BackgroundScaling Web Applications with Background
Scaling Web Applications with Background
 
Supercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblySupercharging tutorials with WebAssembly
Supercharging tutorials with WebAssembly
 
Using SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksUsing SQL to Find Needles in Haystacks
Using SQL to Find Needles in Haystacks
 
Configuration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptConfiguration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit Intercept
 
Scaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramScaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship Program
 
Build Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceBuild Developer Experience Teams for Open Source
Build Developer Experience Teams for Open Source
 
Deploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamDeploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache Beam
 
Sudo – Giving access while staying in control
Sudo – Giving access while staying in controlSudo – Giving access while staying in control
Sudo – Giving access while staying in control
 
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsFortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
 
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
 

Recently uploaded

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 

Recently uploaded (20)

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 

Leveraging Open Source for Database Development: Database Version Control with Liquibase

  • 1. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  • 2. 2Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Howdy, I’m Blaine Carter Oracle Developer Advocate for Open Source Oracle Corporation Email: blaine.carter@oracle.com Twitter: @OraBlaineOS Blog: learncodeshare.net Team: community.oracle.com/docs/DOC-917690
  • 3. 3Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Database Script Management – The Hard Way MasterCreate directory: RunAllVer5.sql CreateLB_Groups.sql CreateLB_People.sql LoadLB_GroupsData.sql Update4to5 directory: UpdateAllVer4to5.sql AddColGroupsRules.sql AddColPeopleFavorite_color.sql Problems: Which script has been run? Update or Rollback to a specific version? Test data? → LoadTestData.sql?
  • 4. Copyright © 2016 Oracle and/or its affiliates. All rights reserved. 4 Leveraging Open Source for Oracle Database Development Liquibase Cross platform database change management. http://www.liquibase.org/ https://github.com/liquibase/liquibase Blaine Carter
  • 5. 5Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Version Control / Change Management Basics: ● Track changes. ● Rollback / Switch to a specific revision. ● Branch / Merge - http://www.liquibase.org/development/branches.html ● Diffs
  • 6. 6Copyright © 2016 Oracle and/or its affiliates. All rights reserved. What is Liquibase? Liquibase is change management for your database. ● Database changes are made using changeSets. ● When you run an update, the changeSets are run in order. ● Liquibase tracks what has been run, when and who ran it. ● You can roll back to a specific version. ● Populate default and/or test data. ● Contexts - http://www.liquibase.org/documentation/contexts.html ● Diffs - http://www.liquibase.org/documentation/diff.html ● Documentation - http://www.liquibase.org/documentation/dbdoc.html ● SQL Output - http://www.liquibase.org/documentation/sql_output.html ● Offline - http://www.liquibase.org/documentation/offline.html
  • 7. 7Copyright © 2016 Oracle and/or its affiliates. All rights reserved. How Does It Work?
  • 8. 8Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Changelog Master { "databaseChangeLog": [ {"include": {"file":"changelog/db.changelog-1.json"}} ] }
  • 9. 9Copyright © 2016 Oracle and/or its affiliates. All rights reserved. ChangeSet {"databaseChangeLog": [ {"preConditions": [{ "runningAs": { "username": "lb_demo" } }] }, {"changeSet": { "id": "1", "author": "BlaineCarter", "changes": [ {"createTable": { "tableName": "lb_person", "columns": [ {"column": { "name": "id", "type": "int", "autoIncrement": true, "constraints": { "primaryKey": true, "nullable": false …...
  • 10. 10Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Java Command Line java $JAVA_OPTS -jar /opt/liquibase/liquibase.jar --driver=oracle.jdbc.OracleDriver --classpath="/usr/lib/oracle/12.1/client64/lib/ojdbc7.jar" --url=jdbc:oracle:thin:lb_demo/dd@dbaccess --changeLogFile=changelog/db.changelog-master.json updateSQL >> output.sql options --logLevel=DEBUG --logFile=liquibase.logFile $JAVA_OPTS is used for my Oracle Exadata Express cloud connection.
  • 11. 11Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Properties File (liquibase.properties) driver: oracle.jdbc.OracleDriver classpath: /usr/lib/oracle/12.1/client64/lib/ojdbc7.jar url: jdbc:oracle:thin:lb_demo/dd@dbaccess changeLogFile: changelog/db.changelog-master.json
  • 12. 12Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Liquibase Best Recommended Practices http://www.liquibase.org/bestpractices.html Ignore the directory structure I’m using in the demo’s.
  • 13. 13Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Software We’ll Be Using • SQL Developer • Oracle Exadata Express Cloud Database or Virtual Box • Liquibase - http://www.liquibase.org
  • 14. 14Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Install Download - http://www.liquibase.org/download/index.html Install – It's just Java, extract it and go.
  • 15. 15Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Enough blah blah, let's see it.
  • 16. 16Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Create Changelog and ChangeSet Files Changelog Example: http://www.liquibase.org/quickstart.html - step 1 Changeset Example: http://www.liquibase.org/quickstart.html - step 2 Recommended to only perform one change per Change set, but you can do more if you need.
  • 17. 17Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Run It http://www.liquibase.org/quickstart.html - step 3 Jar File: java $JAVA_OPTS -jar /opt/liquibase/liquibase.jar updateSQL Shell Script: /opt/liquibase/liquibase updateSQL Batch File: c:toolsliquibaseliquibase.bat updateSQL Put the Liquibase directory in your path and run it: liquibase update The shell script / batch files use the same JAVA_OPTS environment variable for my cloud connection.
  • 18. 18Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Rollback X Number of Change Sets Warning: Rolling back anything in the database can be tricky. Be very careful if you ever do this in Production. liquibase rollbackCount 1
  • 19. 19Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Tag a Changeset You can tag a changeset in the file: "changeSet": { "id": "1", "author": "BlaineCarter", "tagDatabase": {"tag":"ver-1"}, "changes": [ You can also use the command line: liquibase tag ver-1
  • 20. 20Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Rollback to Tag http://www.liquibase.org/documentation/rollback.html liquibase rollback ver-1 Other Options: http://www.liquibase.org/documentation/command_line.html
  • 21. 21Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Load Data From a File "changes": [ { "loadData": { "file": "changelog/groups.csv", "schemaName": "lb_demo", "tableName": "lb_groups" } }] groups.csv name,description Trucks,People who like trucks Rockets,People who like rockets Horses,People who like horses Snakes,People who like snakes
  • 22. 22Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Insert Data "changes": [ { "insert": { "schemaName": "lb_demo", "tableName": "lb_people", "columns": [ { "column": { "name": "firstname", "value": "Bob" } }, { "column": { "name": "lastname", "value": "Trucker" } } ...
  • 23. 23Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Context Test In the change set: "changeSet": { "id": "loadData-example", "author": "liquibase-docs", "context": "test", Liquibase.properties contexts: !test Command Line overrides the properties file: liquibase --contexts=test update Context vs Labels http://www.liquibase.org/2014/11/contexts-vs-labels.html
  • 24. 24Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Data Changes Are NOT Automatically Rolled Back. Define your own Rollback { "rollback": { "delete": { "tableName": "lb_people" } } }
  • 25. 25Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Diff http://www.liquibase.org/documentation/diff.html Command Line: liquibase.sh --driver=oracle.jdbc.OracleDriver --url=jdbc:oracle:thin:lb_demo/dd@unknownDB diff --referenceUrl=jdbc:oracle:thin:lb_demo/dd@goodDB Liquibase.properties: referenceUrl: jdbc:oracle:thin:lb_diff_demo/dd@dbaccess
  • 26. 26Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Generate Changelog (Reverse Engineer) http://www.liquibase.org/documentation/generating_changelogs.html Note that this command currently has some limitations. It does not export the following types of objects: Stored procedures, functions, packages & Triggers liquibase --changeLogFile=generated.json generateChangeLog
  • 27. 27Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Review The Output The output won’t be perfect. Generated by update: id INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL Generated by generateChangeLog: ID NUMBER(*, 0) DEFAULT "LB_DEMO"."ISEQ$$_69966".nextval NOT NULL
  • 28. 28Copyright © 2016 Oracle and/or its affiliates. All rights reserved. DBDoc http://www.liquibase.org/documentation/dbdoc.html liquibase DBDoc docs
  • 29. 29Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Extensions / Plugins https://liquibase.jira.com/wiki/display/CONTRIB/LiquiBase+Extensions+Portal
  • 30. 30Copyright © 2016 Oracle and/or its affiliates. All rights reserved. We Can Make It Better • Github – Repo – Fork – Change – Pull Request – Not just code • https://github.com/liquibase/liquibase • https://github.com/liquibase/liquibase/blob/master/LICENSE.txt
  • 31. 31Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Thank You, Now Go Out And Try It. Oracle Developer Advocate for Open Source Oracle Corporation Email: blaine.carter@oracle.com Twitter: @OraBlaineOS Blog: learncodeshare.net Team: community.oracle.com/docs/DOC-917690
  • 32. 32Copyright © 2016 Oracle and/or its affiliates. All rights reserved. Commands Used For The Demo (by slide number) #17 liquibase updateSQL liquibase update #18 liquibase rollbackCount 1 liquibase update #19 liquibase update liquibase tag myCoolTag #20 liquibase rollback ver-1 liquibase update #21 liquibase update #23 liquibase --contexts=test update #24 liquibase rollbackCount 2 liquibase rollbackCount 1 liquibase --contexts=test rollbackCount 2 liquibase --contexts=test update #25 liquibase diff liquibase --diffTypes=tables,columns diff liquibase diffChangeLog #26 liquibase --changeLogFile=generated.json generateChangeLog #28 liquibase dropAll liquibase DBDoc docs liquibase update liquibase DBDoc docs