You are on page 1of 68

ISSN 1677918-5

9 771677 918004

00138

Sumrio
Contedo sobre Boas Prticas

06 Passo a passo para realizar a modelagem de dados


[ Rodrigo Ramos Nogueira ]

Contedo sobre Boas Prticas

13 Cluster Shared Volume no SQL Server 2014


[ Leandro Romualdo da Silva ]

Contedo sobre Boas Prticas

18 Service Broker no SQL Server 2014


[ Dhiego Piroto ]

Contedo sobre Boas Prticas

24 Estratgias de backup e restore no PostgreSQL


D
s

[ Thiago Lima de Castro ]

Feedback
eu

29 Replicando DB relacional na nuvem da Amazon

Contedo sobre Boas Prticas

40 Minerao de texto: Anlise comparativa de algoritmos


[ Breno Santana Santos e Methanias Colao Jnior ]

Contedo sobre Boas Prticas

55 Oracle Data Guard com Fast-Start Failover


[ Ivan Ricardo Schuster ]

edio
ta

[ Antonio Marcos Ferreira ]

sobre e
s

Contedo sobre Boas Prticas

D seu feedback sobre esta edio!


A SQL Magazine tem que ser feita ao seu gosto. Para
isso, precisamos saber o que voc, leitor, acha da
revista!
D seu voto sobre esta edio, artigo por artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback

Assine agora e tenha acesso a


todo o contedo da DevMedia:
www.devmedia.com.br/mvp

138 Edio - 2016 - ISSN 1677918-5 - Impresso no Brasil

EXPEDIENTE
Editor
Rodrigo Oliveira Spnola (rodrigo.devmedia@gmail.com)
Subeditor
Eduardo Oliveira Spnola
Consultor Tcnico
Joel Neto (joelrlneto@gmail.com)
Jornalista Responsvel
Kaline Dolabella - JP24185
Capa e Diagramao
Romulo Araujo
Distribuio
FC Comercial e Distribuidora S.A
Rua Teodoro da Silva, 907
Graja - RJ - 206563-900

Atendimento ao leitor
A DevMedia possui uma Central de Atendimento on-line, onde voc
pode tirar suas dvidas sobre servios, enviar crticas e sugestes e
falar com um de nossos atendentes. Atravs da nossa central tambm
possvel alterar dados cadastrais, consultar o status de assinaturas
e conferir a data de envio de suas revistas. Acesse www.devmedia.
com.br/central, ou se preferir entre em contato conosco atravs do
telefone 21 3382-5038.

Publicidade
publicidade@devmedia.com.br 21 3382-5038
Anncios Anunciando nas publicaes e nos sites do Grupo DevMedia,
voc divulga sua marca ou produto para mais de 100 mil desenvolvedores
de todo o Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com
detalhes sobre preos e formatos de anncios.

Fale com o Editor!


muito importante para a equipe saber o que voc est achando da
revista: que tipo de artigo voc gostaria de ler, que artigo voc mais
gostou e qual artigo voc menos gostou. Fique a vontade para entrar
em contato com os editores e dar a sua sugesto!
Se voc estiver interessado em publicar um artigo na revista ou no site
SQL Magazine, entre em contato com os editores, informando o ttulo e
mini-resumo do tema que voc gostaria de publicar:
Rodrigo Oliveira Spnola - Editor da Revista
rodrigo.devmedia@gmail.com

rodrigo Oliveira Spnola


Editor Chefe da SQL Magazine, Mobile
e Engenharia de Software Magazine.
Professor da Faculdade Ruy Barbosa,
uma instituio parte do Grupo DeVry.
Doutor e Mestre em Engenharia de
Software pela COPPE/UFRJ.

Guia HTML 5

Um verdadeiro manual de referncia


com tudo que voc precisa sobre HTML!

DEVMEDIA
http://www.devmedia.com.br/guias/guia-html/3

Passo a passo para realizar


a modelagem de dados
Aprenda a criar um modelo de dados com
qualidade

om o crescente aumento da quantidade de dados gerados em todo o mundo, que apenas no


fim do ano de 2014 atingiram o volume de 2,7
zettabytes, pode-se dizer que esta a era do Big Data,
havendo o surgimento de novas tcnicas e tecnologias
de armazenamento, em uma poca onde se fala muito
em HPC (High Performance Computing computao de
alto desempenho), Hadoop e NoSQL.
Mesmo com novas tecnologias ascendentes, os Sistemas Gerenciadores de Bancos de Dados Relacionais
ainda so maioria no mercado, sendo utilizados desde
o desenvolvimento de pequenos e-commerces a grandes ERPs. Os bancos de dados relacionais podem ter
sido criados h dcadas, porm, sempre estiveram em
constante atualizao para se adaptar ao cenrio do
momento, e na era do Big Data incluem adaptaes para
armazenar e processar dados em larga escala.
Atualmente so diversas as ferramentas para modelagem de dados disponveis no mercado, trazendo uma
abordagem que envolve as principais caractersticas
esperadas em um software desse tipo. Este artigo visa
explorar as principais ferramentas, permitindo ao
leitor decidir qual a melhor opo de uso, bem como
demonstrar na prtica como realizar a modelagem de
dados passo a passo.
O modelo relacional tem como principal objetivo a
integridade dos dados, caracterstica fundamental e que
tem relao direta com a continuidade de sua adoo
at os dias atuais. Garantir a integridade dos dados
significa que aps o seu armazenamento, eles podero
ser recuperados no mesmo estado, sem sofrer alteraes no autorizadas. E um dos responsveis por esta
melhoria a normalizao, assunto que ser abordado
na sequncia.

Normalizao dados
A normalizao dos dados o primeiro passo para se
obter sucesso com um modelo de dados ntegro, uma

6 SQL Magazine Edio 138

Fique por dentro


Ainda hoje, passados mais de 45 anos da criao dos bancos de
dados relacionais e tambm da disseminao das solues NoSQL,
os bancos de dados relacionais ainda so muito utilizados por conta
de seus diversos recursos para manipulao de dados, bem como sua
eficincia e eficcia quando se trata da integridade dos dados. Este
artigo ser til para todo desenvolvedor ou DBA que esteja no incio
de um projeto e deseja construir um modelo de dados que permita
o armazenamento de informaes com qualidade. Para isso, sero
abordadas aqui as principais ferramentas de modelagem de dados,
juntamente com conceitos fundamentais necessrios para a modelagem relacional e sua aplicao na prtica.

vez que sendo estas normas respeitadas, as redundncias e inconsistncias podero ser evitadas.
Uma caracterstica fundamental nos bancos de dados relacionais
so as transaes, operaes que manipulam os dados no banco e
que podem ser comportas por inseres, buscas, atualizaes ou
excluses. Espera-se que ao realizar transaes sejam atendidas
as propriedades ACID, descritas a seguir:
Atomicidade: esta propriedade garante que uma transao seja
atmica, ou seja, indivisvel. De modo geral, ou tudo acontece ou
nada acontece. Isto significa que em uma transao composta por
vrias operaes, se por algum motivo alguma operao no for
realizada, todas as demais tambm no sero e caso alguma tenha
sido realizada anteriormente, dever ser anulada;
Consistncia: esta propriedade garante que um banco de dados
consistente dever continuar consistente aps uma transao. Um
exemplo para melhor entendimento o caso de uma transao
que deve excluir 1.000 registros na base de dados e falha durante a excluso do registro de nmero 600. Haver essa mesma
quantidade de registros a serem excludos e 400 no excludos
temporariamente. Para manter a consistncia em casos como
este, a transao dever deixar o banco de dados no estado em
que ele estava antes da transao iniciar, ou seja, sem excluir os
600 registros;

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Isolamento: esta propriedade garante que cada transao


dentro de um banco de dados ocorra de maneira isolada, ou
seja, mesmo que haja vrias transaes acontecendo ao mesmo
tempo, as operaes de uma transao no devero interferir
nas demais;
Durabilidade: esta propriedade est relacionada aos dados
e sinaliza que um dado deve continuar imutvel at que uma
nova operao seja realizada. Para isso, caso uma operao seja
realizada com sucesso, os dados modificados por ela devem ser
persistidos no banco.
As propriedades ACID no esto ligadas diretamente modelagem, porm ter conhecimento de sua existncia e de suas definies de extrema importncia para quem constri um modelo
de banco de dados.
Para obter um modelo de dados dito normalizado, uma sequncia de etapas de validao deve ser seguida, denominadas formas
normais. As formas normais so regras para construo de tabelas
e relaes e ser respeitando-as que o modelo normalizado ser
obtido. As formas normais so definidas a seguir:
Primeira Forma Normal: A primeira forma normal trata
da atomicidade dos atributos, proibindo atributos compostos,
multivalorados e relaes aninhadas. Para que uma tabela esteja na primeira forma normal preciso obedecer aos seguintes
passos:
- Identificar a chave primria da tabela;
- Procurar o grupo que est se repetindo e retir-lo da tabela;
- Criar uma nova tabela com os atributos repetidos, onde a
chave primria desta tabela ser chave estrangeira na tabela
anterior;
- Repetir este processo at que todas as tabelas geradas estejam
na primeira forma normal.
Segunda Forma Normal: A segunda forma normal est relacionada dependncia funcional da chave primria. Para estar
na segunda forma normal a tabela deve estar na primeira forma
normal e nenhum dos campos que no so chaves no podem
depender de apenas parte da chave primria. Para remover a dependncia funcional os passos a seguir devem ser respeitados:
- Identificar campos que so dependentes de apenas parte da
chave primria e no da chave primria como um todo;
- Remover da tabela todos os campos que no so dependentes
funcionais.
- Terceira Forma Normal: a terceira forma normal est relacionada chamada dependncia transitiva, ou seja, um campo no
deve depender de um outro campo no-chave. Para remover
a dependncia transitiva se deve identificar os campos que so
dependentes transitivos de outros campos e remov-los.
Visto a importncia das formas normais para o desenvolvimento
de um banco de dados relacional, bem como a dificuldade no seu
entendimento, na parte prtica deste artigo as formas normais
sero aplicadas junto a um exemplo real.

Entidades e seus atributos


Uma entidade em um modelo de dados a representao de um
objeto do mundo real. Para distinguir uma entidade das demais, alm
do nome, elas so compostas de diferentes caractersticas, s quais
damos o nome de atributos. Por exemplo, a entidade carro pode ter os
atributos ano, modelo e cor. Ademais, vlido ressaltar que os atributos
podem ser classificados de diferentes maneiras, a saber:
Compostos: os atributos compostos so aqueles que podem ser
divididos em partes menores como um atributo endereo, que pode
ser dividido em rua, bairro e nmero;
Simples: os atributos simples so aqueles que no podem mais
ser divididos. Estes tambm so chamados de atmicos;
Monovalorados: so atributos que armazenam apenas um valor
para determinada entidade como a tabela pessoa s pode ter um
valor para idade;
Multivalorado: so atributos que podem armazenar vrios
valores para a entidade como um atributo telefone, que permite
armazenar todos os telefones da entidade pessoa;
Derivado: so atributos que podem derivar uns de outros como
idade e data de nascimento.
Um atributo tambm pode ser definido como identificador,
ou chave-primria, sendo ento responsvel por representar de
maneira nica todos os demais atributos em uma determinada
entidade. Um conceito relacionado que encontrado na literatura
o de chave-candidata. Esta sinaliza um atributo nico que pode
identificar a entidade, e por isso dito que ele uma chavecandidata a se tornar chave primria.

Relacionamentos e cardinalidades
No processo de modelagem, a cardinalidade um passo intuitivo para quem tem experincia com banco de dados. No entanto,
para os iniciantes na prtica, pode representar um momento de
dificuldades no desenvolvimento de diagramas. Na sequncia,
sero vistos os tipos de diagramas e a cardinalidade que se aplica
a todos eles.
A cardinalidade representa a maneira sob a qual as tabelas se
relacionam e podem ser de trs tipos:
Relacionamento um-para-um ou 1:1: este utilizado quando
uma entidade A se relaciona com uma entidade B e vice-versa,
e cada uma dever ter apenas um registro do outro. O exemplo
mais clssico desta cardinalidade seria o relacionamento entre
cnjuges, em uma tabela pessoa. Logicamente pode-se dizer que
Um marido est relacionado com apenas uma esposa e uma
esposa est relacionada apenas com um marido;
Relacionamento um-para-muitos 1:N: este utilizado nos casos
em que uma entidade A pode se relacionar com uma ou mais entidades B. Um exemplo dessa cardinalidade o relacionamento entre
cidade e estado. Pode ser dito que Uma cidade est relacionada a
apenas um estado, mas um estado tem diversas cidades;
Relacionamento muitos-para-muitos N:N: este utilizado
quando uma entidade A pode se relacionar com vrias entidades B
e vice-versa. nesse caso que ser gerada uma entidade associativa

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

Passo a passo para realizar a modelagem de dados

entre A e B. Um exemplo deste relacionamento ser a relao entre aluno e dsiciplina.


Assim, Um aluno pode se matricular em
vrias disciplinas e uma disciplina pode
ter vrios alunos matriculados.
Conhecer o que so as cardinalidades
e suas respectivas definies facilitar a
compreenso dos relacionamentos abordados na parte prtica deste artigo.

Modelagem de Dados
A modelagem o ato de transcrever um
problema de um cenrio real para uma
estrutura de armazenamento de dados. A
modelagem de dados pode estar em trs
nveis de abstrao:
Modelo Conceitual: o modelo conceitual
uma viso mais alto nvel de um modelo
de banco de dados. Independentemente da
sua implementao (SGBD), deve abranger as entidades e os relacionamentos de
maneira simples, permitindo at mesmo
que uma pessoa que no compreenda o
conceito de banco de dados possa compreender a regra de negcios representada
pelo modelo;
Modelo Lgico: o modelo lgico uma
verso mais detalhada do modelo conceitual, descrevendo alm das entidades e
relaes, tambm os campos que compem
as tabelas e os respectivos tipos de dados
de cada campo;

Figura 1. Tela da ferramenta BrModelo

8 SQL Magazine Edio 138

Modelo Fsico: o modelo fsico o banco


de dados aps ter sua modelagem finalizada. Pode-se dizer que o modelo fsico
o banco de dados implementado.
Uma questo que gera muita discusso na
criao de um modelo de dados a ferramenta a ser utilizada para a sua definio.
Partindo desta problemtica, neste artigo
sero abordadas algumas das principais
ferramentas do mercado, destacando as
caractersticas de cada uma delas.

Ferramentas para Modelagem de Dados


Em sua grande maioria so ferramentas
que permitem a construo do modelo
lgico e a partir deste, gerar o script de
criao do banco de dados. No entanto,
uma ferramenta que gera o modelo conceitual, lgico e fsico deve ser citada, o
BrModelo. Esta opo uma ferramenta de
origem acadmica e dado suas caractersticas didticas amplamente adotada no
ensino de banco de dados. A interface do
BrModelo apresentada na Figura 1.
Descrever as ferramentas para modelagem de dados dissertar sobre uma
diversidade de fatores, que vo desde a
usabilidade, completude dos recursos
oferecidos, at mesmo a integrao de suas
funcionalidades ao sistema operacional e
ao sistema gerenciador de banco de dados
utilizado.

Como pode ser notado, o mercado


vasto de ferramentas. Para confirmar a
frase anterior, em sites de downloads
uma simples busca pode retornar mais
de 100 programas para este fim. Neste
artigo sero apresentadas as ferramentas
de maior popularidade, visando atender
os principais SGBDs do mercado.
Descrever todas as ferramentas certamente levaria a um nmero alto e nos impossibilitaria de manter um bom grau de
profundidade do assunto, alm de prolongar um processo que pode ser simplificado. Para auxiliar na restrio para seleo
das ferramentas, as seguintes mtricas de
avaliao foram consideradas:
Software Livre: esta mtrica trata sobre
a licena do software (GNU, GPL ou BSD).
Sim para software livre e No para software proprietrio;
Sistema Operacional: esta mtrica
indica para qual sistema operacional a
ferramenta est disponvel (Windows,
Linux ou Mac OS);
Sistema Gerenciador de Banco de Dados: aps criar o modelo lgico, esperado
de uma ferramenta a capacidade de gerar
o modelo fsico, bem como a capacidade
de integrar os dois modelos nos casos de
alterao. Para esta mtrica foram considerados dois dos principais bancos de dados
proprietrios e dois dos principais bancos
de dados gratuitos, respectivamente Oracle e SQL Server, e MySQL e PostgreSQL;
Ano de Atualizao: esta mtrica representa o ano de criao e o ano da ltima
atualizao da ferramenta de modelagem,
o que possibilita avaliar o tempo de mercado da ferramenta, bem como a ltima vez
que seus recursos foram expandidos.
O estudo comparativo entre as ferramentas estudadas de acordo com as mtricas
definidas est disponvel na Tabela 1.
Essa tabela ilustra algumas das principais
ferramentas do mercado. No entanto, para
realizar a escolha tambm necessrio
conhecer o sistema operacional e o sistema
gerenciador de banco de dados. Por exemplo, um DBA que atua em uma empresa
que utiliza o mesmo sistema operacional
e um mesmo banco de dados ter menos
preocupao do que um DBA que pretende

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Ferramenta

Software Livre Windows Linux

Mac OS

SQL Server

Oracle

PostgreSQL

MySQL

Atualizao

DBDesigner

No

Sim

Sim

Sim

Sim

Sim

Sim

Sim

2015

DBEdit

No

Sim

Sim

Sim

Sim

Sim

Sim

Sim

2015

Erwin

No

Sim

Sim

Sim

Sim

Sim

Sim

Sim

2015

MySQL Workbench

No

Sim

Sim

Sim

No

Sim

No

No

2015

Oracle SQL Data Modeler

Sim

Sim

Sim

Sim

No

No

No

Sim

2015

SQL Power Architect

Sim

Sim

Sim

Sim

No

Sim

Sim

Sim

2012

Toad

Sim

Sim

Sim

No

No

Sim

Sim

Sim

2013

Tabela 1. Comparativo entre ferramentas de modelagem


realizar a implementao do mesmo modelo em bases de dados
diferentes, utilizando sistemas operacionais diferentes.

Modelagem de dados na prtica


Modelar no um processo simples, muito menos rpido. um
processo que envolve conhecimento sobre o sistema que ser desenvolvido, sobre modelagem, experincia e tempo para coloc-los
em prtica. Com o intuito de cobrir esse procedimento, at o final
deste artigo passaremos por todas as etapas do desenvolvimento
de um modelo de dados.
Como esperado, a primeira etapa da criao de um modelo de
dados conhecer o problema. Para este fim ser utilizado um caso
fictcio, apresentado a seguir.
Senhor Alberto Santos proprietrio de uma escola e contratou a
empresa X para desenvolver o seu sistema de gesto escolar. Aps
uma conversa com os profissionais dessa empresa foi elaborado
o seguinte texto com os requisitos:
O sistema deve armazenar dados de coordenadores, professores
e alunos. Apenas coordenadores e professores acessaro o sistema
como usurios. Cada professor ser alocado a uma disciplina e
cada aluno poder ser matriculado em uma ou mais disciplinas. A
alocao de alunos em uma disciplina lecionada por um professor
caracteriza uma turma e o sistema dever armazenar todos os dias
que uma turma ter aula. Alm disso, o sistema deve registrar
a presena dos alunos na turma que frequenta, bem como suas
notas nas disciplinas.
Nota
Durante o ciclo de vida de um software h diversos documentos para o levantamento de requisitos
do sistema. Neste artigo resumimos esta etapa a um pargrafo com a finalidade de manter o nosso
foco na modelagem.

Sabendo que no universo de tecnologia da informao a utilizao de ferramentas gratuitas bem vista, pois sempre oferece
um bom custo benefcio ao desenvolvedor, como ferramenta de
modelagem de dados para o nosso estudo foi escolhido o MySQL
Workbench, que est disponvel para os sistemas operacionais
Windows, Linux e Mac OS.
A partir de agora ser explanado um contedo misto, relacionando o desenvolvimento do modelo de dados teoria. Antes disso,

lembre-se que a abstrao em nosso contexto a capacidade de


compreender os componentes do mundo real e model-los no
banco de dados e que essa capacidade de abstrair pode variar
de pessoa para pessoa, o que far com que um mesmo problema
possa ser modelado de maneiras diferentes.
Dito isso, comearemos modelando as entidades que devem
armazenar as informaes de Aluno, Professor e Coordenador.
Na abstrao do mundo real, todos os trs representam pessoas,
e por isso h um conjunto de caractersticas em comum (Nome,
RG, CPF e Endereo, por exemplo). A Figura 2 demonstra a primeira tabela criada.

Figura 2. Passo 1 Estrutura da entidade PESSOA


Note que a tabela pessoa uma generalizao, onde sero concentrados os dados em comum de alunos, coordenadores e professores. A
partir disso, deve-se refletir para verificar se h ou no a necessidade
de criar outras trs tabelas especializadas. Neste caso o mais usual
verificar o que h de diferente entre as especializaes. Conhecendo a
descrio, sabe-se que o coordenador e o professor sero usurios que
acessam o sistema e inicialmente no possuem atributos diferentes
entre si, enquanto o aluno no acessar o sistema. Desta forma, a tabela Pessoa ser especializada em Aluno e Funcionrio (coordenadores
e professores), conforme mostra a Figura 3.
Dando continuidade ao nosso modelo, sabendo que nesta escola
cada disciplina lecionada por apenas um professor, a Figura 4
prope a modelagem para a relao entre disciplina e professor.
Se neste momento for indagado se o banco est na primeira forma
normal, a resposta ser no. Isto porque a tabela Disciplina est
infringindo a primeira forma normal, afinal, os dados do professor esto duplicados e como j h uma tabela para armazen-los,
estes podem ser removidos da nova tabela, mantendo-se apenas
ID_PROFESSOR.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

Passo a passo para realizar a modelagem de dados

Aps a normalizao da tabela Disciplina, nota-se que foi adicionado um campo TELEFONES na tabela Pessoa, o que d a entender
que um nico campo poder armazenar diversos telefones. No
entanto, isso caracteriza um caso de campo multivalorado, outra
infrao relacionada primeira forma normal. Para manter Pessoa
na primeira forma normal este atributo deve ser removido desta
tabela e criada uma nova para armazenar os telefones. Em seguida
basta criar uma relao entre Pessoa e os telefones pertencentes a ela.

A modelagem com a tabela Pessoa e Disciplina normalizadas


demonstrada na Figura 5.
Como agora h o entendimento do que se trata a primeira forma
normal, sabemos que criar um campo alunos em Disciplina para

Figura 3. Passo 2 Modelagem da especializao da tabela Pessoa

Figura 5. Passo 4 Normalizao das entidades Disciplina e Pessoa

Figura 4. Passo 3 Modelagem da entidade Disciplina

10 SQL Magazine Edio 138

10

Figura 6. Passo 5 Normalizao da entidade Disciplina e modelagem da entidade Turma

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

adicionar os alunos disciplina seria errneo. Note que com essa


escolha novamente seria criado um campo multivalorado que
infringiria a primeira forma normal. Como soluo, observe a
Figura 6. Esta mostra a tabela Disciplina normalizada, bem como
a criao da tabela Turma, entidade que armazenar quando uma
nova turma de determinada disciplina for ofertada.
Como dito anteriormente, o modelo deve armazenar as datas
em que uma turma tiver aula. Contudo, caso seja adicionado em
Turma um campo Dias_de_Aula e neste campo armazenar todas
as datas, a primeira forma normal seria quebrada com relao
adio de atributos multivalorados. Para respeitar a normalizao
devemos criar uma entidade Aula, a qual ser responsvel por
armazenar todas as datas que uma Turma tiver aula. A Figura 7
ilustra a modelagem dessa entidade.
Com as entidades Aluno e Turma, para especificar um relacionamento entre elas sem quebrar a 1FN devemos criar a tabela
Aluno_Turma, composta de duas chaves estrangeiras, sendo uma
para Aluno e outra para Turma. Assim, Aluno_Turma conter todas
as informaes necessrias. Ademais, adicionamos a ela o atributo
nota, que representar a nota obtida pelo aluno em determinada
disciplina. A esse tipo de entidade, que relaciona outras entidades
em um relacionamento do tipo muitos para muitos, damos o nome
de associativa (veja a Figura 8).
Figura 7. Passo 6 - Modelagem da entidade Aula

Figura 8. Passo 7 Modelagem da entidade Aluno_Turma

Figura 9. Passo 8 Modelagem da entidade Presenca

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

11

11

Passo a passo para realizar a modelagem de dados

Dando continuidade modelagem, vamos incluir no modelo a


presena do aluno. Para isso, aplicaremos a mesma abordagem
utilizada no passo anterior, mas relacionando as entidades Aluno
e Aula. A partir disso ser criada uma entidade associativa, de
nome Presenca. Esta entidade receber como chaves estrangeiras
id_aluno e id_aula, e indicar quando o aluno esteve presente em
determinada aula. A criao desta tabela demonstrada pela
Figura 9.
Neste momento pode-se dizer que o modelo de dados est quase
pronto. Contudo, com o intuito de demonstrar mais uma forma
normal, sero adicionadas as tabelas Cidade e Estado, criando uma
relao com Pessoa (vide Figura 10).

Figura 11. Passo 10 Modelo Final


A bibliografia tradicional prope geralmente as trs formas normais abordadas neste artigo. Atualmente, no entanto, a literatura
j destaca outras duas, alm da forma normal de Boyce Codd.
Ainda assim, a partir das tcnicas abordadas neste artigo j ser
possvel construir modelos de dados de alta qualidade e prontos
para serem implantados no banco de dados.
Construir um modelo de dados algo que pode se tornar
simples se utilizarmos devidamente as regras e dominarmos o
problema a ser solucionado. As formas normais, as propriedades
ACID, as cardinalidades, enfim, todos os conceitos relacionados
criao de modelos de dados se tornaro habituais na rotina de
um Administrador de Banco de Dados na medida em que forem
colocados em prtica, diariamente, em um processo contnuo de
aprendizado.

Autor
Figura 10. Passo 9 Incluso das entidades Estado e Cidade
Assim, a tabela Pessoa passar a contar com dois campos relacionados Cidade e ao Estado, respectivamente, id_cidade e id_estado.
No entanto, como id_estado depende transitivamente de id_cidade,
afinal, a partir da relao entre as entidades Pessoa e Cidade pode-se
descobrir o id_estado, a presena de id_estado na entidade pessoa
est infringindo a terceira forma normal, que especifica que no
deve haver dependncia transitiva entre os campos.
Para solucionar este caso basta remover o atributo id_estado da
tabela Pessoa. Com isso o modelo para o sistema escolar proposto
estar pronto e normalizado de acordo com as trs formas normais
(vide Figura 11).

