migrations for java (javou #4 - javace)
TRANSCRIPT
<?xml version="1.0" encoding="UTF-‐8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-‐unit name="IssueTracker"> <properties> <!-- ... --> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-‐unit> </persistence>
persistence.xml
INFO [SchemaUpdate ] Running hbm2ddl schema update INFO [SchemaUpdate ] fetching database metadata INFO [SchemaUpdate ] updating schema ... INFO [TableMetadata] table not found: issue INFO [SchemaUpdate ] create table issue (id bigserial not null, descricao varchar(255)) ... INFO [SchemaUpdate ] schema update complete !
@Entity class Issue { @Id private Long id; private String descricao; private String status = "A"; … }
Entidade ATUALIZADA!
INFO [SchemaUpdate ] Running hbm2ddl schema update INFO [SchemaUpdate ] fetching database metadata INFO [SchemaUpdate ] updating schema ... INFO [TableMetadata] table found: issue INFO [TableMetadata] columns: [id, descricao] INFO [SchemaUpdate ] alter table issue add column status varchar(255) ...INFO [SchemaUpdate ] schema update complete !
@Entity class Issue { @Id private Long id; @Column(length=1000) private String descricao; private String status = "A"; … }
Entidade ATUALIZADA! <3
INFO [SchemaUpdate ] Running hbm2ddl schema update INFO [SchemaUpdate ] fetching database metadata INFO [SchemaUpdate ] updating schema ... INFO [TableMetadata] table found: issue INFO [TableMetadata] columns: [id, status, descricao] INFO [TableMetadata] foreign keys: [] INFO [TableMetadata] indexes: [issue_pkey]
... ??????????? #WTFINFO [SchemaUpdate ] schema update complete !!
WARNING: We've seen Hibernate users trying to use SchemaUpdate to update the schema of a production database automatically. This
can quickly end in disaster and won't be allowed by your DBA.
“
-- Java Persistence with Hibernate
WARNING: We've seen Rafael Ponte trying to use SchemaUpdate to update the schema of a production database automatically. This
can quickly end in disaster and won't be allowed by your DBA.
“
-- Java Persistence with Hibernate
CRIE O SCRIPT COM A MUDANÇA1
CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') )
script.sql
CRIE O SCRIPT COM A MUDANÇA1
CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') )
create_table_blog.sql
CRIE O SCRIPT COM A MUDANÇA1
CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') )
1_create_table_blog.sql
CRIE O SCRIPT COM A MUDANÇA1
CREATE TABLE 'blog' ( 'id' INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 'descricao' VARCHAR(255) NOT NULL PRIMARY KEY ('id') )
<ID>_<DESCRIPTION>.sql
APLICA O SCRIPT NO BANCO2
[rponte] ~/myblog/scripts $ migrate up -‐env=PRODUCTION
-‐env=HOMOLOG-‐env=DEV-‐env=TEST
VERSIONA A MUDANÇA NO BANCO3
mysql> select * from DB_VERSION;
+-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ | ID | DESCRIPTION | +-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ | 1 | create table blog | +-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
APLICA SCRIPTS AINDA NÃO APLICADOS4
[rponte] ~/myblog/scripts $ migrate up
mysql> select * from DB_VERSION; +-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ | ID | DESCRIPTION | +-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+ | 1 | create table blog | | 2 | create table author | | 3 | create table post | +-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
Flyway
> Plain SQL migrations> Java migrations> Convention over Configuration> SQL Parser> Java API - Ant - Maven - Gradle
Liquibase
> XML migrations> Plain SQL migrations> Multiple Databases> Rollback support> Generation of SQL scripts for DBA
MyBatis Schema Migrations
> Plain SQL migrations
> Generation of SQL scripts for DBA> Rollback support> Maven
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v48
Q&A v44
Demo v45
deploy frequente deploy controlado
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v48
Q&A v44
Demo v45
Produção v43
deploy frequente deploy controlado deploy MUITO controlado
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v48
Q&A v44
Demo v45
Produção v43
deploy frequente deploy controlado deploy MUITO controlado
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v49
Q&A v44
Demo v45
Produção v43
deploy frequente deploy controlado deploy MUITO controlado
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v49
Q&A v49
Demo v45
Produção v43
deploy frequente deploy controlado deploy MUITO controlado
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v49
Q&A v49
Demo v49
Produção v43
deploy frequente deploy controlado deploy MUITO controlado
Rafael v48Rafael v48
Rafael v48Mario v49
Rafael v48
Handerson v43
Integration v49
Q&A v49
Demo v49
Produção v49
deploy frequente deploy controlado deploy MUITO controlado
APP
BANC
APPS que você NÃO conhece
APPS que você conhece
APPS que você conhece
APPS que você NÃO conhece
Data importers
Data exporters
Outros bancos
Frameworks de persistência
Código de teste
APPS que você conhece
APPS que você conhece
APPS que você NÃO conhece
Outros bancos
Data importers
Data exporters
APP
BANC
APPS que você NÃO conhece
APPS que você conhece
APPS que você conhece
APPS que você NÃO conhece
Data importers
Data exporters
Outros bancos
Frameworks de persistência
Código de teste
APPS que você conhece
APPS que você conhece
APPS que você NÃO conhece
Outros bancos
Data importers
Data exporters
“Deus no céu, e Banco de dados na terra.”
Original Transição Resultado
modifica o banco
período de transição
(antigo e novo)finaliza a
modificação
{ { {
Original Transição Resultado
modifica o banco
período de transição
(antigo e novo)finaliza a
modificação
{ { {
Aplica as migrations, migra os dados, escreve código de
compatibilidade
Original Transição Resultado
modifica o banco
período de transição
(antigo e novo)finaliza a
modificação
{ { {
Aplica as migrations, migra os dados, escreve código de
compatibilidade Remove schema antigo e código de compatibilidade