O documento descreve a evolução incremental do banco de dados de um projeto ao longo do tempo, começando com o uso do Hibernate para gerar esquemas automaticamente e depois migrando para ferramentas de migração como MyBatis Migrations.
8. 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
21. WARNING: We've seen Hibernate users trying
to use SchemaUpdate to update the schema
of a productiondatabase automatically. This
can quickly endindisaster and won't be
allowed by your DBA.
“
-- Java Persistence with Hibernate
22. WARNING: We've seen RafaelPontetrying
to use SchemaUpdate to update the schema
of a productiondatabase automatically. This
can quickly endindisaster and won't be
allowed by your DBA.
“
-- Java Persistence with Hibernate
52. 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
53. 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
54. 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
55. 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
56. APLICA O SCRIPT NO
BANCO2
[rponte]
~/myblog/scripts
$
migrate
up
57. APLICA O SCRIPT NO
BANCO2
[rponte]
~/myblog/scripts
$
migrate
up
-‐env=PRODUCTION
-‐env=HOMOLOG
-‐env=DEV
-‐env=TEST
58. VERSIONA A MUDANÇA
NO BANCO3mysql>
select
*
from
DB_VERSION;
+-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
|
ID
|
DESCRIPTION
|
+-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
|
1
|
create
table
blog
|
+-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
59. 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
|
+-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
114. APP
BANCO
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
115. APP
BANCO
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
“Deusnocéu,eBancode
dadosnaterra.”
117. 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