12 SQL Magazine Edio 138

12

Rodrigo Ramos Nogueira


wrkrodrigo@gmail.com nogueira.trow.net.br
Bacharel em Informtica pela Universidade Estadual de Ponta
Grossa, especialista em Desenvolvimento web/mobile, analista
de sistemas e DBA. Atualmente mestrando da Universidade Federal de
So Carlos nas linhas de pesquisa de Banco de Dados e Big Data.

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Cluster Shared Volume


no SQL Server 2014
Failover Cluster Instance com mltiplas
sub-redes e CSV

ma FCI (Failover Cluster Instance) faz parte do


SQL Server Always On e executada em um
grupo de recursos do WSFC (Windows Server
Failover Clustering) para prover alta disponibilidade
em nvel de instncia e failover automtico. Temos
uma nica instncia do SQL Server instalada em ns
do cluster, onde em caso de falha de um n, o outro se
torna proprietrio do grupo de recursos e os servios
do SQL Server so iniciados. Isso permite manter o
ambiente disponvel, evitando a interrupo do servio.
No momento em que uma FCI iniciada, um dos ns
torna-se proprietrio dos recursos e a instncia de banco
de dados se torna online.
A instalao dos binrios do SQL Server realizada em
todos os ns envolvidos, porm, neste caso, os servios
sero gerenciados pelo cluster. Cada n ter apenas os
binrios do SQL Server, uma vez que os recursos da
instncia estaro em propriedade do n ativo. Com o
armazenamento de Shared Storage, podemos instalar
at 25 instncias para cada WSFC. Esta limitao ocorre
devido ao nmero de letras disponveis no alfabeto para
utilizarmos nas unidades. Com o CSV (Cluster Shared
Volume) no temos esta limitao.
Para configurao de uma FCI, necessrio que os
servidores envolvidos sejam executados em um cluster.
Alm disso, necessrio utilizar edies do SQL Server
como Enterprise Edition, Business Inteligence ou Standard Edition. A edio Enterprise suporta at dezesseis
ns de FCI, enquanto as verses Business Inteligence e
Standard suportam at dois ns.
necessrio que o ambiente tenha um servidor DNS
(Domain Name System) configurado, pois a instalao
do SQL Server em cluster registra um nome virtual
que referencia a interface de IP. A configurao de DNS
deve permitir que os ns do cluster registrem um mapa
de endereos de IP para o nome de rede. Caso no seja
possvel efetuar o registro, a instalao falhar.

Fique por dentro


Neste artigo abordaremos uma funcionalidade recentemente
suportada pelo SQL Server a partir da verso 2014, o CSV (Cluster
Shared Volume). Esta traz vrios benefcios se comparada com um
FCI (Failover Cluster Instance) com o armazenamento mais utilizado Shared Storage. Um FCI faz parte das solues de alta disponibilidade
do SQL Server desde suas verses mais antigas. Esta soluo pode
tornar a utilizao do armazenamento mais eficiente, por utilizar vrias instncias em uma mesma lun (logical unit number), eliminando
a limitao de letras atribudas s unidades lgicas.

Disco de Qurum
Determinamos se um cluster necessita de um disco de qurum
dependendo da quantidade de elementos votantes de um cluster. Cada elemento do cluster tem um voto vlido, um cluster
se mantm ativo ou iniciado se a maioria dos votos vlidos
estiver ativa.
Uma configurao de qurum adequada tem efeitos diretos na
disponibilidade do cluster, assegurando que em caso de falhas
de um n (problemas de comunicao entre os ns, parada programada para atualizaes e manutenes) o cluster se manter
ativo.
No cenrio que descreveremos neste artigo utilizaremos dois
ns, fazendo necessria a configurao de um disco de qurum.

Mltiplas Sub-Redes
Em uma configurao de mltiplas sub-redes, podemos ter cada
n do cluster respondendo em uma sub-rede diferente ou at
mesmo um conjunto delas. Essa configurao pode ser no mesmo local ou em um local geograficamente diferente, o que alm
de proporcionar disponibilidade, pode fornecer um recurso de
recuperao de desastres. Porm, nesta configurao geralmente
no haver compartilhamento do armazenamento, levando
necessidade de replicar os dados atravs das sub-redes utilizadas
na configurao.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

13

13

Cluster Shared Volume no SQL Server 2014

Como um exemplo de utilizao de FCI com mltiplas subredes imagine um cluster com trs ns: node1 e node2 esto na
subrede1, enquanto node3 est na subrede2. Esta uma configurao em cluster de vrias sub-redes, que permite fornecer uma
alta disponibilidade local adicional devido ao fato do node3 estar
em outra sub-rede. Sua dependncia de recurso IP ser definida
como OR.
Dependncias de IP definidas como AND, OR ou mistas no
so suportadas, como:
IP1 AND IP2 OR IP3

No h suporte para mais de um endereo de IP para cada


sub-rede. Em caso de configurao de mais de um IP para uma
sub-rede, podero ocorrer falhas de conexo.
A Figura 1 demonstra a utilizao de mltiplas sub-redes em
locais geograficamente distintos.

Figura 1. Mltiplas sub-redes em locais geograficamente diferentes

Diferente de uma configurao de FCI com Shared Storage,


onde cada instncia SQL Server requer uma lun separada (pelo
fato da lun ter de fazer o failover junto com a instncia SQL), o
uso do CSV pode fazer uso de mltiplas instncias utilizando a
mesma lun. Esse mecanismo torna a utilizao do armazenamento
mais eficiente e com maior escalabilidade, uma vez que no h
um nmero de limite de mount points a serem criados para as
instncias SQL Server.
Em uma possvel falha de comunicao de um n com o armazenamento, o CSV far o roteamento do trfego atravs da rede
utilizando SMB (Server Message Block), mantendo assim a instncia

14

Causa de um failover
A causa de um failover ou reinicializao definida pela propriedade Failure Condition Level, que determina se o status de
integridade pode ou no causar um failover ou reinicializao.
As condies de falhas so definidas de forma crescente considerando nveis entre 1 e 5. Cada um deles inclui as condies dos
nveis anteriores alm de suas prprias condies. Essas configuraes podem ser alteradas para o nvel desejado.
A seguir temos os nveis e condies para ocorrncias de failover
ou reinicializao:
Nvel 0: nenhum failover ou reinicializao automtica em nenhum
caso de falha. Destinado apenas manuteno programada;
Nvel 1: failover ou reinicializao quando o servidor estiver
inativo. Ser gerado um failover ou reinicializao sempre que o
servio do SQL Server estiver inativo;
Nvel 2: failover ou reinicializao em caso de servidor sem resposta. Ser gerado um failover ou reinicializao sempre que ocorrer a condio de nvel 1 ou a instncia no estiver respondendo;
Nvel 3: failover ou reinicializao em caso de erros crticos de
servidor. Ser gerado um failover ou reinicializao sempre que
ocorrerem as condies de nveis 1 e 2 ou o procedimento armazenado SP_SERVER_DIAGNOSTICS retornar erro de sistema;
Nvel 4: failover ou reinicializao em caso de erros moderados
de servidor. Ser gerado um failover ou reinicializao sempre que
ocorrer as condies de nveis 1, 2, 3 ou o procedimento armazenado SP_SERVER_DIAGNOSTICS retornar erro de recurso;
Nvel 5: failover ou reinicializao em qualquer condio de
falha qualificada. Ser gerado um failover ou reinicializao
sempre que ocorrer as condies de nveis 1, 2, 3, 4 ou o procedimento armazenado SP_SERVER_DIAGNOSTICS retornar erro
de processamento de consulta.

Momento do failover

Cluster Shared Volume

14 SQL Magazine Edio 138

SQL Server operacional. Em caso de um failover, no ser necessrio a desmontagem dos volumes de um n e montagem em outro.
Outra vantagem que o CSV faz uso do chkdsk, que permite a
deteco de danos aos volumes sem tempo de indisponibilidade
e uma melhor gesto da instncia SQL Server, pois possvel
gerenciar o armazenamento de qualquer n quando existe acesso
aos discos por ambos os ns.

No momento de um failover, todos os recursos disponveis naquele n sero transferidos para o outro disponvel, isto : o nome
de rede registrado na criao do cluster, o endereo IP, o servio
do mecanismo de banco de dados, SQL Server Agent e Analysis
Services (caso esteja instalado).
Neste momento, todas as pginas sujas do buffer sero gravadas
em disco, o novo proprietrio dos recursos inicia o servio do
SQL Server e as conexes sero destinadas ao novo proprietrio
do servio. Vale a pena lembrar que no haver alteraes nas
aplicaes, o nome de rede utilizado ser mantido.
O failover pode levar algum tempo at o servio estar disponvel
novamente, isso porque o servidor detentor dos servios poder

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

estar com uma quantidade de pginas


sujas muito grande no cache do buffer.
O processo de failover ir acontecer assim que as pginas sujas forem gravadas
em disco. A partir do SQL Server 2012
possvel utilizar pontos de verificaes
indiretos, o que pode ser uma vantagem
na hora de restabelecer o banco de dados
aps um failover, pois desta forma o SQL
Server limita a quantidade de pginas no
cache do buffer.

Criao do WSFC
Neste artigo criaremos um cluster no
Windows Server 2012 R2. Os passos de
instalao no mudam muito em relao
criao no Windows Server 2008. Vale
a pena lembrar que o usurio que criar
o cluster necessita das permisses para
criao de objetos de computador para a
OU (Unidade Organizacional) no Active
Directory. Caso no tenha as permisses,
solicite ao administrador de domnio
que pr-configure um objeto de domnio
para o cluster. Para comear, necessrio
instalar a role failover clustering no menu
add roles and features do Server Manager
em todos os ns envolvidos no cluster.
Feito isso em todos os ns, abra o Failover Cluster Manager. O prximo passo
primordial para a criao do cluster,
pois garante que suas configuraes
de ambiente estejam de acordo com as
recomendaes da Microsoft. Execute a
opo validate configuration, adicione os
ns que participaro do cluster e execute
todos os testes conforme recomendado.
Aps seu trmino, criaremos nosso cluster com a opo create cluster. Defina um
nome de rede para seu cluster e abaixo
sero exibidas as redes disponveis. Selecione a(s) rede(s) e adicione um IP vlido
para cada uma. No prximo passo sero
mostradas as configuraes definidas
para o cluster com nome, IP(s), e ns
atribudos ao cluster.
Com o cluster criado, voc poder ver
em seu Domain Controller que foi criado um novo objeto como se fosse um
computador de sua rede com o nome
atribudo ao cluster em sua criao e a
descrio failover cluster virtual network
name account.

Figura 2. Cluster SQLMAGCLUSTER


O prximo passo adicionar os discos ao
cluster. Expanda a aba storage/disks, clique
com o boto direito em add disks, sero
listados os discos disponveis aos ns.
Selecione todos, clique com boto direito e
clique na opo add to cluster shared volumes.
Note que na raiz do C: do n primrio do
cluster ser criada uma pasta com nome de
ClusterStorage. Este nosso mount point,
todos os discos estaro disponveis dentro
desta pasta e acessveis a ambos os ns.
Para melhor administrao, renomeie
os mount points com a caracterstica de
cada um, por exemplo: dados, log,
instance, backup, etc.
A execuo da validao e execuo
de todos os testes do assistente uma
recomendao de extrema importncia,
uma vez que a Microsoft somente d
suporte a uma soluo de cluster se suas
configuraes de servidor, rede e armazenamento passarem em todos os testes
do assistente. Alm de todo hardware
estar marcado como certificado para sua
edio do Windows Server.

Por se tratar de um ambiente de testes, foi


criada uma pasta no servidor de Domain
Controller que servir como nossa File
Share Witness.
Clicaremos sob o nome do cluster e em actions, na opo more actions, teremos a opo
de configure cluster quorum settings. Podemos
optar por trs configuraes distintas: Configurao default, Selecionar um qurum
Witness ou Configurao avanada.
Escolheremos a opo qurum witness
e file share witness, selecionando a pasta
que foi criada no servidor de domnio e
compartilhada. Depois, selecionaremos
esta pasta e assim criaremos nossa file
share witness. Foi adicionado o file share no
servidor de domnio, mas poderia ser em
qualquer outro servidor que no seja os
ns que compem o cluster, pois o qurum
deve suportar falhas nos ns, se manter
ativo e ter poder de voto para manter o
cluster ativo. A Figura 2 apresenta o cluster
j criado.

Criao de Qurum

Para instalar o SQL Server em cluster,


podemos faz-lo de duas formas:
Instalao integrada ao cluster em um
n: desta forma, j teremos uma instncia

Como estamos utilizando um nmero


par de ns em nossa configurao, precisamos configurar um disco de qurum.

Instalao do SQL Server 2014 em


cluster

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

15

15

Cluster Shared Volume no SQL Server 2014

de failover pronta para uso, porm sem


alta disponibilidade pois h apenas um n.
Para adicionar outros ns, instalaremos o
SQL Server com a opo de Add Node to a
SQL Server Failover Cluster;
Instalao avanada: que consiste na
preparao dos ns com a opo Advanced Cluster Preparation. Ao trmino desta
opo, ainda no h uma instncia de fato
instalada, por isso, necessrio executar a
preparao em todos os ns que participaram do cluster. Depois, execute a instalao em um dos ns, mas o n estar pronto
para a instalao que ser feita atravs da
opo Advanced Cluster Completition. Aps
esta instalao, teremos uma instncia
instalada e operacional.
Como uma instncia em cluster muito
semelhante a uma instalao em single
instance, destacaremos apenas pontos que
meream maior ateno durante a instalao.

Instalao avanada
Na instalao avanada teremos que
preparar os ns que faro parte do nosso
cluster. Para isso, executaremos em ambos
os ns o setup do SQL Server. Em advanced
encontraremos a opo Advanced Cluster

Figura 3. Failover

16 SQL Magazine Edio 138

16

Preparation. Esta opo muito semelhante


instalao integrada, sero verificados os
requisitos de instalao.
Caso j tenha uma instncia instalada
no n, ela aparecer no passo a seguir
e ser necessrio informar um nome de
rede para a instncia. Este nome de rede
ser necessrio para identificar a FCI na
rede. Em seguida, adicionaremos um
nome para o recurso de cluster do SQL
Server e selecionaremos os discos que
sero compartilhados no cluster de SQL
Server. Estes discos sero os locais onde
os arquivos desse SGBD sero instalados.
Caso defina um disco para a instalao
que no foi selecionado nesta etapa, sua
instalao falhar por falta de permisso
no disco.
Definiremos o IP(s) e rede(s) que vamos
utilizar. Podemos especificar vrios IPs
diferentes para um cluster de vrias subredes, mas apenas um IP suportado
para cada sub-rede. Cada n deve ser
um possvel proprietrio de, ao menos,
um endereo de IP fornecido e, tambm,
os discos que selecionamos nos passos
anteriores onde instalaremos os arquivos
do SQL Server. Com isso, a preparao da
instalao do SQL Server 2014 em cluster
finalizada.

Com ambos os ns preparados, seguiremos com a instalao da instncia do


SQL Server em cluster. Ao trmino da
instalao, todos os ns que foram preparados previamente j estaro configurados
com a FCI.

Instalao integrada
Comeamos pelo n primrio do cluster.
Execute o setup do SQL Server 2014, v at
a aba installation e selecione a opo New
SQL Server Failover Cluster Installation. Insira a chave de produto e aceite os termos de
licena. Sero listadas as rules de failover
cluster que sero instaladas.
necessrio que esta etapa seja concluda
sem erros. Selecione as features que deseja
instalar nesta instncia, informe um nome
de rede para ela, insira um nome para o
grupo de recursos de cluster do SQL Server e selecione os discos que utilizaremos
para ele. Sero listadas todas as redes
disponveis, no nosso caso, duas.
Vamos selecionar as redes que utilizaremos e definir IPs vlidos para cada rede.
Adicionaremos contas de domnio para
executar o SQL Agent e o mecanismo de
banco de dados. Na aba data directories
poderemos personalizar nossa instalao
definindo o local de cada tipo de arquivo
em discos diferentes do nosso mount
point, que aparecer no caminho C:/
ClusterStorage/nomedisco e com isso
terminamos nossa instalao no primeiro
n. Esta instncia j est pronta para uso,
porm, sem alta disponibilidade, pois temos apenas um n instalado. Agora vamos
adicionar uma nova instncia.
Para adicionar ns FCI, vamos ao n
que ser adicionado e executamos o instalador do SQL Server. Na aba installation
encontraremos a opo Add node to a SQL
Server Failover Cluster. Aps checar as rules
que sero instaladas, ser apresentado o
nome do recurso de cluster definido na
instalao anterior. Poderemos notar que
estaro listados o hostname do servidor
primrio, as features e o nome de rede que
definimos durante a instalao anterior.
Vamos prosseguir definindo as redes que
utilizaremos (observe que os IPs j esto
definidos). Adicione as contas de domnio
para executar os servios e j temos nossa

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

FCI com dois ns prontos e configurados.


O detentor dos servios no momento o n
vmwsqlha02. Assim como mostra a Figura 3,
vamos fazer o failover e mudar para o n
vmwsqlha01. O resultado da ao mostrado na Figura 4.

Remoo de ns do cluster
Remover um n de uma FCI to simples
quanto adicionar. Executaremos o setup do
SQL Server no assistente de instalao, em
seguida, na aba maintenance, selecionaremos a opo remove node from a SQL Server
failover cluster. Ser necessrio especificar a
instncia da qual desejamos retirar um n
e o nome do n ser listado no campo name
of this node. O n escolhido ser removido
do cluster.

Recuperao em caso de falha


Em caso de falha em um dos ns, feito
o failover para o outro n disponvel. Caso
Figura 4. Resultado da mudana para o n vmwsqlha01
seja uma falha reparvel, realize a manuteno no n afetado e verifique se ambos
esto online no cluster.
Links:
Caso seja uma falha irreparvel, como um problema de hardwaClustering de failover e Grupos de Disponibilidade AlwaysOn (SQL Server)
re, software ou at mesmo uma substituio de hardware, v at
https://msdn.microsoft.com/pt-br/library/ff929171(v=sql.120).aspx
o gerenciador do cluster e remova o referido n. Feito isso, realize
a manuteno do n e o adicione ao cluster novamente.
Atualizar um cluster de failover do SQL Server
O SQL Server em FCI vem sendo aprimorado a cada verso.
https://msdn.microsoft.com/pt-br/library/ms191009(v=sql.120).aspx
A verso 2014 com CSV pode nos trazer diversos benefcios como
Criar um novo cluster de failover do SQL Server (instalao)
custos com armazenamento inferiores em relao a outras confihttps://msdn.microsoft.com/pt-br/library/ms179530(v=sql.120).aspx
guraes de alta disponibilidade. Dependendo da forma de licenciamento, pode ser economicamente mais vivel uma implantao
Noes Bsicas sobre Volumes Compartilhados de Cluster em um Cluster de
Failover
deste tipo, pois nem sempre necessrio licenciar os ns inativos,
https://technet.microsoft.com/library/dd759255.aspx
podendo proporcionar uma melhor administrao dos recursos.
Durante o failover, a instncia migrada como um todo. Alertas,
logins, planos de manuteno e jobs sero migrados.
A implantao desta soluo relativamente simples, mas devemos estar atentos s recomendaes do fabricante e estudar
nosso ambiente para ter a certeza de que essa a soluo mais
apropriada para a necessidade do ambiente.

Instncias de cluster de failover do AlwaysOn (SQL Server)


https://msdn.microsoft.com/pt-br/library/ms189134(v=sql.120).aspx
Usar volumes compartilhados do cluster em um cluster de failover
https://technet.microsoft.com/pt-br/library/jj612868.aspx

Autor
Leandro Romualdo da Silva
leandroromualdosilva@gmail.com
Apaixonado por tecnologia, em especial SGBDs, formando
em banco de dados pela FIAP e DBA SQL Server e Oracle.

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

17

17

Service Broker no SQL


Server 2014
Principais conceitos e implementao

ideia de um componente arquitetural que


permita processar tarefas de forma assncrona
no nova. Podemos notar este tipo de soluo
sendo aplicada no envio de e-mail ou na negociao de
aes na bolsa de valores, por exemplo. A Microsoft
j possua solues de envio de mensagem maduras e
estabilizadas no mercado quando o SQL Server Service
Broker foi adicionado verso 2005 como uma alternativa a ser usada para o processamento assncrono, tendo
como principal diferencial sua implementao dentro
da camada de banco de dados.
O service broker proporciona uma troca de mensagens
de maneira transacional, permitindo que desenvolvedores criem aplicaes distribudas sem adicionar
grande complexidade em seus cdigos atuais. Isso
possvel devido arquitetura SODA (Service-Oriented
Database Architecture), que permite que a carga de trabalho de um sistema possa ser distribuda em outros
servidores e, com isso, aumenta-se a escalabilidade de
uma aplicao.
possvel fazer uso de tecnologias de broker em programao assncrona como processamentos massivos,
limpeza de bases ou quando h a necessidade de executar uma tarefa que o tempo de execuo no seja limitado
ao perodo em que o cliente est mantendo uma conexo
com o servidor. Isso melhora a percepo do usurio em
relao velocidade de processamento.
Um gerenciador de filas se faz necessrio quando
preciso limitar o nmero de requisies atendidas
para que no haja concorrncia de recursos com solicitaes que j esto em processamento. Neste caso, a
mensagem enviada para um servio que ir coloc-la
em sua respectiva fila, ento uma thread disponvel
ir pegar essa mensagem, process-la e devolver o
resultado.
Um equvoco comum achar que vale a pena utilizar
uma tabela comum como uma fila. Imagine um sistema
com centenas de acessos simultneos, se controlssemos
as filas por uma tabela inevitavelmente esbarraramos
em locks. J as filas do service broker, por fazerem par-

18 SQL Magazine Edio 138

18

Fique por dentro


Este artigo tem por objetivo apresentar o service broker do SQL
Server, um servio para implementar o processamento assncrono de
mensagens. Esta funcionalidade existe desde a verso 2005 do produto e, se implementada da maneira correta, pode ajudar a solucionar
graves problemas de concorrncia. Este artigo til para lidarmos com
situaes nas quais o nmero de usurios cresce alm do esperado e
a concorrncia por acesso aos dados torna-se um gargalo evidente.
O service broker uma alternativa para garantir a entrega dos dados
de maneira gil e organizada.

te da engine do SQL Server, conseguem resolver problemas de


concorrncia de maneira mais performtica.

Novas terminologias
Configurar um service broker, para quem est fazendo pela
primeira vez, pode ser um desafio. Um conjunto de novos termos
ser adicionado ao dia-a-dia do DBA. Alguns deles so:
Dialog Conversation: ponto de incio para qualquer troca de
mensagens do Service Broker. Antes que uma troca de mensagens possa acontecer, uma conversation precisa ser estabelecida.
As mensagens so entregues de maneira EOIO (exactly-once-inorder);
Conversation Groups: geralmente usado para agrupar conversas relacionadas a uma mesma lgica de negcio. Normalmente usado para que mensagens diferentes, que possam ser
agrupadas por um mesmo grupo de negcio, sejam processadas
em ordem;
Message Types: utilizado para definir qual o tipo dado a mensagem ir conter;
Contratos: os contratos definem quais message types podem ser
trocados dentro de uma dada conversation;
Filas: so objetos fsicos que criam tabelas onde as mensagens
sero armazenadas e servem de ponto de represamento para as
mensagens que chegam at que elas sejam processadas. Estas
tabelas so acessveis atravs dos comandos SEND e RECEIVE;
Endpoint: permite conexes com servios via protocolos do
SQL Server: TCP, Namedpipes e Sharedmemory. Uma definio

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

simples de um endpoint seria a de um objeto localizado na ponta


da camada de transporte que permite o acesso atravs de um ponto
nico. Um exemplo seria o acesso ao SQL Server via porta 1433.
Alguns mtodos de autenticao aceitos so: Kerberos, NTLM
(NT LAN Manager) ou ser baseado em certificados;
Servios: um servio a porta de entrada (endpoint) para que
haja comunicao entre o Initiator e o Target. O servio serve
como uma abstrao para toda a complexidade do broker, pois
uma mensagem enviada para um servio que a redireciona
para uma fila;
Rotas: caminho entre a rede que uma mensagem ir percorrer
at chegar ao SQL Server que ir efetivamente executar a tarefa.
Um broker pode direcionar uma mensagem para outro at que o
local da rota seja definido como local, ou seja, a mensagem ser
executada naquele servidor;
Prioridades: recurso adicionado no SQL Server 2008 que permite
quantificar uma prioridade (1 a 10) a um servio local, remoto
ou contrato.
Segurana: segurana um passo essencial na troca de mensagens. O Service Broker possui dois modelos de segurana: dialog
secutity e transport security. O dialog security usa uma chave de
sesso (session key) para garantir a troca de mensagens de maneira
segura. Se o initiator e o target esto no mesmo servidor, a criptografia automaticamente habilitada. J o transport Security utiliza
um endpoint para controlar o acesso a um servidor remoto.

Uso do Service Broker na prtica


A partir de agora iremos criar os componentes bsicos para troca
de mensagens com o SQL Server Service Broker. Aps a criao dos
objetos, iremos exemplificar como realizar o envio, recebimento
e tratamento de mensagens.

Criando um DB e habilitando o Broker


Vamos iniciar criando um novo banco. O service broker habilitado em nvel de base de dados de forma bem simples (Listagem 1).
Lembre-se que se seu banco de dados no utiliza o broker e o
servio est habilitado, recursos computacionais esto sendo
desperdiados.
Listagem 1. Criando uma base de dados e habilitando o broker
01 CREATE DATABASE SQLMAG_BROKER_DEMO
02 GO
03 USE SQLMAG_BROKER_DEMO
04 GO
05 ALTER DATABASE SQLMAG_BROKER_DEMO SET ENABLE_BROKER

Iniciaremos criando um objeto do tipo message type que serve


para definir qual tipo de mensagem deve ser enviada para que seja
considerada vlida. Os parmetros a serem definidos so:
AUTHORIZATION: role ou usurio do SQL Server;
VALIDATION:
- None: qualquer tipo de dado poder ser colocado na mensagem;

- Empty: apenas mensagens vazias;


