O documento descreve a evolução incremental de um banco de dados utilizando migrations. As principais etapas descritas são: 1) Criar scripts SQL para cada mudança no banco de dados; 2) Rodar os scripts no banco de forma controlada; 3) Versionar as mudanças realizadas no banco.
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
|
+-‐-‐-‐-‐+-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐+
126. 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
127. 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
“Deusnocéu,eBancode
dadosnaterra.”
133. 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
134. 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