- Well_Formed_xml: apenas mensagem que contenham um
XML bem formado (validado pelo XML Parser);
- Valid_XMl With Schema Collection: somente documentos
XML que passarem pela validao de um XSD especfico.
Vale lembrar que validar documentos XML no SQL uma tarefa
custosa, j que a mensagem precisa ser carregada por um XML
parser. Se for necessrio e houver uma camada de aplicao antes
ou depois do Service Broker, faa a validao nela. A Listagem 2
demonstra a criao de dois message types.
Listagem 2. Criao de message type
01 --CRIA UM MESSAGE TYPE
02 CREATE MESSAGE TYPE SQLMAG_BROKER_DEMO_MESSAGETYPE_INITIATOR
03 AUTHORIZATION DBO
04 VALIDATION = WELL_FORMED_XML
05
06 CREATE MESSAGE TYPE SQLMAG_BROKER_DEMO_MESSAGETYPE_TARGET
07 AUTHORIZATION DBO
08 VALIDATION = WELL_FORMED_XML

O prximo passo ser criar um Contrato. Este ir garantir que


a troca de mensagens no processar formatos que no foram
previamente definidos. Os parmetros necessrios para se criar
um contrato so:
Authorization: role ou usurio do SQL Server;
SENT BY:
- Initiator: o broker que iniciou a coversa com um servio;
- Target: o broker que seria destino de um Initiator;
- Any: ambos podem usar os message types do contrato.
A Listagem 3 demonstra a criao de um contrato que ser usado
por dois message types.
Listagem 3. Criao de contrato
01 --CRIA UM MESMO CONTRATO QUE SER PARTILHADO POR DOIS MESSAGE
--TYPES
02 CREATE CONTRACT SQLMag_Broker_Demo_Contrato
03 AUTHORIZATION DBO
04 (SQLMAG_BROKER_DEMO_MESSAGETYPE_INITIATOR SENT BY INITIATOR,
05 SQLMAG_BROKER_DEMO_MESSAGETYPE_TARGET SENT BY TARGET)

O prximo passo a criao de uma fila. Sua criao envolve


uma srie de parmetros, descritos a seguir:
Status: a fila est apta a receber mensagens;
Retention: mantm uma cpia de todas as mensagens que
chegarem para fins de auditoria;
Poison_Message_handling: quando habilitado, permite que
uma fila seja desabilitada caso sejam executados 5 rollbacks
consecutivos.
Dentro de Activation temos os seguintes parmetros:
Status: usado para habilitar ou desabilitar a execuo da

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

19

19

Service Broker no SQL Server 2014

procedure configurada no parmetro procedure_name quando


uma mensagem chega;
Procedure_name: nome da procedure que ser ativada;
Max_queue_reades: valor que representa o nmero mximo
de cpias da procedure que podero ser executadas em paralelo.
O valor pode ser alterado dinamicamente conforme sua carga de
trabalho mude;
Execute as: contexto de usurio sob qual a procedure ser
executada.
A ativao a capacidade do broker de monitorar as filas e, aps
receber uma mensagem, iniciar seu processamento. Ela pode ser
externa (haver um servio Windows que vai monitorar a fila para
fazer o processamento) ou interna (conectada a uma procedure).
Antes de criarmos a fila, precisaremos criar duas procedures
vazias apenas para que seja possvel referenci-las no script de
criao da fila (ver Listagem 4). Posteriormente iremos adicionar
alguma lgica nelas.

Listagem 5. Criao de duas filas para envio e recebimento de mensagens


01 --Cria fila para envio e recebimento de mensagem
02 CREATE QUEUE SQLMag_Broker_Demo_Fila_saida
03 WITH
04 STATUS = ON,
05 RETENTION = OFF,
06 ACTIVATION ( STATUS = ON,
07
PROCEDURE_NAME=DBO.SQLMAG_BROKER_DEMO_PROC_PROCESSA,
08
MAX_QUEUE_READERS=10,
09
EXECUTE AS OWNER),
10 POISON_MESSAGE_HANDLING (STATUS = ON)
11
12 CREATE QUEUE SQLMag_Broker_Demo_Fila_chegada
13 WITH
14 STATUS = ON,
15 RETENTION = OFF,
16 ACTIVATION ( STATUS = ON,
17 PROCEDURE_NAME=DBO.SQLMAG_BROKER_DEMO_PROC_PROCESSA_chegada,
18
MAX_QUEUE_READERS=10,
19
EXECUTE AS OWNER),
20 POISON_MESSAGE_HANDLING (STATUS = ON)

Listagem 4. Criao da procedure vazia


01 CREATE PROCEDURE DBO.SQLMAG_BROKER_DEMO_PROC_PROCESSA_
chegada AS BEGIN
02 RETURN
03 END
04 CREATE PROCEDURE DBO.SQLMAG_BROKER_DEMO_PROC_PROCESSA AS
BEGIN
05 RETURN
06 END

Na Listagem 5 criaremos duas filas. Uma para envio e outra


para recebimento de mensagens, respectivamente.
A seguir temos a criao do ltimo componente da arquitetura
de um broker, o servio. Este uma camada de abstrao para
acessar a fila. Nele se define um contrato para validar o contedo
inserido na fila:
Figura 1. Componentes criados para o service broker

CREATE SERVICE SQLMAG_BROKER_DEMO_SERVICE


AUTHORIZATION DBO
ON QUEUE DBO.SQLMAG_BROKER_DEMO_FILA (SQLMAG_BROKER_DEMO_CONTRATO)

Quando trabalhamos com troca de mensagens entre diferentes


servidores, devemos utilizar rotas que fazem o apontamento
para os outros servidores relacionados. Porm, vamos utilizar
a rota local (default) do broker que aponta para a instncia
local. Tambm no definiremos uma prioridade para uma fila.
A Figura 1 apresenta todos os componentes que criamos para
nosso service broker.
Agora que temos a estrutura bsica para a troca de mensagens, precisaremos adicionar alguma lgica procedure DBO
.SQLMAG_BROKER_DEMO_PROC_PROCESSA. Sua responsabilidade realizar um tratamento adequado nas mensagens
que chegarem na fila (SQLMag_Broker_Demo_Fila_saida) (ver
Listagem 6).

20 SQL Magazine Edio 138

20

Iniciamos o script declarando as variveis necessrias para realizar o parse do documento XML recm-chegado fila (linhas 8
a 10). Em seguida, da linha 18 at a 24, usamos a clusula receive
que est sendo apontada para nossa queue (SQLMAG_BROKER_
DEMO_FILA_CHEGADA). Este comando estar dentro de uma
estrutura WAITFOR () TIMEOUT 100 que significa que a
cada 100ms haver uma validao de checagem da fila afim de
encontrar uma nova mensagem. Se nenhuma nova mensagem
for encontrada, a procedure para de ser executada at a prxima
validao (linha 27). Caso haja uma nova mensagem, o prximo
passo ser transform-la de XML para o formato tabular e, ento,
inserir as informaes nas tabelas de destino (linhas 40 a 66).
Para que a procedure funcione corretamente, ser necessrio criar
algumas tabelas que recebero os dados contidos nas mensagens
recebidas. A definio das tabelas pode ser vista na Listagem 7.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Listagem 6. Definio da lgica da procedure


01 --Recebendo Mensagens
02 ALTER PROCEDURE DBO.SQLMAG_BROKER_DEMO_PROC_PROCESSA_chegada AS
03
04 BEGIN
05
06 --Variveis de manipulao
07 DECLARE @INICIO DATETIME = GETDATE()
08 DECLARE @handle INT --tratamento xml
09 DECLARE @PrepareXmlStatus INT --tratamento xml
10. DECLARE @MENSAGEM XML, @message_type_name varchar(100),
@conversation_handle varchar(100)
11
12 --WHILE (1 = 1)
13 BEGIN
14 BEGIN TRANSACTION;
15
16 declare @tabelaStage as table
17 (
18
conversation_handle VARCHAR(100),
18
message_type_name VARCHAR(100),
19
MENSAGEM VARCHAR(MAX)
20 )
21
22 WAITFOR (
23 --captura primeira mensagem que estiver na fiLA
24 --Quando o comando receive executado uma mensagem removida da fila.
RECEIVE TOP (1)
25
@conversation_handle = conversation_handle,
26
@message_type_name = message_type_name,
27
@mensagem = CONVERT(NVARCHAR(MAX),message_body)
28
FROM SQLMAG_BROKER_DEMO_FILA_CHEGADA
29
--INTO @tabelaStage
30 ), TIMEOUT 10000; --tempo em ms que uma mensagem ser aguardada
31
32 --Se nenhuma mensagem chegar, nada faz.
33 IF @@ROWCOUNT = 0
34
BEGIN
35
COMMIT TRANSACTION;
36
return;
37
END
38
39 else begin
40
41 --Inicia tratamento
42
43 /*Le o texto passado como parmetro (@mensagem), realiza o parse do XML atravs

44
45

da mxxmlsql.dll e deixa o XML pronto para ser consumido*/


EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT,
@mensagem

46
47
48
--CABEALHO DA VENDA
49
INSERT INTO VENDAS (venda, vendedor, data, total)
50
(SELECT VENDA, VENDEDOR, DATA, sum(TOTAL*QUANTIDADE)
51
FROM OPENXML(@handle, /PRODUTOS/VENDA,2)
52
WITH(
53
VENDA VARCHAR(100) @ID,
54
VENDEDOR VARCHAR(100) @VENDEDOR,
55
DATA VARCHAR(10) @DATA,
56
TOTAL DECIMAL(10,2),
57
QUANTIDADE INT
58
)
59
group by VENDA, VENDEDOR, DATA)
60
61
62
--DETALHES DA VENDA
63
INSERT INTO VENDAS_DETALHES (venda, codigo, descricao, total, quantidade)
64
(SELECT *
65
FROM OPENXML(@handle, /PRODUTOS/VENDA,2)
66
WITH (
67
VENDA VARCHAR(100) @ID,
68
CODIGO INT,
69
DESCRICAO VARCHAR(100),
70
TOTAL DECIMAL(10,2),
71
QUANTIDADE INT
72
)
73
)
74
/*Libera a rea de memria alocada pelo documento no primeiro passo.*/
75
EXEC sp_xml_removedocument @handle
76
77
DECLARE @HASH VARCHAR(100) = (SELECT conversation_handle FROM
@tabelaStage)
78
79
INSERT INTO LOG_BROKER_MANUAL (HASH_MENSAGEM, INICIO, FINAL)
80
VALUES (@HASH, @INICIO, GETDATE())
81
82
COMMIT TRANSACTION;
83
end
84
85
END --while
86
87 END PROC

Listagem 7. Criao das tabelas


01 --TABELA QUE IR ARMAZENAR O CABEALHO DE UMA VENDA
02 CREATE TABLE VENDAS(
03 VENDA INT,
04 VENDEDOR VARCHAR(100),
05 DATA DATE,
06 TOTAL DECIMAL(10,2)
07 )
08
09 --TABELA QUE IR ARMAZENAR OS DETALHES DA VENDA
10 CREATE TABLE VENDAS_DETALHES(
11 VENDA VARCHAR(100),
12 CODIGO INT,
13 DESCRICAO VARCHAR(100),

14 TOTAL DECIMAL(10,2),
15 QUANTIDADE INT
16 )
17
18 --TABELA QUE IR ARMAZENAR LOG DE EXECUO DE CADA IMPORTAO.
19 CREATE TABLE LOG_BROKER_MANUAL(
20 ID INT IDENTITY(1,1),
21 HASH_MENSAGEM VARCHAR(100),
22 INICIO DATETIME,
23 FINAL DATETIME,
24 DATA_REGISTRO DATETIME DEFAULT(GETDATE())
25 )

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

21

21

Service Broker no SQL Server 2014

Basicamente, criamos as tabelas de vendas, detalhes da venda


e uma terceira responsvel por armazenar o log de execuo de
cada importao.

Troca de Mensagens
Para que possamos simular uma troca de mensagens real, ser
necessrio que um documento XML seja criado e fornecido como
um parmetro para o SQL Server. A Listagem 8 apresenta um
trecho de um documento XML que representa a venda de livros.
Na linha 3 declaramos uma varivel do tipo XML, que ser
usada para armazenar o documento XML relacionado venda
de livros e uma varivel uniqueidentifier (@dialog_id), que ser
usada na Listagem 9 como parte da sintaxe de criao de uma
conversation. As demais linhas da listagem definem um conjunto
de dados de venda.
Listagem 8. Documento XML
01 --Para nosso exemplo usaremos um XML que simula a troca de mensagens
02 --de venda de livros.
03 declare @mensagem xml, @dialog_id uniqueidentifier
04 set @mensagem =
05 <?xml version=1.0?>
06 <PRODUTOS TIPO=XML_SQLMAGAZINE>
07 <VENDA ID=2 VENDEDOR=DHIEGO PIROTO DATA=2015/01/01>
08 <CODIGO>12</CODIGO>
09 <DESCRICAO>GUIA DE BOLSO MSSQL SERVER</DESCRICAO>
10 <TOTAL>331.99</TOTAL>
11 <QUANTIDADE>10</QUANTIDADE>
12 </VENDA>
13 <VENDA ID=2 VENDEDOR=DHIEGO PIROTO DATA=2015/01/01>
14 <CODIGO>15</CODIGO>
15 <DESCRICAO>C# GUIA DO PROGRAMADOR</DESCRICAO>
16 <TOTAL>59.90</TOTAL>
17 <QUANTIDADE>3</QUANTIDADE>
18 </VENDA>
19 <VENDA ID=2 VENDEDOR=DHIEGO PIROTO DATA=2015/01/01>
20 <CODIGO>14</CODIGO>
21 <DESCRICAO>GUIA DO XML</DESCRICAO>
22 <TOTAL>95.9</TOTAL>
23 <QUANTIDADE>10</QUANTIDADE>
24 </VENDA>
25 </PRODUTOS>

Enviando uma mensagem


A atividade primria de um broker a troca de mensagens.
Os comandos bsicos para as atividades de envio e recebimento
de mensagens so, respectivamente, SEND e RECIEVE.
Porm, antes de estabelecer uma troca de mensagens, ser
necessrio iniciar uma conversation. Isso poder ser feito com o
comando BEGIN DIALOG CONVERSATION (Listagem 9).
As primeiras quatro linhas fazem parte da estrutura de criao
bsica para que uma conversation seja estabelecida. A varivel
@DIALOG_ID gerar um GUID (16 bytes) que ser usado na
Listagem 9 quando a mensagem for enviada.
Existe uma camada de abstrao quando realizamos trocas de
mensagens. Esta camada recebe o nome de servios, sendo as
mensagens trocadas entre eles. Nas linhas 2 e 3 so definidos os
servios de envio e recebimento da mensagem, respectivamente.

22 SQL Magazine Edio 138

22

Esta mensagem ser validada por um contrato, cujo o nome


definido na linha 4.
Para finalizar a criao da conversation, temos as opes avanadas que, em nosso caso, explicitamos que a mensagem no ser
enviada de forma encriptada (encryption = off) e que o tempo
limite durante o qual a conversation permanecer aberta em segundos de lifetime = 10. Ambos os endpoints (entrada e sada)
devem finalizar o processamento antes do lifetime expirar.
Listagem 9. Definio de uma conversation
01 BEGIN DIALOG CONVERSATION @DIALOG_ID --INICIA DIALOGO
02 FROM SERVICE SQLMAG_BROKER_DEMO_SERVICE_SAIDA --SERVIO PARA
QUAL UMA MENSAGEM SER ENVIADA APS O PROCESAMENTO
03 TO SERVICE SQLMAG_BROKER_DEMO_SERVICE_CHEGADA --SERVIO DE
DESTINO
04 ON CONTRACT SQLMAG_BROKER_DEMO_CONTRATO --CONTRATO QUE IR
VALIDAR A MENSAGEM.
05 --OPOES AVANADAS
06 WITH
07
ENCRYPTION = OFF,
08
LIFETIME = 2000;

Para que possamos enviar mensagens, faremos uso do comando


SEND e ele possu dois parametros vlidos:
ID da conversation;
Contedo da mensagem.
Estes parmetros sero retornados atravs dos comandos contidos na Listagem 9. Os detalhes de como enviar uma mensagem
esto definidos a seguir:
SEND ON CONVERSATION @DIALOG_ID MESSAGE TYPE SQLMAG_BROKER_DEMO_
MESSAGETYPE_INITIATOR (@MENSAGEM)

Depois que uma mensagem for postada na fila, nossa proccedure


estar apta a perceber que a fila no est mais vazia e iniciar o
processamento dessa nova mensagem, em nosso caso, capturando
o XML e aplicando o devido tratamento para que os dados possam
ser inseridos nas tabelas de destino.

Consultando Filas
Se voc quiser saber quantas mensagens ainda esto em uma
dada fila, basta executar uma instruo select simples no objeto
queue. A consulta a seguir retorna a lista de mensagens aguardando para serem processadas. A Figura 2 apresenta o resultado
da execuo da consulta:
SELECT CONVERT(NVARCHAR(MAX),MESSAGE_BODY), --Mensagem
*
FROM SQLMAG_BROKER_DEMO_FILA_SAIDA

Monitoramento de Filas
Assim como todo produto Microsoft, possivel monitorar o
comportamento de uma determinada funcionalidade atravs do

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Figura 2. Mensagens aguardando serem processadas


Performance Monitor (perfmon) e DMVs (Dynamic Management
Views). DMVs ou DMFs (Dynamic Management Funcions) so objetos
da engine do SQL Server utilizadas para consultar seus metadados
ou informaes mais detalhadas sobre o que um determinado
servio est executando.
Monitorar a extenso de uma fila fundamental para entender se
o nmero de threads que atendem uma fila est sub-dimensionado
ou se o processamento da mensagem est lento.
O SQL Server possui duas DMVs muito teis para consultar o
que est acontecendo no broker:
sys.conversation_endpoints: lista todas as conversations abertas
e que esto sendo usadas. preciso ter cuidado com a quantidade
de conversations abertas, pois isso pode causar lock de pginas
no tempdb, levando a um crescimento demasiado do arquivo de
dados;
sys.transmission_queue: lista todas as mensagens que tiveram
algum problema durante sua transmisso.
importante considerar que o Service Broker um servio de
troca de mensagens confivel e, dependendo dos requisitos do seu
sistema, uma tima alternativa para seu ambiente, j que toda sua
lgica est incorporada dentro do SQL Server, permitindo ganhos
de performance significativos.

Autor
Dhiego Piroto
dhiegopiroto@gmail.com
Graduado em Sistemas de Informao. Atua h seis anos na rea
de TI, apoiado na tecnologia de banco de dados SQL Server 2005
a 2014. Possui o ttulo de MCP e MCTS Microsoft SQL Server e membro
ativo da comunidade MSDN SQL Server.
Links:
Service Broker Performance
https://technet.microsoft.com/en-us/library/ms166135(v=sql.105).aspx
Uso do ssbddiagnose Utility
https://msdn.microsoft.com/en-us/library/bb934450.aspx
Perfmon
https://technet.microsoft.com/en-us/library/ms166069(v=sql.105).aspx

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

23

23

Estratgias de backup e
restore no PostgreSQL
Saiba como criar um ambiente robusto

ma das atividades mais importantes de um administrador de banco de dados , sem dvidas,


planejar e implementar uma boa estratgia de
backup para se prevenir de possveis desastres. Nem
sempre possvel prever tudo, mas para se prevenir de
possveis falhas importante considerar desastres que podem ocorrer com seu banco de dados: terremoto, furaco,
incndios, falha de hardware, falha de software e at falha
humana. Para se proteger de todas elas existe um custo e
a implementao vai depender do nvel de investimento
que ser feito e dos riscos que a empresa est disposta a
correr. Nem sempre o administrador de banco de dados
consegue se proteger da maioria dos desastres, pois no
depende s dele. Nesses casos interessante deixar os
responsveis pelos sistemas cientes da situao.
Para criao da melhor estratgia de backup para o
ambiente, temos que considerar quais as necessidades
dos clientes que usam o servio de banco de dados.
A seguir abordaremos quais pontos devem ser levados
em considerao.
Uma sigla bastante importante para definio da nossa
estratgia o ANS (Acordo de Nvel de Servio) ou em
ingls SLA (Service Level Agreement). Proveniente do ITIL,
biblioteca com melhores prticas de infraestrutura de TI,
o ANS o acordo entre o provedor de servios de TI e o
cliente para um determinado tipo de servio. No nosso
caso, o servio em questo o de banco de dados. E o
acordo ser o tempo de indisponibilidade desse servio
durante uma parada no programada. Quanto tempo
aceitvel para o cliente ficar sem esse servio no caso
de um desastre?
No caso de um desastre, dependendo da estrutura
da empresa, muito provvel que ser necessrio um
restore usando o backup realizado. E claro, de nada
vale um backup se o restore no funciona. Por isso, um
outro conceito que precisamos entender aqui o RTO
(Recovery Time Objective), que o tempo gasto do desastre
at a completa recuperao dos dados. De uma maneira
direta, nossa estratgia de backup precisa ter um RTO
que atenda o ANS relacionado a desastres.

24 SQL Magazine Edio 138

24

Fique por dentro


Este artigo objetiva mostrar como implementar uma boa estratgia
de backup e de restore para seu banco de dados. Para isso, ser abordado o funcionamento do Continous Archiving, tambm conhecido
como backup incremental. Vamos saber em que situaes este tipo de
backup til, quais os passos para habilit-lo, como realizar o restore
e o recover da base de dados. Se voc tem um banco de dados PostgreSQL e considera que os dados contidos nele so importantes, ento
recomendvel que voc entenda como criar uma boa estratgia de
backup e que tambm tenha em um bom procedimento para realizar
a recuperao desses dados. Caso contrrio, poder ter problemas no
dia em que precisar realizar um restore no ambiente de produo.

Outro acordo que deve ser definido o perodo aceitvel de perda


de informaes em caso de falha. Existe um perodo aceitvel em
que, no caso de um restore, os dados podem ser perdidos ou no
aceitvel de maneira alguma perder dados?
A criao dos backups histricos tambm ter um peso grande na
definio da estratgia. Em alguns casos em que ocorre o expurgo
das informaes do banco de dados em determinados perodos,
se faz necessria a criao de um backup que ser armazenado
por um longo perodo. Essa reteno visa atender algumas leis
ou at mesmo auditoria da empresa.
Para atender todas essas situaes, necessrio um investimento
bem alto, pois preciso ter uma boa infraestrutura. Alm desse
investimento, existe um outro essencial que a alocao de pessoal. Assim como a etapa da implementao, existe toda a parte
da criao da documentao, reviso e atualizao dos processos.
Mesmo ciente dos pontos necessrios, nem sempre as empresas
esto dispostas a pagar. Existem casos em que os dados armazenados no justificam um enorme valor de investido no backup.

WAL - Write-Ahead Logging


Para comear, importante termos em mente que os logs de
transao, conhecidos como logs de WAL no PostgreSQL, possuem
um papel fundamental para garantir a integridade dos dados e
tambm tm uma funo muito importante no desempenho do
banco de dados.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Os logs de WAL nada mais so do que um histrico das transaes ocorridas no banco de dados. Todas as operaes so gravadas primeiramente nos logs de transao para s depois serem
escritas nos arquivos de dados do banco, tambm conhecidos com
datafiles. Por isso a importncia deles no desempenho, pois como
temos a certeza de que os logs possuem a informao guardada,
o banco no precisa ficar se preocupando em gravar todas as
alteraes em tempo real nos datafiles.
Os arquivos de WAL tambm so necessrios para integridade.
Com o histrico guardado nos arquivos de log, mesmo as informaes que ainda no foram salvas nos datafiles depois de uma
queda de energia ou outro desastre podem ser refeitas. Esse processo chamado de roll-foward recovery, tambm conhecido como
REDO. Em resumo o fluxo seria: usurio inseriu uma informao
e logo em sequncia realizou um commit; os dados so descarregados do buffer dos logs para os arquivos de redo, para s depois
serem escritos nos arquivos do banco de dados.
No PostgreSQL, os arquivos de log so armazenados dentro do
diretrio pg_xlog que fica armazenado no diretrio de dados da
sua instncia. Por padro, o banco inicia com 3 segmentos WAL.
Estes segmentos possuem um tamanho total de 16M e so compostos por blocos de 8k.

Tipos de backup e continuous archiving


Existem dois tipos de backups: o lgico e o fsico. O backup
lgico gerao dos comandos SQL necessrios para recuperao da base de dados dentro de um arquivo texto. Este tipo de
backup no muito indicado para recuperao de desastres, pois
o arquivo com os comandos para recuperao foi gravado em um
momento especfico do tempo e durante a recuperao dos dados
teremos que voltar o banco para este mesmo momento em que
foi gerado. Imagine um ambiente em que realizado um backup
lgico todo dia s 2h e que no mesmo dia houve um problema no
seu hardware e ser preciso recuperar os dados de seu backup. Se
voc estiver usando apenas o backup lgico, voc s conseguir
recuperar seu banco de dados at as 2h. Ento voc ter perdido
pelo menos 10h de informao da sua base de dados.
O lgico funciona mais como um incremento na sua estratgia e
pode ser usado, por exemplo, para backups histricos que devem
ser armazenados por um longo perodo.
Durante o backup fsico feita uma cpia binria dos arquivos
do seu banco de dados e ele pode ser dividido em quente e frio. O
backup frio nada mais do que parar todo seu banco de dados e
realizar a cpia de todos os arquivos, mas a temos o problema da
indisponibilidade da base. Dependendo do ambiente, esta indisponibilidade pode no ser aceitvel. J no quente, no precisamos
parar o banco de dados. Mas esse tipo de backup s possvel
quando temos habilitado o arquivamento de logs WAL.
Como todo arquivo importante, os arquivos de REDO tambm
devem ter seus backups para evitar perda de informao em
caso de sua corrupo. Ento importante que seja habilitado o
arquivamento dos logs de WAL, que nada mais que um backup
dos seus arquivos de REDO. Aps habilitado, recomendado que

os logs arquivados sejam gravados em um servidor diferente de


onde est seu banco de dados.
O Continuous Archiving nome dado aos backups contnuos das
sequncias dos logs WAL. Esses backups sero usados em conjunto
com o backup fsico do seu banco de dados. No caso de um recover,
precisaremos ter a sequncia contnua dos logs de REDO desde o
ltimo backup realizado. Desta maneira conseguiremos realizar a
recuperao completa do banco de dados ou at mesmo recuperar
para um determinado momento no tempo, procedimento conhecido como PITR (Point-in-Time Recovery). Por isso que os backups
fsicos so recomendados no caso de um desastre; diferente dos
lgicos, podemos recuperar o banco em qualquer ponto no tempo.
Alm das utilidades j citadas, este arquivamento ser bastante
importante para economizar tempo nos backups de grandes bases
de dados onde invivel realizar uma cpia completa de todo o
banco de dados todos os dias da semana.
Imagine um banco de dados de 800Gb. Dependendo da infraestrutura disponvel, seria muito custoso ou at impossvel realizar
um backup completo de toda estrutura da sua base de dados
todos os dias da semana sem ter um impacto direto no ambiente
de produo. Para otimizao deste tempo, poderia ser usada a
combinao do backup base de todo o banco durante um ou dois
dias na semana e, durante os dias restantes, ser realizado apenas
o backup dos archives dos logs. E no caso de uma recuperao do
seu banco, voc iria combinar o seu backup base com a sequncia
de logs arquivada.
Outra funo importante dos archives a construo do banco
de dados standby. Os logs arquivados no banco de dados principal
so enviados para o secundrio e l as transaes so aplicadas
para criar um espelho do banco de dados de produo. No caso de
um desastre, a recuperao do seu ambiente com o banco de dados
standby seria bem mais rpida. Porm, como algo que requer um
investimento maior, nem sempre ele implementado.
A escrita nos logs de REDO sequencial e cclica. Como padro
temos trs segmentos, a escrita alternada entre eles. Essa alternncia entre os segmentos conhecida no PostgreSQL como xlog
switchs. E sempre que um switch ocorre, gerado o arquivamento
do segmento antigo. Mas em que momento ocorre essa transio?
A seguir temos alguns:
Durante o incio de um backup online;
Aps o uso da funo pg_switch_log;
Durante o shutdown do banco de dados, ocorre o switch para
que os arquivos atuais sejam arquivados.

Restore dos backups realizados


Com certeza, mais importante do que o backup o restore. Imagine voc realizar um grande investimento em infraestrutura, levar
vrios dias planejando sua estratgia de backup e, no dia em que
houver um desastre no seu servidor de banco de dados de produo,
voc no conseguir realizar a recuperao de toda a informao necessria porque no havia testado antes se seus backups realmente
conseguiriam recuperar as informaes conforme a necessidade da
empresa. Todo seu esforo foi jogado fora.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

25

25

Estratgias de backup e restore no PostgreSQL

Por esta razo, alm de ter um bom planejamento para os


backups, voc deve ter uma excelente estratgia para o restore.
Tudo que citamos para o backup, vlido para o restore. Tambm
teremos que ter um bom investimento para criao de toda a documentao, atualizao, reviso dos procedimentos para realizao
da recuperao. Tudo isso com a inteno de que nossos backups
possam ser constantemente testados e validados para que no dia
que seja necessrio, eles funcionem.
Alm da documentao de restore usando os backups feitos
para desastres, recomendado que seja feita a documentao
para recuperao dos backups histricos.
Nem sempre possvel, devido a custos, mas o ideal que existisse um ambiente semelhante ao de produo para que a recuperao dos backups fosse testada com regularidade. Assim, todo o
procedimento poderia ser validado com uma preciso maior.

Habilitando o arquivamento dos logs de WAL


Para criao destes exemplos foi usado o ambiente com o sistema operacional CentOS 6 e PostgreSQL 9.4. Para comear, vamos
criar uma estrutura diferente do local onde est instalado nosso
banco de dados. Esta nova estrutura ser usada para armazenar
os backups. No nosso exemplo, ser criado o diretrio /backup e
dentro dele a pasta /archives. Como citado antes, interessante
que o /backup esteja em um disco diferente do seu servidor de
banco de dados. importante tambm certificar-se de que o
usurio postgres tem acesso aos diretrios criados:
mkdir -p /backup/archives
chown postgres.postgres /backup
chown postgres.postgres /backup/archives

Aps a criao dos diretrios que recebero os arquivos, vamos


habilitar o arquivamento dos logs de WAL. Primeiro, iremos fazer
login com o usurio postgres, logo em seguida conectar no banco
de dados usando o utilitrio psql para identificar onde se encontra
o arquivo postgressql.conf. Para localiz-lo, usaremos o comando
show config_file. nele que faremos as configuraes necessrias.
Como mostrado na Listagem 1, nosso arquivo est no caminho
/postgres/postgresql.conf.
Listagem 1. Localizando o arquivo postgresql.conf
01 psql (9.4.5)
02 Postgres=# show config_file;
03 config_file
04 ----------------05 /postgres/postgresql.conf

26

Listagem 2. Parmetros para habilitar arquivamento dos logs WAL


01 wal_level = archive
02 archive_mode = on
03 archive_command = cp %p /backup/archives/%f
04 max_wal_senders = 1

Criando o backup base


Agora que j temos os logs de REDO sendo copiados, podemos
criar nosso backup online completo da base de dados. Iremos
utilizar o utilitrio pg_basebackup. Ele realiza uma cpia de
todos os arquivos do cluster de banco de dados PostgreSQL.
Caso voc tenha mais de um banco de dados nas suas instncias, no possvel realizar o backup de apenas um banco de
dados.
Este tipo de backup feito utilizando o protocolo de replicao
para conexo com o banco de dados, por isso, a realizao da
conexo com o banco deve ser feita por um usurio que tenha
permisses de replicao. Outro pr-requisito que o parmetro
max_wal_senders esteja com a configurao mnima necessria
para que haja pelo menos uma sesso disponvel durante a realizao do backup.
Vamos criar um usurio com as permisses necessrias para
realizar nosso backup. Usando um super usurio do banco de
dados, faa login na base e execute o cdigo a seguir:
postgres=# create role usu_bkp replication login password backup;

Aps localizar o arquivo postgresql.conf, devemos edit-lo com


os valores descritos na Listagem 2 para que o arquivamento dos
logs de REDO seja habilitado:
wal_level: determina a quantidade de informao que armazenada no WAL. O valor padro minimal, que guarda somente
a informao necessria para recuperar a base de um desastre.

26 SQL Magazine Edio 138

No nosso caso, precisaremos alterar o parmetro para archive ou


hot_standby;
archive_mode: quando alterado para on, faz com que os segmentos de WAL sejam enviados para a localizao de armazenamento que ser indicada no parmetro archive_command.
O archive_mode no pode ser habilitado quando o wal_level est
como minimal;
archive_command: aqui iremos passar o comando shell que ir
realizar o arquivamento dos logs de WAL. O %p ser substitudo
pelo caminho que ser armazenado e %f alterado pelo nome
do arquivo;
max_wal_senders: nmero de processos que fazem o envio dos
logs arquivados de WAL para os servidores standby. O padro
0, indicando que a replicao est desabilitada. No nosso caso
iremos habilitar pois ser necessrio para o uso do utilitrio
pg_basebackup.

Aps a criao do usurio com o privilgio Replication, precisamos adicionar uma nova linha ao arquivo pg_hba.conf. Essa nova
linha necessria para que nosso novo usurio possa se conectar
ao banco de dados. Como este arquivo pode variar em cada instalao, usaremos o comando show hba_files para descobrir onde
ele se encontra, como mostrado na Listagem 3.
Feito isso, adicione a linha apresentada na Listagem 4 ao final
do arquivo pg_hba.conf. Logo em seguida, reinicie o banco de
dados para que as mudanas tenham efeito.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Listagem 3. Localizando o arquivo pg_hba.conf


01 psql (9.4.5)
02 postgres=# show hba_file;
03
hba_file
04 ----------------------05 /postgres/pg_hba.conf
Listagem 4. Definio de permisso e reincio do servidor
01 -- Adio de permisses arquivo pg_hba.conf
02 host replication usu_bkp 127.0.0.1/32 trust
03
04 -- Restart servio PostgreSQL
05 pg_ctl restart

chamado de /bkp_antes_restore onde faremos a cpia de todo


o diretrio /postgres (linhas 02, 03 e 04).
Feito isso, iremos acessar a localizao em que foram realizados
os backups, no nosso caso /backup. Nesse diretrio teremos a
pasta /archives e uma outra criada com a data da realizao do
backup. Iremos acessar a pasta 31102015, data em que foi realizado o backup que queremos usar para o restore (linha 05). Dentro
dela teremos o arquivo chamado base.tar.gz. O arquivo est nesse
formato porque foi compactado durante o backup. Este arquivo
deve ser descompactado dentro do diretrio base do nosso banco
de dados (linha 06).
Listagem 5. Restore do backup base

Depois de configurar o arquivamento, iremos realizar o backup completo de toda estrutura da base. Usaremos o utilitrio
pg_basebackup passando os parmetros necessrios para nossas
configuraes:

01 pg_ctl stop
02 mkdir -p /bkp_antes_restore
03 chown postgres.postgres /bkp_antes_restore
04 cp -r /postgres/* /bkp_antes_retore/
05 cd /backup/31102015/
06 tar -xvf base.tar.gz -C /postgres/

pg_basebackup -h127.0.0.1 -U usu_bkp -D /backup/`date +%d%m%Y` --xlogmethod=fetch -P -v --format=t -z

-h: especifica o nome do servidor do banco de dados;


-U: nome do usurio que ir realizar a conexo;
-D: diretrio onde ser gravado o backup. Foram usadas as
variveis %d%m%y para especificar junto ao diretrio a data em
que est sendo gerado;
--xlog-method: inclui todos os logs gerados durante o backup;
-P: mostra o progresso da operao;
-v: habilita o modo verbose. A inteno de identificar possveis
problemas durante a operao de backup;
--format=t: formata a sada do arquivo para o padro .tar;
-z: habilita a compresso gzip no arquivo.

Realizando o Restore e o Recovery


Vamos entender como realizar o restore dos backups bases e,
logo em seguida, a recuperao aplicando as sequncias WAL
arquivadas. Lembrando que nesse ambiente usaremos o mesmo
servidor em que o backup foi realizado. Se quiser realizar o procedimento em outro servidor, ser necessrio que o software do
PostgreSQL esteja instalado.
Aqui teremos dois cenrios de recuperao:
1. No primeiro faremos o restore do backup base e depois a recuperao completa at o momento da falha;
2. No segundo faremos o restore do backup base e depois a recuperao incompleta para um determinado ponto no tempo.
O processo de restaurao do backup base igual para os dois
cenrios. Usaremos a Listagem 5 como base para os comandos
descritos neste processo. O primeiro passo para realizar o
restore parar todos os processos relacionados ao PostgreSQL
(linha 01). No obrigatrio, mas se for possvel, interessante
realizar um backup da atual posio do banco antes que seja
realizado o restore. No nosso caso, ser criado um diretrio

Cenrio 1
J temos nosso backup base restaurado, agora precisamos realizar a recuperao completa do nosso banco de dados. Para isso,
precisamos criar o arquivo recovery.conf. Este arquivo passa ao
PostgreSQL os parmetros necessrios para o recovery. Nesse
cenrio iremos indicar apenas a localizao das sequncias arquivadas dos logs de WAL e durante o processo de incio do banco
de dados sero lidos e aplicados todos os logs de REDO para que
o banco seja recuperado at a ltima sequncia gerada. Observe
como proceder no cdigo a seguir:
-- Recuperao completa
restore_command = cp /backup/archives/%f %p

Aps a leitura e recuperao usando os logs arquivados, o PostgreSQL ir renomear o arquivo recovery.conf para recovery.done
indicando que ele realizou a recuperao conforme solicitado
no arquivo.

Cenrio 2
A diferena deste cenrio que aqui iremos realizar a recuperao para um determinado perodo no tempo e no necessariamente at a ltima sequncia arquivada. Assim como no primeiro
cenrio, aps a restaurao do backup base, iremos criar o arquivo
recovery.conf, porm aqui sero necessrias algumas linhas a mais
no arquivo, conforme mostrado a seguir:
recovery_target_time=2015-10-31 13:30:42
recovery_target_inclusive = true
restore_command = cp /backup/archives/%f %p

recovery_targer_time: perodo que queremos recuperar o banco


de dados;

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

27

27

Estratgias de backup e restore no PostgreSQL

recovery_target_inclusive: indica que a recuperao ser realizada at o momento descrito no comando. Se a opo escolhida
fosse false, ento a recuperao iria ocorrer at um perodo menor
do que o indicado no comando;
restore_command: indica o local onde esto os arquivos.
Existem outras configuraes durante a recuperao. Recomendamos a leitura da documentao para se aprofundar no assunto
(veja seo Links).

Sabendo da importncia de ser manter boas estratgias de


backup e de recuperao dos dados, a implementao de uma
boa estratgia deve ser encarada com seriedade e planejamento.
Alm da implementao, constantes revises devem ser realizadas para garantir a segurana dos dados e verificar se o tempo
para completar toda a rotina continua atendendo aos requisitos
do negcio.
Links:
SQL Dump - Backup lgico
http://www.postgresql.org/docs/8.3/static/backup-dump.html

Autor
Thiago Lima de Castro
thiago_L_C@hotmail.com
Possui 8 anos de experincia na rea de banco de dados. Atuou
em vrios projetos de alta disponibilidade usando tecnologias
Oracle em ambiente de misso crtica. Possui certificaes Oracle OCP,
OCE, ITIL Foundation e IBM DB2. Graduado em Telemtica pelo IFCE Instituto Federal de Educao, Cincia e Tecnologia do Cear. Atualmente trabalha como
DBA alocado no Tribunal de Justia do Cear.

Standby Servers - Banco de dados standby (replicao)


http://www.postgresql.org/docs/9.4/static/warm-standby.html
Recovery Target Settings - Configuraes usadas durante o recover
http://www.postgresql.org/docs/9.1/static/recovery-target-settings.html

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

28 SQL Magazine Edio 138

28

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Replicando DB
relacional na nuvem da
Amazon
Uma forma simples de garantir disponibilidade e
contingncia de dados

utilizao de bases de dados sempre foi de


suma importncia na maioria dos projetos de
software. Antes o analista ou desenvolvedor
responsvel pela base de dados (DBA) tinha simples
escolhas para fazer. Agora ficou complexo, pois existe
uma infinidade de banco de dados, e cada um com suas
particularidades, diferenas e teorias. No final o objetivo
sempre o mesmo: gravar, ler e manter os dados.
Abordaremos nesse artigo o uso de rplicas para
melhorar a performance e disponibilidade do banco de
dados. Mas quando falamos de performance, se tratando
de banco de dados, o assunto muito abrangente. No
simplesmente melhorar JOINS. Estamos entrando em
um universo que envolve a escolha certa do banco de
dados para a aplicao, o local fsico onde este banco de
dados ser instalado e como devemos escrever e acessar
estes dados.
A escolha do banco de dados um assunto muito
delicado, por se tratar de uma escolha metade tcnica e
metade pessoal. A maioria das aplicaes de pequenas e
mdias empresas est bem servida rodando em bancos
de dados relacionais como MySQL, SQL Server, Oracle
e PostgresSQL. Quando existe uma demanda de data
science, estas empresas o fazem em paralelo.
A escolha do local fsico onde instalar o banco de dados
um tanto quanto bvia. Provavelmente a primeira coisa
que pensamos colocar este banco de dados em uma
mquina dedicada ou na nuvem. Ningum deveria, nos
dias atuais, arriscar deixar a base de dados dentro do
ambiente vulnervel da empresa. O local fsico onde
o banco de dados deve estar tem que ser no mnimo
acessvel e tolerante a falhas, devendo se reestabelecer
automaticamente caso ocorra alguma interrupo.

Fique por dentro


Este artigo mostra como melhorar o desempenho, disponibilidade
e segurana em bases de dados relacionais utilizando os recursos do
Amazon Web Services (AWS). Vamos tratar da importncia de fazer
rplicas de leitura mostrando as trs maneiras comuns de implementar este recurso atravs da nuvem da Amazon. Este artigo contm
informaes valiosas para quem deseja garantir disponibilidade,
acessibilidade e segurana para seus dados. Alm de disponibilidade, voc pode aplicar este conhecimento para obter contingncia e
performance. Estas informaes tambm servem para quem deseja
conhecer as ferramentas do AWS e seus recursos direcionados para
bancos relacionais.

Melhorias em consultas SQL um assunto velho e muito debatido em diversos fruns. Mas preciso que o analista ou desenvolvedor tenha em mente uma boa estrutura de dados, que permita
consultas inteligentes e rpidas. Nos casos de grandes massas de
dados e muitos acessos de leitura, muito importante entender
sobre normalizao e desnormalizao.
A acessibilidade, disponibilidade e contingncia so essenciais
em quase todas as aplicaes, principalmente nas aplicaes mveis e empresas de servio online. Atravs do console do AWS,
podemos melhorar nossa base de dados com uso de rplicas de
leitura para ter mais desempenho, rplica Multi-AZ para maior
segurana, ou unindo os dois recursos para obter maior desempenho e segurana. Tudo isto pode ser feito sem entender de cdigo
ou ter profundos conhecimentos de banco de dados.

Rplica de banco de dados


Atualmente, de extrema importncia entender e utilizar as
rplicas de banco de dados, seja para melhorar a performance

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

29

29

Replicando DB relacional na nuvem da Amazon

ou para servir de contingncia. Com o aumento da mobilidade,


as cargas de acesso a bases de dados cresceu exponencialmente.
Replicar a base de dados quase uma obrigao do desenvolvedor,
praticamente parte necessria para garantir maior acessibilidade e contingncia ao sistema como um todo, principalmente
sistemas crticos.
Quando uma base de dados replicada, temos a vantagem de
direcionar escritas e leituras. S com esta pequena modificao,
provavelmente podemos ganhar 50% de performance, simplesmente porque o banco de dados de escrita est ocupado somente
com as escritas, e o banco de dados de leitura est ocupado somente com as leituras.
Quando temos leituras e escritas na mesma base de dados, muitas
vezes temos problemas relacionados memria e I/O. Imagine um
usurio fazendo uma consulta na tabela "transaes" em busca
de todas as transaes de uma loja durante um ano, acessando o
banco de dados por meio de um sistema. Se esta consulta demora
0,5 segundos, multiplique por 100 usurios e teremos um banco
de dados ocioso por 50 segundos. Neste momento, uma escrita
certamente estar esperando, pois boa parte da memria est
sendo utilizada para a consulta. Este um exemplo simples, mas
na realidade podemos ter problemas bem mais srios, chegando
at a travar a aplicao.
Para contornar o gargalo da memria, muitos profissionais
simplesmente aumentam a capacidade das mquinas. Isto resolve em curto prazo, mas certamente chegar o dia em que ele
dever aumentar novamente a memria, at chegar ao limite de
memria e CPUs suportados pela mquina. Usando o recurso
de rplicas de leitura resolvemos estes problemas muitas vezes
com menor custo, pois podemos ter rplicas especficas para um
determinado acesso.
Outro benefcio da rplica a disponibilidade, por exemplo, se a
base de dados de escrita (Master) cair, o sistema ainda funcionar
para as leituras. A equipe ter tempo de ajustar o problema sem o
software ficar totalmente indisponvel. Assim, tambm, se a base
de dados utilizada para leitura (Slave) cair, o sistema ainda estar
disponvel para escrita.
Quando utilizamos apenas uma base de dados, na ocorrncia de
uma queda, o sistema estar totalmente fora do ar. Vale mencionar
e lembr-lo que banco de dados fora do ar significa prejuzo. A
empresa perde clientes, contratos, e tem sua reputao manchada.
O cliente perde por no conseguir utilizar o recurso que deveria
estar disponvel. O analista perde, pois sua confiana estar em
jogo e provavelmente ter problemas a resolver.
Muitas vezes, por questes financeiras, a rplica fica invivel.
Entretanto, melhor estar preparado, pois geralmente os problemas de banco de dados no acontecem no comeo, eles ocorrem
justamente no momento em que a empresa mais precisa da acessibilidade, disponibilidade e da segurana.

A nuvem da Amazon e o PostgreSQL


Voc provavelmente j deve ter ouvido falar ou j utiliza os recursos de computao em nuvem oferecidos pela Amazon (AWS).

30 SQL Magazine Edio 138

30

A Amazon criou uma grande quantidade de ferramentas que


auxiliam o desenvolvimento back-end e deploy de aplicaes,
transformando as tarefas de configurao e instalao em rotinas
simples e at agradveis de fazer.
Outro fator importante dentro da estrutura da Amazon a
possibilidade de particionar os recursos e ter elasticidade, permitindo investir somente o necessrio no momento exato da
necessidade.
Existem outras empresas que oferecem IaaS (Infraestrutura como
servio) como Microsoft, Rackspace, CenturyLink, Google, IBM,
Virtustream, Vwware e outras. Porm, neste artigo vamos tratar
apenas do AWS.
Escolhemos o PostgreSQL para os exemplos deste artigo, por
ser um banco de dados muito utilizado em pequenas, mdias
e at grandes corporaes. Devido sua grande quantidade de
recursos, este banco de dados atende a muitos tipos de aplicao.
O PostgreSQL open source, o que ajuda a reduzir um pouco o
custo da infraestrutura. Dentre suas principais caractersticas, vale
destacar a capacidade de integrao com linguagens de programao. Por exemplo, voc pode criar dentro do banco rotinas em
C, C++, Ruby, Java, dentre outras. sem sombra de dvida uma
tima escolha para a maioria dos projetos de software que precisam gravar e ler informaes de forma remota com as melhores
caractersticas de um verdadeiro SGBD.
Apesar de utilizarmos o PostgreSQL como exemplo neste artigo, voc pode aplicar a tcnica apresentada aos bancos Amazon
Aurora, Maria DB, MySQL, Oracle e SQL Server, com pequenas
alteraes pertinentes a cada SGBD.
Na pratica, iremos construir uma base de dados e depois criar
uma rplica. Vamos apresentar tambm outra forma de replicar
dentro da Amazon por meio do recurso Multi-AZ.

Preparando o ambiente
Antes de criar nosso banco de dados e replic-lo, precisamos
fazer nosso plano de estrutura. Devemos pensar sobre a real
necessidade da base de dados e tentar prever os detalhes, tendo
respostas para perguntas como:
De que forma vamos utilizar nossa base de dados?
Como ele ser acessado?
Onde ele precisa estar?
Qual o tamanho necessrio para armazenamento?
Qual a banda de acesso necessria?
A Amazon oferece data centers nas principais regies do mundo.
Isto facilita muito a escolha do local onde ser instalado o banco de
dados. Voc pode escolher colocar a base de dados bem prxima
da sua regio ou da regio onde seus clientes esto. Ter a base de
dados prxima ajuda a obter uma melhor latncia.
No Brasil, a Amazon possui data centers no Rio de Janeiro e em
So Paulo, mas os custos so mais elevados que os data centers
nos EUA devido aos impostos brasileiros. Por isso, muitas vezes
prefervel perder um pouco em latncia e pagar menos utilizando
servios fora do pas.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Vamos utilizar duas formas de replicar


nossa base de dados. Em seguida, vamos
unir as duas formas e ter uma superestrutura de dados acessvel e segura. Para
simplificar o entendimento, vamos criar
apenas uma rplica de banco de dados,
sendo que para escalonar basta criar outras
rplicas se necessrio.
Estas duas formas de fazer rplicas no
so as nicas, mas so as mais simples e
mais utilizadas pela maioria dos desenvolvedores dentro do ambiente da Amazon.
As duas formas de fazer rplicas apresentadas neste artigo so:
Rplica de leitura: para melhor desempenho;
Rplica Multi-AZ: para maior segurana.
A primeira forma consiste em criar uma
rede, uma sub-rede, o banco de dados
Master e, em seguida, criar uma rplica
de leitura. O ponto positivo desta abordagem o ganho de performance, pois
teremos uma base de dados que podemos
utilizar somente para leituras, direcionando as grandes consultas SQL para esta
base, deixando o banco de dados principal
para receber as escritas. Estas rplicas
permitem que voc escale para alm das
limitaes de capacidade de uma nica
instncia DB para cargas de trabalho de
banco de dados de leitura pesada.
Quando voc cria uma rplica de leitura no Amazon RDS (Relational Database
Services) para MySQL e PostgreSQL, o
Amazon RDS configura um canal de
comunicao seguro usando criptografia
de chave pblica entre a instncia DB
principal e a rplica de leitura.
O ponto negativo uma pequena perda
de desempenho na prpria replicao
devido sincronizao de dados. Voc
pode escolher criar a rplica na mesma
Amazon Zone (AZ), com isto ter menor
latncia. Em alguns casos, pode ocorrer
um pouco de delay na replicao dos
dados, fazendo com que a informao
recm salva possa no ser recuperada
instantaneamente no banco de dados de
leitura. A Figura 1 mostra um modelo
de arquitetura que utiliza a rplica de
leitura.

Figura 1. Estrutura de rplica de leitura


A segunda forma consiste em criar a base
de dados utilizando o recurso Multi-AZ
da Amazon. Com este recurso, a Amazon
cria uma rplica (Standby) do banco de
dados em uma regio da amazon (Amazon
Zone - AZ) diferente e mantm os dados
sincronizados oferecendo o recurso de
failover automtico. Isto significa que se
um data center falhar, o outro assume
automaticamente e assim, quando o banco
de dados que falhou voltar a funcionar, os
dados sero sincronizados.
A principal vantagem que, em ambiente
de produo, este mtodo pode simplesmente salvar o negcio da empresa, pois
dificilmente dois data centers teriam seus
servios interrompidos.
A desvantagem que embora tenhamos
duas bases de dados, as leituras e escritas
so direcionadas sempre para o mesmo
endpoint, ou seja, se precisar separar
leituras de escritas, ser necessrio criar

mais uma rplica de leitura. Isto pode


encarecer a soluo, mas uma tima
opo para situaes crticas e de baixa tolerncia a falhas. No fim do artigo iremos
unir a rplica Multi-AZ com a rplica de
leitura e ter uma excelente configurao.
A arquitetura do recurso Multi-AZ pode
ser observada na Figura 2.
A estrutura Multi-AZ altamente recomendada pela Amazon para ambientes
de produo devido s melhorias de segurana da aplicao oferecidas por este
modelo. Ela oferece maior disponibilidade
e durabilidade para as instncias de banco
de dados. Em caso de uma falha de infraestrutura (por exemplo, falha de hardware,
armazenamento ou de rede), o Amazon
RDS executa um failover automtico para
a instncia standby. Desta forma, ela pode
retomar as operaes assim que o failover
completar (geralmente de 1 a 6 minutos).
Como o endpoint permanece o mesmo

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

31

31

Replicando DB relacional na nuvem da Amazon

depois de um failover, as operaes de banco de dados so retomadas automaticamente sem nenhuma


necessidade de interveno manual.
No servio RDS, quando utilizado sem a opo
Multi-AZ, havendo falha de banco de dados, uma
restaurao manual backup point-in-time ser necessria. Dependendo do tamanho do seu banco de
dados, esta operao poder levar muitas horas para
ser concluda, deixando sua aplicao indisponvel
at que o processo esteja concludo. Contudo, ainda
se pode correr o risco de no conseguir restaurar
todos os backups.
Por fim, vamos unir a rplica Multi-AZ e a rplica
de leitura para obter o melhor desempenho e maior
segurana. Sem dvida, um dos recursos mais
interessantes oferecidos pela Amazon RDS, pois
de forma muito simples podemos juntar os dois
modelos de replicao e garantir estabilidade em
sistemas de grande concorrncia. Veja na Figura 3
como fica a arquitetura ao unir rplica Multi-AZ e
rplica de leitura.

Rplica de leitura para melhor desempenho


Figura 2. Arquitetura Multi-AZ

Figura 3. Arquitetura Multi-AZ com Rplica de Leitura

32 SQL Magazine Edio 138

32

Iremos criar uma base de dados master e uma


slave dentro da mesma estrutura, mas antes de
qualquer coisa, voc precisa ter uma conta no AWS.
Se voc no tem, voc pode se cadastrar de forma
muito rpida. A Amazon oferece um plano free
para pessoas que desejam testar as ferramentas
do AWS.
Depois de abrir uma conta na Amazon, voc ter
acesso ao Console Amazon AWS. Ele pode ser
acessado atravs do navegador web e tambm como
ferramenta que pode ser utilizada por meio de linha
de comando, atravs de um terminal no computador. Voc pode executar quase todas as funes do
console atravs de linha de comando.
No Console Amazon AWS voc tem acesso a todas
as ferramentas disponveis. Seguiremos escolhendo
RDS (Amazon Relational Database Service). Ao fazer
isto, teremos acesso ao painel do RDS com todas
as funcionalidades que precisamos para lidar com
nossos bancos de dados relacionais.
O RDS uma ferramenta que permite a instalao,
manuteno e escala de banco de dados relacionas.
A proposta da empresa facilitar estas aes e deixar o cliente com tempo maior para sua aplicao.
Escolhido o RDS, clique no menu Instances e escolha a opo Launch DB Instance dentro do RDS
Dashboard. Em seguida, escolha o banco de dados
PostgreSQL. Siga as instrues at chegar na tela
onde voc deve escolher se vai utilizar o recurso
Multi-AZ ou no (ver Figura 4).

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Escolhemos a opo No, this instance...


nesta tela porque estamos fazendo a rplica de leitura apenas. Nosso objetivo agora
primeiro criar nossa instncia do banco
e depois criar a rplica de leitura.
Ao clicar no boto Next Step vamos ver
outra tela onde iremos definir os detalhes
do nosso banco de dados. Por este motivo,
preciso que voc j tenha feito uma anlise
prvia da sua demanda de dados, acesso
e tamanho da base. A ferramenta RDS
muito flexvel, voc pode alterar alguns
parmetros depois, como tamanho da
base de dados, mas voc no pode alterar
a memria da mquina e a quantidade de
processadores de forma muito simples. Ou
seja, voc no deve errar o tipo da mquina que ir utilizar, pois caso pegue uma
mquina muito pequena em memria,
e seu projeto precise de muito processamento, voc certamente ter problemas
de desempenho.
Mesmo aps ter escolhido no utilizar
Multi-AZ, o painel retorna a questionar se
faremos uso de Multi-AZ Deployment.
Escolha No para esta opo, pois j definimos que este banco de dados no utilizar
Multi-AZ. Na opo Storage Type voc
pode escolher Magnetic ou SSD, a grande
diferena entre os dois o ganho de performance em I/O e o custo. O armazenamento
em discos magnticos bem mais barato
que em SSD. Ao escolher armazenamento
SSD voc precisar informar a quantidade
de IOPS que deseja. Praticamente quanto
mais IOPS, mais velocidade voc ter. IOPS
so operaes de entrada/sada por segundo. So medidas utilizadas pela Amazon
EBS. Cada operao de I/O por segundo
(que 256 KiB ou menor) equivale a um
IOPS. Operaes I/O que so maiores do
que 256 KiB so contados em 256 unidades de capacidade KiB. Por exemplo, uma
nica operao de 1024 KiB I/O contaria
como 4 IOPS. Operaes de I/O 1024 em 1
KiB cada, contaria como 1.024 IOPS.
A Figura 5 mostra as definies do banco
de dados que estamos utilizando neste
exemplo. Escolhemos a menor instncia
oferecida pela Amazon para banco de
dados.
Aps definir estas configuraes bsicas
e clicar em Next Step o painel ir abrir uma

Figura 4. Escolha entre Multi-AZ ou Single-AZ

Figura 5. Configurao do banco de dados


nova pgina que solicitar as definies
mais avanadas para a sua estrutura de
dados. Voc deve configurar as opes de
rede, segurana, banco de dados, backup
e manuteno. Praticamente toda a sua
infraestrutura. Este ponto sem dvida
o mais importante de todos, errar aqui
pode ser muito prejudicial para a sua
arquitetura.
Vamos explicar a seguir as decises
mais importantes que voc precisa fazer
nesta tela.
Defina sua VPC (Vir t ual Pr ivate
Cloud), uma espcie de rede privada que
voc possui dentro da Amazon. preciso
criar ou escolher um ambiente de rede
virtual para instalar sua instncia DB.
Caso voc no tenha criado uma VPC na
Amazon, esta uma das primeiras coisas
que voc deve fazer. Se no estiver familiarizado com isto, escolha a opo Create

new VPC e deixe que a ferramenta crie


uma para voc;
Defina o Subnet Group, trata-se da
sua sub-rede. Assim como voc deixou
o sistema criar uma VPC, voc tambm
pode escolher deixar o sistema criar uma
sub-rede. Ela estar contida em sua rede
maior que a VPC;
Na opo Publicly Accessible voc deve
escolher Yes se quiser permitir o acesso externo VPC onde estar hospedado o seu
banco de dados. Se voc selecionar No, o
Amazon RDS no ir atribuir um endereo
IP pblico para a instncia DB, e nenhuma
instncia EC2 (Elastic Compute Cloud) ou
dispositivos fora da VPC ser capaz de
conectar sua base. Se voc selecionar
Yes, voc tambm deve selecionar um ou
mais grupos de segurana do VPC que
especificam quais EC2, instncias e dispositivos podem se conectar sua instncia

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

33

33

Replicando DB relacional na nuvem da Amazon

de banco de dados. Amazon EC2 fornece


capacidade de computao escalvel na
nuvem da Amazon. O EC2 elimina sua
necessidade de investir em hardware no
futuro para que voc possa desenvolver e
implantar aplicativos mais rpidos. Voc
pode usar Amazon EC2 para criar a quantidade de servidores virtuais que voc
precisar, configurar a segurana, rede e
gerenciar o armazenamento. Amazon EC2
permite que voc dimensione para cima
ou para baixo suas instncias para lidar
com mudanas nos requisitos ou picos de
popularidade, reduzindo a necessidade de
prever o trfego;
Availability Zone: simplesmente escolha uma zona (regio) para instalar sua
infra;
VPC Security Group(s): voc deve selecionar o grupo de segurana ou grupos

Figura 6. Configurao do banco de dados

34 SQL Magazine Edio 138

34

que tm regras que autorizam conexes de


todas as instncias de EC2 e dispositivos
que precisam acessar os dados armazenados na sua instncia. Por padro, os grupos
de segurana no autorizam quaisquer
ligaes, voc deve especificar regras
para todas as instncias e dispositivos que
se conectam a ela. Ou seja, sua VPC est
bloqueada por padro para a maioria dos
acessos, ento voc deve criar um grupo
de segurana que permita o acesso sua
base de dados. Para isso, voc deve deixar
selecionada a opo Create New Security
Group, ou escolher algum grupo de segurana j criado;
Database Name: defina novamente o
nome do banco de dados;
Database Port: a porta padro 5432,
mas voc pode modificar e colocar uma
porta de seu interesse;

Deixe as opes DB Parameter Group,


Option Group, Copy Tags To Snapshots e
Enable Encryption definidas como esto,
com seus valores padres;
Defina suas configuraes de backups.
Em Backup Retention Period selecione o
perodo em que ser feito seu backup. Na
opo Backup Window escolha No preferences ou escolha Select Window e defina o
perodo da janela;
Em Auto Minor Version Upgrade, especifique Yes para ativar as atualizaes automticas para novas verses quando elas
forem liberadas. Os upgrades automticos
ocorrem durante a janela de manuteno
para a instncia;
A Maintenance Window funciona como
a Backup Window. Escolha No preferences
ou escolha "Select Window" e defina o
perodo da janela de manuteno.
Veja como ficou a configurao de exemplo na Figura 6.
Ao clicar em Launch DB Instance o Console ir criar todas as configuraes necessrias para instalar sua base de dados e,
por fim, criar sua base. Uma mensagem
de sucesso aparecer na prxima tela,
e uma opo para voc visualizar suas
instncias. Voc pode observar sua instncia com o banco de dados PostgreSQL
clicando no item Instncias no menu do
RDS Dashboard.
At aqui voc conseguiu criar sua base de
dados PostgreSQL na nuvem da Amazon.
Mas ainda falta criar a sua rplica para
leituras. Afinal, este nosso foco desde o
comeo deste artigo.
Agora que voc j tem a rede montada
e sua instncia com o PostgreSQL que
ser nossa base de dados Master, vamos
selecion-la e no boto Instance Action vamos escolher a opo Create Read Replica.
Ao criar uma rplica de leitura, ela herdar todas as configuraes da instncia
Master. A nica configurao necessria
nesta etapa definir o nome da rplica
de leitura. Se sua aplicao precisar, voc
pode definir o parmetro Publicly Accessible para Yes, assim voc pode acessar a
base de dados estando fora da rede privada
criada anteriormente. A Figura 7 mostra
como ficou a nossa configurao.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Concluindo esta etapa, levar apenas


alguns minutos para que a Amazon crie
a rplica de leitura e configure a base de
dados master. Voc ter uma base de dados
PostgreSQL master pronta para receber
escritas e leituras e outra base de dados
PostgreSQL slave, pronta para ser utilizada
somente como leitura.
Precisamos agora preparar a aplicao para
trabalhar com as duas bases de dados distintas, uma para escrita e outra para leitura.
Se voc j tem uma aplicao em produo
e ainda no est utilizando est tcnica de
rplica, faa a experincia utilizando um
backup de seus dados e criando uma estrutura conforme fizemos aqui, observando
obviamente uma configurao de memria
e CPU mais apropriada para sua aplicao.
Os benefcios em ganho de performance so
notveis j no primeiro teste.
Para configurar o endereo do banco
de dados em sua aplicao, na definio
do host, entre com o endereo definido
como endpoint na sua instncia DB. Veja
na Figura 8 como ficou a instncia DB
master e a slave.
Para acessar as bases de dados, alm de
configurar o host com o endpoint correto, voc tambm precisa criar grupos e
contas de usurios dentro da sua VPC.
Para isto, v at o menu superior do
Amazon AWS Console e clique sobre o
seu nome, escolhendo o submenu Security Credentials. Com as informaes do
prprio painel voc ser capaz de criar e
configurar contas de usurios para acessar suas bases de dados. Lembre-se que

Figura 7. Configurao da rplica de leitura

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

35

35

Replicando DB relacional na nuvem da Amazon

estes usurios sero superusurios em suas bases. Ento, depois


que criar um usurio, acesse sua base de dados PostgreSQL e
crie os usurios e bancos de dados com permisses especificas.
Nunca utilize o superusurio para acessar sua base atravs da
aplicao.

Rplica Multi-AZ para maior segurana


O principal motivo de utilizar o recurso Multi-AZ da Amazon
garantir maior segurana para nossa instncia. Este recurso
muito simples de ser implantado e os benefcios so enormes,
conforme vamos mostrar na sequncia.
O recurso Multi-AZ no barato, ele simplesmente duplica o seu
custo com instncias da Amazon, e seu maior benefcio somente
ser perceptvel no caso de failover, ou seja, somente se a sua instncia de banco de dados master sofrer uma interrupo. Neste caso,
a instncia com a rplica ser ativada, assumindo o trabalho da
instncia master at que ela volte a funcionar. Esse recurso muito
recomendado para sistemas crticos e de alta disponibilidade.

O RDS Multi-AZ para o MySQL, Oracle e PostgreSQL utiliza


a replicao fsica e sncrona para manter os dados da instncia
standby atualizados e idnticos aos dados da instncia primria.
J para o Microsoft SQL Server feita replicao lgica e sncrona
com o recurso nativo de Mirroring desse SGBD para obter o mesmo
resultado.
Para utilizar este tipo de rplica, tambm importante saber
em quais casos ocorrer um failover automtico, o que pode ser
nas seguintes situaes:
Falha na zona de disponibilidade da instncia primria;
Conexo de rede perdida com a instncia primria;
Falha no CPU da instncia primria;
Falha de armazenamento na instncia primria.
O processo para criar a infraestrutura utilizando o recurso
Mult-AZ semelhante ao descrito em Rplica de leitura, para
melhor desempenho. Acesse o Console do Amazon AWS, escolha
a ferramenta RDS, ao abrir a tela com o RDS Dashboard escolha

Figura 8. Configurao da rplica de leitura

36 SQL Magazine Edio 138

36

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Figura 9. Configurao da instncia utilizando Multi-AZ


no menu a opo Instances, depois clique sobre o boto Launch DB
Instance e, em seguida, escolha o banco de dados PostgreSQL. Siga
as instrues at chegar na tela onde voc deve escolher se vai
utilizar o recurso Multi-AZ ou no (Figura 4).
Desta vez voc vai escolher a opo YES, use Multi-AZ Deployment.... Ao clicar em Next Step, a nova tela ir pedir para voc
informar as configuraes bsicas da sua nova instncia. Escolha
a verso do PostgreSQL, o tipo da instncia em DB Instance Class
e selecione YES para a opo Multi-AZ Deployment.

Nas configuraes de Storage Type, proceda da mesma forma


que fizemos na configurao anterior em Rplica de leitura,
para melhor desempenho. A Figura 9 apresenta como ficou a
configurao da nossa instncia DB.
Ao clicar em Next Step, as configuraes avanadas da instncia de banco de dados sero apresentadas. Note que esta tela
exatamente a mesma que apareceu quando estvamos criando
uma instncia de banco de dados utilizando Single AZ (sem o
recurso Multi-AZ).

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

37

37

Replicando DB relacional na nuvem da Amazon

Figura 10. Instncia Multi-AZ e sua Rplica de Leitura

Voc pode ver a representao desta tela na Figura 6, onde a


nica modificao que fizemos foi inserir um nome para nosso
banco de dados.
Ao clicar em Launch DB Instance o console ir criar todas as configuraes necessrias para instalar sua base de dados e, por fim,
criar o banco de dados. Uma mensagem de sucesso aparecer na
prxima tela e uma opo para voc visualizar suas instncias.
Voc pode observar sua instncia com o banco de dados PostgreSQL clicando no item Instncias no menu do RDS Dashboard.
Provavelmente a sua instncia DB ainda no estar pronta.
preciso aguardar alguns minutos at que o Console do Amazon AWS termine todas as configuraes necessrias para
disponibiliz-la.
Assim que concluir, voc ter uma instncia DB com Multi-AZ
configurada. Para utiliz-la em sua aplicao, voc deve definir o
nome do host com o endpoint da sua instncia. Agora temos uma
base de dados para escrita e leitura, e uma rplica em standby
que ser ativada quando a instncia primria tiver problemas,
garantindo disponibilidade para a aplicao mesmo quando

38 SQL Magazine Edio 138

38

houver uma falha. Vale ressaltar que um failover automtico para


a instncia standby pode demorar (geralmente de 1 a 6 minutos)
para retomar as operaes de banco de dados.

Multi-AZ com rplica de leitura para maior desempenho e


segurana
At este ponto falamos sobre a Rplica de Leitura e a Rplica utilizando Multi-AZ. Agora que conhecemos as duas
e sabemos como aplic-las, podemos fazer uso de ambas em
conjunto e oferecer maior desempenho e maior segurana para
nossa aplicao.
Unir estes dois pontos muito simples. Primeiro crie sua instncia DB utilizando Multi-AZ, como fizemos na seo Rplica
Multi-AZ, para maior segurana. Feito isto, v at o painel RDS
Dashboard e clique sobre o menu Instncias. Aparecero suas
instncias DB, ento selecione a instncia DB Multi-AZ que foi
criada e, no boto Instance Action escolha a opo Create Read
Replica. O console ir criar uma rplica de leitura do banco de
dados principal.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Ao criar a rplica, ela herdar todas as configuraes da


instncia DB principal. A nica configurao necessria nesta
etapa foi definir o nome da rplica de leitura. Veja na Figura 7
um exemplo desta tela.
Neste modelo, a aplicao configurada para escrever na
base de dados principal e ler na base de dados de leitura. Caso
ocorra uma falha de infraestrutura (falha de hardware de
instncia, falha de armazenamento ou interrupo da rede), o
Amazon RDS executa um failover automtico para a instncia
de espera, permitindo retomar as operaes de banco de dados
assim que o failover concludo. Como o endpoint para sua
instncia permanece o mesmo aps um failover, seu aplicativo
pode retomar as operaes sem a necessidade de interveno
administrativa manual.
A Figura 10 apresenta as duas instncias de banco de dados,
uma acima com Multi-AZ configurado e outra a seguir com a
rplica de leitura.
Para escalar horizontalmente seu banco, basta criar mais rplicas de leitura. Se o problema for escrita, escolha uma instncia
com maior capacidade de processamento e armazenamento.
Lidar com banco de dados muito simples com os recursos
do AWS. Aqui utilizamos o PostgreSQL, mas voc pode utilizar estes mesmos procedimentos com outros bancos de dados
relacionais.
Com os recursos computacionais que temos hoje, como os que
foram mostrados neste artigo, ficou muito mais simples fazer a
gesto e configurao de ambientes complexos ligados a bancos
relacionais. Com tranquilidade e poucos minutos criamos rplica
para leitura para uma melhor disponibilidade e rplica (standby)
para funcionar em casos de falha, servindo como contingncia.
No foi preciso utilizar nenhuma linha de cdigo e ainda conseguimos unir desempenho e tolerncia a falhas.

Autor
Antonio Marcos Ferreira
hipertrix@gmail.com
Graduado em Sistemas Para Internet pela Faculdade Metrocamp
IBTA em Campinas. Co-fundador da empresa W3da, onde
desempenha o papel de Gesto de Negcios, BI e P&D. Com mais de
15 anos de experincia em sistemas para internet, sendo destes 6 anos
focados em sistemas de gesto de cartes de crdito e dbito.
Links:
O que so IOPS?
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-io-characteristics.html
Sobre a Amazon Aws
https://aws.amazon.com/pt/enterprise/
O que so EC2?
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html
Implantaes Multi-AZ do Amazon RDS
https://aws.amazon.com/pt/rds/details/multi-az/
Amazon RDS: Announcing Read Replicas
https://aws.amazon.com/pt/blogs/aws/amazon-rds-announcing-read-replicas/

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

39

39

Minerao de texto:
Anlise comparativa de
algoritmos
Avaliao de acurcia, cobertura, preciso e
tempo de execuo

randes massas de dados so geradas diariamente pelos sistemas que apoiam as atividades
rotineiras das organizaes, dificultando a
tarefa analtica dos gestores. Diante dessa necessidade,
surgiram os Sistemas de Apoio Deciso (SADs) que
permitem apoiar, contribuir e influenciar no processo
de tomada de deciso. Os SADs permitem, a partir dos
dados transacionais da organizao, gerar informaes
gerenciais que facilitam o referido processo.
Como grande parte dos dados manipulados pelas organizaes est em formato textual, torna-se fundamental o
uso da tcnica de minerao de texto (tambm conhecido
por Knowledge Discovery in Texts, KDT) para identificar
padres e conhecimentos para auxiliar nas decises.
O conhecimento gerado pode ser avaliado para determinar se o mesmo relevante ou no para o usurio, ou
seja, avaliar o desempenho do processo de minerao
para a gerao do conhecimento. Existem vrias mtricas, sendo as principais relacionadas ao desempenho,
acurcia, preciso e cobertura.
Neste artigo iremos apresentar um estudo de caso
realizado em uma organizao ABC. A ACB lida com
um imenso volume de informaes, sendo necessria a
utilizao de mecanismos que tornem efetivas as atividades de auditoria. Auditoria a atividade que realiza
a validao das informaes, verificao da obedincia
s normas e recomendaes e avaliaes dos controles
em busca dos resultados da gesto. Objetivando atender
as necessidades da ABC, desenvolvemos uma aplicao
que realiza a minerao de texto em qualquer campo
descritivo de um sistema, a ferramenta TextMining.
A aplicao permite determinar se uma descrio
ou no evidncia de irregularidade, tornando efetivo o

40 SQL Magazine Edio 138

40

Fique por dentro


O uso de minerao de texto importante para o processo de extrao de conhecimento em bases textuais. Contudo, importante
avaliar se o conhecimento extrado ou gerado relevante ou no
para o usurio. Neste artigo avaliamos a performance de algoritmos
de minerao de texto da ferramenta TextMining. A discusso apresentada neste artigo til pois cada vez mais comum a necessidade
de descobrirmos informao til a partir de dados textuais. Atravs
do estudo de caso apresentado ser possvel entender o impacto que
diferentes algoritmos de minerao de texto trazem a esta atividade.
Esta informao poder apoiar a tomada de deciso sobre qual estratgia de minerao utilizar.

trabalho do auditor na identificao de irregularidades. Para classificar uma descrio, a ferramenta dispe de um algoritmo, Nave
Bayes, de forma parametrizada, especificando um limiar mnimo
para auxiliar no processo classificatrio. importante destacar
que existem trs mtodos para o Nave Bayes: Hbrido (utilizao da frequncia do termo da amostra com tf, term frequency,
da sentena), Frequncia Inversa (tfidf, term frequency inverse
document frequency, da amostra com tf da sentena) e Frequncia
(frequncia da amostra com frequncia da sentena).
Este trabalho introduziu um segundo algoritmo, Similaridade,
na ferramenta citada e foram avaliadas as mtricas de qualidade
e desempenho para as duas abordagens. A avaliao se deu por
meio da coleta de mtricas de tempo mdio, acurcia, cobertura,
medida F e preciso de cada algoritmo.
Assim, este artigo objetiva comparar o desempenho e qualidade
de dois algoritmos de minerao de texto aplicados a histricos
de contas pblicas custodiadas pela organizao ABC. A anlise
comparativa determinar o melhor algoritmo da ferramenta

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

TextMining e, consequentemente, o conhecimento gerado por essa


abordagem ser efetivo e relevante para os auditores na descoberta de irregularidades como a identificao de uma descrio
de motivo de viagem para a qual no permitida o pagamento
de dirias.

Descoberta de Conhecimento em Bases de Dados


KDD (Knowledge Discovery in Databases) o processo no-trivial
de identificar padres vlidos, novos, potencialmente teis em
dados, ou seja, o processo de descoberta de conhecimento ou
padres teis e desconhecidos em grandes massas de dados.
O processo de KDD consiste de vrias etapas, as quais envolvem
preparao dos dados, busca por padres, avaliao do conhecimento e refinamento, todos repetidos em mltiplas iteraes. Esse
processo composto por cinco passos bem definidos: seleo,
pr-processamento, transformao, minerao de dados, anlise
/ assimilao, conforme mostrado na Figura 1.
Na etapa seleo sero definidas as fontes de dados relevantes, ou
seja, as bases de dados importantes para o problema em questo,
o qual se deseja resolver. No pr-processamento, os dados sero
tratados, pois como esses dados podem ser oriundos de diversas
fontes, os mesmos podem conter divergncia de valores e outras
inconsistncias. Na transformao, os dados pr-processados sero convertidos para uma estrutura compatvel com o algoritmo
de minerao escolhido. J na etapa minerao de dados, objetivo
do processo de KDD, escolhida e executada uma tcnica e algoritmo de minerao de acordo com o problema em questo, por

exemplo, classificao, regresso, agrupamento e sumarizao.


E, por fim, na etapa de anlise/assimilao, o conhecimento gerado ser avaliado se til ou no para a tomada de deciso.
Como mostrado na Figura 1, o processo de KDD um processo
iterativo e interativo, em que o usurio participa e realiza decises
nas diversas etapas do processo, as quais podem tambm ser repetidas, dependendo do conhecimento gerado ou pela ausncia
do mesmo.
O processo de KDD pode ser aplicado em diversas reas, incluindo marketing, finanas, deteco de fraudes, manufaturas
e telecomunicaes. Um exemplo clssico de utilizao de KDD
o conhecimento descoberto nos dados da rede de supermercados
Walmart. Foi descoberto que a maioria dos pais que iam comprar
fraldas para seus filhos acabavam comprando cerveja. Em uma
jogada de marketing, as fraldas foram colocadas prximas da
cerveja, sendo que as batatas fritas estavam entre elas. Consequentemente, houve um aumento das vendas dos trs produtos.
Outro exemplo de utilizao do processo de KDD foi o uso do
sistema ADVANCED SCOUT da IBM para ajudar os treinadores da
NBA, no ano de 1996, a procurar e descobrir padres interessantes
nos dados dos jogos da NBA. Com esse conhecimento obtido,
os treinadores podiam avaliar a eficcia das decises de tticas
e formular estratgias de jogo para jogos futuros. O sistema foi
distribudo para dezesseis das vinte e nove equipes da NBA, sendo
usado de forma efetiva por algumas equipes para a preparao
de jogadas e processos analticos, como foi o caso do time Seattle
Supersonics, o qual atingiu as finais da NBA.

Minerao de Texto

Figura 1. Passos que compem o processo de KDD

Figura 2. Processo de minerao de texto

Minerao de texto o processo de descoberta de conhecimento, potencialmente


til e previamente desconhecimento, em
bases de dados desestruturadas, ou seja,
extrao de conhecimento til para o
usurio em bases textuais.
O processo de minerao de texto dividido em quatro etapas bem definidas:
seleo, pr-processamento, minerao
e assimilao, conforme mostrado na
Figura 2.
Na seleo, os documentos relevantes
devem ser escolhidos, os quais sero processados. No pr-processamento ocorrer
a converso dos documentos em uma estrutura compatvel com o minerador, bem
como ocorrer um tratamento especial
do texto. Na minerao, o minerador ir
detectar os padres com base no algoritmo escolhido. E por fim, na assimilao,
os usurios iro utilizar o conhecimento
gerado para apoiar as suas decises.
notrio a semelhana entre os processos de KDD e KDT, sendo que o KDT

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

41

41

Minerao de texto: Anlise comparativa de algoritmos

no possui a etapa de transformao. O


fato da ausncia da etapa transformao,
etapa no processo de KDD que converte os
dados pr-processados para uma estrutura
utilizada na etapa de minerao de dados,
justificada pelo fato de que a etapa de prprocessamento no KDT, alm de realizar um
tratamento no texto, permite definir uma
estrutura compatvel com as entradas dos
Figura 3. Exemplo de remoo de StopWords
algoritmos de minerao.
A etapa pr-processamento pode ser dividida em quatro subetapas: remoo de
StopWords, conflao, normalizao de
sinnimos e indexao. Na etapa remoo de
stopwords os termos com pouca ou nenhuma
relevncia para o documento sero removidos. So palavras auxiliares ou conectivas, ou
seja, no so discriminantes para o contedo
do documento. So, em sua maioria, pronomes, preposies, artigos, numerais e con- Figura 4. Exemplo de radicalizao utilizando o algoritmo de Porter
junes. Para auxiliar na remoo das stopwords, geralmente, utiliza-se uma lista destas predefinida. Para
E, por fim, na etapa indexao atribui-se uma pontuao para
facilitar o entendimento, na Figura 3 apresentado um exemplo
cada termo, garantindo uma nica instncia do termo no docude remoo de stopwords.
mento. No processo de atribuio de pesos devem ser consideNa etapa seguinte, conflao, realiza-se uma normalizao morrados dois pontos: (a) quanto mais vezes um termo aparece no
folgica, ou seja, realiza-se uma combinao das palavras que so
documento, mais relevante ele para o documento; (b) quanto
variantes morfolgicas em uma nica forma de representao. Um
mais vezes um termo aparece na coleo de documentos, menos
dos procedimentos mais conhecidos de conflao a radicalizao
importante ele para diferenciar os documentos.
(Stemming). Nela as palavras so reduzidas ao seu radical, ou
Existem vrias formas de determinar o peso de um termo (ponseja, as palavras variantes morfologicamente sero combinadas
tuao). Os principais mtodos so:
em uma nica representao, o radical. A radicalizao pode ser
Booleano ou Binrio: o peso para um determinado termo ser
efetuada com o auxlio de algoritmos de radicalizao, sendo os
1 se o mesmo aparece no documento. Caso contrrio, o peso ser
mais utilizados o algoritmo de Porter (Porter Stemming Algo0. Indica a presena ou ausncia do termo no documento;
rithm) e algoritmo de Orengo (Stemmer Portuguese ou RLSP).
Frequncia do Termo (term frequency ou tf): o peso a frequnA Figura 4 exemplifica o processo de radicalizao de um texto
cia do termo no documento. Consiste da razo entre a quantidade
utilizando o algoritmo de Porter.
de vezes que o termo apareceu no documento e a quantidade total
Existem dois problemas no processo de radicalizao:
de termos contidos no documento, como mostrado na Figura 5,
Overstemming: quando a string removida no um sufixo, mas
onde ni a quantidade de ocorrncias do termo i no documento
sim parte do radical da palavra. Isso possibilita a combinao de
e D a quantidade total de termos no documento;
palavras no relacionadas;
Understemming: quando parte do sufixo no removido, ocasionando numa falha de conflao de palavras relacionadas.
Aps a conflao, na etapa de normalizao de sinnimos, os termos que possuem significados similares sero agrupados em um
nico termo, por exemplo, as palavras rudo, tumulto e barulho
sero substitudas ou representadas pelo termo barulho.
Na normalizao de sinnimos, formado um vocabulrio
controlado que se refere utilizao de termos adequados para
representar um documento, sendo esses termos pr-definidos e
especficos a um determinado assunto de uma rea. Isso facilita
a busca, pois os termos so comumente utilizados pelos usurios
da rea.

42 SQL Magazine Edio 138

42

Figura 5. Frmula para calcular a frequncia do termo


Frequncia do Documento (Document Frequency ou df ): o
nmero de documentos que possui um determinado termo;
Frequncia Inversa do Documento (Inverse Document Frequency ou idf ): refere-se importncia de um termo em um
conjunto de documentos. Quanto maior o idf, mais representativo
o termo para o documento. Consiste no logaritmo da razo entre o nmero total de documentos e a frequncia do documento,
conforme demonstrado na Figura 6, onde N a quantidade

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

total de documentos e df(termo i) a frequncia do documento para


o termo i;

Figura 6. Frmula para calcular a frequncia inversa do termo


tfidf (Term Frequency Inverse Document Frequency): o
peso para o termo associado na proporo da frequncia do
termo no documento e na proporo inversa do nmero de
documentos na coleo em que o termo aparece pelo menos
uma vez, ou seja, combina o tf com idf, como mostrado na
Figura 7, onde tf(termo i) e idf(termo i) so, respectivamente, o
tf e idf do termo i. Obtm-se, assim, o ndice de maior representatividade do termo.

Figura 7. Frmula para calcular o tfidf do termo


As subetapas do pr-processamento permitem uma reduo
da dimensionalidade do texto, pois um documento pode ser
representado por um vetor de termos. Como um termo representa uma dimenso do texto, quanto maior a dimensionalidade
do texto, mais complexa ser a anlise feita pelo algoritmo de
minerao.
Assim como no KDD, o processo de minerao de texto possui
diversas aplicaes, como extrao de palavras-chave, determinao de sistemas representacionais preferenciais, classificao de
documentos por categoria, filtro de documentos, entre outras.

K-Nearest-Neighbor consideram-se os k documentos mais similares.


A depender do valor de k, podem ser considerados os documentos
com score inferior aos de maior score para determinar a classe
do novo documento.
Similaridade considera apenas os documentos com maior
score e a classe do novo documento ser a classe que mais
ocorre nesses. importante frisar que para o clculo do grau de
similaridade (score), devem ser apenas considerados os termos
em comum.
Existem vrias formas de calcular o grau de similaridade,
isto , as funes de similaridade. Depois de calcular os scores,
podemos criar uma lista em forma de ranking, em que os documentos mais similares esto no topo da lista. As principais
funes de similaridade so:
Contagem de palavras: considerada a funo mais simples
de mensurar a similaridade, pois se baseia apenas na contagem
de termos que ocorrem em ambos documentos, isto , as ocorrncias positivas dos termos;
Contagem de palavras com bnus: de forma anloga contagem de palavras, sero contabilizados os termos em comum aos
vetores com apenas um diferencial: para cada termo analisado, se
esse termo ocorre em ambos documentos, ser adicionado um bnus ao score conforme visto na Figura 8, onde K a quantidade total de termos do novo documento, w(j) a pontuao para o termo j,
D(i) o documento i da coleo e a expresso 1/df(j) o bnus para
o termo j. O bnus considerado uma variao do idf. Se o termo
ocorre em muitos documentos, o valor do bnus baixo. J se o
termo aparece em poucos, o bnus alto;

Similaridade de documentos
Um documento pode ser considerado um vetor de termos. Cada
elemento do vetor considerado uma coordenada dimensional e
os documentos podem ser colocados num espao euclidiano de
n dimenses onde n o nmero de termos. A posio do documento em cada dimenso dada pelo peso (pontuao calculada
na fase de indexao). A distncia entre um documento e outro
o grau de similaridade. Documentos que possuem os mesmos
termos acabam sendo colocados numa mesma regio no espao
euclidiano, ou seja, so similares.
A similaridade entre dois documentos tambm pode ser obtida
pelos termos que ocorrem em ambos, ou seja, pelos termos compartilhados. Os documentos mais similares so os que possuem
mais termos em comum. No clculo da similaridade, so ignorados os termos que ocorrem em um documento e que no ocorrem
no outro. Em outras palavras, s interessam os termos que ocorrem
nos dois, isto , a ocorrncia positiva desse em ambos.
Similaridade considerada o corao do mtodo de classificao K-Nearest-Neighbor. A diferena entre ambos que no

Figura 8. Frmula para a contagem de palavras com bnus


Cosine similarity: funo de similaridade mais utilizada na
rea de recuperao de informao (RI) para comparar documentos. Representa o cosseno do ngulo formado por dois vetores,
como mostrado na Figura 9, onde d1 e d2 so os documentos cuja
similaridade ser calculada, wd1 ( j ) o peso do termo j em d1, wd 2 ( j ) o
peso do termo j em d2, (w ( j )) a normalizao de d1 e (w ( j )) a
normalizao de d2. Quanto mais prximo de zero for o valor do
cosseno, menos similares so os documentos. J quando for mais
prximo de um, mais similares eles so;
d1

d2

Figura 9. Frmula para a cosine similarity

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

43

43

Minerao de texto: Anlise comparativa de algoritmos

Distncia euclidiana: representa a menor distncia entre


dois vetores de termos no espao euclidiano, como visto na
Figura 10, em que d1 e d2 so os documentos, K o nmero de
termos, wd1 j o peso do termo j em d1 e wd 2 ( j ) o peso do
termo j em d2;

()

Figura 10. Frmula para a distncia euclidiana


Distncia de Manhattan: a soma das distncias absolutas sem
cada dimenso. Corresponde distncia a ser percorrida para se
chegar de um ponto a outro, em que o caminho percorrido em
quadras, conforme mostrado na Figura 11, onde d1 e d2 so os
documentos, K o nmero de termos, wd1 ( j ) o peso do termo j em
d1 e wd 2 ( j ) o peso do termo j em d2;

Figura 11. Frmula para a distncia manhattan


Produto escalar: corresponde ao somatrio do produto
dos pesos de um termo em dois documentos, como visto
na Figura 12, onde d1 e d2 so os documentos, K o nmero de
termos, wd1 j o peso do termo j em d1 e wd 2 j o peso do
termo j em d2.

()

()

Figura 12. Frmula para o produto escalar


Para facilitar o entendimento sobre similaridade, a Figura 13
demonstra o clculo da similaridade entre um novo documento
e todos os documentos do dicionrio, utilizando a funo de
similaridade contagem de palavras. Como podemos ver, foi
calculado o score entre o novo documento e todos do dicionrio
por meio da contagem de palavras cuja ocorrncia em ambos foi
positiva, isto , a contabilizao delas que ocorre em ambos, ignorando as que ocorrem apenas em um e as ausentes em ambos.
Existem dois documentos que possuem o maior score, grau de
similaridade igual a 2.
Como os dois documentos com maior score possuem classe
igual a um (ltima coluna do dicionrio), a classe do novo documento tambm ser um.

44 SQL Magazine Edio 138

44

Figura 13. Clculo de similaridade dos documentos

Avaliao de desempenho e qualidade


Existem diversas formas de se avaliar a capacidade de predio
de um classificador para determinar a classe de vrios registros.
A matriz de confuso a forma mais simples de analisar o desempenho e qualidade de um classificador em reconhecer registros
de diferentes classes. Ela um recurso que permite demonstrar o
desempenho de um classificador, ou seja, a frequncia com que os
registros de classe X foram corretamente classificados como classe
X ou, at mesmo, classificados erroneamente como outras classes.
Para n classes, a matriz de confuso uma tabela de dimenso
n x n. Para cada classificao possvel existe uma linha e coluna
correspondente, ou seja, os valores das classificaes sero distribudos na matriz de confuso de acordo com os resultados, assim
gerando a matriz de confuso para as classificaes realizadas.
As linhas correspondem s classificaes corretas e as colunas
representam as classificaes realizadas pelo classificador. Por
exemplo, na Tabela 1, o valor V1,1 corresponde ao nmero de
registros de classe 1 que foram classificados com classe 1 pelo
classificador.
Classe Atual

Classificado como
Classe 1
Classe 2

...

Classe n

Classe 1

V1,1

V1,2

...

V1,n

Classe 2

V2,1

V2,2

...

V2,n

...

...

...

...

...

Classe n

Vn,1

Vn,2

...

Vn,n

Tabela 1. Matriz de confuso para n classes


Quando existem apenas duas classes, uma considerada como
positive e a outra como negative. Os valores da matriz de
confuso so referenciados como true e false positives e true e false
negatives, como visto na Tabela 2.
Assim, existem quatro situaes:
True Positive (TP): o nmero de instncias de classe positive que
foram classificadas como positive;
False Positive (FP): o nmero de instncias de classe negative
que foram classificadas como positive;

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

False Negative (FN): o nmero de instncias de classe positive


que foram classificadas como negative;
True Negative (TN): o nmero de instncias de classe negative
que foram classificadas como negative.
Actual class

Predicted class
Positive

Negative

Positive

True Positive (TP)

False Negative (FN)

Negative

False Positive (FP)

True Negative (TN)

Tabela 2. Matriz de confuso para duas classes


A avaliao de um classificador se dar pela anlise dos valores
nela contidos, bem como na verificao do somatrio dos elementos das diagonais principal e secundria. Um bom classificador
aquele que possui a soma da diagonal principal maior que a
da secundria. Um classificador considerado ideal quando a
soma da diagonal secundria igual a zero, contudo esse ser
considerado um pssimo classificador se possuir o somatrio da
diagonal principal igual a zero.
De posse dos valores da matriz de confuso, podem ser utilizadas
as mtricas de avaliao de desempenho e qualidade de um classificador. As principais mtricas de desempenho e qualidade so:
Acurcia (accuracy): o percentual de instncias classificadas
corretamente;
Preciso (precision): o percentual de instncias classificadas
como positive que so realmente positive;
Cobertura ou Revocao (recall): o percentual de instncias
positive que foram classificadas corretamente como positive;

Medida F (F1 Score): a medida que combina a preciso e


revocao (cobertura), ou seja, a mdia harmnica da preciso
e revocao.

Ferramenta TextMining
O TextMining permite determinar se informaes so ou no
evidncias de irregularidades, ou seja, se uma descrio est ou
no de acordo com a lei e com o que se espera dos jurisdicionados. Desta forma, a ferramenta tem como objetivo tornar efetivo
o trabalho do auditor na identificao de irregularidades. Suas
principais funcionalidades so o gerenciamento de perfis, de
dicionrios e de classificaes. Considera-se gerenciamento o
conjunto de funes relacionadas ao cadastro, edio, consulta,
excluso e visualizao de informaes.
Iniciando pelo gerenciamento de perfis, este um mecanismo
que auxilia nas consultas por meio dos filtros anexados aos
perfis. Conforme mostrado na Figura 14, por meio deles que
o usurio poder determinar dinamicamente os campos que
deseja filtrar nas telas, nas quais poder escolher o perfil. Na
TextMining, est disponvel para o usurio as funcionalidades
de cadastro, consulta e excluso.
A criao de um perfil poder ocorrer s uma vez e pode ser
compartilhado por todos os usurios. Como o custo da operao
muito baixo, se houver a necessidade de alterao dele, basta
exclu-lo e criar outro novamente. Esta caracterstica torna a
aplicao flexvel e genrica atravs da gerao de perfis de
consulta diferenciados para qualquer tabela e campos contidos
na base de dados.

Figura 14. Tela Perfil (Ferramenta TextMining)

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

45

45

Minerao de texto: Anlise comparativa de algoritmos

Dados estes entendimentos sobre


perfis, outra funcionalidade importa nt ssi ma o gerenc ia mento de
dicionrios, que so os modelos de
conhecimento que servem de base
para tornar possvel a descoberta de
evidncias de fraudes semelhantes em
toda base de dados ou em unidades e
cidades especficas. Um dicionrio
criado por meio da seleo de amostras que so dados selecionados pelo
auditor como Evidncia (possvel
evidncia de irregularidade) e Em
Conformidade (descrio que est de
acordo com a lei), bem como o auditor
pode informar amostras avulsas, as
quais so especificadas manualmente
e classificadas como Evidncia ou
Em Conformidade, como mostrado Figura 15. Tela Dicionrio (Ferramenta TextMining)
na Figura 15.
A seleo de amostras para criao
do dicionrio deve ser balanceada,
para cada evidncia informada, dever
existir um ou mais registros que so
exemplos de conformidade. Na ferramenta esto disponveis para o usurio
as funcionalidades de cadastro, consulta, edio, excluso e desbloqueio
de dicionrios. importante ressaltar
que o dicionrio criado poder ser
utilizado por todos os auditores, permitindo maior eficincia ao processo
de auditoria.
A partir do perfil selecionado, dos
filtros anexados a esse e do dicionrio
escolhido, o auditor poder escolher os
dados a serem classificados pela fer- Figura 16. Telas Classificao sobrepostas mostrando os algoritmos disponveis (Ferramenta TextMining)
ramenta, ou seja, o local em que sero
buscadas novas evidncias semelhantes s do dicionrio criado.
A aplicao dispe de dois algoritmos de minerao de texto,
J o algoritmo de similaridade, tambm de anlise estatstica,
Nave Bayes e Similaridade, para classificar os registros, como
calcula a similaridade entre uma sentena e um conjunto de
mostrado na Figura 16. Nave Bayes um algoritmo de anlise
amostras, por meio dos termos que ambos possuem em comum
estatstica e foi implementado de forma parametrizada, espepara determinar se a sentena ou no uma evidncia.
cificando um limiar mnimo para auxiliar na classificao dos
Na ferramenta, esto disponveis para o usurio as funcionaregistros. Para realizar a classificao de um registro, o algoritmo
lidades de cadastro, consulta, excluso e visualizao de classicalcula a probabilidade desse registro ser ou no uma evidncia
ficaes.
de irregularidade. Este algoritmo dispe de trs formas para
Aps a anlise da aplicao foram efetuadas alteraes no cdigo
realizar o clculo da probabilidade: Hbrido, Frequncia Inobjetivando melhoria no uso da ferramenta, incluso de novas
versa e Frequncia. Na primeira abordagem, considerada a
funcionalidades, preveno e correo de problemas. A seguir
frequncia do termo na amostra e o tf desse na sentena. J na
temos as principais alteraes realizadas:
segunda levado em conta o tfidf do termo na amostra e o tf na
Modelo de Dados:
sentena. Por fim, na terceira, so consideradas as frequncias do
- Incluso dos atributos Metodo_Classificacao e Tempo_
termo na amostra e na sentena.
Classificacao na tabela DIM_CLASSIFICACAO.

46 SQL Magazine Edio 138

46

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Mdulo Dicionrio:
- A tela de criao de dicionrios foi alterada para permitir
a incluso de amostras avulsas;
- A tela de consulta de dicionrios foi alterada para que os
botes Editar e Excluir ficassem desabilitados quando
no existissem dicionrios cadastrados;
- A tela Dicionrios Bloqueados foi alterada para que o
boto Liberar ficasse desabilitado quando no existissem
dicionrios bloqueados.
Mdulo Classificao:
- Criao da classe similaridade, algoritmo de classificao;
- Criao da classe abstrata Classificador, superclasse das
classes Similaridade e NaiveBayes. A classe Classificador
possui um mtodo esttico ClassificadorFactory que retorna
um objeto do tipo Classificador, o qual pode ser uma instncia das classes NaiveBayes ou Similaridade;
- Na tela Classificao, o algoritmo Similaridade foi
includo nas opes de mtodos de classificao;
- Na tela Classificao, foram adicionados os percentuais
51 e 55 ao componente Limiar Classificao %;
- A tela Classificao foi alterada para os componentes
Dicionrios, Perfil, Limiar Classificao %, Mtodo,
Medidas, Filtros, Classificar e Descrio da Classificao serem desabilitados quando um processo classificatrio fosse iniciado;
- A tela de consulta de classificaes foi alterada para que os
botes Excluir e Detalhes ficassem desabilitados quando
no existissem classificaes cadastradas;
- As alteraes da tela Dados da Classificao foram:
- Criao do componente Tempo de Classificao para
visualizar o tempo da classificao realizada;
- Atribuio do valor --- para o componente Limiar
de Classificao % quando o algoritmo de minerao
utilizado no for o Nave Bayes, porque este o nico
que utiliza limiar;
- Parametrizao da tabela Evidncias, em que o label
e os valores da coluna do Limiar/Score sero formatados
de acordo com o algoritmo utilizado na classificao.
Por exemplo, caso o algoritmo seja Nave Bayes, o label
da coluna ser Limiar e os valores da coluna estaro
formatados em porcentagem, mas se for escolhido Similaridade, o label da coluna ser Score e os valores
da coluna estaro formatados em nmeros com casas
decimais.
Implementamos uma adaptao do algoritmo de similaridade
de documentos. O mtodo convencional de similaridade realiza um clculo de similaridade entre todos os documentos do
dicionrio e o documento a ser classificado, apenas levando
em conta os termos que ocorrem em ambos.
Para classificar o novo documento, o algoritmo convencional
apenas considera as ocorrncias do maior score, ignorando
todos os outros. Nessa abordagem, existe a possibilidade de

no classificar um novo documento quando a quantidade de


documentos com maior score para diferentes classes, a mesma,
como mostrado na Figura 17.
Visando performance e melhoria do processo de classificao,
foi desenvolvida uma adaptao do algoritmo de similaridade.
As adaptaes efetuadas foram:
Ser realizada uma poda, onde no sero analisados todos
os documentos (amostras) do dicionrio, somente aqueles que
possurem pelo menos um termo do documento (sentena) a
ser classificado para determinar o grau de similaridade;
Sero utilizados os outros scores quando no for possvel
classificar com o maior score.

Figura 17. Exemplo de quatro situaes de classificao do algoritmo convencional de similaridade

Figura 18. Frmula para o clculo do score utilizado no algoritmo implementado


O score para uma determinada amostra (documento do dicionrio) pode ser obtido atravs do somatrio da multiplicao do
tfidf do termo da amostra com o tf da sentena (novo documento)
para todos os termos comuns entre a amostra e a sentena, como
pode ser visto na Figura 18, onde k o nmero de termos que a
amostra e a sentena possuem em comum.
Para facilitar o entendimento do algoritmo implementado,
apresentado a seguir seu passo a passo.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

47

47

Minerao de texto: Anlise comparativa de algoritmos

Entrada:
sc, sentena a ser classificada como Evidncia ou Em Conformidade
dic, dicionrio utilizado para classificar a sentena
Sada:
result, resultado da classificao da sentena, ou seja, objeto ResultadoGenerico contendo a classe e o score da sentena classificada
1. Calcular o tf (term frequency) para cada termo de sc.
2. Para cada amostra que contenha pelo menos um termo de sc,
calcular o score para cada amostra, criar um objeto ResultadoGenerico para cada amostra analisada, contendo nesse objeto a classe
da amostra e o score calculado e, por fim, armazenar o objeto no
vetor de ResultadoGenerico.
3. Ordenar o vetor de ResultadoGenerico em ordem crescente
pelo score.
4. Se o vetor estiver vazio Ento
Retorne um objeto ResultadoGenerico com classe igual a falso
e score
igual a zero.
Seno
5. Se o vetor possuir apenas um elemento Ento
Retorne o nico objeto ResultadoGenerico dentro do vetor.
Seno
6. Se dentre os objetos ResultadoGenerico no vetor existe apenas
uma ocorrncia de um objeto com o maior score Ento
Retorne o objeto ResultadoGenerico com maior score.
Seno
7. Para todas as ocorrncias dos objetos ResultadoGenerico com
maior score, realizar a contagem de objetos que possuem classe
igual a falso (Em Conformidade) e tambm os que possuem
classe igual a verdadeiro (Evidncia).
8. Se a quantidade de verdadeiro for maior que a de falso Ento
Retorne um objeto ResultadoGenerico com classe igual a
verdadeiro e score igual ao maior score.
Seno
9. Se a quantidade de falso for maior que a de verdadeiro Ento
Retorne um objeto ResultadoGenerico com classe igual a falso
e score igual ao maior score.
Seno
10. Enquanto no for possvel classificar a sentena (quantidade de
verdadeiros e falsos forem iguais) e nem todos os objetos do vetor
foram analisados, realizar os passos 6 a 9, considerando que o novo
maior score ser o score do objeto ResultadoGenerico que antecede a
primeira ocorrncia do objeto que possui o atual maior score.
11. Se no foi possvel classificar analisando todos os elementos
do vetor Ento
Retorne um objeto ResultadoGenerico com classe igual a falso e score
igual a zero.

Estudo de caso
A realizao do estudo de caso teve por objetivo principal a
validao dos resultados emitidos pela ferramenta TextMining
para deteco de irregularidades nos pagamentos de dirias

48 SQL Magazine Edio 138

48

contidos nos histricos de contas pblicas sob custdia da


organizao ABC. Para atingir este objetivo, necessria a
efetivao dos seguintes passos:
Selecionar os participantes e objetos do estudo de caso;
Definir o dicionrio a ser utilizado;
Executar o processo classificatrio nas amostras dos participantes envolvidos para cada algoritmo de minerao de
texto;
Verificar e validar os resultados obtidos por meio das mtricas
de Tempo Mdio de Execuo, Acurcia, Preciso, Cobertura
e Medida F;
Realizar alteraes na ferramenta, se necessrios.
Primeiramente foram selecionados os participantes e objetos,
em seguida, a definio do dicionrio utilizado, a determinao
das mtricas para a avaliao de desempenho e qualidade dos
algoritmos e, por fim, foi realizada a execuo do estudo.
Para a seleo dos participantes, foi necessrio analisar dois critrios: os participantes devem ser unidades gestoras cadastradas e que
possuam uma quantidade considervel de registros cadastrados. De
acordo com o DW cedido, existem 481 unidades gestoras cadastradas, sendo assim, sero escolhidas, aleatoriamente, trs unidades
para a realizao do estudo. Por questo de sigilo das informaes,
os nomes das unidades gestoras no sero revelados.
As unidades escolhidas, com a quantidade de registros especificados entre parnteses, foram: Unidade A (8872), Unidade B (625) e
Unidade C (1855). importante ressaltar que para as unidades A e C,
tambm foram escolhidas dentro da quantidade de registros, aleatoriamente, amostras de 500 registros para o estudo. fundamental
frisar que a base de treinamento ser constituda pela Unidade A,
j a base de teste ser formada pelas unidades B e C.
Aps a escolha das unidades, fundamental determinar o
atributo na tabela de fato a ser minerado, ou seja, o campo
descritivo. De acordo com a Figura 19, existem cinco campos
descritivos: IdDw_Fato_Diaria, Matricula_Funcionario, Destino_Viagem, Motivo_Viagem e Numero_Empenho. Dentre
estes, para detectar irregularidades no pagamento de dirias, o
atributo mais significativo Motivo_Viagem, porque o mesmo
representa a justificativa da concesso de uma diria.

Dicionrio utilizado
Diria uma espcie de auxlio financeiro ou ajuda de custo
para um colaborador prestar algum servio fora da localidade do
rgo ao qual esteja vinculado. Em outras palavras, um auxlio
recebido pelo colaborador com o intuito de custear seus gastos
para a realizao de servio fora do local de trabalho. A concesso
de dirias diversificada, pois abrange gastos referentes capacitao, viagens para reunies com superiores, entre outras.
Diante do exposto, proibida a concesso de dirias para
fins que no sejam relacionados prestao de servio.
Existem inmeras justificativas consideradas evidncias
de irregularidades para concesso de dirias como realizao de uma viagem particular. Assim, para a definio do

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

dicionrio a ser utilizado neste estudo, optou-se em restringir


esse conjunto para evidncias relacionadas ao uso de dirias para
tratamento de sade.
O modelo de conhecimento (dicionrio a ser utilizado) possuir, no total, 60 sentenas constitudas de amostras da prpria
base e de amostras avulsas para classificar registros. Para as
amostras da prpria base foram escolhidas, aleatoriamente, 40
sentenas da Unidade A, sendo 20 classificadas como Evidncia e as outras 20 como Em Conformidade.
Para as amostras avulsas, foram definidas 20 sentenas, sendo
10 classificadas como Evidncia e as outras 10 como Em
Conformidade. As sentenas avulsas classificadas como Em
Conformidade so similares s da prpria base, as quais foram
formuladas por meio de uma anlise das amostras dos dados
das unidades gestoras envolvidas.
J das sentenas avulsas classificadas como Evidncia, apenas duas so similares s da prpria base, por meio da anlise
da amostra dos dados da Unidade A. Para formular as sentenas
avulsas restantes, com o intuito de obter termos da Medicina
sobre procedimentos, tratamentos e cirurgias mdicas, profissionais da sade, doenas e exames, foram realizadas algumas
pesquisas sobre Medicina.
Com a ajuda de uma especialista na rea da sade, foram
selecionados, por categoria, apenas os termos mais comuns e
relevantes, a exemplo de doenas mais comuns e exames de
rotinas mais solicitados.

Figura 19. Tabela de Fato de Dirias

AMOSTRAS DA PRPRIA BASE


Sentena Em Conformidade

Sentena Evidncia

A DISPOSIO DA JUSTIA ELEITORAL

ACOMPANHAMENTO DE TRATAMENTO DE SADE DE SUA FILHA

A SERVIO DA ASSEMBLEIA

ACOMPANHANTE DA SRA DEP. CELIA FRANCO P/TRATAMENTO MDICO

A SERVIO DESTE PODER

ACOMPANHAR A DEPUTADA PARA TRATAMENTO DE SADE

A TRABALHO

ACOMPANHAR A FILHA EM TRATAMENTO MDICO

ACOMPANHAR O SR.PRIMEIRO SECRETARIO

ATENDER PROCEDIMENTOS MDICOS

ACOMPANHAR PROCESSOS E REUNIES PARLAMENTARES

CONSULTA MDICA

ASSUNTO DE INTERESSE DESTE PODER

DESPESAS MDICA

AUTORIZADA PELO PRIMEIRO SECRETRIO

FAZER EXAMES PARA LIBERAO DE TRANSPLANTE DE RINS

ENCONTRO DO PARTIDO PROGRESSISTA

PARA A FUNCIONARIA A TRATAMENTO DE SADE

ESTUDO SOBRE IMPLANTAO DO SISTEMA

PARA A SERVIDORA REALIZAR TRATAMENTO CLNICO

INTEGRAR COMITIVA DO GOVERNO DO ESTADO

REVISO MDICA

PARA O SR. DEPUTADO PARTICIPAR DE REUNIO DO PARTIDO

SUBMETER-SE A CONSULTA MDICA

PARTICIPAR DE REUNIO DE CUNHO POLTICO PARTIDRIO

SUBMETER-SE A EXAMES MDICOS

PARTICIPAR DA CONVENO NACIONAL DO DEM

SUBMETER-SE A TRATAMENTO MDICO

PARTICIPAR DA POSSE DO PRESIDENTE DA PETROBRAS DISTRIBUIDORA

TRATAMENTO MDICO

PARTICIPAR DE ATO PBLICO CONTRA REFORMA SINDICAL

TRATAMENTO DE SADE

PARTICIPAR DO I CONGRESSO INTERMUNICIPAL DE SADE

TRATAMENTO DE SADE

REUNIO DE CUNHO POLTICO PARTIDRIO

TRATAMENTO DE SADE

TRATAR DE ASSUNTO DE INTERESSE DESTE PODER

TRATAMENTO DE SADE

VISITAR A SUPERINTENDNCIA DA CAIXA ECONMICA FEDERAL

TRATAMENTO DE SADE

Tabela 3. Amostras da base

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

49

49

Minerao de texto: Anlise comparativa de algoritmos

AMOSTRAS AVULSAS
Sentena Em Conformidade

Sentena Evidncia

Complementao de diria para funcionrio realizar trabalho.

25-HIDROXIVITAMINA D OU 25(OH)D; ACIDO RICO NO SANGUE; ALBUMINA; ALTERAES DO FERRO E DE SUA


CAPACIDADE DE FIXAO; AUDIOMETRIA VON BEKESY; BILIRRUBINA NA URINA; BILIRRUBINA NO SANGUE (DIRETA,
INDIRETA E TOTAL). PROVAS DE FUNO HEPTICA (BILIRRUBINAS, ELETROFORESE DE PROTENAS. FA, TGO, TGP E
GAMA-PGT); CLCIO NO SANGUE; CARDIOLIPINA, AUTO-ANTICORPOS IGG; ...

Conduzir pacientes para hospital

ABLATIVA; ABORTO; ACUPUNTURA; ALOPATIA; AMPUTAO; ANESTESIA; ANTI-SEPSIA; APENDICECTOMIA; ASSEPSIA; AUSCULTAO; AUTPSIA; BARITRICA; BIPSIA; CABEA; CARDACA; CAUTERIZAO; CHECK-UP; CIRURGIA;
COLUNA; COSTURA; DRENO; ...

Pagamento de diria para servidor ou


funcionrio realizar servios fora desta
unidade

AMBULATRIO; ASSISTNCIA MDICA; ATENDIMENTO MDICO; CARDIOGRAMA; CLNICA; CONSULTA MDICA; CONSULTRIO; DIAGNSTICO MDICO; DESPESA MDICA; ELETROENCEFALOGRAMA; EMERGNCIA; EXAMES MDICOS;
HISTRICO DE SADE; HOSPITAL; LAUDO; PERCIA MDICA; POLICLNICA; PROCEDIMENTO DE SADE; PRONTOSOCORRO; QUADRO CLNICO; RADIOGRAFIA; REVISO MDICA; VACINA

Viagem para realizao de servio desta


unidade

REALIZAO DE EXAMES MDICOS DA ESPOSA E FILHOS.

Viagem para tratar de assuntos de sade


pblica e obter recursos financeiros.

REALIZAR PROCEDIMENTO CIRRGICO.

Tabela 4. Amostras avulsas


Nas Tabelas 3 e 4 so apresentadas as amostras que constituem o modelo de conhecimento.

Medidas de desempenho e qualidade para avaliao dos


algoritmos
Para analisar o desempenho e qualidade dos algoritmos de minerao de texto em questo ser utilizado o recurso matriz de
confuso, bem como as mtricas de acurcia, cobertura, preciso
e medida F e tempo de execuo.
De acordo com o contexto deste trabalho, devemos considerar
quatro situaes:
NSCCE: nmero de sentenas classificadas corretamente como
Evidncia (True Positive).
NSCCC: nmero de sentenas classificadas corretamente como
Em Conformidade (True Negative).
NSCEE: nmero de sentenas classificadas erroneamente como
Evidncia (False Positive).
NSCEC: nmero de sentenas classificadas erroneamente como
Em Conformidade (False Negative).
A matriz de confuso que contempla essas situaes pode ser
vista na Tabela 5. Com a matriz de confuso criada, podemos
definir as mtricas a serem utilizadas:
Acurcia o percentual de sentenas classificadas corretamente
pelo classificador;
Cobertura o percentual de evidncias que foram classificadas
corretamente como Evidncia;
Preciso o percentual de sentenas classificadas como Evidncia que so realmente evidncias;
Medida F, tambm conhecida como Mdia Harmnica da
Preciso e Cobertura, a medida que combina a preciso e cobertura;

50 SQL Magazine Edio 138

50

Classificado como

Classificao Correta

Evidncia

Em Conformidade

Evidncia

NSCCE

NSCEC

Em Conformidade

NSCEE

NSCCC

Tabela 5. Matriz de confuso utilizada


Tempo de Execuo o tempo de durao de uma classificao,
compreendida pela diferena entre o tempo de trmino e o tempo
de incio da classificao.
A etapa de execuo consistir na realizao do processo
classificatrio nas amostras dos participantes envolvidos para
cada algoritmo de minerao de texto, utilizando o modelo de
conhecimento definido. Foram efetuadas trs classificaes nas
amostras dos participantes envolvidos para cada algoritmo.
necessrio frisar que para cada execuo do Nave Bayes foi
utilizado cada mtodo desse algoritmo (Hbrido, Frequncia
Inversa e Frequncia), bem como o limiar de 51 % foi utilizado
em todas as execues do Nave Bayes. Aps o trmino do processo
classificatrio, as matrizes de confuso foram geradas a partir
dos resultados obtidos das classificaes efetuadas, assim como
foram coletadas as mtricas para cada algoritmo.

Resultados
Aps a realizao do estudo de caso, foram coletados os valores
das matrizes de confuso de cada execuo para cada algoritmo
e unidade escolhida. Com os valores das matrizes de confuso
foi possvel coletar as mtricas para avaliar todas as abordagens.
Vale ressaltar que para um mesmo algoritmo e unidade gestora,

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Valores da Matriz de Confuso Diagonal Principal


NSCCE (TP)
NSCCC (TN)

Unidades

Unidade A
Unidade B
Unidade C

N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

N.B. F.I.

N.B.
H.

N.B.
F.

SIM.

136

137

137

137

363

363

363

362

613

603

603

588

457

449

449

430

Tabela 6. Valores da matriz de confuso por algoritmo e unidade gestora Diagonal Principal
Valores da Matriz de Confuso Diagonal Secundria
NSCEE (FP)
NSCEC (FN)

Unidades

Unidade A
Unidade B
Unidade C

N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

N.B. F.I.

N.B.
H.

N.B.
F.

SIM.

11

21

21

36

40

48

48

67

Tabela 7. Valores da matriz de confuso por algoritmo e unidade gestora Diagonal Secundria

Execues

Mtricas de Desempenho e Qualidade


Acurcia

Preciso

N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

N.B. F.I.

N.B.
H.

N.B.
F.

SIM.

1 Exec.

99,80 %

100 %

100 %

99,80 %

100 %

100 %

100 %

99,28
%

2 Exec.

99,80 %

100 %

100 %

99,80 %

100 %

100 %

100 %

99,28
%

3 Exec.

99,80 %

100 %

100 %

99,80 %

100 %

100 %

100 %

99,28
%

Mdia

99,80 %

100 %

100 %

99,80 %

100 %

100 %

100 %

99,28
%

Execues

Tabela 8. Comparativo das mtricas acurcia e preciso para cada algoritmo na Unidade A

1 Exec.
2 Exec.
3 Exec.
Mdia

Mtricas de Desempenho e Qualidade


Cobertura
Medida F
N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

N.B. F.I.

N.B.
H.

N.B.
F.

SIM.

99,27 %

100 %

100 %

100 %

99,63 %

100 %

100 %

99,64 %

99,27 %

100 %

100 %

100 %

99,63 %

100 %

100 %

99,64 %

99,27 %

100 %

100 %

100 %

99,63 %

100 %

100 %

99,64 %

99,27 %

100 %

100 %

100 %

99,63 %

100 %

100 %

99,64 %

Tabela 9. Comparativo das mtricas cobertura e medida F para cada algoritmo na Unidade A

Execues

a matriz de confuso foi a mesma para as


trs execues (processos classificatrios).
Nas Tabelas 6 e 7 apresentado um resumo dos valores das matrizes de confuso
por algoritmo e unidade.
I n ic ia l mente fora m a na l isados os
resultados das trs classificaes realizadas para cada algoritmo na Unidade
A. Conforme visto nas Tabelas 8 a 10,
os algoritmos Nave Bayes H brido
(N.B.H.) e Nave Bayes Frequncia
(N.B.F.) so as melhores abordagens para
essa unidade, pois possuem as melhores
porcentagens de acurcia (100%), preciso (100%), cobertura (100%) e medida
F (100%). Similaridade (SIM) obteve um
melhor desempenho do que os demais na
mtrica tempo de execuo. Comparando
similaridade e Nave Bayes Frequncia
Inversa (N.B.F.I.), similaridade supera
esse nas mtricas de cobertura, medida
F e tempo de execuo, mas ambos possuem a mesma porcentagem de acurcia.
importante verificar que o algoritmo
similaridade possui preciso inferior em
relao s demais abordagens.
A prxima unidade analisada foi a
Unidade B. Tambm foram analisados os
resultados das trs classificaes realizadas para cada algoritmo na referida unidade. De acordo com as Tabelas 11 a 13,
o algoritmo similaridade obteve um
melhor desempenho do que os demais
apenas na mtrica de tempo de execuo.
J o Nave Bayes Frequncia Inversa obteve um melhor desempenho na mtrica
acurcia (98,08 %). J Similaridade obteve
a menor porcentagem de acurcia. importante verificar que todas as abordagens tiveram um pssimo desempenho
na mtrica preciso (valor abaixo de
50 %), mas Nave Bayes Hbrido e Nave
Bayes Frequncia tiveram desempenho
melhor que os demais.
Apesar dos pssimos resultados, Nave
Bayes Frequncia Inversa foi a melhor
abordagem, pois o mesmo classificou,
erroneamente, um nmero muito inferior
de evidncias do que os outros algoritmos, como mostrado nas Tabelas 6 e 7.
Em outras palavras, comparando-se
o resultado da soma entre NSCCE e
NSCCC (soma da diagonal principal da

1 Exec.
2 Exec.
3 Exec.
Mdia

Mtricas de Desempenho e Qualidade


Tempo de Execuo
N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

135,88 s

133,49 s

146,79 s

84,78 s

135,24 s

139,28 s

153,68 s

83,39 s

134,64 s

134,81 s

156,64 s

82,22 s

135,25 s

135,86 s

152,37 s

83,46 s

Tabela 10. Comparativo da mtrica tempo de execuo para cada algoritmo na Unidade A

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

51

51

Minerao de texto: Anlise comparativa de algoritmos

Execues

Mtricas de Desempenho e Qualidade


Acurcia

1 Exec.
2 Exec.
3 Exec.
Mdia

N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

98,08 %
98,08 %
98,08 %
98,08 %

96,64 %
96,64 %
96,64 %
96,64 %

96,64 %
96,64 %
96,64 %
96,64 %

94,08 %
94,08 %
94,08 %
94,08 %

Preciso

N.B. F.I.

N.B.
H.

N.B.
F.

SIM.

0,00 %
0,00 %
0,00 %
0,00 %

4,55 %
4,55 %
4,55 %
4,55 %

4,55 %
4,55 %
4,55 %
4,55 %

0,00 %
0,00 %
0,00 %
0,00 %

Tabela 11. Comparativo das mtricas acurcia e preciso para cada algoritmo na Unidade B

Execues

Mtricas de Desempenho e Qualidade


Cobertura
N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

1 Exec.

0,00 %

100 %

100 %

2 Exec.

0,00 %

100 %

3 Exec.

0,00 %

Mdia

0,00 %

Medida F
N.B.
H.

N.B.
F.

0,00 %

8,70 %

8,70 %

100 %

0,00 %

8,70 %

8,70 %

100 %

100 %

0,00 %

8,70 %

8,70 %

100 %

100 %

0,00 %

8,70 %

8,70 %

N.B. F.I.

SIM.

Tabela 12. Comparativo das mtricas cobertura e medida F para cada algoritmo na Unidade B

Execues

Mtricas de Desempenho e Qualidade


Tempo de Execuo

1 Exec.
2 Exec.
3 Exec.
Mdia

N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

256,01 s

268,49 s

276,44 s

159,55 s

259,67 s

258,26 s

266,54 s

158,14 s

254,64 s

271,76 s

291,13 s

159,16 s

256,77 s

266,17 s

278,04 s

158,95 s

Execues

Tabela 13. Comparativo da mtrica tempo de execuo para cada algoritmo na Unidade B

1 Exec.
2 Exec.
3 Exec.
Mdia

Mtricas de Desempenho e Qualidade


Acurcia

Preciso

N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

N.B. F.I.

N.B.
H.

N.B.
F.

SIM.

92,00 %

90,40 %

90,40 %

86,40 %

6,98 %

5,88 %

5,88 %

2,90 %

92,00 %

90,40 %

90,40 %

86,40 %

6,98 %

5,88 %

5,88 %

2,90 %

92,00 %

90,40 %

90,40 %

86,40 %

6,98 %

5,88 %

5,88 %

2,90 %

92,00 %

90,40 %

90,40 %

86,40 %

6,98 %

5,88 %

5,88 %

2,90 %

Execues

Tabela 14. Comparativo das mtricas acurcia e preciso para cada algoritmo na Unidade C

1 Exec.
2 Exec.
3 Exec.
Mdia

Mtricas de Desempenho e Qualidade


Cobertura
Medida F
N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

N.B. F.I.

N.B.
H.

N.B.
F.

100 %

100 %

100 %

66,67 %

13,04 %

11,11 %

11,11 % 5,56 %

100 %

100 %

100 %

66,67 %

13,04 %

11,11 %

11,11 % 5,56 %

100 %

100 %

100 %

66,67 %

13,04 %

11,11 %

11,11 % 5,56 %

100 %

100 %

100 %

66,67 %

13,04 %

11,11 %

11,11 % 5,56 %

Tabela 15. Comparativo das mtricas cobertura e medida F para cada algoritmo na Unidade C

52 SQL Magazine Edio 138

52

SIM.

matriz de confuso) de cada algoritmo,


o resultado de Nave Bayes Frequncia
Inversa foi superior aos resultados das
demais abordagens, portanto, Nave
Bayes Frequncia Inversa foi o algoritmo que apresentou melhor desempenho
e qualidade na classificao das sentenas dessa unidade.
Encerrando a primeira anlise, a prxima unidade analisada foi a Unidade C.
Tambm foram analisados os resultados
das trs classificaes realizadas para
cada algoritmo nessa unidade. Conforme
visto nas Tabelas 14 a 16, similaridade
obteve um melhor desempenho do que
os demais apenas na mtrica de tempo
de execuo, bem como obteve os menores percentuais nas outras mtricas.
J o Nave Bayes Frequncia Inversa
obteve as melhores porcentagens de
acurcia, preciso, cobertura e medida F,
seguido das abordagens Nave Bayes
Hbrido e Nave Bayes Frequncia.
Sendo assim, o algoritmo Nave Bayes
Frequncia Inversa foi o melhor mtodo
de classificao para as sentenas dessa
unidade. Contudo, importante observar
que, apesar do timo desempenho, Nave
Bayes Frequncia Inversa classificou,
erroneamente, uma quantidade considervel de sentenas como Evidncia,
como mostrado na Tabela 7.
Encerrando a anlise comparativa dos
algoritmos, foi feita uma anlise por
mtrica utilizada. Verificando o grfico
da Figura 20, correspondente mtrica
acurcia, notvel os timos desempenhos dos Nave Bayes Hbrido e Nave
Bayes Frequncia na Unidade A e o
empate de ambos em todas unidades
gestoras. Tambm perceptvel o empate
entre Nave Bayes Frequncia Inversa e
Similaridade na Unidade A. Em mdia,
Nave Bayes Frequncia Inversa possui
a melhor porcentagem de acurcia, consequentemente, a melhor abordagem
em termos de acurcia.
No grfico apresentado na Figura 21
podemos observar o bom desempenho
do Nave Bayes Frequncia Inversa
na maioria das unidades, apesar do
pssimo desempenho na Unidade B. Em
mdia, Nave Bayes Hbrido e Nave

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Figura 20. Grfico da mtrica acurcia

Figura 21. Grfico da mtrica preciso


Mtricas de Desempenho e Qualidade

Execues

Bayes Frequncia foram melhores do


que Nave Bayes Frequncia Inversa.
Mesmo assim, Nave Bayes Frequncia Inversa a melhor abordagem em
termos de preciso, pois, como foi dito
anteriormente, classificou erroneamente
um nmero inferior de sentenas em
relao aos demais algoritmos.
Observando o grfico apresentado na
Figura 22, conclumos o timo desempenho de Nave Bayes Hbrido e Nave
Bayes Frequncia, possuindo 100%
em todas as unidades. Assim como
perceptvel o baixo desempen ho de
similaridade na mtrica cobertura. Portanto, Nave Bayes Hbrido e Nave
Bayes Frequncia, por possurem as
melhores porcentagens de cobertura,
so os melhores algoritmos em termos
desta mtrica.
Analisando o grfico da Figura 23,
notvel a qualidade de Nave Bayes Hbrido e Nave Bayes Frequncia, apesar
de possuir a mdia harmnica um pouco
inferior de Nave Bayes Frequncia
Inversa na Unidade C. J similaridade
possui, em mdia, a menor porcentagem
de medida F. Assim, Nave Bayes Hbrido e Nave Bayes Frequncia possuem,
em mdia, as melhores porcentagens de
medida F, consequentemente, so os melhores algoritmos para esta medida.
Observando o grfico da Figura 24
fica evidente o timo desempenho do
algoritmo de similaridade por possuir os
menores tempos de execuo em todas
as unidades gestoras.
Na tentativa de descobrir o motivo de
todos algoritmos terem classificado erroneamente uma quantidade considervel
de evidncias nas unidades B e C, foram
analisadas as classificaes de duas
conformidades que foram consideradas
como evidncias por todas as abordagens: INAUGURACAO DE CONJUNTO
HABITACIONAL,CLINICA DE SAUDE E
CEN (Unidade B) e LEVAR PACIENTES P/REALIZACAO DE EXAMES
(Unidade C). Para classificar a primeira
sentena, foi considerado apenas um
termo cujo radical saud, sendo 06 e 09
as quantidades de amostras Em Conformidade e Evidncia, respectivamente.

Tempo de Execuo
N.B.
F.I.

N.B.
H.

N.B.
F.

SIM.

1 Exec.

184,19 s

201,97 s

245,13 s

117,37 s

2 Exec.

212,91 s

185,20 s

311,77 s

114,61 s

3 Exec.

187,70 s

194,69 s

256,87 s

119,11 s

Mdia

194,93 s

193,95 s

271,26 s

117,03 s

Tabela 16. Comparativo da mtrica tempo de execuo para cada algoritmo na Unidade C

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

53

53

Minerao de texto: Anlise comparativa de algoritmos

Figura 22. Grfico da mtrica cobertura

J para a segunda sentena, foram considerados


dois termos de radicais pacient e exam,
sendo 01 a quantidade de Em Conformidade
para o radical pacient e 06 a quantidade de
Evidncia para o radical exam. Portanto, o
processo de Stemming influenciou na classificao errnea dessas sentenas, podendo at ter
influenciado nas demais sentenas classificadas
de forma errada.
Finalizando a anlise, na maioria das mtricas
e unidades analisadas, conclui-se que Nave
Bayes Frequncia Inversa, para o contexto
abordado neste artigo, foi o algoritmo que obteve
melhor desempenho e qualidade para classificar
sentenas, consequentemente, possibilitando
melhores resultados para apoiar a deciso dos
auditores na deteco de irregularidades no
pagamento de dirias.
De posse do melhor algoritmo, esse pode ser
utilizado para tornar mais efetivo o trabalho
do auditor na identificao de irregularidades,
auxiliando-o na tomada de deciso.

Autor

Figura 23. Grfico da mtrica medida F

Breno Santana Santos


breno1005@hotmail.com
Mestrando em Cincia da Computao
na linha de pesquisa em Engenharia
de Software, Programa de Ps-graduao em
Cincia da Computao (PROCC), Universidade
Federal de Sergipe. Graduado em Bacharelado em Sistemas de
Informao, Campus Professor Alberto Carvalho, Universidade
Federal de Sergipe

Autor
Methanias Colao Jnior
mjrse@hotmail.com
Possui doutorado pela Universidade
Federal da Bahia. Atua especialmente
na interface entre a Tecnologia da Informao
e as estratgias de Gesto e Marketing. Atualmente professor da Universidade Federal de Sergipe. Possui
1 livro publicado.
Figura 24. Grfico da mtrica tempo mdio de execuo

Voc gostou deste artigo?


D seu voto em
www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

54 SQL Magazine Edio 138

54

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Oracle Data Guard com


Fast-Start Failover
Aprenda a automatizar a ativao da base de
contingncia

mbientes de banco de dados de misso crtica


e que necessitam prover alta disponibilidade
dependem de infraestruturas de hardware e
software adequadas ao negcio. Nestes ambientes a
indisponibilidade de um banco de dados pode resultar
em grandes prejuzos para a corporao. Pensando nisso,
a Oracle disponibiliza diversos recursos que ajudam a
reduzir drasticamente o risco de indisponibilidade nos
ambientes de banco de dados.
Dentre as principais solues de alta disponibilidade
(ou HA High Availability) oferecidas pela Oracle, podemos citar duas consideradas chaves e que atuam cada
uma em determinado cenrio de desastre, ou seja, so
complementares:
Oracle Real Application Clusters: formado por um
cluster de duas ou mais mquinas que compartilham um
(ou mais) storage(s), conforme a Figura 1. Esta soluo
garante a continuidade do negcio em caso de falha
em algum dos servidores que compem o cluster. Este
modelo bastante utilizado e muito eficiente na maioria
das falhas mais comuns e costuma ser implementado
localmente no data center, mas possvel a implementao de ns do cluster separados geograficamente, desde
que a infraestrutura seja adequada e a distncia no seja
muito grande (latncia de rede baixa);
Oracle Data Guard: permite a replicao fsica (ou
lgica) dos dados de uma instncia de banco de dados
para outra infraestrutura independente (vide Figura 2).
O Data Guard costuma complementar o Real Application
Clusters em algumas situaes de falha que um ambiente
RAC no poderia evitar. Alguns exemplos so falhas nos
componentes de storage, catstrofes naturais, incndios,
etc. Com o Oracle Data Guard possvel manter servidores redundantes a milhares de quilmetros de distncia,
ou mesmo possuir diversos sites remotos recebendo a
replicao de um banco principal e ainda permitir que o
banco rplica possa ser consultado (read only) desde que
seja adquirida a option Active Data Guard.

Fique por dentro


Este artigo apresenta o produto Oracle Data Guard utilizando a
funcionalidade Fast-Start Failover para automatizar a recuperao do
ambiente aps uma falha. O texto abordar os benefcios e os pontos
de ateno que devem ser observados ao montar a infraestrutura, concluindo com um exemplo prtico da implementao de um ambiente
virtual Data Guard. Neste exemplo, vamos ver desde a montagem
dos componentes da infraestrutura, a instalao e configurao do
sistema operacional Linux, passando pela configurao do database,
replicao para standby, configurao do Fast-Start Failover, at os
testes de funcionamento do produto. O contedo apresentado til
ao trabalharmos na configurao de solues de alta disponibilidade
para nosso ambiente de produo. A importncia da tecnologia apresentada tambm est no fato dela permitir automatizar a ativao da
base de contingncia permitindo minimizarmos o tempo que o banco
permanea fora do ar.

Figura 1. Modelo Oracle RAC


Neste artigo vamos explorar melhor o standby fsico, mais especificamente usando a funcionalidade Fast-Start Failover do Data
Guard. Para tanto, iremos explicar como simular um ambiente
completo de contingencia usando mquinas virtuais, que ser
composto pelos seguintes componentes:

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

55

55

Oracle Data Guard com Fast-Start Failover

O Observer est rodando;


Ambos o Observer e o Standby perdem contato com o Primrio;
O Observer tem contato com o Standby;
As condies pr-definidas pelo DBA foram atingidas;
O threshold de timeout foi atingido.

Figura 2. Modelo Oracle Data Guard


Data Guard: a base da infraestrutura. Precisamos de uma base
de dados principal e pelo menos uma base de dados em standby,
recebendo e aplicando transaes;
Data Guard Broker: o gerenciador do Data Guard. Com ele
possvel automatizar boa parte da configurao do Data Guard e ele
quem guarda informaes chave das configuraes de replicao;
Flashback Database: garante rpida recuperao da base standby no momento de um failover, pois permite retornar o estado
da base de dados a um momento anterior falha para sincronizar
com as transaes da (nova) base de produo e iniciar a aplicao
de redo logs;
FSFO Observer: um equipamento parte das mquinas de
produo e standby. Consiste de uma mquina com um Oracle
Client instalado (independente de SO) que mantm um servio DGMGRL CLI (Data Guard Broker Command Line Interface) e observa
o comportamento dos componentes do Data Guard. Em caso de
falha do ambiente produtivo, avalia a necessidade de realizar um
failover e instanciar novamente a base que falhou, seguindo algumas condies pr-configuradas. Este componente considerado
de baixa necessidade de recursos computacionais e independente
de sistema operacional, necessitando apenas que seja homologado
para executar o Oracle Client. A Oracle recomenda que a mquina
Observer esteja o mais prximo possvel das estaes que acessaro
o banco de dados, para que ele tenha a real viso de um cliente no
caso de uma falha da infraestrutura. Alm disso, no se recomenda
que o observer fique nem no datacenter primrio, nem no secundrio, sob risco de ocorrer o chamado Split Brain, onde os dois
databases iniciam como primrios. A Figura 3 ilustra o modelo
fast-start failover configurado com um observer.

Condies para um Fast-Start Failover


Imagine que o failover de uma base de produo um processo
drstico e a deciso de realizar ou no este failover deve ser bem
pensada, mesmo que o procedimento ocorra automaticamente.
Para isso, necessrio aplicar ajustes finos e definir exatamente
em que situaes espera-se que o banco de dados primrio seja
movido de um servidor para outro.
Em um ambiente com Fast-Start Failover configurado com os parmetros default, o observer inicia o processo de failover somente
se todas as seguintes condies forem satisfeitas:

56 SQL Magazine Edio 138

56

Figura 3. Modelo Fast-Start Failover

Condies para um failover configurado pelo usurio


Caso as configuraes de failover automtico no sejam adequadas ao ambiente a ser montado, possvel ainda que o usurio
(DBA) defina algumas situaes em que ele queira que o failover
ocorra, a saber:
Datafile off-line por falhas de I/O;
Control file corrompido;
Dicionrio corrompido;
Log Files inacessveis por falhas de I/O;
Archiver Stuck;
Erros ORA-XXX (configurvel);
Uso da procedure DBMS_DG.INITIATE_FS_FAILOVER.

Roteiro de implementao do Fast-Start Failover


A implementao do Fast-Start Failover pode ser resumida com
as seguintes atividades:
A criao de uma base principal, Enterprise Edition, com Flashback database (vide BOX 1) habilitado;
BOX 1. Flashback database
Flashback database permite desfazer transaes recentes em um banco de dados. Esta
funcionalidade essencial para que, aps um failover, a antiga base produtiva tenha desfeitas as
transaes que no foram replicadas para a nova produo, sincronizando a base com um SCN vlido
na nova base de produo e habilitando a nova base standby a continuar recebendo transaes de
redo log sem a necessidade de nova carga completa.

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Um clone dos datafiles da base principal para outra mquina;


A configurao do Data Guard utilizando o broker, garantindo
que a replicao est ocorrendo corretamente;
A configurao do observer em uma terceira mquina;
Testes de failover.
Para configurar um ambiente de testes sero necessrios:
Hardware:
- 2 VMs com OEL 6, 2GB de memria e 1 vCPU;
- 1 VM com OEL 6, 1GB de memria e 1 vCPU.
Software:
- Oracle Database 12.1.0.2 EE;
- Oracle Database 12.1.0.2 Client (para o observer).
Note que a implementao do ambiente foi realizada de forma
simplificada, utilizando Oracle VM. Na prtica, em ambiente
fsico, certamente sero necessrias configuraes e passos
adicionais para colocar o ambiente em funcionamento, porm
os passos demonstrados aqui so completos o suficiente para a
implementao do Data Guard.

Passo 1: Criao da mquina Base


Foi criada uma mquina virtual base, com um disco de 20 GB
para as parties de sistema e outro disco de 20 GB montado com
o nome /u01, onde sero instalados os binrios e armazenados
os datafiles do nosso banco de testes. Neste caso no precisamos
de muito espao, pois o objetivo no armazenar dados, mas
apresentar o funcionamento da soluo.
Nesta mquina foi instalado o sistema operacional Oracle
Enterprise Linux na verso 6.6. Antes de escolher o sistema
operacional para sua mquina virtual, no entanto, verifique
se ele homologado para a verso de banco de dados que
pretende instalar.
Aps a instalao bsica do Linux, foi instalado o pacote
oracle-rdbms-server-12cR1-preinstall-1.0-14.
el6.x86_64. Para uma instalao de testes,
este pacote automatiza a instalao de prrequisitos e a configurao de parmetros
de kernel e limites necessrios para o Oracle
Database 12c. Alm disso, este pacote cria
automaticamente o usurio Oracle. Depois
de instalado, s necessrio redefinir a
senha do usurio com o comando passwd
oracle. Em produo, recomenda-se conferir
os parmetros definidos e ajustar em caso
de necessidade.
Pronto, nossa mquina Base est instalada
e configurada adequadamente, pronta para
ser replicada.

No nosso caso, um clone da mquina Base criada anteriormente.


Vale ressaltar que as mquinas no precisam necessariamente ser
taxadas como Primria e Secundria, pois em um ambiente ideal,
as duas mquinas deveriam ser idnticas, e a base produtiva read/
write poderia estar em qualquer um dos dois lados do Data
Guard, de forma transparente. Neste exemplo chamaremos de
Primria (dg1) e Secundria (dg2) somente para facilitar a identificao de cada uma na montagem do ambiente.
Ao clonar mquinas para este ambiente, devemos nos atentar
para os seguintes detalhes:
1. Um clone linkado ser mais rpido e utilizar menos espao
em disco;
2. Ao clonar a mquina, sempre devemos selecionar a opo
reiniciar o MAC Address;
3. No primeiro startup da mquina, limpe as linhas do arquivo /
etc/udev/rules.d/70-persistent-net.rules referentes (s) interface(s) de
rede da mquina clonada. Remova tambm as linhas que definem UID e MACADDR no arquivo /etc/sysconfig/network-scripts/
ifcfg-ethX;
4. Ajuste o nome da mquina em /etc/sysconfig/network e reinicie
a mquina;
5. Aps o reboot, ajuste informaes de IP caso necessrio.
Aps o clone, o primeiro passo instalar o Oracle Database 12c
12.1.0.2 Enterprise Edition. Neste caso selecionamos a feature
Multitenant, mas como ela no escopo do artigo, no faria
diferena se fosse selecionada outra opo. Na verdade, durante
a instalao, a nica opo que nos importa mesmo que seja
selecionada a instalao do Enterprise Edition, pois o Standard
Edition no oferece a feature Data Guard.
Depois da instalao do binrio, deve-se proceder com a
criao do database e a configurao do listener, sem mistrios.
No entanto, ainda no a hora de configurar a inicializao
automtica da base.

Passo 2: Criao da mquina Primria


A mquina primria a mquina considerada principal no ambiente Data Guard.

Figura 4. Iniciando base primria

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

57

57

Oracle Data Guard com Fast-Start Failover

Passo 3: Criao da mquina secundria

Figura 5. Trigger de inicializao dos PDBs

Neste momento pouparemos um tempo


usando uma mquina virtual. Usaremos
um clone da mquina primria, que j possui o SO instalado e configurado, o Oracle
Database instalado e ainda teremos uma
cpia dos datafiles do banco primrio.
Caso no fosse possvel realizar este
clone, teramos que instalar SO, o Oracle
Database e realizar um clone da base primria usando o comando rman duplicate
for standby from active database.
Na mquina clonada, no esquea de
seguir as recomendaes referentes a mac
address e ajustes de rede j discutidos
anteriormente. Com isso, neste momento
j temos uma mquina base e duas mquinas com banco de dados Oracle.

Passo 4: Ajustes para o Data Guard

Figura 6. Criando standby control file

Figura 7. Habilitando Flashback e Force logging

58 SQL Magazine Edio 138

58

Agora entramos efetivamente na configurao do Data Guard. Para comear,


vamos realizar uma configurao de replicao bsica utilizando as duas bases
clonadas nos passos anteriores.
Dito isso, iniciamos a base primria,
conforme a Figura 4.
Para que no prximo startup da base de
dados no seja necessrio iniciar o Pluggable DataBase (PDB), criaremos uma trigger
que far este trabalho (vide Figura 5).
Em seguida, criamos um control file
para ser usado no standby e copiamos ele
para a mquina secundria, substituindo
o control file original (Figura 6).
Para garantir que todas as transaes
da base primria sejam registradas em
redo logs, necessrio habilitar o force
logging na base de dados. E para utilizar
o Fast-Start Failover necessrio habilitar
o Flashback Database. Estes dois procedimentos devem ser executados tanto na
base primria quanto na secundria, como
demonstrado na Figura 7.
Agora devemos ajustar o TNSNAMES
de ambas as mquinas para permitir a
conexo individual a cada uma das instncias. Note que as entradas ORCL_PRD
e ORCL_DTG direcionam as conexes
especificamente para as bases existentes
respectivamente nas mquinas DG1 e
DG2. J a entrada ORCL a que deve ser
distribuda para os usurios de aplicao,

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

pois realiza o trabalho de failover de


conexo caso o Data Guard tenha que ser
acionado, ou seja, no importa em que
lado a base produtiva esteja, o TNSNAMES ORCL sempre atender produo.
Podemos ver na Figura 8 um exemplo
de arquivo TNSNAMES criado para um
ambiente Data Guard.
Aps essa etapa, o teste de conexo
muito importante para garantir que todas
as entradas TNSNAMES so funcionais,
caso contrrio teremos problemas durante
a configurao do Data Guard no Broker.
A Figura 9 apresenta uma forma de testar
a configurao recm realizada.

NAME de cada instncia. Neste momento


tambm podemos definir o parmetro
STANDBY_FILE_MANAGEMENT para
AUTO, para que novos datafiles sejam
criados automaticamente no standby
quando so criados na produo.
O parmetro DG_BROKER_START deve
ser alterado para TRUE, para que o Data

Guard Broker seja iniciado. J o parmetro


DB_UNIQUE_ NAME deve identificar
cada instncia com um nome nico no ambiente. Neste caso, colocamos ORCL_PRD
e ORCL_ DTG, respectivamente. Para
alterar este ltimo parmetro, no entanto,
necessrio definir scope=spfile, pois
ele no dinmico. Feito isso, reinicie

Nota
Sempre teste as entradas TNSNAMES conectando efetivamente
na mquina. O TNSPING somente testa se o listener est no ar.
No testa se SERVICE_NAME ou SID esto ativos, nem se o
database est pronto para receber conexes.

Passo 5: Configurao do Data Guard


Neste momento iniciamos a base standby
na mquina Secundria em modo mount.
Neste modo a memria SGA alocada, os
arquivos de controle so lidos e os datafiles
esto prontos para receber transaes via
aplicao de logs.
A criao de standby logfiles em ambos
os databases necessria para que a base
standby consiga receber e aplicar transaes da base primria sem a necessidade
de gerao de archivelogs. Desse modo, as
transaes geradas no redo log da produo
so aplicadas quase que simultaneamente
na base standby. A Figura 10 demonstra a
criao de standby redo logs.

Figura 8. Configurao de arquivo TNSNAMES

Nota
O tamanho dos standby redo logs deve sempre ser
correspondente ao tamanho dos redo logs existentes na
base primria. A quantidade recomendada de pelo menos
a quantidade de grupos existentes na produo + 1 em
ambientes single. Em ambientes RAC deve-se usar a seguinte
equao:
(nmero mximo de redo log groups por thread + 1) * nmero
mximo de threads.

Em seguida, ajustamos os parmetros


DG_BROKER_START e DB_UNIQUE_

Figura 9. Testando TNSNAMES

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

59

59

Oracle Data Guard com Fast-Start Failover

Figura 10. Adicionando standby logfiles

Figura 11. Alterando parmetros e reiniciando instncias

Figura 12. Criando configurao do Broker.

60 SQL Magazine Edio 138

60

as instncias, como indicado na


Figura 11.
Agora que ajustamos os parmetros necessrios para o Data
Guard, podemos configur-lo
efetivamente. Para isso, usamos o
aplicativo DGMGRL, que est disponvel em $ORACLE_HOME/
bin. Se o ambiente estiver parametrizado adequadamente, s
cham-lo via linha de comando.
A partir desse aplicativo, configuraremos o Broker usando o
comando create configuration. Em
seguida, adicionaremos o database secundrio e habilitaremos
toda a configurao realizada
usando o comando enable configuration, como pode ser verificado
na Figura 12.
Ao habilitar a configurao,
os parmetros necessrios para
iniciar a replicao das transaes
entre base primria e secundria
so ajustados automaticamente
no spfile das duas bases de dados.
Em muitos casos, estas definies
so suficientes para termos o
ambiente de alta disponibilidade
funcional.
Caso tudo esteja configurado
corretamente, neste momento a

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

base primria se comunicar com a base secundria, identificando


quais transaes devem ser transferidas, e far a sincronizao
automtica entre elas.
Aps algum tempo, se consultarmos a configurao, receberemos
o status de base sincronizada, isto , todas as transaes geradas
no redo log de produo foram aplicadas na base standby. Os
comandos necessrios podem ser conferidos na Figura 13.
Podemos ainda conferir o status individual de cada instncia,
em mais detalhes, usando o comando show database. Este comando
mostrar a role do database e seu estado. No caso da base standby,

o comando apresenta ainda quo defasada est a base em relao


produo. Alguns exemplos podem ser conferidos na Figura 14.
Caso seja preciso conferir todos os parmetros de configurao
do broker do database, podemos utilizar o parmetro verbose,
conforme exposto na Figura 15.

Passo 6: Teste de switchover


Antes de continuar a configurao prudente realizar alguns
comandos switchover para conferir se o Data Guard est
funcionando corretamente. Para isso, novamente usaremos o
DGMGRL, apesar de poder ser feito de outras formas como, por

Listagem 1. Configurao de uma entrada do listener.ora da mquina primria.


01 SID_LIST_LISTENER =
02 (SID_LIST =
03 (SID_DESC =
04 (GLOBAL_DBNAME = ORCL_PRD_DGMGRL)
05 (ORACLE_HOME = /u01/app/oracle/product/12.1.0.1/dbhome)
06 (SID_NAME= orcl)
07 )
08 )

Figura 13. Verificando a configurao

Figura 14. Verificando mais detalhes do banco de dados

Figura 15. Verificando os parmetros

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

61

61

Oracle Data Guard com Fast-Start Failover

exemplo, com o Enterprise Manager Cloud Control, caso estivesse


disponvel.
Antes de iniciar o switchover, verifique se o servio <DB_UNIQUE_NAME>_DGMGRL est registrado no listener. Isso pode ser
feito utilizando o comando lsnrctl status ou analisando o arquivo
de configurao listener.ora. No exemplo, temos que configurar
a entrada apresentada na Listagem 1 do arquivo listener.ora da
mquina primria.
Na mquina secundria devemos repetir a configurao substituindo ORCL_PRD_DGMGRL por ORCL_DTG_DGMGRL.

Figura 16. Testando switchover

Caso tenha que alterar algo no arquivo listener.ora, no esquea


de reiniciar o listener.
Lembro que este o nome de servio padro que o Broker
configura automaticamente. possvel que o nome de servio
necessrio no seu ambiente seja diferente. Para confirmar o
nome de servio, pode-se usar o comando show database verbose
<DB_UNIQUE_NAME> e verificar o parmetro StaticConnectIdentifier da configurao.
Outro detalhe importante para que o switchover ocorra corretamente garantir que se conecte ao DGMGRL com um usurio
SYSDBA (no caso o SYS) e utilize uma senha vlida para
ambos os databases do Data Guard.
O comando switchover realiza a transio de servio de
um database para o outro de modo que no sejam perdidas
transaes. Neste processo o Data Guard finaliza a base de
produo corrente, garante que todas as transaes foram
enviadas para a base de contingncia e inicia o standby
como read/write. Seguindo os passos descritos anteriormente, espera-se ainda que a base que estava em produo
suba automaticamente como standby, pronta para receber as
transaes da nova base produtiva. Na Figura 16 podemos
conferir o comando switchover sendo executado pela linha
de comando do DGMGRL.
Ao final, se tudo der certo, teremos a base ORCL_DTG
como principal read/write e a base ORCL_PRD como
standby no modo mount ou read only.
Feito o switchover corretamente, podemos ento realizar novo switchover para voltar a base principal para
ORCL_PRD. recomendado executar o switchover quantas
vezes forem necessrias at que se tenha a configurao
ideal do ambiente.

Passo 7: Teste de Failover

Figura 17. Falha de teste de failover

62 SQL Magazine Edio 138

62

O comando de failover realiza a transio de servio de


um database para o outro de modo forado. Esse tipo de
transio de modo forado necessrio quando a base de
produo corrente falhou e no est disponvel para que
se recupere as ltimas transaes e se baixe a instncia
de modo normal ocorre um shutdown abort ou a simples
queda fria do servio.
Este comando deve sempre ser executado conectando-se
o DGMGRL ao database que est atualmente em standby,
caso contrrio o comando de failover retornar o erro
apresentado na Figura 17.
Ao executar o comando failover simulamos a real necessidade de transio de servio forada. Desse modo o banco de
produo derrubado e o banco standby assume a produo
subindo automaticamente. A Figura 18 apresenta esse procedimento sendo executado.
Aps a execuo do comando, o banco que foi interrompido abruptamente deve ser reconstrudo. Para isso, realizase o rollback das transaes que no foram aplicadas no
banco standby para ento iniciar a execuo das transaes

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

de redo do novo banco de produo. Neste momento o Flashback


Database entra em cena e realiza este trabalho. Caso no estivesse
habilitado seria preciso uma nova carga clone no banco de produo para retomar a aplicao de redo logs no novo standby.

A reconstruo pode ser realizada com a execuo do comando


reinstate database <DB_UNIQUE_NAME> no DGMGRL, mas
antes necessrio iniciar o database em modo mount (vide
Figura 19).

Figura 18. Teste de failover utilizando o DGMGRL

Figura 19. Reconstruindo a base standby aps failover

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

63

63

Oracle Data Guard com Fast-Start Failover

Passo 8: Configurao do Fast-Start Failover


Agora que j temos o Data Guard configurado com o DG Broker e
o Flashback Database habilitado, hora de colocarmos o Observer
para gerenciar o estado dos bancos de dados. Para isso, realizamos
um novo clone da mquina base, que j possui o Linux instalado.
Novamente, no esquea de definir os ajustes de rede necessrios,
conforme j explicado.
Chamaremos esta nova mquina de observer e ela ser responsvel por observar o funcionamento do Data Guard configurado
nas mquinas dg1 e dg2. Em observer, instalaremos o Oracle
Client 12c como usual e copiaremos o arquivo tnsnames.ora de um
dos servidores do Data Guard para a pasta $ORACLE_HOME/
network/admin. Isso necessrio para que o observer tenha acesso
a todas as bases de dados envolvidas.
Em seguida, execute o DGMGRL, se conecte ao Data Guard com
o usurio SYSDBA e inicie o observer com o seguinte comando
(vide Figura 20):

este comando sendo executado e o status da configurao aps


habilitado.
Podemos verificar o status do fast-start failover com o comando
show fast_start failover. Este apresenta as situaes opcionais em
que o failover ocorrer e os thresholds configurados. No caso da
Figura 23, o failover ser acionado automaticamente caso o dicionrio de dados ou control files estejam corrompidos ou ainda se
um datafile ficar off-line por motivo de falha no arquivo.

Start observer;

O prompt ficar travado aps essa chamada. Para evitar que


isso acontea podemos utilizar o comando apresentado a seguir,
o qual possibilita iniciar o observer e direcionar as mensagens de
log para um arquivo (vide Figura 21):
nohup dgmgrl sys/****@orcl start observer -logfile /u01/app/oracle/observer.log &

Com o ambiente definido podemos habilitar o Fast-Start Failover


usando o comando enable fast_start failover. A Figura 22 apresenta

Figura 20. Iniciando o observer

Figura 21. Iniciando observer com log

64 SQL Magazine Edio 138

64

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Passo 9: Teste de Fast-Start Failover


Para testar uma falha na base de produo, vamos matar o processo pmon da base primria usando o comando kill. Feito isso,
a base primria se encerrar com erro e a base secundria ser
iniciada automaticamente pelo observer.

Na Tabela 1 apresentada a sequncia de acontecimentos


esperados em cada um dos componentes da infraestrutura. Ao
final teremos a base primria na mquina DG2 e a mquina DG1
estar com a base de dados em modo standby. O Data Guard
uma alternativa bastante til e segura de incrementar a alta

Figura 22. Habilitando o Fast-Start Failover

Figura 23. Verificando parmetros FSFO

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

65

65

Oracle Data Guard com Fast-Start Failover

DG1

DG2

Observer

Banco de dados ORCL_DTG iniciado


como primrio.

Log do observer apresenta a mensagem:


Initiating Fast-Start Failover to database orcl_dtg...
Performing failover NOW, please wait...
Failover succeeded, new primary is orcl_dtg.

Processo PMON encerrado com o comando kill. O


banco de dados primrio encerrado.

Manualmente, montamos o database ORCL_PRD


(aps verificar eventual problema, se for o caso).
Inicia-se o procedimento de recuperao da base
ORCL_PRD usando o Flashback Database.

Log do observer apresenta a mensagem:


Initiating reinstatement for database orcl_prd...
Reinstating database orcl_prd, please wait....

Banco de dados ORCL_PRD iniciado como standby.

Log do observer apresenta a mensagem:


Reinstatement of database orcl_prd succeeded.

Tabela 1. Sequncia de acontecimentos em uma simulao de falha em que o observer realiza o failover automaticamente
disponibilidade de bancos de dados Oracle, e o Fast-Start Failover facilita o trabalho de Failover em caso de problemas com o
ambiente primrio de forma bastante segura. Esta funcionalidade
faz parte do pacote oferecido pelo Oracle Enterprise Edition, bastando que os processadores do servidor standby tambm sejam
licenciados como Enterprise Edition.
Como complemento ainda pode ser habilitada a option Active
Data Guard, que permite manter aberto em read only o banco de
dados secundrio (standby), enquanto o mesmo recebe transaes
do banco primrio. Esta option paga especialmente interessante
em bancos de dados que possuem aplicaes que realizam somente leitura, como gerao de relatrios ou anlises de BI ou cargas
(externas) de bancos DW.

Autor
Ivan Ricardo Schuster
ivanrs79@gmail.com
Com mais de 15 anos de carreira como DBA, j trabalhou
em diversos projetos de Bancos de Dados de alta criticidade,
apresentando solues para as mais diversas falhas de infraestrutura,
em ambientes de alta disponibilidade e alta complexidade. Possui
diversas certificaes Oracle, tais como OCP 10g, 11g e 12c, OCE RAC e Exadata, trabalha
atualmente na Teiko Tecnologia da Informao Ltda. como consultor DBA.

66 SQL Magazine Edio 138

66

Links:
Guide to Oracle Data Guard Fast-Start Failover
http://www.oracle.com/technetwork/articles/smiley-fsfo-084973.html
Client Failover Best Practices for Highly Available Oracle Databases: Oracle
Database 11g Release 2
http://www.oracle.com/au/products/database/maa-wp-11gr2-client-failover-173305.pdf
Database High Availability Best Practices
https://docs.oracle.com/database/121/HABPT/config_dg.htm#HABPT4876

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Programador Java:
Por onde comear?
Descubra nesse vdeo como entrar
na carreira Java com o p direito!

DEVMEDIA
http://www.devmedia.com.br/programador-java-por-onde-comecar/33638
Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

Edio 138 SQL Magazine

67

67

Oracle Data Guard com Fast-Start Failover

68 SQL Magazine Edio 138

68

Copyright - Proibido copiar ou distribuir. Todos os direitos reservados para DevMedia

You might also like