Você está na página 1de 68

sql81.

indb 1 29/10/2010 13:55:23


FairCom10315CatBRFullx1a.pdf 1 3/15/10 3:08 PM

"ii>V>i

Modelagem
i?`iL>>Vi>`

Projeto/
Experimente o
diferencial FairCom:
Tecnologia de banco
de dados flexvel,
licenciamento flexvel
U
>`>i>V>
`iKVV>>
`i>
U 1V`]i
>>`ii>
i>V>
U 1i>*-+i-
C
>i>ii
M

Y U >/
"
>`i
CM
i`>`iiViV>i
vii>>>i`i>i

Software
Eng. de
MY

CY
`i`ii}V
CMY
U - `i`iii}?
K

U -ijVV`i
i}ii>>i}ii

Ento hora de conhecer o:

eu
s

the right-size Database


D

>ii- }?Uv>VVUnn
2010 FairCom Corporation

sql81.indb 2 29/10/2010 13:55:26


Projeto
de Software/
06 Modelagem de Dados Incremental
Sumrio
Modelagem

[ Arilo Claudio Dias Neto ]


Projeto/

Modelagem

Projeto 14 Refactoring de Banco de Dados


de Software/
Modelagem [ Ismael Zacarias Soares ]

Desenvolvimento
22 Aplicao Web com ASP.NET e PostgreSQL
[ Rafael Silva]

Primeiros passos em 28 Segurana no SQL Server


banco de dados [ Felipe de Assis ]
Banco de Dados/ Persistncia

Mo na Massa
34 Implementando uma estratgia de backup no SQL Server 2008
[ Lucas Souza ]
Ol, eu sou o DevMan! Desta

Mo na Massa
42 MySQL Performance Diagnostics & Tuning - Parte 1 pgina em diante, eu estarei
[ Ricardo Portilho Proni ] lhe ajudando a compreender
com ainda mais facilidade o
contedo desta edio. Ser
Expert
48 Explain plan: Desvendando planos de execuo Parte 3
um prazer contar com sua
[ Reinaldo Tetsuo Katahira]
companhia! Confira abaixo o
que teremos nesta revista:

Mo na Massa
58 Desvendando o Automatic Storage Management - Parte 6
[ Ricardo Rezende]
Software
Eng. de

Engenharia de 63 Especificao de casos de uso na prtica


Software [ Rodrigo Oliveira Spnola]

Brinde na web desta edio


1) Diferenas entre Integer e float - Curso PostgreSQL
Nesta vdeo aula ser mostrado como criar outros exemplos de funes no banco de dados PostgreSQL. No primeiro exemplo, criado uma funo
chamada diminuir, onde informado um valor e o resultado a operao de uma subtrao com outro valor. Posteriormente criada a mesma ideia, mas
agora realizando uma diviso. Veja que a primeira funo retorna um valor inteiro, e a segunda criada retorna um valor do tipo float. Na vdeo mostrada
a diferena e realizado teste com ambas. No final mostrada algumas caractersticas das funes neste SGBD.

Vdeos
2 2) Funes Case e else - Curso PostgreSQL
Nesta vdeo aula ser mostrado como trabalhar com case em uma funo utilizando a linguagem SQL. Depois de comentada esta ideia desenvolvido um
exemplo simples para relembrar toda a lgica e objetivo do exemplo. Posteriormente a ideia do case adicionada a uma funo. O objetivo desta funo
informar um valor, neste caso a sigla de um estado, e a funo retornar por extenso o nome da mesma. No final mostrado o mesmo exemplo, mais
trabalhando com valor do tipo integer. Nestes exemplos tambm mostrado o uso do ELSE.

Para visualizar acesse o link:


http://www.devmedia.com.br/articles/listcomp.asp?keyword=sql81&codigobanca=pterra

Gostou das vdeo aulas? O portal www.devmedia.com.br possui mais de 2 mil vdeo aulas e dezenas de cursos online sobre desenvolvimento de
software! Agora voc pode comprar as vdeo aulas que preferir e fazer sua prpria combinao de vdeos! Saiba mais em www.devmedia.com.br/creditos

Feedback
eu D seu feedback sobre esta edio!
s
D

A .NET Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que voc, leitor, acha da revista!
sobre e

D seu voto sobre esta edio, artigo por artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback
s

ta
Para votar, voc vai precisar do cdigo de banca desta edio, que : pterra
edio

sql81.indb 3 29/10/2010 13:55:27


Expediente Editorial
EDITORIAL

A
s empresas de desenvolvimento de software tm evoludo constante-
mente. Muitas delas devem isto s novas e modernas metodologias geis
que defendem a construo do software de maneira incremental e itera-
tiva. Entretanto, disponibilizar sistemas de informao com qualidade em ciclos
cada vez menores, ainda uma misso desafiadora para muitas delas. Isto porque,
preciso garantir que a cada entrega, o sistema no perder as suas funcionalidades
Ano 7 - 81 Edio 2010 - ISSN 1677918-5 - Impresso no Brasil e continuar sem erros. Alm do mais, estas metodologias no prevem a mesma
iteratividade para o banco de dados. Para finalizar, algumas destas empresas ainda
utilizam bancos de dados legados e no migram para sistemas mais novos por di-
Corpo Editorial
Atendimento ao Leitor versos motivos, dentre eles:
Editor Geral A DevMedia conta com um departamento exclusivo Complexidade;
Rodrigo Oliveira Spnola para o atendimento ao leitor. Se voc tiver algum Alto custo;
rodrigo.devmedia@gmail.com problema no recebimento do seu exemplar ou
Mudana de cultura da empresa;
Sub Editores precisar de algum esclarecimento sobre assinaturas,
Falta de conhecimento dos desenvolvedores;
Arilo Cludio Dias Neto, Eduardo Oliveira Spnola exemplares anteriores, endereo de bancas de
jornal, entre outros, entre em contato com: Mudanas de paradigmas dos DBAs.
e Ricardo Rezende

Capa e Diagramao Daniela Maciel Atendimento ao Leitor


www.devmedia.com.br/mancad/ A boa notcia que usando as tcnicas de refactoring de banco de dados pos-
Romulo Araujo (21) 3382-5038
svel fazer estas migraes e melhorias de forma segura e incremental. Neste con-
romulo@devmedia.com.br
Kaline Dolabella Gerente de Marketing e texto, a SQL Magazine desta nesta edio o artigo intitulado Refactoring de Banco
Reviso e Superviso Atendimento
kalined@terra.com.br
de Dados: Uma forma segura de evoluir o esquema do seu banco de dados. Neste
Thiago Vincenzo - thiago.v.ciancio@devmedia.com.br
(21) 3382-5038 artigo ser visto como evoluir um esquema de banco de dados de forma segura,
Coordenao Geral iterativa e incremental. Em seguida, ser mostrado alguns exemplos de casos co-
Publicidade
Daniella Costa - daniella@devmedia.com.br
Para informaes sobre veiculao de anncio na muns aplicando as tcnicas de refactoring de banco de dados.
Na Web revista ou no site e para fechar parcerias ou aes Alm desta matria, a SQL Magazine traz nesta edio outras matrias muito in-
www.devmedia.com.br/sqlmagazine/pagina.asp especficas de marketing com a DevMedia, entre teressantes envolvendo assuntos como Projeto, Oracle, SQL Server, MySQL, Postgre
em contato com:
SQL e Engenharia de Software. Uma tima leitura a todos.
Distribuio
Cristiany Queiroz
Fernando Chinaglia Dist. S/A
publicidade@devmedia.com.br
Rua Teodoro da Silva, 907
Graja - RJ - 206563-900 Rodrigo Oliveira Spnola
rodrigo.devmedia@gmail.com
Editor Chefe da SQL Magazine, WebMobile e
Engenharia de Software Magazine.

Fale com o Editor! Diretor de Operaes Kali Software


muito importante para a equipe saber o que voc est revista ou no site SQL Magazine, entre em contato com os (www.kalisoftware.com)
achando da revista: que tipo de artigo voc gostaria de editores, informando o ttulo e mini-resumo do tema que
ler, que artigo voc mais gostou e qual artigo voc menos voc gostaria de publicar:
Doutorando e Mestre em Engenharia de Software
gostou. Fique a vontade para entrar em contato com os pela COPPE/UFRJ - o maior centro de ensino e
editores e dar a sua sugesto! Rodrigo Oliveira Spnola - Editor da Revista pesquisa em engenharia da Amrica Latina. Autor
Se voc estiver interessado em publicar um artigo na rodrigo.devmedia@gmail.com de diversos artigos cientficos sobre Engenharia
de Software publicados em revistas e conferncias
renomadas, dentro e fora do pas.

Assinatura

Mais contedo SQL por menos!


A revista SQL Magazine parte integrante da assinatura SQL PLUS.
Para mais informaes sobre o pacote SQL PLUS, acesse:
http://www.devmedia.com.br/sqlmagazine/pagina.asp

sql81.indb 4 29/10/2010 13:55:32


sql81.indb 5 29/10/2010 13:55:35
Seo Projeto de Software/Modelagem: Nesta seo voc encontra artigos sobre projeto, anlise ou mode

Modelagem de Dados Inc re


Da modelagem de domnio para a modela ge

Resumo DevMan
mais que ntido nos dias de hoje
que os sistemas computacionais
que esto sendo desenvolvidos so De que se trata o artigo:
cada vez mais complexos e cada vez mais Este artigo descreve atravs de um estudo de caso de uma escola de karat uma estratgia para mode-
envolvem um volume extenso de dados lagem incremental de dados em um sistema de informao, apresentando a diviso do escopo do sistema
a serem persistidos. Como estratgias de em iteraes, e ento evoluindo o esquema de dados a cada nova iterao desenvolvida.
desenvolvimento de software que tm
sido aplicadas cada vez mais no mercado, Para que serve:
esto as metodologias incrementais, onde Para apoiar analistas de sistema e DBAs que precisam desenvolver sistemas de informao baseados
o princpio central dividir o escopo do em banco de dados usando uma metodologia incremental para desenvolvimento de software, onde
sistema a ser desenvolvido em partes me- necessrio dividir no apenas o que implementar, mas tambm a diviso da modelagem dos dados nas
nores, como mdulos, e ento trabalhar o diferentes iteraes do sistema.
desenvolvimento em diferentes iteraes,
cada uma visando o desenvolvimento de Em que situao o tema til:
uma parte (ou mdulo) identificada para A utilizao de uma estratgia incremental algo mais que constante no dia-a-dia do desenvolvimento
o sistema. de sistemas computacionais, e normalmente as abordagens que lidam com estes aspectos focam exclusiva-
As abordagens descritas em livro e artigos mente nas atividades de programao e gerenciamento de projetos. Neste artigo, o foco foi na modelagem
normalmente focam na diviso do sistema de dados, mostrando como esta impactada por esta estratgia, e ainda apresentando a aplicao de
olhando para seu cdigo ou olhando para uma estratgia de modelagem incremental de dados para um estudo de caso.
questes relacionadas ao gerenciamento
do projeto. Porm, precisamos atentar
que essas divises impactam tambm na requisitos iniciais e a partir de ento a desenvolvimento iterativo ou em cascata
modelagem dos dados que fazem parte do realizada a modelagem dos dados de forma ambos so estratgias de retrabalho. A
escopo do sistema a ser desenvolvido, ou incremental, iterao a iterao, prevendo alternativa ao desenvolvimento incremen-
seja, precisamos partir de um modelo de ainda atividades de ajustes no modelo de tal desenvolver todo o sistema com uma
dados inicial e a cada nova iterao, evolu- dados aps mudanas nos requisitos do integrao nica.
lo com as novas informaes que precisam sistema. A ideia se assemelha introduo O desenvolvimento iterativo uma
ser tratadas considerando o domnio da de agilidade no processo de modelagem dos estratgia de planejamento de retrabalho
iterao a ser desenvolvida. Alm disso, o dados, seguindo as diretrizes de mtodos em que o tempo de reviso e melhorias de
desenvolvimento incremental de software geis de desenvolvimento de software. partes do sistema pr-definido. Isto no
possui como caracterstica interessante a Este artigo foi baseado no artigo Agile/ pressupe desenvolvimento incremental,
possibilidade de entregar o sistema aos Evolutionary Data Modeling: From Domain mas funciona muito bem com ele. Uma
seus usurios em partes, de forma a obter Modeling to Physical Modeling escrito por diferena tpica que a sada de um in-
um feedback constante sobre o sistema em Scott Ambler em uma conferncia inter- cremento no necessariamente assunto
desenvolvimento, o que pode resultar em nacional de Modelagem gil de Banco de um refinamento futuro, e seu teste ou
mudanas constantes nos requisitos identi- de Dados, adaptado pelo autor em alguns retorno do usurio no utilizado como
ficados ao longo do projeto. Tais mudanas tpicos. entrada para planos de reviso ou especi-
tambm podem afetar o modelo de dados ficaes para incrementos sucessivos. Ao
da aplicao, e isso precisa ser tratado o Desenvolvimento Iterativo e Incremental contrrio, a sada de uma iterao exa-
quanto antes para evitar a propagao de Desenvolvimento Incremental uma es- minada para modificao, e especialmente
defeitos ao longo das iteraes. tratgia de planejamento estagiado em que para reviso dos objetivos das iteraes
Neste contexto, este artigo apresenta um vrias partes do sistema so desenvolvidas sucessivas.
estudo de caso de um sistema para uma em paralelo, e integradas quando com- A ideia bsica por trs da abordagem
escola de karat, onde so definidos seus pletas. No implica, requer ou pressupe iterativa desenvolver um sistema desof-

6 SQL Magazine Edio 81

sql81.indb 6 29/10/2010 13:55:36


ise ou modelagem de dados

nc remental
ela gem fsica
Arilo Claudio Dias Neto

twareincremental, permitindo aodesen- Iterao Estrias do Usurio


volvedor tirar vantagem daquilo que foi Manter informaes de contato de
aprendido durante a fase inicial de de- alunos
senvolvimento de uma verso do sistema. 1 Matricular alunos
O aprendizado ocorre simultaneamente Excluir alunos
tanto para o desenvolvedor, quanto para Registrar pagamento
Promover graduao de faixa do aluno
o usurio do sistema.
Convidar aluno para graduao
Os passos fundamentais do processo
2 Enviar email de carteira de scio para
esto em iniciar o desenvolvimento com aluno
um subconjunto simples derequisitos de Imprimir carteira de scio para aluno
software e iterativamente alcanar evolu- Agendar graduao
es subsequentes dasversesat o sistema 3 Imprimir certificado
todo estar implementado. A cada iterao, Inativar mensalidade
as modificaes de projeto so feitas e no- Figura 1. Representao de uma abordagem incremental Manter informaes de produtos
4
vasfuncionalidadesso adicionadas. e iterativa Vender produtos
Imprimir catlogo de produtos
A Figura 1 apresenta uma represen-
5 Comprar produto
tao visual do funcionamento de uma envolvendo-os com o esforo de modela-
Vender produto para aluno
abordagem incremental e iterativa, onde gem do sistema a ser desenvolvido. Assim, Organizar torneios
a cada iterao so realizadas atividades exploramos os requisitos identificados, Matricular participantes no torneio
de desenvolvimento, visando aumentar as capturamos as ideias relacionadas Enviar anncio sobre torneio para
6
funcionalidades providas no sistema. interface do sistema, as regras de neg- participantes anteriores
cio que norteiam o desenvolvimento de Imprimir cartas de anncio de torneio
O Estudo de Caso: Sistema de Gerencia- cada estria do usurio e a estrutura das para participantes anteriores
mento de Grupo de Karat informaes que fazem parte do cenrio Tabela 1. Lista de estrias do usurio priorizadas por iterao
O objetivo deste projeto fictcio cons- a ser desenvolvido (ex: as entidades con-
truir um Sistema de Gerenciamento de um ceituais do sistema e o relacionamento
Grupo de Karat (SGGK) de forma sim- entre elas). A partir disso so iniciadas as para implement-los. Baseando-se nas
plificada.O projeto ser iniciado fazendo atividades tcnicas, comomodelagem do prioridades e estimativas, foram associa-
uma modelagem onde sero identificados sistema, codificao e planejamento dos dos os requisitos para serem entregues em
os requisitos iniciais para o SGGK, na testes funcionais. Sistemas de informao, 6 diferentes iteraes, idealmente curtas
forma de requisitos funcionais/estrias que o caso do nosso estudo de caso, so (ex: 2 semanas).
do usurio (para quem est familiarizado construdos usando alguma linguagem
com metodologias geis), assim como uma de programao (ex: Java ou C++) que re-
verso inicial da arquitetura do sistema. sultaro na interface do sistema, e algum
Uma estria do usurio um lembrete Sistema Gerenciador de Banco de Dados
que descreve uma conversa realizada com por trs para persistncia dos dados (ex:
os profissionais envolvidos no projeto MySql, Oracle).
(stakeholder), portanto, no existem muitos
detalhes providos na tabela que lista as Os Requisitos Iniciais
estrias identificadas. A Tabela 1 lista as estrias do usurio
Em metodologias geis, quando ini- que descrevem os requisitos iniciais de
ciamos o trabalho com alguma estria utilizao para o SGGK. Nossos stakehol-
do usurio, trabalhamos com o usurio ders j priorizaram os requisitos, e os
prximo dos desenvolvedores, idealmente desenvolvedores j estimaram o esforo

Edio 81 SQL Magazine 7

sql81.indb 7 29/10/2010 13:55:37


Modelagem de Dados Incremental

Iterao 1
Existem quatro estrias do usurio a
serem desenvolvidas nesta iterao: Man-
ter informaes de contato de alunos,
Matricular alunos, Remover alunos e
Registrar pagamento. Portanto, precisa-
mos trabalhar no desenvolvimento destes
quatro requisitos, nada alm disso nesse
momento. A primeira iterao do modelo
fsico de dados (MFD) do SGGK apoia as
funcionalidades crticas requeridas para
o desenvolvimento do sistema o geren-
ciamento dos dados bsicos de alunos e a
coleta de dinheiro deles a partir do paga-
Figura 2. Modelagem Inicial do Domnio
mento das mensalidades.
Quando olhamos o modelo de dados,
Figura 3, vemos que no estamos rastre-
ando o estado (por exemplo, Amazonas,
Rio de Janeiro ou So Paulo) em que os
alunos vivem. A razo desta deciso que
estamos projetando um sistema para uma
simples escola de karat, podemos assumir
seguramente que todos vivem no mesmo
estado, podendo variar apenas a cidade em
que cada um vive. Esta uma deciso de
projeto que poderia muito bem ser resolvi-
da de outra forma, porm esta foi a soluo
adotada em nosso estudo de caso.
Todas as mudanas de banco de dados
so feitas em paralelo s mudanas de c-
digo requeridas. Para isso, precisamos de
Figura 3. O Modelo Fsico de Dados da iterao 1 uma abordagem colaborativa para apoiar
neste processo de manuteno como, por
A Modelagem Inicial de Domnio um Diagrama de Classes publicado na exemplo, programao em pares.
Parte dos nossos esforos iniciais edio 63 da SQL magazine). importante notarmos que estamos
de modelagem, particularmente para A nica documentao de apoio que seguindo uma abordagem incremental de
uma aplicao de negcios na categoria iremos prover nesta fase do projeto em modelagem de dados, e que este ser o t-
de sistemas de informao, provavel- conjunto com o modelo ser a definio pico principal do artigo, mas importante
mente incluir o desenvolvimento de das entidades, o que pode ser descrito em reconhecer a importncia das estratgias
um modelo conceitual do domnio da um glossrio. Ainda no recomendamos de teste associadas ao desenvolvimento
aplicao. Este modelo deve ser bem identificar os atributos que formam as en- incremental. Teste de regresso (ver Nota
enxuto, ou seja, apresentar apenas tidades neste momento, estas informaes DevMan 1) um fator crtico de sucesso
o contedo necessrio, capturando as seriam mais bem capturadas ao se definir os para desenvolvimento evolucionrio/
principais entidades de negcio e o esquemas das classes ou do banco de dados. incremental; sem um ambiente de teste
relacionamento entre elas. A Figura 2 Alm disso, h quem goste de desenhar um de regresso completo configurado, no
apresenta este modelo usando a lingua- modelo como este em um quadro branco podemos evoluir nosso trabalho com segu-
gem de modelagem UML. para comear as atividades de projeto, e este rana, e isso incluir a evoluo do esquema
O modelo inicial de domnio ser usado desenho pode ser mantido no quadro branco de nosso banco de dados.
para ajudar os projetistas a direcionar durante todo o projeto. Nesse sentido, mo-
o modelo de dados fsico assim como o delos de domnio enxutos so bastante Iterao 2
projeto das classes, potencialmente cap- valiosos para a equipe do projeto, uma vez Existem quarto estrias do usurio a
turado via diagrama de classes da UML que bastante simples visualiz-lo e ento serem implementadas nesta iterao: Pro-
(Mais detalhes, no artigo Convertendo planejar as atividades de desenvolvimento. mover graduao de faixa do aluno, Con-

8 SQL Magazine Edio 81

sql81.indb 8 29/10/2010 13:55:38


Nota do DevMan 1
Teste de Regresso
Oteste de regresso uma tcnica doteste de softwareque
consiste na aplicao de testes verso mais recente do
software para garantir que no surgiram novos defeitos em
componentes j testados.
Se ao juntar o novo componente ou as suas alteraes com
oscomponentesrestantes do sistema surgirem novos defeitos
em componentes inalterados, ento considera-se que o sistema
regrediu.

vidar aluno para graduao, Enviar email


de carteira de scio para aluno, Imprimir
carteira de scio para aluno.
Estas funcionalidades no possuem sig-
nificante sobreposio com o modelo de
dados existente, como podemos observar
na Figura 4, onde as mudanas no modelo
foram diretas. A tabela Faixa e a coluna Alu-
no.idFaixa foram adicionadas para apoiar a
habilidade de rastrear qual faixa um aluno
possui atualmente.Tambm foi adicionada Figura 4. O Modelo Fsico de Dados da Iterao 2
a coluna Pessoa.Email para que possamos
enviar um email sobre a carteira de scio cronograma do projeto, e podemos fazer Para apoiar esta funcionalidade, foi adi-
aos alunos e a coluna Aluno.DataGraduacao isso de uma forma colaborativa com a cionada uma tabela MembroInativo para
para rastrear a ltimo/prxima vez que um participao dos desenvolvedores na toma manter o rastro de quando os membros
aluno ir se graduar para uma nova faixa. de deciso. A implicao que em certas da escola foram inativados, permitindo
Poderamos ter adicionado a coluna Email situaes podemos no estar aptos a fazer ao sistema rastrear o nmero de semanas
na tabela Alunos em vez de em Pessoa, mas todas as coisas que queremos fazer correta- usadas a partir de uma certa mensalidade
j estamos trabalhando com a juno das mente naquele momento, mas ns podemos (existem planos de mensalidade de 3, 6
duas tabelas para obter informaes sobre simplificar muitas coisas (como introduzir a ou 12 meses mesmo entendendo que o
alunos, e email no um conceito aplicvel tabela Pessoa que claramente no necess- termo MENSALIDADE se refere a paga-
apenas para alunos isoladamente. ria, neste momento, para a aplicao). mentos mensais, usaremos este termo em
Com isso estaramos sobrecarregando Uma importante observao sobre o nosso sistema). Para gerenciar a graduao,
o sistema? Creio que no, pois o cdigo modelo: esta soluo possibilita apenas precisamos adicionar duas novas tabe-
da aplicao est usando os dados de rastrear a faixa atual obtida pelo aluno, las,TentativaFaixa que ir rastrear a faixa
email apenas no contexto dos alunos, no a sua histria completa (ex: no es- que um aluno est tentando obter em uma
o que est de acordo com os requisites tamos rastreando quando ele obteve sua determinada graduao e Graduacao que
definidos para o sistema.No entanto, s primeira faixa e nem qual foi). rastreia informaes bsicas sobre a gra-
porque no pretendemos sobrecarregar duao. Essas tabelas foram adicionadas
o software no significa que precisamos Iterao 3 diretamente no esquema de nosso banco
modelar nosso esquema de dados de Para esta iterao temos trs estrias do de dados, conforme a Figura 5.
qualquer jeito: podemos olhar um pouco usurio para serem implementadas: Agen-
para frente e organizar o esquema do dar graduao, Imprimir certificado e Ina- Mudanas de Requisitos
banco de dados de forma que este reflita tivar mensalidade. Em certos momentos Ao final da terceira iterao, nossos usu-
o domnio da aplicao, e no apenas os alunos iro interromper seu treinamento rios escolheram instalar o sistema e iniciar
requisitos especficos da aplicao que por um perodo, por exemplo no perodo os trabalhos com ele, pois funcionalidades
foram definidos at o momento e que de ferias estudantis, e o sistema ir colocar suficientes foram desenvolvidas a ponto de
precisam ser atendidos. estes alunos como inativos de forma que possibilitar aos seus usurios usufruir do
Alm disso, estamos fazendo isso de uma no sejam cobrados no perodo em que no sistema em seu dia-a-dia. Neste momento,
forma que no traga qualquer impacto no estejam treinando. eles decidiram parar o desenvolvimento

Edio 81 SQL Magazine 9

sql81.indb 9 29/10/2010 13:55:38


Modelagem de Dados Incremental

Iterao Estrias do Usurio


Manter informaes de contato de alunos
Matricular alunos
1
Excluir alunos
Registrar pagamento
Promover graduao de faixa do aluno
Convidar aluno para graduao
2
Enviar email de carteira de scio para aluno
Imprimir carteira de scio para aluno
Agendar graduao
3 Imprimir certificado
Inativar mensalidade
Matricular alunos criana
4 Oferecer plano famlia de scio
Apoiar o sistema de faixa infantil
Matricular alunos em Tai Chi
Apoiar o sistema de faixas em Tai Chi
5 Matricular alunos em kick boxing
Apoiar o sistema de faixas de kick boxing
Apoiar a ordem de faixas para cada estilo
Manter informaes de produtos
Figura 5. O Modelo Fsico de Dados da Iterao 3 6
Vender produtos
por um instante para verificar quo bom alunos estudando vrios desses estilos ao Imprimir catlogo de produtos
7 Comprar produto
o sistema estaria funcionando. Essa situ- mesmo tempo.
Vender produto para aluno
ao muito interessante para eles, pois O resultado final foi que ns, desenvol-
Organizar eventos especiais internos
possibilita avaliar incrementalmente a sua vedores, precisamos retrabalhar nossos (ex: aulas especiais, torneios internos)
satisfao em relao ao sistema que est requisitos para refletir as novas deman- 8 Matricular alunos no evento especial
sendo desenvolvido, minimizando o risco das e a nova prioridade entre eles. Esses Imprimir certificado de participao em
financeiro atravs da reduo do perodo novos requisitos foram capturados como eventos especiais para alunos
entre as entregas parciais do produto. Isso estrias de usurio, listados na Tabela 2. Tabela 2. Estrias do Usurio atualizadas
tambm bom para a equipe de desenvol- Os desenvolvedores estimaram o esforo
vimento, pois prov uma oportunidade para implementar cada requisito e os
para se obter um feedback concreto base- usurios os priorizaram, possibilitando O Modelo de Domnio Atualizado
ado na utilizao real do sistema no seu associar as estrias de usurio s prximas O primeiro passo aps identificar mu-
ambiente de produo. iteraes. danas nos requisitos atualizar o mo-
Aps alguns meses, eles perceberam Os usurios so livres para mudar a sua delo de domnio para refletir tais mu-
que precisavam repensar sobre o que eles perspective sobre o sistema a qualquer danas. Como podemos observar na
queriam que o sistema fizesse (isso algo hora, adicionando novos requisitos ou Figura 6,as mudanas, comparadas com
mais que normal). Nossos usurios origi- retrabalhando aqueles existentes, e os de- o modelo inicial de domnio da Figura 2,
nalmente pensaram que eles gostariam de senvolvedores iro continuar a trabalhar no so muitas. Neste caso, podemos
realizar torneios para arrecadar dinheiro nos requisitos na ordem de prioridade evoluir o modelo e atualizar o diagrama
extra. Aps conversar com algumas definida. que tnhamos colocado inicialmente em
pessoas, eles descobriram que torneios Ter mudanas de requisitos como a apre- nosso quadro branco. A entidade Torneio
envolvem muito trabalho e com pouco sentada em nosso estudo de caso ajuda a foi renomeada para EventoEspecial e agora
retorno financeiro. No entanto, ainda seria destacar as vantagens de uma abordagem est relacionada entidade Aluno em vez
importante realizar eventos especiais, tais de desenvolvimento incremental. Atravs de Pessoa, pois apenas alunos teriam acesso
como pequenos torneios internos e sesses da liberao de partes funcionais do siste- aos eventos. A entidade Estilo foi adicio-
de treinamento especiais onde tcnicas ma de tempos em tempos, possibilitamos nada para apoiar a habilidade de oferecer
avanadas seriam demonstradas. Eles aos usurios melhor identificar o que eles mais que aulas de karat, e a entidade
tambm perceberam que eles esquece- de fato precisam em cada momento. Se Famlia foi adicionada para apoiar o plano
ram de nos informar sobre os planos de tivssemos tentando implementar todos de mensalidade familiar.
mensalidade para famlia e para crianas os requisitos de uma nica vez estaramos
que eles oferecem. Alm disso, eles pos- entregando funcionalidades que os usu- Iterao 4
suem alunos estudando outros estilos de rios finais no necessitariam atualmente Para esta iterao, precisamos implemen-
luta, como Tai Chi e kickboxing, e alguns na prtica. tar trs estrias do usurio: Matricular

10 SQL Magazine Edio 81

sql81.indb 10 29/10/2010 13:55:39


alunos criana, Oferecer plano famlia
de scio de matricula e Apoiar o sistema
de faixa infantil. Adicionar apoio para
a participao de crianas foi um bom
trabalho.Crianas possuem um conjunto
diferente de cordes que um adulto possui.
Crianas possuem faixas listradas (banco
com listras, amarelo com listras, ) em
adio s cores normais da graduao de
adultos, e alm disso possuem duas cores
de faixas no previstas na graduao nor-
mal: vermelho e violeta.Crianas possuem
mais faixas para mant-las motivadas. A
maioria dos adultos entendem que pode
ser necessrio de seis a 12 meses para s
ento atingir sua prxima faixa, mas tentar
explicar isso para uma criana de quatro
anos bem difcil. Figura 6. Modelo de Domnio Atualizado
Alm das mudanas no cdigo, foi
adicionada uma coluna AlunoCrianca na
tabela Faixa assim como novas linhas para
as faixas de criana.Tambm precisamos
de uma coluna AlunoCrianca para a tabela
Aluno (Figura 7).
As pessoas progridem de uma aula de
crianas para adulto quando elas atingem
um nvel apropriado de maturidade e habi-
lidade, no apenas por causa de sua idade,
por isso uma coluna data de nascimento
no seria apropriada.Para apoiar o plano
familiar, foi adicionada a tabela Familia
mu- para manter o rastro de quem faz parte
mo- de uma dada famlia.Foi adicionada uma
mu- coluna correspondente idFamilia na tabela
na de Aluno para atuar como uma chave es-
om trangeira para a nova tabela.A maioria dos
a 2, alunos no esto em um plano familiar,
mos ento esta coluna normalmente ir conter
ma o valor NULL.
em
eio Iterao 5
ora Para esta iterao, precisamos implemen-
vez tar cinco estrias do usurio: Matricular
sso alunos em Tai Chi, apoiar o sistema de
io- faixas do Tai Chi, Matricular alunos em
cer kick boxing, Apoiar o sistema de faixas
de em kick boxing e Apoiar a ordem de faixas
no em cada estilo.
Esta iterao foca em apoiar estilos de
treinamento diferentes do Karat, cada
um deles com sua prpria metodologia
en- de distribuio de faixas. Por exemplo,
lar Tai Chi apenas possui faixas branca e

Edio 81 SQL Magazine 11

sql81.indb 11 29/10/2010 13:55:40


Modelagem de Dados Incremental

preta e kickboxing no possui qualquer indicar a qual estilo uma determinada faixa Para inicializar a tabela Aluno_Faixa,
faixa. est associada assim, existiria um registro precisamos migrar os dados a partir das
Para apoiar esta iterao, uma tabela Estilo de faixa branca para Tai Chi e outra para colunas originais idAlunoeidFaixado es-
foi adicionada para implementar os requi- Karat. quema de dados da iterao quatro.Cada
sitos atuais e ela pode simplificar o apoio a Para registrar o fato de que algum pode vez que a gente evoluir um esquema de
novos estilos no futuro, mesmo no sabendo treinar em vrios estilos, foi introduzida dados existente precisaremos migrar os
se a escola ir futuramente trabalhar com uma tabela associativa Aluno_Faixa que dados existentes. Isso verdade para
outros estilos de luta (Figura 8). A coluna implementa uma associao de muitos-pa- os dados de teste que usamos em nosso
idEstilofoi adicionada na tabela Faixa para ra-muitos entre as tabelas Aluno e Faixa. ambiente de desenvolvimento e tambm
para os dados que esto atualmente no
ambiente de produo (lembrando que
j temos parte de nosso sistema instala-
do e funcionando na mquina de nossos
usurios).
A tarefa de migrao de dados o ponto
negativa ao se trabalhar com o desenvol-
vimento de banco de dados evolutivos
(que evoluem a cada iterao). Migrar
dados pode ser difcil, e muito fcil dizer
que este aumento de complexidade ocorre
porque queremos desenvolver o esquema
do banco de dados de forma antecipada
em nosso projeto, antes de conhecer de
fato todos os requisitos. Infelizmente
esta posio no realstica. Mesmo com
a modelagem tradicional de dados (no
incremental) ainda precisaremos fazer
eventualmente migrao de dados, pois
mudanas sempre vo ocorrer. A melhor
opo aceitar o fato de que mudanas
ocorrem e quando necessrio fazer uma
Figura 7. O Modelo Fsico de Dados da Iterao 4 boa migrao.
A mudana final no esquema foi a adio
da coluna SequenciaEstilo na tabela Faixa.
Precisamos apoiar o fato de que pessoas
obtm faixas em uma certa ordem: alu-
nos de karat adultos movem-se da faixa
amarela para laranja, enquanto que alunos
de Tai Chi movem-se da faixa branca para
preta.Cada estilo de luta possui sua pr-
pria ordem de graduao de faixas.

Iterao 6
Para esta iterao iremos implementar
duas estrias do usurio: Manter informa-
es de produto e Vender produto.Essas
adies so bastante diretas no ponto de
vista de modelagem de dados.
Simplesmente, foram adicionadas as
tabelas Compra, ItemCompra, e Item para
prover a estas funcionalidades bsicas
(Figura 9). Note como essas tabelas so
Figura 8. O Modelo Fsico de Dados da Iterao 5 simples por enquanto. Por exemplo, no

12 SQL Magazine Edio 81

sql81.indb 12 29/10/2010 13:55:41


estamos mantendo nveis de estoque nem
informaes sobre fornecedores. Mesmo
assim, iremos provavelmente precisar de
um conjunto de informaes para atender
requisitos futuros, mas como no o caso
atual, nos limitamos a atender o cenrio
do momento.
A modelagem para as demais iteraes (7
e 8) no ser apresentada. Deixamos para
que os leitores continuem, treinando a
evoluo de nosso esquema de dados para
atender s novas demandas do sistema.

Indo diretamente para a Modelagem


Fsica dos Dados
O processo de modelagem de banco de
dados normalmente envolve trs passos at
chegarmos ao seu modelo fsico. So eles:
modelagem conceitual (onde so identifica-
dos os conceitos do domnio da aplicao), Figura 9. O Modelo Fsico de Dados da Iterao 6
modelagem lgica (onde so identificadas
as regras de derivao das estruturas de da- No precisamos investir esforo signifi- Com isso, a cada iterao teremos um
dos, so tratadas normalizao dos dados, cante no desenvolvimento do modelo de modelo evoludo que atende s necessi-
deriva-se agregaes, especializaes e re- domnio, pois focamos apenas na estrutu- dades da verso atual. No entanto, pode-
lacionamentos entre as entidades) e modela- ra fundamental e no nos seus detalhes. mos usar ao longo de cada iterao nosso
gem fsica (identificao de caractersticas e Estabelecemos uma terminologia de conhecimento sobre o domnio do sistema
recursos necessrios para armazenamento negcio comum logo no incio do projeto, para planejar a modelagem de verses
fsico dos dados). ajudando-nos a entender o domnio da futuras, visando reduzir o retrabalho nas
Neste artigo, foi apresentada uma estrat- aplicao. atividades de modelagem.
gia para se passar diretamente do modelo Esta uma forma de se trabalhar com a
conceitual para o modelo fsico dos dados. No entanto, tm-se tambm alguns as- modelagem incremental dos dados, imagi-
E a dvida que surge seria: Faria sentido pectos negativos: nando que podem existir diversas outras.
pular do modelo inicial de domnio para Ns sobrecarregamos o esquema de Espero ter contribudo.
a modelagem fsica dos dados? Oficial- dados na primeira iterao introduzindo a
mente a resposta SIM. Podemos adaptar tabela Pessoa antes de precisarmos dela de
o processo de modelagem de acordo com o fato.Isso resulta em uma pequena reduo
cenrio de cada empresa e de cada projeto, de desempenho devido necessidade de
sempre de uma forma que continue a fazer fazer uma juno entre as tabelas Pessoa e Arilo Claudio Dias Neto
sentido para o cenrio em questo. Aluno para persistir e recuperar informa- ariloclaudio@gmail.com
Quando comparamos os resultados das es sobre alunos. Professor do Departamento de
Cincia da Computao da UFAM.
duas abordagens (seguir os trs passos ou Precisamos investir algum tempo para
Doutor em Engenharia de Sistemas e
pular do modelo conceitual para o modelo criar um modelo inicial de domnio. Computao formado pela Universida-
fsico), acredito que podemos listar uma de Federal do Rio de Janeiro (COPPE). Possui 7 anos de
srie de vantagens em iniciar com uma Concluso experincia em anlise e desenvolvimento de software.
modelagem inicial do domnio da aplica- Este artigo apresentou um estudo de caso ainda editor tcnico da Revista SQL Magazine.
o e ento partir para o modelo fsico: de desenvolvimento incremental de um
Ambos, esquema de objeto e de dados sistema e o impacto desta abordagem na D seu feedback sobre esta edio! eu
Feedback
s

podem se basear em um modelo comum modelagem dos dados. Com a diviso do


D

A SQL Magazine tem que ser feita ao seu gosto.


sobre e

e nico, reduzindo a chance de maiores sistema em iteraes, percebe-se que po-


Para isso, precisamos saber o que voc, leitor,
s

ta

divergncias. demos tambm trabalhar na modelagem


edio

acha da revista!
Podemos desenvolver um esquema fsico dos dados incrementalmente utilizando
que reflita requisitos futuros sem signifi- apenas os conceitos envolvidos em cada D seu voto sobre este artigo, atravs do link:
cantes desperdcios de tempo e esforo. iterao. www.devmedia.com.br/sqlmagazine/feedback

Edio 81 SQL Magazine 13

sql81.indb 13 29/10/2010 13:55:42


Seo Projeto de Software/Modelagem: Nesta seo voc encontra artigos sobre projeto, anlise ou mode

Refactoring de Banco de D a
Uma forma segura de evoluir o esquema do se

A Resumo DevMan
s empresas de desenvolvimento
de software tm evoludo cons-
tantemente. Muitas delas devem De que se trata o artigo:
isto s novas e modernas metodologias Neste artigo veremos como evoluir um esquema de banco de dados de forma segura, iterativa e incre-
geis que defendem a construo do mental. Em seguida, mostraremos alguns exemplos de casos comuns aplicando as tcnicas de refactoring
software de maneira incremental e itera- de banco de dados.
tiva. Entretanto, disponibilizar sistemas
de informao com qualidade em ciclos Para que serve:
cada vez menores, ainda uma misso As tcnicas de refactoring de banco de dados permitem evoluir de forma segura o design de um esque-
desafiadora para muitas delas. Isto porque, ma em pequenos passos. Alm disso, elas ainda podem ser utilizadas para apoiar o desenvolvimento de
preciso garantir que a cada entrega, o software evolutivo.
sistema no perder as suas funcionalida-
des e continuar sem erros. Alm do mais, Em que situao o tema til:
estas metodologias no prevem a mesma Alm de serem muito teis na migrao de bancos de dados legados, as tcnicas apresentadas neste
iteratividade para o banco de dados. Para artigo permitem alteraes em esquemas que j estejam em produo. Sendo esta uma das grandes
finalizar, algumas destas empresas ainda dificuldades das empresas de desenvolvimento de software.
utilizam bancos de dados legados e no
migram para sistemas mais novos por desenvolvimento ter iniciado. O problema programado a cada iterao do projeto. O
diversos motivos, dentre eles: que alteraes no modelo do banco de que significa que muitas vezes ele ser al-
Complexidade; dados, nos finais dos projetos, passaram a terado com o software j em produo.
Alto custo; ser cada vez mais frequentes, dificultando
Mudana de cultura da empresa; a entrega (veja a Figura 1). O que Refactoring?
Falta de conhecimento dos desenvolve- Pensando nisto, os consultores de in- Martin Fowler define refactoring da se-
dores; formtica: Pramod J. Sadalage e Scott W. guinte forma: um processo de alterao
Mudanas de paradigmas dos DBAs. Ambler criaram algumas tcnicas para em um sistema de software, de modo que,
refatorao de banco de dados. Estas tc- o comportamento externo do cdigo no
A boa notcia que usando as tcnicas nicas tm como base os mesmos objetivos mude, mas que sua estrutura interna seja
de refactoring de banco de dados apresen- das metodologias geis: minimizar o risco melhorada..
tadas neste artigo, possvel fazer estas pelo desenvolvimento de software em O uso desta tcnica aprimora a concepo
migraes e melhorias de forma segura e perodos curtos, chamados de iterao, os (design) de umsoftwaree evita a deteriora-
incremental. quais duram de uma a quatro semanas. o to comum durante o ciclo de vida de
Cada iterao como um projeto de sof- um cdigo. Esta deteriorao geralmente
O antes e o depois tware em miniatura, incluindo todas as causada por mudanas com objetivos de
At o final da dcada de 90, acreditava- tarefas necessrias para implant-lo: pla- curto prazo ou por alteraes realizadas
se que a Engenharia de Software era nejamento,anlise de requisitos, projeto, sem a clara compreenso da concepo
similar a Engenharia Civil. No entanto, codificao, testee documentao. do sistema. Outra consequncia a me-
as necessidades do mercado mostraram neste cenrio que surge a figura do lhora no entendimento do cdigo, o que
que isto no era uma verdade absoluta. DBA gil. Diferente do DBA comum, facilita a manuteno e evita a incluso
No modelo de desenvolvimento de sof- este participa de todas as iteraes do dedefeitos.
tware mais conhecido e praticado desta projeto, planejando o esquema do banco fundamental que o sistema de soft
poca modelo cascata (Waterfall) o de dados e apoiando a equipe de desen- ware possua testes automatizados para
DBA passava vrios meses planejando volvimento. realizar refatoraes. Dessa forma ser
e modelando o banco de dados, e este, Como se pode observar na Figura 2, o possvel garantir que o comportamento
ficava pronto antes mesmo da fase de esquema do banco de dados planejado e externo no foi alterado.

14 SQL Magazine Edio 81

sql81.indb 14 29/10/2010 13:55:43


ise ou modelagem de dados

D ados
do seu banco de dados
Ismael Zacarias Soares

Figura 1. Modelo Cascata Figura 2. Modelo Espiral

O que Refactoring de Banco de Dados? lado, algumas empresas tm o privilgio 2. Apoiar o desenvolvimento de software:
Refactoring de Banco de Dados no de possuir uma arquitetura mais simples, usando estas tcnicas pode-se apoiar no
mgica! Consiste em simples mudanas onde apenas uma aplicao acessa o banco processo de desenvolvimento de softwares
no esquema do banco de dados (tabelas, de dados, permitindo assim, a refatorao evolutivos, incluindo Rational Unified
views, trigger, procedures, etc.) que melho- de ambos em paralelo. Estas aplicaes Process (RUP), Extreme Programming
ram o design sem alterar a semntica e o so conhecidas como standalone ou (XP), Agile Unified Process (AUP), Scrum
significado dos dados que j esto persis- sistemas stovepipe. Nos exemplos deste e Mtodos Dinmicos de Desenvolvimento
tidos. O processo de refactoring de banco artigo, ser considerada apenas a arquite- de Sistemas.
de dados define a forma de evoluir de tura mais complexa, onde existem vrios
maneira segura um esquema em pequenos sistemas externos sobre os quais o DBA
passos (incremental e evolutivamente). Ela tem pouco ou nenhum controle.
tambm fornece uma estratgia coerente
para organizaes que querem migrar Por que utilizar Refactoring de Banco
seus bancos de dados legados para outros de Dados?
mais modernos. Pramod e Ambler apresentam pelo
Conceitualmente, refactoring de banco menos duas razes fundamentais para
de dados mais difcil que refactoring se utilizar refactoring de banco de dados:
de cdigo. Isto porque, refactoring de 1. Reparar bancos de dados legados: per-
cdigo precisa apenas manter a semntica mite evoluir de forma segura o design do
comportamental, enquanto refactoring de esquema em pequenos passos, tornando-
banco de dados, alm de ter esta obriga- se uma tcnica importante para a melhoria
o, ainda precisa assegurar a semntica do patrimnio legado dentro das organi-
informacional. zaes. Esta , sem duvidas, muito menos
A complexidade de um projeto de refac- arriscada do que a abordagem conhecida
toring de banco de dados pode ser ainda como big bang, onde as melhorias so
maior em ambientes onde a arquitetura aplicadas de uma s vez em produo.
de acesso aos dados altamente acoplada, Alm disso, muito melhor do que vamos
como o exemplo da Figura 3. Por outro migrar e ver no que d;

Edio 81 SQL Magazine 15

sql81.indb 15 29/10/2010 13:55:49


Refactoring de Banco de Dados

nova coluna, a tabela ficar banco de dados. Este mal-entendido poder


ainda mais redundante; lev-los a acreditar que o projeto precisa ser
Dados redundantes: os alterado quando ele realmente no precisa.
dados redundantes um O DBA deve ter um bom conhecimento do
problema grave nos ban- esquema do banco de dados, e em casos
cos de dados operacionais, de haver sistemas externos acessando-o,
pois quando os dados so ele deve saber quem contatar para discutir
armazenados em vrios questes tcnicas e tomar as medidas cab-
locais, a possibilidade de veis. Alm disso, o DBA, por ter participado
inconsistncia muito gran- de diversos projetos relacionados ao esque-
de. comum, por exemplo, ma do banco de dados, conhece o panorama
ter informaes de clientes global da empresa, possuindo uma viso
armazenadas em locais importante que pode no estar aparente
diferentes, e no momento do ponto de vista dos desenvolvedores;
Figura 3. Modelo complexo de arquitetura de acesso aos dados em que estes dados neces- preciso ter em mente que nenhuma
sitarem de manuteno ser difcil saber estrutura deve ser to rgida a ponto de
O que deve ser refatorado? qual deles o correto; ser inaltervel, isto porque, pequenas
Fowler (1997) introduziu o conceito de Tabelas com muitas colunas: quando melhorias sempre iro acontecer;
code smell (mau cheiro), uma categoria uma tabela contm muitas colunas, h Divida o seu projeto de refactoring em
comum de problemas no cdigo que indica um forte indicativo de que ela no est pequenas etapas para facilitar o controle
a necessidade de refator-lo. No cdigo coesa ou est sobrecarregada. Por exemplo, e a compreenso de todos os profissionais
fonte, so exemplos de mau cheiro: decla- imagine uma tabela de clientes que pos- envolvidos. Entretanto, isto exigir um con-
raes de switch, mtodos muito grandes, sua vrios tipos de endereo, e que cada trole rigoroso sobre o versionamento das al-
cdigo duplicado, classes com muitas endereo armazenado em uma coluna teraes. Por exemplo: imagine que em uma
responsabilidades, etc. Da mesma forma, diferente. Percebe-se claramente que este etapa qualquer, voc altere o nome da coluna
em bancos de dados tambm existem modelo possui falhas; de uma tabela, e algumas semanas depois,
code smell que indicam a necessidade Tabelas com muitas linhas: tabelas mui- seja necessrio mover a mesma coluna para
potencial de refatorao, dentre os quais to grandes so fortes candidatas a causar outra tabela. Se estas alteraes no forem
se podem destacar: problemas de desempenho. O exemplo aplicadas no momento adequado e no
T abela genrica: quando uma tabela est mais comum a tabela de movimento de estiverem versionadas, a ltima refatorao
sendo usado para armazenar vrios tipos estoque, onde so armazenadas todas as poder ser executada antes da primeira;
de entidades, provvel que exista uma movimentaes dos produtos. Neste caso, E vite duplicaes de cdigo SQL. Utilize
falha de projeto. Um exemplo a tabela o correto seria criar tabelas de histrico um framework de persistncia para encap-
de pessoa, onde so inseridas informaes para guardar os dados antigos, deixando sular o acesso ao banco de dados.
de clientes e de fornecedores. O problema a vista apenas os registros de determinado
que cliente e fornecedor tm as suas perodo; Perodo de transio
diferenas, e desta forma, a tabela conter Modelo intocvel: se voc tem medo de A grande vantagem das tcnicas de
colunas que s sero preenchidas quando alterar o modelo do seu banco de dados refactoring a possibilidade de melhorar
o tipo da pessoa for um ou outro; porque certamente ele precisa ser refeito. o esquema do banco de dados com ele
C oluna genrica: desta mesma forma, O medo da mudana uma boa indicao em produo. Isto s possvel graas ao
se uma coluna est sendo usada para v- de que voc tem srios riscos tcnicos em perodo de transio. Durante este perodo
rios fins, provvel que exista um cdigo suas mos, que s vo piorar ao longo do o esquema antigo e o esquema novo so
extra para identificar os dados contidos tempo. suportados em paralelo. Por exemplo, su-
nela. Um exemplo uma coluna da tabela ponha que uma determinada tabela tenha
de pessoa usada para armazenar data de Antes de comear uma coluna chamada limite que ser reno-
nascimento de um cliente ou a data de Antes de comear um projeto de refacto- meada para limite_credito, e este banco de
admisso de um empregado. A nica for- ring de banco de dados, leve em conside- dados seja acessado por sistemas externos.
ma saber se o dado contido nesta coluna rao as recomendaes a seguir: Neste caso, no se pode simplesmente
uma data de admisso ou uma data de V erifique se o refactoring mesmo ne- renomear a coluna. Precisa-se definir um
nascimento, verificando outra coluna que cessrio, pois talvez a estrutura do modelo prazo para que todas as alteraes sejam
identifique a pessoa. Agora suponha que atual esteja correta. comum os desenvol- realizadas nas dependncias internas e/
seja necessrio adicionar a data de nasci- vedores discordarem, ou simplesmente ou externas. Durante este perodo a coluna
mento do empregado, se for criado uma no compreender o projeto existente de um limite possuir um comentrio informan-

16 SQL Magazine Edio 81

sql81.indb 16 29/10/2010 13:55:49


do o dia em que ela ser removida. E para atualmente ele est funcionando. Crie Ao implementar a refactoring estrutural,
garantir a integridade das informaes, testes automatizados para facilitar a iden- leve em considerao alguns impedimen-
cria-se uma trigger para sincronizar os tificao e correo dos impactos causados tos comuns que certamente aparecero.
dados das duas colunas. pelas refatoraes; Dentre os quais se podem listar:
Um das grandes dificuldades das em- 4. Executar a refatorao: crie os scripts Triggers circulares: em quase todas as
presas que utilizam refactoring de banco necessrios para aplicar a refatorao e refactorings que alteram a estrutura do
de dados definir este perodo. Principal- adicione os comentrios nas colunas, ta- modelo, comum o uso de triggers para
mente em situaes como a apresentada belas e triggers que sero removidas aps controlar o sincronismo dos dados. Em
anteriormente, onde existem sistemas o perodo de transio; alguns casos, podem-se ter duas ou mais
externos que esto fora dos seus domnios. 5. Execute os testes: antes de anunciar as triggers, uma disparando a outra. E se no
Isto porque, difcil saber quanto tempo refatoraes feitas, preciso garantir que houver um controle rigoroso, elas entra-
cada empresa responsvel por estes sis- nada do que estava funcionando deixou ro num loop infinito comprometendo o
temas precisar para fazer as alteraes de funcionar. Para isto, execute os testes desempenho do banco de dados;
necessrias. Neste caso, Pramod e Ambler criados antes da refatorao e caso algum O bjetos do banco que acessam a tabela:
sugerem aplicar perodos padres para deles falhe, faa as correes necessrias; muito comum, durante este tipo de refa-
cada tipo de refactoring. Por exemplo, re- 6. Alterao das dependncias internas e ex- torao, deixar para trs alguns objetos
factorings que alteram a estrutura do banco ternas: se for possvel, faa as alteraes que fazem referncias s tabelas altera-
de dados podem levar de um a dois anos. J necessrias nos objetos internos (triggers, das. Exemplos: views, triggers, stored
refactorings na arquitetura podem precisar procedures, etc.) e externos (sistemas, procedures, etc.
de um pouco mais de tempo, de dois a trs outros bancos de dados, etc.) em paralelo. Portanto, assim que finalizar a refato-
anos. Mas claro que isto vai depender do Caso contrrio, prefira iniciar as alteraes rao do modelo faa uma consulta na
tamanho do esquema do banco de dados e pelos objetos internos, j que esto mais tabela de objetos do usurio e veja se a sua
da quantidade de sistemas externos que o prximos do seu domnio. refatorao danificou o esquema. Observe
acessam. A desvantagem nesta abordagem um exemplo de como fazer esta consulta
que, s vezes, as refactorings podem levar Categorias de refatorao de banco de no banco de dados Oracle na Listagem 1;
mais tempo do que realmente precisariam. dados N omes de chaves estrangeiras: geralmente
O ideal mesmo reunir todos os profissio- As tcnicas de refactoring de banco de as chaves estrangeiras so nomeadas,
nais interessados para definir os perodos dados esto divididas em categorias. Neste por conveno, com o prprio nome da
de forma consciente. artigo sero abordadas as cinco principais. coluna. Por exemplo, se voc renomear
So elas: a coluna nome de uma determinada
Qual a melhor estratgia de refatorao? 1. Estrutural; tabela para nome_completo, e caso ela
No existe uma resposta exata para esta 2. Qualidade dos dados; possua uma chave estrangeira chamada
pergunta. Uma srie de fatores pode in- 3. Integridade referencial; FK_NOME, voc dever renomear esta
fluenciar: arquitetura, modelo de dados, 4. Arquitetura; chave para FK_NOME_COMPLETO.
quantidades de sistemas externos, os 5. Mtodos. Uma dica procurar todas as ocorrncias
relacionamentos entre os objetos internos na tabela de constraints passando o nome
(triggers, procedures, functions), etc. No Estrutural da chave. No banco de dados Oracle, esta
entanto, qualquer estratgia adotada deve A categoria estrutural engloba mudanas consulta pode ser feita seguindo o exem-
ter como base os seguintes passos: em estruturas de tabelas e/ou views, como: plo apresentado na Listagem 2.
1. Avaliao do impacto: antes de fazer qual- R enomear colunas, tabelas, views, func-
quer alterao na estrutura, deve-se avaliar tions e procedures;
o tamanho do impacto, tanto interno quan- I ntroduzir colunas calculadas para me- Listagem 1. Script DML para consultar os objetos do
to externo, ou seja, descobrir todas as views, lhorar a performance dos sistemas; usurio.
triggers, procedures, constraints e sistemas I ntroduzir surrogate keys para aumentar
SELECT object_name
que sero afetados com a mudana; a consistncia dos dados; FROM USER_OBJECTS
2. Definio do perodo de transio: aps M esclar colunas e tabelas para evitar WHERE object_type = PROCEDURE
AND status = INVALID;
fazer a avaliao acima, ser possvel redundncias;
definir com maior preciso o perodo de M over coluna para outra tabela; Listagem 2. Script DML para consultar as constraints do
transio. Entretanto, deve-se fazer um P articionar tabelas com muitas colunas banco de dados.
controle rigoroso para garantir que os para melhorar a coeso do esquema do
SELECT table_name, constraint_name
prazos estabelecidos sero seguidos; banco de dados; FROM ALL_CONSTRAINTS
3. Criao e execuo de testes: antes de S ubstituir associaes um para muitos WHERE constraint_name like %NOME%
AND constraint_type = R;
alterar o modelo preciso garantir que por tabelas associativas.

Edio 81 SQL Magazine 17

sql81.indb 17 29/10/2010 13:55:50


Refactoring de Banco de Dados

Observe a Figura 4. A tabela Empre- A dicionar tabelas de consulta; tio desnecessria de dados, e a segunda
gado, no esquema original, contm a P adronizao de siglas; a falta de uma definio do significado
coluna nome que ser renomeada para Aplicar tipos padres para evitar, por de cada sigla.
nome_completo. O primeiro passo criar exemplo, que em uma tabela uma infor- Para resolver este problema pode-se
a nova coluna nome_completo, mas sem mao seja do tipo varchar e em outra ela adicionar uma tabela de consulta, tambm
remover de imediato a coluna nome, ape- seja do tipo numrico; conhecida como Lookup Table ou tabela Core.
nas se adiciona um comentrio informan- Adicionar ou remover chaves estrangei- Nesta tabela, a coluna estado se torna cha-
do a data da remoo. Em seguida, cria-se ras; ve primria, permitindo assim a criao de
uma trigger para sincronizar os dados Adicionar ou remover valores padres uma chave estrangeira na tabela Endereco
entre as duas colunas, j que elas existiro em colunas; para garantir a integridade. Alm disto,
simultaneamente durante o perodo de M over dados de uma tabela para outra. deve ser adicionada uma nova coluna
transio. A Listagem 3 apresenta o script que ir qualificar o registro. A Listagem 4
para realizar a refatorao proposta. Observe o esquema original na Figura 5. apresenta o script para gerar e popular a
A tabela Endereco contm a coluna estado. tabela de consulta.
Qualidade de dados Nesta coluna so armazenadas as siglas Outra vantagem com a aplicao desta
As implementaes feitas nesta categoria dos estados com apenas dois caracteres. refatorao a possibilidade de fornecer
visam melhorar a qualidade das informa- Neste modelo possvel apontar pelo aos sistemas externos uma lista de cdigos
es contidas no banco de dados. So elas: menos dois problemas: o primeiro a repe- nomeados para que no precisem usar enu-

Figura 4. Renomeando uma coluna Estrutural Figura 5. Adicionando tabela de consulta Qualidade de dados

Listagem 3. Script para realizar a refatorao estrutural.

ALTER TABLE Empregado ADD nome_completo VARCHAR(60); END IF;


IF :NEW.nome IS NULL THEN
COMMENT ON Empregado.nome_completo Esta coluna ir substituir a coluna nome :NEW.nome := :NEW.nome_completo;
que ser excluda em 20/12/2010; END IF;
END IF;
COMMENT ON Empregado.nome Esta coluna foi renomeada para nome_completo
e ser excluda em 20/12/2010; IF UPDATING THEN
IF NOT(:NEW.nome_completo =:OLD.nome_completo) THEN
UPDATE Empregado SET nome_completo = nome; :NEW.nome:=:NEW.nome_completo;
END IF;
CREATE OR REPLACE TRIGGER SincronizarNomeCompleto IF NOT(:NEW.nome=:OLD.nome) THEN
BEFORE INSERT OR UPDATE :NEW.nome_completo:=:NEW.nome;
ON Empregado END IF;
REFERENCING OLD AS OLD NEW AS NEW END IF;
FOR EACH ROW END;
DECLARE /
BEGIN
IF INSERTING THEN Em 20/12/2010
IF :NEW.nome_completo IS NULL THEN DROP TRIGGER SincronizarNomeCompleto;
:NEW.nome_completo := :NEW.nome; ALTER TABLE Empregado DROP COLUMN nome;

18 SQL Magazine Edio 81

sql81.indb 18 29/10/2010 13:55:50


meration (lista exata de todos os elementos Arquitetura arquitetura voc pode encapsular regras
de um conjunto). As implementaes feitas nesta categoria como estas nos mtodos CRUD.
visam melhorar de forma global as intera- A Listagem 7 apresenta exemplos de
Integridade referencial es entre os programas externos e o banco como criar mtodos CRUD no banco de
As implementaes feitas nesta categoria de dados. So elas: dados Oracle.
visam garantir a integridade dos dados. A dicionar mtodos CRUD (procedures A desvantagem neste tipo de modelo o
So elas: para insero, consulta, atualizao e grande de nmero de objetos que se adicio-
Adicionar ou remover chave estrangeira; excluso); na no banco de dados, exigindo assim, um
Adicionar trigger para coluna calculada; Adicionar encapsulamento tabela atra- controle rigoroso para evitar duplicaes
Adicionar excluso em cascata; vs de views; desnecessrias. Por outro lado, facilita
Adicionar trigger para armazenar em log Adicionar mtodos de clculos; quando uma nova refatorao for aplica-
as alteraes. Adicionar tabelas apenas para leituras; da, pois sem a dependncia dos sistemas
M igrar mtodos dos sistemas externos
Observe o esquema original no modelo para o banco de dados.
Listagem 4. Script para criar e popular a tabela de consulta Estado.
exemplificado na Figura 6. As tabelas Algumas empresas preferem
Conta e Status esto interligadas atravs encapsular o acesso ao banco CREATE TABLE Estado (
estado CHAR(2) NOT NULL,
da coluna status_id. No entanto, no existe de dados fornecendo apenas nome VARCHAR(60),
uma referncia que restrinja este relacio- mtodos de incluso, excluso, CONSTRAINT PK_Estado PRIMARY KEY (estado)
);
namento, ou seja, podem ser inseridos atualizao e consulta, atravs
registros na tabela Conta mesmo que no de procedures (veja a Figura 7). ALTER TABLE Endereco ADD CONSTRAINT FK_Endereco_estado
FOREIGN KEY (estado) REFERENCES estado;
existam na tabela Status. Para resolver este Desta forma o banco de dados INSERT INTO Estado (estado)
problema, deve-se adicionar uma chave fica totalmente desacoplado SELECT DISTINCT UPPER(estado) FROM Endereco;
estrangeira na tabela Conta apontando das aplicaes. Outra vanta- UPDATE Endereco SET estado = TX WHERE UPPER(estado) =TX;
para Status. Esta chave estrangeira pode gem desta abordagem a pos- UPDATE Estado SET nome = Florida WHERE estado=FL;
UPDATE Estado SET nome = Illinois WHERE estado=IL;
ser de dois tipos: a que faz a verificao no sibilidade de aplicar controle UPDATE Estado SET nome = California WHERE estado=CA;
momento da insero do registro, e a que de acesso aos dados baseado
faz a verificao apenas no final da transa- na poltica de segurana. Por Listagem 5. Script para criar a chave estrangeira com a verificao imediata
o (no commit). A primeira a padro na exemplo, suponha que exista ALTER TABLE Conta
maioria dos bancos de dados, mas diminui uma tabela no seu banco de ADD CONSTRAINT FK_Conta_Status
o desempenho da transao. A segunda dados contendo os lucros da FOREIGN KEY (status_id)
REFERENCES Status;
uma boa opo quando os registros so empresa. Os funcionrios da
inseridos e alterados na mesma transao, diretoria tm acesso para visu- Listagem 6. Script para criar a chave estrangeira com a verificao no commit
e o que importa apenas o resultado final; alizar todos os registros. Entre-
ALTER TABLE Conta
se no for usada com cautela pode desper- tanto, os demais funcionrios ADD CONSTRAINT FK_Conta_Status
diar processamento do banco de dados. apenas visualizam o que diz FOREIGN KEY (status_id)
As Listagens 5 e 6 apresentam exemplos respeito ao seu departamento. REFERENCES Status
INITIALLY DEFERRED;
de como criar os dois tipos de chaves. Utilizando as refactorings de

Figura 6. Adicionando chave estrangeira Integridade de dados Figura 7. Adicionando mtodos CRUD Arquitetura

Edio 81 SQL Magazine 19

sql81.indb 19 29/10/2010 13:55:50


Refactoring de Banco de Dados

externos, o perodo de transio bem melhorar a qualidade de stored procedu- das pela equipe. O sandbox um ambiente
curto, e s vezes, at desnecessrio. res, triggers ou funes armazenadas no tcnico onde o desenvolvedor escreve,
Ao decidir entre usar ou no mtodos banco de dados. Por razes de simplici- testa e compila suas refatoraes de forma
CRUD, leve em considerao os seguintes dade, Ambler se refere a estes trs tipos isolada.
pontos: de funcionalidade simplesmente como Um sandbox pode estar em um servidor
Quantidade de sistemas que acessam o mtodos. As implementaes comuns ou no prprio computador do desenvolve-
banco de dados; desta categoria so: dor, desde que ele possua uma cpia atual
R egras de negcios que so repetidas Adicionar ou remover parmetros dos do esquema do banco de dados instalado e
em todos os sistemas e poderiam ser mtodos; configurado no seu ambiente de desenvolvi-
generalizadas no banco de dados; Renomear mtodos; mento. Com isto, se evita enviar um esquema
N ecessidade de implementao de po- Reordenar os parmetros dos mtodos; corrompido, que o desenvolver ainda esteja
lticas de acesso aos dados; S ubstituir vrios mtodos por um mto- testando, para produo. Alm do mais, a
Familiarizao da equipe de desenvol- do genrico; diviso das tarefas fica mais fcil, j que
vimento com a linguagem usada pelo S ubstituir um mtodo genrico por v- os desenvolvedores podero trabalhar no
banco de dados. rios outros mtodos. mesmo esquema, mas sem que um interfira
no trabalho do outro. Muito embora, o uso
Mtodos A Figura 8 apresenta um exemplo de desta tcnica requer um extremo controle
Como o prprio nome sugere, as refa- refatorao de uma stored procedure. sobre as alteraes que iro para produo.
toraes desta categoria tm por objetivo Neste exemplo, ser adicionado o par- Por este motivo, Ambler sugere utilizar um
metro nome na procedure sandbox para fazer a integrao entre os di-
Listagem 7. Script de exemplo para criar mtodos CRUD no Oracle. obterEmpregado. Para isto, versos ambientes dos desenvolvedores e
deve-se criar uma nova pro- ainda outro para fazer os testes.
CREATE OR REPLACE PACKAGE EmpregadoCRUD AS cedure copiando o cdigo da Como ilustra a Figura 9, os desenvol-
TYPE empregadoType IS REF CURSOR RETURN
Empregado%ROWTYPE; antiga e adicionando o novo vedores esto continuamente aplicando
PROCEDURE obterEmpregado parmetro. As duas proce- as refactorings no esquema do banco de
(empregadoId IN NUMBER,empregadoReturn OUT empregadoType); dures devem ser mantidas dados contido em seus sandboxes. Quando
PROCEDURE AdicionarEmpregado(....);
PROCEDURE AtualizarEmpregado(....); no modelo at o fim do per- estas refactorings esto prontas, elas so
PROCEDURE ExcluirEmpregado(....); odo de transio. Findo este mescladas em um sandbox de integrao.
END EmpregadoCRUD; /
perodo, a procedure antiga Em seguida feito o teste de compilao
CREATE OR REPLACE PACKAGE BODY EmpregadoCRUD AS dever ser excluda. dos objetos para procurar erros de build.
Caso no sejam encontrados erros, as
PROCEDURE obterEmpregado
(empregadoId IN NUMBER, empregadoReturn OUT
Organizando o trabalho refatoraes so enviadas para o sandbox
empregadoType) IS em equipe usando Sand- de testes, onde sero rodados os testes
BEGIN boxes unitrios, de integrao e aceitao. E por
OPEN refEmpregado FOR
SELECT * FROM Empregado WHERE empregadoId =
O processo de refactoring fim, enviadas para produo. Se em algu-
empregadoId; no algo simples, precisa mas das etapas forem encontrados erros, o
END obterEmpregado; ser bem organizado. Uma esquema volta ao estado original, atravs
END EmpregadoCRUD;/
dica utilizar sandbox para de recuperao por backup, e o processo
controlar as alteraes realiza- volta ao incio.

Figura 8. Incluindo novo parmetro em uma stored procedure Mtodos Figura 9. Arquitetura de refactoring em equipe usando Sandboxes

20 SQL Magazine Edio 81

sql81.indb 20 29/10/2010 13:55:51


Impedimentos desde o inicio do projeto. Partindo do na linguagem do banco de dados, mas
Em seu livro Refactoring Databases princpio que a cada iterao preciso com um pouco de estudo e prtica, ser
Evolutionary Design Scott W. Ambler adicionar novas funcionalidades, como possvel evoluir a equipe a um nvel
deixa claro que para falar de refactoring, por exemplo, uma nova coluna ou stored considervel. No veja estas dificuldades
necessrio falar sobre os impedimentos e procedure, usando tcnicas de refacto- como uma barreira, mas sim como uma
dificuldades que provavelmente surgiro ring, estas alteraes tornam-se mais oportunidade para dividir o conhecimen-
ao longo do processo. Segundo Ambler, simples de ser aplicadas. No entanto, estas to, que s vezes, est concentrado apenas
o primeiro obstculo, e um dos mais tcnicas podem ser aplicadas a qualquer nos profissionais de banco de dados.
difcieis de se superar, o cultural. Isto momento do projeto. A vantagem desta
porque muitos profissionais confundem abordagem que aos poucos, porm
abordagens evolutivas com o cod-and-fix constantemente, melhora-se a qualidade
(codificar e corrigir) tcnica de desen- do banco de dados. Este processo no s
Ambler, Scott W., PramodJ.Sadalage
(2006). Refactoring Databases:
volvimento usada no final da dcada de torna a base de dados mais fcil de en-
Evolutionary Databases Design. New
70 e incio da 80, que resultou em sof- tender e usar, mas tambm facilita a sua
York: Addison Wesley Professional.
twares de baixa qualidade e acreditam evoluo ao longo do tempo, em outras
http://www.ambysoft.com/books/
que perda de tempo evoluir ao longo do palavras, melhora-se a produtividade
refactoringDatabases.html
projeto. Tal fato acaba consumindo boa global do desenvolvimento.
parte do investimento no projeto, e exige As empresas evoluem adotando tcni-
Ambler, Scott W., PramodJ.Sadalage
muita pacincia do gestor da mudana cas modernas de desenvolvimento gil,
(2006). Refactoring Databases: The Process.
para convencer a equipe de que esta mu- mas ficam com uma parcela do projeto
http://www.simple-talk.com/sql/database-
dana de paradigma algo positivo. defasada quando negligenciam a arqui-
administration/refactoring-databases-the-process/
O segundo obstculo a falta de ferra- tetura de bancos de dados. Portanto, os
mentas de testes. Embora tenhamos algu- profissionais de banco de dados tambm
Ambler, Scott W. (2007). Presentation
mas de cdigo aberto, a eficincia ainda podem usufruir de tcnicas geis, como
Databases Refactoring.
baixa e no so totalmente integradas Refactoring de Banco de Dados, por
http://www.infoq.com/presentations/ambler-
com o ambiente de desenvolvimento. exemplo.
database-refactoring
preciso organizar muito bem cada passo Os exemplos aqui apresentados mos-
da refactoring para se conseguir testes tram como seguro e fcil evoluir um Ambler, S. W. (2003). Agile Databases
eficazes. Atualmente as ferramentas mais modelo de banco de dados utilizando a Techniques: Effective Strategies for the
conhecidas so: DBUnit (dbunit.sourcefor- tcnica de refactoring. Mas deixa claro Agile Software Developer. New York: John
ge.net) e SQLUnit (sqlunit.sourceforge.net). tambm, que o gerenciamento destas Wiley & Sons.
O terceiro obstculo o grau de acopla- mudanas extremamente importante www.ambysoft.com/agileDatabasesTechniques.html
mento. Em boa parte das empresas, quer para o sucesso do projeto.
sejam de T.I. ou no, a questo da arqui- provvel que os desenvolvedores Mello, Fabrzio de Royes. Refatorao de
tetura do banco de dados no algo bem tenham um pouco de dificuldade no Banco de Dados (Agileweekend 2009).
resolvido e amplamente discultido como comeo caso nunca tenham programado http://www.slideshare.net/fabriziomello/
deveria. Este fato faz com que a utilizao refatorao-banco-de-dados-agileweekend2009
do banco de dados crie uma dependncia
Ismael Zacarias Soares
muito grande com outros componentes, Wikipdia. Refactoring.
rkmael@hotmail.com
levando a arquitetura do sistema a um desenvolvedor Java EE na http://pt.wikipedia.org/wiki/Refactoring
alto grau de acoplamento. Este cenrio BlueSoft Consultoria em So
implica em muito mais tempo para a apli- Paulo, formado em banco de dados
cao da tcnica do que seria necessrio, pela Faculdade Impacta de Tecnolo- D seu feedback sobre esta edio! eu
Feedback
s
D

elevando assim o custo do projeto. gia.Tem mais de oito anos de experincias em anlise A SQL Magazine tem que ser feita ao seu gosto.
sobre e

e desenvolvimento de software. J trabalhou com


Para isso, precisamos saber o que voc, leitor,
s

ta
edio

Concluso diversas tecnologias entre elas: VB6, ASP, PHP, C#.NET,


acha da revista!
VB.NET, ASP.NET, PL/SQL, T-SQL e Groovy. J participou
Refactoring de Banco de Dados, alm de
de diversos projetos de banco de dados entre eles: D seu voto sobre este artigo, atravs do link:
ser muito til na manuteno do esquema,
Oracle, MSSQL Server, MySQL e Postgree. www.devmedia.com.br/sqlmagazine/feedback
ainda pode ser utilizada para constru-lo

Edio 81 SQL Magazine 21

sql81.indb 21 29/10/2010 13:55:51


Seo Banco de Dados/Persistncia: "Nesta seo voc encontra artigos banco de dados, SQL ou pers istnci

Aplicao Web com ASP.N E


Parte 1 Projeto de banco de dados

P Resumo DevMan
odemos trabalhar com a tecnologia
.NET utilizando os diferentes SGB-
Ds disponveis no mercado. sem- De que se trata o artigo:
pre interessante conhecer os recursos de O objetivo principal do artigo apresentar o desenvolvimento de uma aplicao web completa de um
banco de dados providos pelas diferentes domnio de aplicaes empresarial. A ideia apresentar as principais tecnologias, como provider NpgSQL
tecnologias disponveis para o desenvolvi- e o FCKEditor. Alm disso, sero descritos os comandos SQL baseados em Stored Procedures.
mento de novas aplicaes, e com o .NET
no diferente. Para que serve:
Neste contexto, o objetivo principal Quando se trabalha com ASP.NET, normalmente utilizado o SQL Server como SGBD, pois algo natural
deste artigo mostrar de forma clara e (so produtos da Microsoft). Neste sentido, o objetivo do artigo explanar a possibilidade de desenvolver
objetiva o desenvolvimento de um Web uma aplicao utilizando o banco de dados PostgreSQL atravs do uso do provider NpgSQL.
Site empresarial. Alm das tecnologias que
sero mostradas, ser importante tambm Em que situao o tema til:
a criao e utilizao de Stored Procedures Ter a flexibilidade de trabalhar com outros bancos de dados no ASP.NET muito importante para qualquer
(ver Nota DevMan 1), concentrando esses empresa ou profissional. Com isso, ser mostrado o provider NpgSQL. Atravs deste, possvel trabalhar
comandos SQL diretamente no servidor do com os principais recursos do PostgreSQL Uma das ideias utilizar stored procedures, de maneira simples
banco de dados. Um ponto importante a e objetiva, visando o desenvolvimento de um Web Site empresarial.
ser frisado que o objetivo no entrar em
detalhes diretamente de Stored Procedures
neste artigo, mas abordar a mesma de Estudo de Caso Web Site Empresarial Na rea de Front-End (Nota DevMan 2)
forma prtica, o que torna o artigo mais Vamos imaginar que sua empresa foi do web site a ser desenvolvido, somente
produtivo e objetivo ao mesmo tempo. contratada para desenvolver um web site ficar disponvel uma lista com as pginas
O artigo ser divido em duas partes. A para controle de informaes de uma de menus, como Home, Empresa, Clientes,
primeira parte, apresentada nesta edio, ir empresa real. Com isso, so realizadas as Produtos e Contato. Veja que o objetivo
descrever a etapa de levantamento dos re- primeiras reunies para o desenvolvimen- do artigo no trabalhar com a parte
quisitos junto ao nosso cliente. Em seguida, to do mesmo. de layout, desta forma no ser aplicado
passaremos a descrever a etapa de anlise da Chamar a aplicao apenas por Web nenhum contedo CSS. No entanto, im-
aplicao, e por ltimo o desenvolvimento Site sem dvida algo muita genrico, portante voc aplicar seu conhecimento
da estrutura do banco de dados, como ta- e existem N situaes que podem ser de design para obter um resultado final
belas e stored procedures. Na segunda parte desenvolvidas. No entanto, este web site mais satisfatrio.
deste artigo, apresentado na prxima edio, possui caractersticas bastante interessan-
todo o conceito do projeto ser aplicado, tes que precisamos considerar durante seu
desde a criao da estrutura da aplicao, desenvolvimento. Vamos a elas. Nota do DevMan 1
desenvolvimento de suas pginas e classes Uma das primeiras questes do web site
DAO para persistir essas informaes e de- a ser desenvolvido que ele precisa ser SP (Stored Procedures) e CRUD
finio de seus usurios. Alm disso, sero administrado de forma simples e eficaz, j Procedimento armazenado ou Stored Procedure uma coleo
utilizados alguns dos principais controles do que necessita constantemente de atualiza- de comandos em SQL. Encapsula tarefas repetitivas, aceita
parmetros de entrada e retorna um valor de status (para indicar
ASP.NET, tanto para interao com o usurio es. muito comum o desenvolvimento aceitao ou falha n execuo). O procedimento armazenado
como a manipulao de dados. de um site dinmico, mas quem realiza a pode reduzir o trfego na rede, melhorar o desempenho, criar
O exemplo a ser desenvolvido neste manuteno do mesmo (como atualizao mecanismos de segurana, dentre outras vantagens.
artigo ser um projeto de um Web Site em- do contedo das pginas) o desenvol- CRUD o acrnimo da expresso em lngua Inglesa Create, Retrieve,
presarial. Desta forma, voc aproveita os vedor. A ideia simplificar! Com isso, o Update e Delete,usada para definir quatro operaes bsicas usadas
em bancos de dados relacionais ou em interface para usurios para
exemplos de operaes CRUD (Nota Dev- prprio cliente tem acesso a uma pgina de criao, consulta, atualizao e remoo de dados.
Man 1) em uma aplicao real de uso. login e realiza as edies da pgina.

22 SQL Magazine Edio 81

sql81.indb 22 29/10/2010 13:55:52


ou pers istncia"

N ET e PostgreSQL
Rafael Silva

Basicamente, o projeto a ser


desenvolvido ir conter uma Nota do DevMan 2
pgina .aspx. Esta pgina
ser responsvel por exibir Front-End
os seus contedos de forma Em projetos de software, front-end a parte do sistema de software
dinmica. Normalmente, que interage diretamente com o usurio. Em alguns sistemas, tais
como aqueles baseados em Unix, chama-se front-end s interfaces
criado um arquivo para cada grficas que permitem ao usurio interagir com programas que
pgina que o site necessita, trabalham originalmente em modo texto.
mas a ideia principal do
artigo criar somente um
arquivo para a exibio de Figura 1. Download Provider NpgSQL
todas essas pginas. Essas pginas e seus Nota do DevMan 3
contedos no so criados de forma sepa- Overview e NpgSQL
DAO (Data Access Object)
rada. Todas as informaes so gravadas O NpgSQL basicamente um provider
no banco de dados. Desta forma, possvel de acesso a dados para o banco de dados DAO (Data Access Object) um padro para persistncia de dados
que permite separar regras de negcio das regras de acesso a banco
inserir quantas pginas o projeto necessi- PostgreSQL. O mesmo possui sua interface de dados. Numa aplicao que utilize a arquiteturaMVC, todas as
tar de forma dinmica, o que simplifica desenvolvida com a linguagem C#, e fun- funcionalidades de bancos de dados, tais como obter as conexes,
o processo para o cliente, que deixar de ciona a partir da verso 7.x. Possui suporte mapear objetos para tipos de dadosSQLou executar comandos
SQL, devem ser feitas por classes de DAO.
necessitar de auxilio de profissionais da para .Net Framework 2.0 e 3.5, e ao ADO.
rea. Esta soluo muito utilizada em NET Entity Framework.
empresas de desenvolvimento de sites, que Antes de darmos incio ao desenvolvi-
oferecem ferramentas online para a criao mento dos exemplos utilizando o provider Nota do DevMan 4
de pginas em apenas alguns minutos. NpgSQL, necessrio que voc possua o
Um dos propsitos deste artigo tambm mesmo. A sua instalao muito simples. Ambiente de Desenvolvimento
utilizar algumas dessas caractersticas. Na verdade, voc simplesmente deve
Por no fazer parte do escopo do artigo, de extrema importncia
Na prtica, ser mais simples de entender. realizar o download de alguns arquivos, que voc j possua instalado em sua mquina o Visual Studio
Veja que importante citar alguns pontos, entre eles algumas DLL, como a NpgSQL. 2008 e principalmente o banco de dados PostgreSQL instalado e
configurado na mesma. Na lista de links voc confere o site oficial
j que eles so a base de entendimento do dll e Mono.Securuty.dll. Na lista de Links
do mesmo, onde poder realizar o download e posterior instalao.
projeto. voc confere o endereo do mesmo. Re-
Na parte administrativa do site ser alize o download e descompacte em um
possvel editar o seu ttulo e o contedo da local de sua preferncia, lembrando que
pgina. Outro fator importante no projeto a verso utilizada neste artigo a 2.0.8.
que iremos utilizar um editor HTML Na Figura 1 voc confere o arquivo que
para facilitar nossa tarefa de edio dos devemos baixar no endereo informado
contedos destas pginas. Alm disso, (Nota DevMan 4).
o mesmo conta com um assistente para
Upload de imagens onde, com algumas FCKEditor
simples configuraes, o usurio tem a O FCKEditor um editor WYSIWYG
possibilidade at mesmo de criar diret- (Nota DevMan 5) bastante verstil. Ele
rios, tornando-o um File Manager (sistema possui recursos extremamente importan-
de upload e gerenciamento de arquivos). tes quando o objetivo administrar de
Para tornar o artigo ainda mais produtivo, forma completa um site. Uma das suas
a aplicao ser construda utilizando o principais caractersticas o suporte s
Desing Paterns DAO (Nota DevMan 3). principais tecnologias do mercado. Alm

Edio 81 SQL Magazine 23

sql81.indb 23 29/10/2010 13:55:52


Aplicao Web com ASP.NET e PostgreSQL

Nota do DevMan 5
WYSIWYG
WYSIWYG o acrnimo da expresso em ingls What You See Is
What You Get, cuja traduo remete a algo como O que voc v
o que voc obtem (OQVVEOQVO). Significa a capacidade de um
programa de computador permitir que um documento, enquanto
manipulado na tela, tenha a mesma aparncia de sua utilizao,
usualmente sendo considerada final a forma impressa. O uso inicial
do termo foi relacionado a editores de texto,agora porm aplicado
a qualquer tipo de programa. Dois exemplos clssicos de editores
WYSIWYG so o Writer e o Microsoft Word, nos quais o documento
Figura 2. Download FCKEditor mostrado na tela da mesma forma que ser impresso.

controle para ASP.NET. Desta forma, a ta- voc esta utilizando para a administrao
refa de integr-lo a sua aplicao se torna do seu banco de dados.
uma tarefa simples e eficiente.
Construindo as Stored Procedures
Definindo a Estrutura do Banco de Sem dvida alguma, uma boa prtica
Figura 3. Estrutura banco de dados da aplicao dados de programao com banco de dados
O banco de dados da aplicao de um trabalhar com stored procedures. No banco
Listagem 1. Script SQL para criao das tabelas do web site Web Site ser simples e objetivo, conforme de dados PostgreSQL no diferente. A
voc pode visualizar na Figura 3. Anali- ideia de concentar seus comandos SQL
// tabela tbpaginas sando a figura, perceba que possumos no servidor de banco de dados, alm de
CREATE TABLE tbpaginas
( apenas duas tabelas. A primeira tabela, uma organizao, produtivo e garante
id_pagina serial, denominada tbpaginas, responsvel por melhor desempenho do banco de dados.
nome_pagina character varying(50), armazenar todas as pginas cadastradas comum possuir mquinas cliente mais
texto_pagina text,
data_pagina date DEFAULT now(), do site (conforme o prprio nome sugere). simples. Assim, atravs das Stored Pro-
contador_pagina integer, De forma geral, importante destacar al- cedures, voc concentra esses comandos
CONSTRAINT pkPaginas_ID PRIMARY KEY
guns campos: nome_pagina responsvel SQL no servidor de banco de dados, que
(id_pagina)
) por armazenar o ttulo da pgina, tex- na maioria dos casos sempre mais ro-
to_pagina o campo que ir conter todo o busto que as mquinas de cliente.
// tabela tblogin
seu contedo, e isso inclui principalmente Partindo desta ideia, trabalhar com
CREATE TABLE tblogin
( HTML, o campo contador_pagina armazena stored procedures (SPs) no PostgreSQL no
id_login serial, o nmero de visitas que a mesma possui uma tarefa trivial. Uma das grandes ca-
usuario_login character varying(20),
senha_login character varying(32),
e o campo data_pagina registra a data de ractersticas deste SGBD que ele possui
CONSTRAINT pkLogin_ID PRIMARY KEY cadastro da mesma. uma extensa biblioteca/linguagem para
(id_login) A segunda tabela, denominada tblogin, desenvolvimento de SPs, dentre elas pl/
)
basicamente uma estrutura de login pgsql, pl/java, pl/perl, dntre outras. As
e senha. Com isso, somente usurios mesmas so conhecida como linguagem
logados tm acesso pgina de cadastro procedural. Outro ponto a possiblidade
disso, sua instalao e configurao so e edio de pginas. de criar as SPs trabalhando com a lingua-
muito simples. Para cada tecnologia existe Na Listagem 1 voc confere o cdigo gem SQL. Este recurso muito utilizado
uma forma diferente. completo para a criao da estrutura des- para implementar operaes de SELECT,
O objetivo nesta primeira parte realizar te banco de dados. Os campos id_pagina INSERT, UPDATE e DELETE. As stored
o download do componente para futura e id_login da tabela tbpaginas e tblogin, procedures construidas neste artigo sero
instalao e configurao no momento respectivamente, so do tipo Serial. O criada utilizando a linguagem SQL. A
que for necessrio utiliz-lo. Para isso, PostgreSQL trabalha com sequncias. principal razo para esta deciso que
acesse o site (http://ckeditor.com/download) e No momento que definimos um campo muito simples o seu entendimento, o que
localize a seo FCKeditor e FCKeditor. do tipo serial, ele cria essas sequncias facilita a leitura e compreenso do leitor.
Net, e realize o seu download, conforme automaticamente no banco de dados. Pos- Como a principal proposta do artigo su-
mostra a Figura 2. No primeiro download, teriormente execuo deste script, voc bistuir os comandos SQL desenvolvido di-
voc encontra toda a estrutura de scripts pode notar tambm que as sequncias so retamente na aplicao por SPs, o exemplo
necessrios dos mesmos. O segundo um criadas, dependendo do gerenciador que se adpata facilmente ideia proposta.

24 SQL Magazine Edio 81

sql81.indb 24 29/10/2010 13:55:53


Na Listagem 2 voc confere o script id_login igual a $1. Este $1 representa Outro ponto a ser frizado o fato dessas
SQLpara a criao de todas as SPs da exatamente o primeiro parmetro de SPs retornarem um valor que possui um
aplicao. Veja que uma das caracters- nossa SP. Para recuperar o valor de um tipo especfico. Nas SP de INSERT, DELE-
ticas de todas elas que elas possuem parmetro, precisamos usar o caracter TE e UPDATE, por exemplo, foi definido
um nico objetivo: executar comandos $ seguido da ordem do parmetro. que o seu retorno seria do tipo VOID, j
SQL. Na SP insert_user, por exemplo, as mes- que no existe uma necessidade de retorno
Analisando os cdigos de cada uma das mas afirmaes so vlidas. A diferena nessas operaes. Em Stored Procedures
SPs, um ponto a ser destacado o uso de que existem outros parmetros, com outra de consulta de dados, por exemplo a SP
SPs com parmetros de entrada. Nesta sentena SQL. A ideia desta SP inserir um lista_contador, so retornados valores di-
situao, precisamos informar o seu tipo. novo usurio no banco de dados (como o ferentes de acordo com o seu propsito.
No exemplo da Listagem 2, observe que prprio nome sugere). Se analisarmos a Nesta SP retornado um valor do tipo
na SP delete_user informado um tipo tabela, preciso informar valores para os Integer que representa o total de visitas da
integer. Na prtica, nesta situao campos login e senha, e desta forma so pginas que fica concentrado no campo
utilizado o ID do usurio como par- criados dois parmetros na mesma. Na total_paginas.
metro para identificar o usurio a ter clusula VALUES da instruo INSERT, A SP select_page tambm possui uma ou-
seus dados excludos da tabela. Podemos so informados os parmetros $1 e $2, que tra caracterstica: o seu retorno um SET
observar essa situao com o comando representam respectivamente os valores OF de tbpaginas. Na prtica, retornado
DELETE FROM ..., com a condio do para usurio e senha. um conjuto de valores desta tabela. Desta

Listagem 2. Script SQL MySQL


CREATE OR REPLACE FUNCTION delete_user(integer) $BODY$
RETURNS void AS LANGUAGE sql VOLATILE
$BODY$ COST 100
DELETE FROM tblogin WHERE id_login = $1 ROWS 1000;
$BODY$ ALTER FUNCTION listar_usuarios() OWNER TO postgres;
LANGUAGE sql VOLATILE
COST 100; CREATE OR REPLACE FUNCTION update_contador(integer)
ALTER FUNCTION delete_user(integer) OWNER TO postgres; RETURNS void AS
UPDATE tbpaginas SET contador_pagina = contador_pagina + 1 WHERE id_pagina = $1
CREATE OR REPLACE FUNCTION insert_user(character varying, character varying) LANGUAGE sql VOLATILE
RETURNS void AS COST 100;
$BODY$ ALTER FUNCTION update_contador(integer) OWNER TO postgres;
INSERT INTO tblogin (usuario_login, senha_login) VALUES ($1, $2)
$BODY$ CREATE OR REPLACE FUNCTION update_page(character varying, character varying, integer)
LANGUAGE sql VOLATILE RETURNS void AS
COST 100; $BODY$
ALTER FUNCTION insert_user(character varying, character varying) OWNER TO postgres; UPDATE tbpaginas set nome_pagina = $1, texto_pagina = $2 WHERE id_pagina = $3
$BODY$
CREATE OR REPLACE FUNCTION logar(character varying, character varying) LANGUAGE sql VOLATILE
RETURNS SETOF tblogin AS COST 100;
$BODY$ ALTER FUNCTION update_page(character varying, character varying, integer)
SELECT * FROM tblogin WHERE usuario_login = $1 and senha_login = $2 OWNER TO postgres;
$BODY$
LANGUAGE sql VOLATILE CREATE OR REPLACE FUNCTION update_user(character varying, character varying, integer)
COST 100 RETURNS void AS
ROWS 1000; $BODY$
ALTER FUNCTION logar(character varying, character varying) OWNER TO postgres; UPDATE tblogin SET usuario_login = $1, senha_login = $2 WHERE id_login = $3
$BODY$
CREATE OR REPLACE FUNCTION select_page(integer) LANGUAGE sql VOLATILE
RETURNS SETOF tbpaginas AS COST 100;
$BODY$ ALTER FUNCTION update_user(character varying, character varying, integer) OWNER
SELECT * FROM tbpaginas WHERE id_pagina = $1; TO postgres;
$BODY$
LANGUAGE sql VOLATILE CREATE OR REPLACE FUNCTION lista_contador(integer)
COST 100 RETURNS integer AS
ROWS 1000; $BODY$
ALTER FUNCTION select_page(integer) OWNER TO postgres; SELECT contador_pagina FROM tbpaginas WHERE id_pagina = $1;
$BODY$
CREATE OR REPLACE FUNCTION listar_usuarios() LANGUAGE sql VOLATILE
RETURNS SETOF tblogin AS COST 100;
$BODY$ ALTER FUNCTION lista_contador(integer) OWNER TO postgres;
SELECT * FROM tblogin

Edio 81 SQL Magazine 25

sql81.indb 25 29/10/2010 13:55:53


Aplicao Web com ASP.NET e PostgreSQL

Um exemplo muito comum neste ce-


Nota do DevMan 6 nrio do Web Site Empresarial seria a
possibilidade de estender a aplicao para
Web Service linguagens diferentes. Por outras palavras, os Web Services fazem um dispositivo mvel, como um Smar-
com que os seus recursos estejam disponveis para que qualquer tPhone. Com isso, o mesmo possibilitaria
Web service uma soluo utilizada na integrao de sistemas e aplicao cliente possa operar e extrair os recursos fornecidos pelo
atualizar seu site diretamente do celular
na comunicao entre aplicaes diferentes. Com esta tecnologia, Web Service.
possvel que novas aplicaes possam interagir com aquelas e de qualquer local, sem a necessidade de
que j existem e que sistemas desenvolvidos em plataformas Os Web Services so identificados por um URI (Uniform Resource depender diretamente de um computador
diferentes sejam compatveis. Os Web services so componentes Identifier) e so descritos e definidos usando XML (Extensible
Markup Language). Um dos motivos que tornam os Web Services desktop. Todas essas ideias propostas po-
que permitem s aplicaes enviar e receber dados em formato
XML. Cada aplicao pode ter a sua prpria linguagem, que atrativos o fato deste modelo ser baseado em tecnologias dem ser utilizadas em cima do projeto a
traduzida para uma linguagem universal, o formato XML. standards, em particular XML e HTTP (Hypertext Transfer Protocol). ser desenvolvido neste artigo. Quem sabe
Os Web Services so utilizados para disponibilizar servios
Para as empresas, os Web services podem trazer agilidade para
esta ideia no possa ser um tema para um
interativos na Web, podendo ser acessados por outras aplicaes
os processos e eficincia na comunicao entre cadeias de usando, por exemplo, o protocolo SOAP (Simple Object Access prximo artigo na SQL Magazine.
produo ou de logstica. Toda e qualquer comunicao entre Protocol).
sistemas passa a ser dinmica e principalmente segura, pois no
O objetivo dos Web Services a comunicao entre aplicaes Concluso
h interveno humana.
atravs da Internet. Esta comunicao realizada com intuito O objetivo principal desta primeira
Essencialmente, o Web Service faz com que os recursos da de facilitar EAI (Enterprise Application Integration) que parte do artigo foi apresentar as tare-
aplicao do software estejam disponveis sobre a rede de uma significa a integrao das aplicaes de uma empresa, ou
forma normalizada. Existe ainda uma grande motivao sobre
fas iniciais em projeto de um Web Site
seja, interoperabilidade entre a informao que circula numa
a tecnologia Web Service que o fato dela possibilitar que organizao nas diferentes aplicaes como, por exemplo, o empresarial que pode ser atualizado
diferentes aplicaes se comuniquem entre si e utilizem recursos comrcio eletrnico com os seus clientes e seus fornecedores. Esta de forma dinmica: definio das suas
diferentes. interao constitui o sistema de informao de uma empresa. funcionalidades e modelagem de seu
Utilizando a tecnologia Web Service, uma aplicao pode invocar banco de dados.
outra para efetuar tarefas simples ou complexas mesmo que as Conforme pode ser visto, o prprio
duas aplicaes estejam em diferentes sistemas e escritas em
cliente ao utilizar o site tem a possibi-
lidade (atravs de recursos que foram
projetados) de atualizar todo o contedo
forma, voc tem a possibilidade de recupe- Estrutura do projeto de suas pginas, seja texto, e at mesmo
rar todas as informaes da consulta, como O Web Site Empresarial ser desen- imagem, onde possui integrado no pr-
id_pagina, nome_pagina e texto_pagina. volvido utilizando os principais re- prio editor e uma ferramenta de upload
A SP update_ contador no retor na cursos da plataforma .NET. Uma das de imagens.
nenhum valor. O objetivo da mesma caractersticas de nosso projeto que Na prxima etapa do artigo, toda esta
atualizar o campo contador_ pagina na fase de codificao ser utilizada a estrutura ser aplicada em um projeto
sempre incrementando o seu valor que, linguagem C#. Na soluo apresentada, ASP.NET utilizando os principais recursos
conforme j especificado anteriormente, o Web Site ser divido conforme suas desta tecnologia. Com base nos conheci-
armazena o total de visitas da pgina. A responsabilidades. No projeto principal, mentos adquiridos no mesmo, estaremos
ideia invocar esta SP sempre que a ser criada a aplicao ASP.NET que na aptos a ampliar o projeto com novas ideias.
respectiva pgina for exibida. prtica ser a interface final da aplicao, Alm disso, pode ser visto que com a ar-
Na SP logar foram criados dois par- ou seja a apresentao do contedo das
metros, ambos do tipo character varying. pginas. Continuando, atravs do design
Eles representam o login e senha. No patterns DAO ser criado um projeto para
corpo desta SP existe a tradiconal clu- concentrar todo o acesso a dados desta
sula WHERE login e senha iguais aos aplicao. Desta forma, nossa interface
parmetros informados, para efetivar o grfica no fica presa parte de acesso
login no mesmo. a dados. Alm disso, com o uso de Stored
Para finalizar, a SP update_page possui Procedures no ser necessrio o uso de
os parmetros para nome_pagina e tex- comandos SQL diretamente no projeto
to_pagina. Este um dos pontos principas DAO. Com esta pequena estrutura, seria
do projeto, onde o site somente possui possvel trabalhar com a mesma lgica
pginas dinmicas. Desta forma, o campo da aplicao utilizando outras interfaces,
texto_pagina, utilizado em conjuto com o como uma aplicao Windows Forms e at
FCKEditor, ser responsvel por concen- mesmo uma aplicao para dispositivos
tar o contedo HTML de cada um das mveis utilizando recursos de Web Ser-
pginas do nosso Web Site Empresarial. vice (Nota DevMan 6).

26 SQL Magazine Edio 81

sql81.indb 26 29/10/2010 13:55:54


quitetura aplicada possvel criar sua par- Rafael Silva Download NpgSQL
te de acesso a dados de forma que se torne rafael@rlsystem.com.br http://pgfoundry.org/frs/?group_id=1000140
independente da aplicao. Desta forma, Trabalha com anlise e desenvol-
voc tem a possibilidade de expandir sua vimento de sistemas e ministra Site Oficial do banco de dados PostgreSQL
aplicao para ser utilizada em dispositivo treinamentos com as tecnologias ASP. (BR)
mvel, por exemplo, o que sem dvida lhe
NET, PHP, Delphi. instrutor de cursos http://www.postgresql.org.br/
de PHP na Sisnema Informtica.Atua na rea de de-
garante produtividade e efetividade. Cada Site Oficial do banco de dados PostgreSQL(EN)
senvolvimento desktop utilizando Delphi, C#, e foco na
vez mais dispositivos mveis tm ganhado web com ASP.NET, PHP, CSS e AJAX, Flash, SilverLight. http://www.postgresql.org
espao no mercado, o que torna este tipo Sempre utilizando os padres da Web 2.0 em seus Curso Completo WebSite com ASP.NET
de aplicao muito valorizada. Assim, par- projetos. Utiliza banco de dados SQL Server, MySQL,
Rafael Silva
tindo de algumas informaes abordadas PostGreSQL e Firebird. Para outras informaes acesse o
http://www.devmedia.com.br/cursos/listcurso.
no artigo, ser possvel reaproveitar toda site, http://www.rlsystem.com.br. Para informaes de
palestras e treinamentos entre em contato pelo email. asp?curso=147
ideia e estrutura.

D seu feedback sobre esta edio! eu


Feedback

s
D
A SQL Magazine tem que ser feita ao seu gosto.

sobre e
Para isso, precisamos saber o que voc, leitor,

s
ta
edio

acha da revista!
D seu voto sobre este artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback

Edio 81 SQL Magazine 27

sql81.indb 27 29/10/2010 13:55:55


Seo Banco de Dados/Persistncia: "Nesta seo voc encontra artigos banco de dados, SQL ou pers istnci

Segurana no SQL Server


Conhea as melhores prticas

N Resumo DevMan
o h dvidas de que a segurana
nos bancos de dados, junto alta
disponibilidade e ao desempe- De que se trata o artigo:
nho, so os assuntos mais preocupantes Este artigo tem como objetivo apresentar boas prticas relacionadas segurana no banco de dados
das organizaes quando falamos a respei- SQL Server.
to de suas bases de dados. Estes assuntos
possuem suas caractersticas prprias, Para que serve:
com configuraes personalizadas e diver- Proteger as informaes uma das maiores preocupaes de qualquer empresa. Para alcanar este
sos mtodos de obter melhor utilizao. objetivo, muitas medidas podem ser tomadas ao administrar o SQL Server. Neste artigo conheceremos
Vamos abordar neste artigo algumas das algumas destas medidas.
melhores prticas quando falamos espe-
cialmente de segurana dos bancos de Em que situao o tema til:
dados que administramos. A utilizao Este tema til para todo administrador que estiver interessado em conhecer boas prticas e aperfeioar
das boas prticas de segurana reduz a a segurana dos dados no seu ambiente de trabalho.
possibilidade de acesso por pessoas no
autorizadas, minimizando a chance de A recomendao visa evitar acidentes, Se todas as aplicaes que possuem
utilizao dos dados de forma indevida e roubos, sabotagens, dentre outros possveis bancos de dados em determinada ins-
a possibilidade de sabotagens ou ataques problemas que podem acontecer, tais como tncia utilizam o TCP/IP, ento devemos
por pessoas mal intencionadas. a faxineira esbarrar nos cabos, pessoas no manter apenas este protocolo disponvel
No Microsoft SQL Server, temos diver- autorizadas desligarem os equipamentos para conexo nesta instncia, desativan-
sas formas para garantir a segurana dos ou o roubo dos prprios equipamentos. do o acesso via outros protocolos, tais
bancos de dados, que vo desde a restri- comum encontrarmos em algumas como Named Pipes e Shared Memory
o de acesso a usurios at processos de empresas os servidores nos lugares mais (ver Figura 1).
auditoria (recursos disponveis de forma estranhos possveis, tais como debaixo da A habilitao destes protocolos sem real
nativa a partir do SQL Server 2008). mesa da recepo, e isso deve ser evitado. necessidade abre portas para invases
Porm, utilizar todos os recursos nem Dedicar uma sala, com controle de acesso de hackers. Sendo assim, devemos estar
sempre possvel ou a melhor opo restrito e ar-condicionado, exclusivamente sempre atentos aos protocolos utilizados
para nosso ambiente, sendo necessrio para os servidores uma prtica comum pelas aplicaes e aos mtodos de conexo
analisar o que pode ser aplicado. nas empresas, e deve ser seguida sempre dos usurios, objetivando no proporcio-
Entre os diversos recursos, podemos ado- que possvel na adaptao de ambientes s nar vulnerabilidades para os invasores.
tar algumas boas prticas para maximizar melhores prticas. Esta uma candidata
a utilizao do produto e garantirmos ao a primeira e, talvez, mais importante das Servios Ativos
mximo a segurana dos dados. Iremos ci- medidas a serem tomadas. Devemos instalar apenas os servios e
tar e explicar aqui o que podemos fazer para aplicaes realmente necessrias em nossos
deixar nosso ambiente mais seguro, procu- Protocolos habilitados servidores de bancos de dados, visando
rando no comprometer outras vertentes No devemos habilitar protocolos de liberao de recursos de hardware para o
como desempenho e disponibilidade. conexo que no sero utilizados pelas SQL Server e a reduo de possveis brechas
nossas aplicaes, mantendo apenas os de segurana em nosso ambiente.
Segurana fsica dos dados protocolos que as aplicaes realmente Se o servidor a ser utilizado for des-
Deve-se garantir que apenas pessoal au- necessitam para se conectarem ao banco tinado exclusivamente para bancos de
torizado tenha acesso fsico ao servidor, de dados. Com esta ao, diminumos a dados transacionais, contraindicada a
ou seja, ao local onde esto armazenados superfcie de ataque da nossa instncia, instalao dos servios de OLAP neste,
os servidores da empresa, especialmente dificultando a ao de pessoas mal in- pois assim evitamos a possibilidade
o servidor de banco de dados. tencionadas. de invaso atravs deste servio e, ao

28 SQL Magazine Edio 81

sql81.indb 28 29/10/2010 13:55:55


ou pers istncia"

r
Felipe de Assis

Figura 1. Controle dos protocolos Figura 2. Controle de usurios da Sysadmin

mesmo tempo, liberamos mais recursos permitida a expirao da mesma. Alm exclusivamente para o funcionamento dos
de hardware. disso, cada servio instalado no servidor servios.
deve possuir sua prpria conta de servio,
Contas de Servio ou seja, o Database Engine e o SQL Server Membros da Fixed Server Role Sysadmin
Devemos configurar todos os servios Agent, assim como os demais servios rela- fundamental o controle dos usurios
relacionados ao SQL Server para serem cionados ao SQL Server, no devem utilizar que fazem parte da Fixed Server Role
executados com contas de usurio dife- a mesma conta de usurio. Sysadmin, pois estes podero realizar
rentes das nativas do Windows, como As contas de servios no podem ter qualquer atividade dentro da instncia
Network Service, Local System ou Local mais privilgios do que o necessrio. As do SQL Server, seja eliminao de um
Service. Isto , devemos configur-los para permisses de Administrador do Sistema processo, excluso e criao de bancos de
ser executado utilizando contas de usurio Operacional e Administrador de Domnio dados ou criao e concesso de acesso aos
criadas e configuradas no servidor local ou, no so requeridas para o funcionamento usurios, entre outras tarefas (Figura 2).
de preferncia, no ambiente de rede. dos servios do SQL Server, por isso, no
Estas contas devem possuir direitos junto devem ser concedidas. As concesses
ao Windows e/ou ao Active Directory para destas permisses colocam no apenas o
iniciarem como servios e, assim, permiti- servidor de dados, mas todo o ambiente de
rem que os servios relacionados ao SQL rede da empresa em risco.
Server tambm sejam iniciados. Adicionalmente s medidas mencionadas,
As contas de servio devem tambm ser devemos evitar que as senhas de acesso s
configuradas com uma senha extremamen- contas de servio se tornem de conheci-
te complexa, para evitar que tentativas de mento dos demais profissionais e usurios
invaso sejam concludas com sucesso. E, da organizao, e sejam utilizadas para se
para evitar que servios parem de funcio- conectar ao servidor, mesmo que utilizadas
nar, recomenda-se possuir uma poltica por algum usurio com perfil administrati-
de senha configurada para que no seja vo. importante que elas sejam utilizadas

Edio 81 SQL Magazine 29

sql81.indb 29 29/10/2010 13:55:56


Segurana no SQL Server

Neste ponto, recomendvel manter a execuo de backups: o recomendado a Deste modo, facilitamos a concesso de
quantidade de usurios com acesso a esta utilizao de uma conta que possua ape- privilgios a usurios novos, pois basta
permisso reduzida e muito bem contro- nas a permisso de backup, nada mais. adicion-lo a Role j existente para que
lada para evitar que usurios que no ne- Deste modo garantimos que se os acessos possua as permisses necessrias. Um
cessitam de permisses administrativas atravs destes usurios carem em mos er- timo exemplo a criao de Roles de-
as tenham e as utilizem de forma errnea radas, a possibilidade de impactos causados partamentais no ambiente da empresa.
ou maliciosa, podendo apagar bancos de por possveis ataques seja mnima, pois o Com isso, quando um novo funcionrio
dados, desligar a instncia do SQL Server usurio possui permisses limitadas. contratado, podemos simplesmente
e, inclusive, ceder os mesmos privilgios criar seu login, seu usurio e adicion-lo
a outras pessoas. Concesso de Privilgios aos Usurios Role correspondente ao departamento
Nunca devemos dar privilgios que onde ir trabalhar. A movimentao
Conta de SA no so necessrios aos trabalhos de do funcionrio entre departamentos
A conta de SA, habilitada automatica- nossos usurios, mantendo-os apenas tambm facilitada, pois basta retirar o
mente quando instalamos o SQL Server com os direitos essenciais s suas tarefas usurio da Role correspondente ao seu
com modo de autenticao SQL Server dirias. antigo departamento e adicion-lo Role
Authentication (tambm chamado de Assim, evitamos que tais permisses de seu novo departamento.
Mixed Mode), deve possuir uma senha sejam exploradas sem o devido cuida-
extremamente forte e ser utilizada ape- do e/ou conhecimento adequado dos Cuidados com a Fixed Database Role
nas quando necessrio. usurios, e reduzimos a superfcie de Public
A utilizao de uma senha forte (que ataque caso invases ocorram atravs A Role Public um agrupamento
contenha ao menos trs tipos diferentes de destes usurios. Esta deciso reduz de genrico em banco de dados de todos os
caracteres: smbolos, nmeros, letras mai- forma significativa a possibilidade de usurios da base de dados correspondente,
sculas ou minsculas) muito importante problemas causados por falha humana, e qualquer permisso concedida a ela apli-
devido conta de SA ser uma conta padro, tal como a execuo de uma query sem cada a todos os demais usurios existentes
sendo popular entre todos que trabalham e os devidos filtros. naquele banco de dados.
estudam o produto, se tornando o primeiro Como qualquer usurio pode usufruir das
e principal alvo aos ataques de hackers. Acesso dos Usurios aos Dados permisses concedidas Role public, nunca
Em paralelo colocao de uma se- Nunca devemos conceder acesso direto devemos garantir permisses a esta Role, a
nha forte, devemos utilizar a conta SA aos dados para os usurios, ou seja, per- no ser que seja estritamente necessrio.
somente quando realmente necessrio, mitir que executem Select e cdigos DML O recomendado, conforme explicado mais
ou seja, em casos de emergncia. Para (insert, update e delete) diretamente nas adiante, concedermos as permisses a
a realizao de tarefas administrativas, tabelas dos bancos de dados. User Database Roles, ou em casos mais
a recomendao utilizar contas sepa- Mesmo que possamos restringir o aces- especficos e em excees, aos usurios.
radas com permisses especficas para so dos usurios atravs de permisses
tal atividade. Usemos como exemplo a nos banco de dados, no devemos conce- Utilizar contas de usurios Windows
der este acesso, pois deixamos parte da Authentication
regra de negcio e a estrutura do banco Sempre que possvel, deve-se optar por
de dados exposta a estes. utilizar logins com mtodos de autenti-
Para estas operaes, devemos sempre cao Windows Authentication para se
criar Views ou Stored Procedures que conectar ao SQL Server devido aos me-
recuperem ou alterem, respectivamente, canismos de autenticao do Windows e
os dados dentro das tabelas. Desta for- do Active Directory permitirem diversas
ma, asseguramos que somente tarefas configuraes de segurana, definio
permitidas sero realizadas, seguindo de polticas de senha, entre outras opes
os procedimentos determinados pelas que, se bem configuradas, melhoram a
regras de negcio da empresa. segurana do ambiente.
O SQL Server no possui como recurso
Agrupar usurios com permisses nativo a possibilidade de definio de
semelhantes polticas de senhas, tais como expirao
Para facilitar o gerenciamento dos usu- de senhas, requisitos de senha, entre
rios e a devida concesso de privilgios, outras boas prticas relacionadas de-
devemos agrupar os usurios de bancos finio de senhas. Entretanto, no SQL
de dados por User Database Roles. Server possvel garantir que regras e

30 SQL Magazine Edio 81

sql81.indb 30 29/10/2010 13:55:57


polticas definidas no ambiente, atravs
do Sistema Operacional e do Active
Directory, tambm sejam vlidas para
o SQL Server.
Embora a maioria das aplicaes no
permita essa configurao, sempre que
possvel devemos optar por esse mtodo
de conexo ao SQL Server tambm para
as conexes das aplicaes.

Garantir a Poltica de Senha da Orga-


nizao
muito importante que as organiza-
es possuam uma poltica que defina
o nvel mnimo de complexidade das
senhas dos usurios, assim como outras
opes relacionadas segurana das se-
nhas. Como mencionado anteriormente,
Figura 3. Opes de configurao da senha
no SQL Server possvel garantirmos
que a senha definida junto ao Active e retirar permisses que j no so mais onde o acesso realmente necessrio e que
Directory ou ao servidor local seja se- necessrias aos usurios. no h nenhuma soluo de contorno.
guida na criao de usurios do tipo SQL Manter habilitados logins que no so
Server authentication. mais utilizados, seja por desligamento de Cuidado com as pastas compartilhadas
Quando criamos um usurio com m- pessoal ou qualquer outro motivo, cria no servidor
todo de conexo definido como Windows uma brecha de segurana para o servi- Devemos sempre ter ateno aos diretrios
Authentication, no configuramos ne- dor de dados, possibilitando o acesso de compartilhados na rede em nosso servidor
nhuma senha pois utilizada a mesma pessoal no autorizado s informaes de dados, mantendo apenas os que forem
definida no ambiente (Servidor Local ou da empresa. considerados realmente necessrios.
Active Directory), com as mesmas regras Devemos sempre desabilitar, bloquear As permisses concedidas a estas pas-
e definies implantadas. ou at excluir, dependendo da poltica de tas devem ser gerenciadas com muita
Mas quando criamos um usurio utili- reteno da empresa, o acesso destes usu- ateno, revisadas sempre que possvel e
zando a opo SQL Server Authentication, rios para evitar estas brechas de segurana limitadas a usurios que dependam des-
podemos solicitar ao SQL Server que res- no ambiente, garantindo maior segurana ta permisso para realizao de alguma
peite as mesmas definies do ambiente aos dados. atividade relacionada ao seu trabalho.
para a complexidade da senha e sua expi- Permitir que qualquer usurio tenha
rao (Figura 3). Nunca conceda permisso procedure acesso a estes diretrios possibilita que
Assim garantimos que os usurios cria- xp_cmdshell eles prejudiquem o servidor, implantando
dos no SQL Server, que estejam com as Usurios que no pertencem ao quadro demasiados arquivos a ponto de prejudi-
opes responsveis por tais configura- responsvel pela administrao do SQL car o espao em disco, ou simplesmente co-
es assinaladas, sigam o mesmo padro Server nunca devem possuir permisses loquem arquivos ilegais ou maliciosos em
definido no ambiente como um todo, tendo procedure xp_cmdshell, devido a esta ter nosso servidor de dados. Isto pode resultar
o mesmo perodo de expirao de senha, acesso ao sistema operacional, podendo em falhas/problemas graves ao ambiente
mesmas definies de complexidade, en- executar comandos sob a conta de usurio e consequentemente, empresa.
tre as demais regras configuradas junto a do servio do SQL Server.
Poltica de Senha da organizao. Dependendo de quais permisses foram Mantenha a auditoria de logins
concedidas conta de servio do SQL Ser- habilitada
Revise frequentemente os logins que ver, possvel que, atravs da procedure O SQL Server permite que auditemos
tm acesso ao SQL Server xp_cmdshell, quem a execute apague arqui- as tentativas de logins realizadas em
muito importante que sejam revisados vos ou diretrios, desligue o servidor, entre cada instncia. Atravs de uma simples
todos os logins da instncia do SQL Server outras aes prejudiciais ao ambiente. configurao, podemos requisitar que
de forma frequente, com o objetivo de A concesso de privilgio para execuo o SQL Server registre cada tentativa de
desabilitar ou excluir os usurios que no desta procedure a usurios de aplicao conexo, seja ela realizada com sucesso
necessitam mais de acesso ao SQL Server deve ser realizada apenas em situaes ou com falha (observe a Figura 4).

Edio 81 SQL Magazine 31

sql81.indb 31 29/10/2010 13:55:57


Segurana no SQL Server

Essa prtica se torna importante para Role Sysadmin, pedindo no momento da Sendo assim, no devemos nos esquecer
analisarmos se nosso servidor est so- instalao que voc informe de forma de garantir a existncia e validar o acesso
frendo alguma tentativa de ataque, e explcita os usurios que sero adminis- de outro usurio com permisses na Role
para identificarmos qual o usurio que tradores da instncia. sysadmin antes de excluirmos este grupo
est sendo utilizado para esta tentativa. Retirando o usurio desta Role, bloquea- da Role com permisses mximas no SQL
Dessa forma possibilitamos uma anlise mos qualquer poder administrativo deste Server.
mais completa da situao e a definio grupo na instncia do SQL Server, restrin-
dos possveis planos de ao corretivos gindo ainda mais a quantidade de pessoas Evite que aplicaes utilizem usurios
com mais propriedade. com esta permisso e aumentando a segu- administrativos
A habilitao desta configurao, em rana do nosso ambiente. Assim garantimos No devemos fornecer aos usurios
muitos casos, pode gerar diversos registros que apenas os profissionais adequados utilizados pela aplicao privilgios
nos arquivos de log do Windows, e, devido responsveis pela administrao do SQL administrativos, muito menos fornecer
a isso, seu impacto considerado negativo Server tenham este acesso com direitos acesso a elas atravs de usurios com
por alguns administradores de banco de administrativos. permisses mximas no SQL Server,
dados e administradores de rede. Indiretamente, com o usurio BUILTIN\ tal como membros da Fixed Server Role
Administrators na Role Sysadmin, delega- Sysadmin ou a prpria conta SA.
Remova o grupo BUILTIN\Administra- mos o poder de conceder privilgios ins- As aplicaes que possuem acesso ao banco
tors da Role Sysadmin tncia do SQL Server aos administradores de dados atravs de um usurio fixo devem
Devemos sempre remover o grupo de rede de nossa empresa. Isto acontece pelo utilizar um usurio que possua apenas as
BUILTIN\Administrators (ou Admi- fado de eles poderem acessar a instncia permisses necessrias para seu funciona-
nistradores, se o Windows for verso com totais privilgios, realizarem quaisquer mento e, caso alguma permisso incomum
em Portugus) da Role Sysadmin das atividades e fornecer permisses a outros seja realmente necessria, recomendvel
verses anteriores ao SQL Server 2008 usurios e grupos do Windows (Figura 5). uma monitorao do usurio para verificar
para evitarmos que qualquer membro da A retirada deste usurio deve ser realizada o que a aplicao realmente executa e se
Role Administrators do Windows, seja com ateno, pois se estivermos acostuma- pode gerar qualquer impacto no servidor e
administradores locais ou de rede, tenha dos a acessar o SQL Server deste modo, nos demais bancos de dados.
acesso administrativo a nossa instncia usando um usurio que faa parte do grupo
do SQL Server. BUILTIN\Administrators, e no possuirmos Nunca conecte seu servidor de dados
No SQL Server 2008 no existe esta outro usurio com permisses idnticas diretamente internet
necessidade devido a sua instalao no para nos conectar aps a retirada, podemos Nosso servidor de dados nunca deve
colocar por padro este usurio (BUIL- ficar sem acesso administrativo instncia estar conectado diretamente internet,
TIN\Administrators) nesta Fixed Server do SQL Server. mas sim estar sempre protegido por

Figura 4. Configurando a auditoria de logins Figura 5. Grupos da Role Sysadmin

32 SQL Magazine Edio 81

sql81.indb 32 29/10/2010 13:55:57


um ambiente de rede bem planejado e SQL Server, para prevenir que ocorram que garantem acesso apenas aos usu-
seguro, com servios de firewall e Anti- em nosso ambiente. rios autorizados a consultar estes
Vrus para proteger as informaes. Acompanhar o lanamento de Service dados.
A conexo direta do servidor inter- Packs e HotFixes, assim como planejar, Embora existam outros recursos
net um ponto muito explorado por testar e implant-los nos ambientes possveis a serem adotados, tais como
pessoas mal intencionadas, devido de desenvolvimento, homologao e consultas utilizando OPENQUERY, a
facilidade e a quantidade reduzida produo, se tornam algumas das ati- utilizao do Linked Server garante
de barreiras a serem quebradas para vidades de extrema importncia para o conhecimento e a administrao de
se chegar ao alvo principal, as infor- alcanar xito nesta prtica. quem est consultando e quais fontes de
maes. dados esto sendo utilizadas.
Mantendo-o sempre protegido por Backups Seguros
um firewall, garantimos que antes de Se sua estratgia de backup realiz- Concluso
usurios externos chegarem a nossa los em disco, assegure-se de que os Como demonstrado no artigo, nem
instncia do SQL Server, eles tm que diretrios utilizados so seguros e todas as recomendaes so aplicveis ao
passar pelo nosso firewall, tornando o que possuem as devidas restries de ambiente que administramos, sejam por
caminho mais difcil e complicado para acesso. motivos tcnicos, polticas da empresa,
possveis invasores. Paralelamente ao cuidado sobre os di- entre outras possibilidades.
retrios onde os backups so realizados, As recomendaes e medidas que
Instalao de Anti-Vrus recomenda-se providenciar uma ferra- conseguimos implantar nos ajudam
No devemos implantar qualquer An- menta de terceiros que criptografe os a ter um controle maior de nosso am-
tivrus no servidor onde o SQL Server arquivos de backup, evitando que, caso biente, restringindo acessos indevidos
esteja instalado, pois isso consumir a segurana do diretrio seja quebrada e, consequentemente, diminuindo a
recursos no servidor degradando o de alguma forma, o roubo destes arqui- probabilidade da ocorrncia de indispo-
desempenho dos bancos de dados e vos gere a menor quantidade possvel nibilidades no ambiente provocadas por
gerando um impacto negativo sobre de prejuzos organizao. erros humanos ou ataques de hackers.
as aplicaes. Se os backups forem realizados no dis- Seguindo a linha de raciocnio apre-
Para contornar, podemos instalar o co local do servidor de dados, devemos sentada aqui, aprimorando-as com
Anti-Vrus em uma mquina paralela, providenciar junto aos responsveis possibilidades e melhorias especficas a
na mesma rede, e configur-lo para exe- a movimentao deste backup para cada empresa, cada situao e negcio
cutar as verificaes em nosso servidor mdias de armazenamento, tais como especifico de nossa organizao, conse-
de dados, sempre evitando verificaes fitas e DVDs, visando possuir a cpia guimos implantar nveis de segurana
em horrios de pico de utilizao, tal destes arquivos e prevenir possveis em nosso ambiente suficientes para
como horrio comercial. problemas caso o disco local do servi- garantir a proteo do bem mais valioso
Podemos tambm configurar o Anti- dor apresente falhas. para nossa empresa: os dados.
Vrus para evitar a realizao de veri- Aps a movimentao ou a realizao
ficao nos diretrios onde os arquivos de backups diretamente para as fitas de
de dados, de log e os binrios de insta- armazenamento, elas devem ser guar- Felipe de Assis
felipedeassis@live.com
lao do SQL Server esto localizados. dadas em local seguro, respeitando as
Felipe de Assis DBA SQL Server
Dessa forma evitamos a conteno ou orientaes do fabricante da mdia, e
h aproximadamente dois anos,
bloqueio destes arquivos por parte do mantendo-as (de preferncia) em local graduando em Cincia da Computao
sistema operacional e do Antivrus, e diferente dos servidores para evitar e MCITP SQL Server 2005, possui
a gerao de possvel impacto negativo que desastres, tais como incndios, experincia nas plataformas SQL Server e Sybase
no desempenho do servidor. destruam tanto a origem principal dos e possui conhecimento em desenvolvimento .NET.
dados (servidores) quanto os backups Atualmente trabalha em uma empresa especializada
Mantenha atualizado o Sistema propriamente ditos. em administrao remota de banco de dados.
Operacional e o SQL Server
Manter o Sistema Operacional e o SQL Consultas Distribudas D seu feedback sobre esta edio! eu
Feedback
s

Server atualizados reduz a possibilida- Procure sempre optar por utilizar


D

A SQL Magazine tem que ser feita ao seu gosto.


sobre e

de de falhas relacionadas explorao Linked Servers para possibilitar a exe-


Para isso, precisamos saber o que voc, leitor,
s

ta

de brechas de segurana. Por isso, cuo de consultas distribudas entre


edio

acha da revista!
importante estarmos sempre informa- as diferentes fontes de dados presentes
dos sobre a descoberta de novos erros, em seu ambiente. Sua estrutura permite D seu voto sobre este artigo, atravs do link:
problemas ou situaes encontradas no que realizemos diversas configuraes www.devmedia.com.br/sqlmagazine/feedback

Edio 81 SQL Magazine 33

sql81.indb 33 29/10/2010 13:55:57


Seo Banco de Dados/Persistncia: "Nesta seo voc encontra artigos banco de dados, SQL ou pers istnci

Implementando uma estratgia d e


Desenvolvendo solues de backup do dia a d

G Resumo DevMan
eralmente, quando instalamos
ou desenvolvemos um aplicativo,
uma das coisas mais importantes De que se trata o artigo:
que devemos ter em mente o backup. Pre- Este artigo descreve diferentes solues de backup existentes no SQL Server 2008, alm de abordar um
cisamos manter cpias do aplicativo para cenrio prtico informando como podemos implementar e utilizar uma estratgia de backup adequada
diversos fins. No entanto, alguns podem e correta.
se perguntar: precisamos mesmo sempre
de backup? A resposta deve ser SIM, sem Para que serve:
qualquer dvida. importante termos Este artigo tem por objetivo fornecer ao usurio uma noo a mais de como implementar e utilizar
sempre uma cpia segura dos dados que uma soluo de backup planejada de forma adequada e robusta. Desta forma, os DBAs no estaro
fazem parte de uma empresa. frequentemente apagando incndios que muitas das vezes ocorrem por planejamento mal elaborado
Uma das definies para a palavra da estratgia de backup.
backup : cpia de segurana de dados
feita geralmente em HDs, CDs, DVDs, Em que situao o tema til:
Fitas-DAT, etc. Desde j, conhecemos que Este artigo pode ser til em ambientes corporativos, onde um dos principais objetivos garantir a segu-
os dados podem ser armazenados em rana das informaes que esto sendo processadas diariamente e armazenadas no banco de dados.
diversos tipos de mdia. O lugar de arma-
zenamento est de acordo com a necessi-
dade e a segurana de cada um, porm, algumas perguntas que podem ser con-
de consenso geral que todas as informa- sideradas importantes para cada um com
Nota do DevMan 1
es devem estar seguras e protegidas. base no seu ambiente de trabalho:
BrainStorming
Alguns questionamentos podem existir Quais so os dias da semana que o banco
Brainstorming (literalmente: tempestade cerebral em
neste momento, como: onde ser o me- de dados estar sendo mais utilizado pela ingls) ou tempestade de ideias, mais que uma tcnica
lhor lugar para o backup estar guardado? aplicao? de dinmica de grupo, uma atividade desenvolvida para
Ser que o backup poder estar guardado Quais so os horrios de pico em relao explorar a potencialidade criativa de um indivduo ou de um
grupo colocando-a a servio de objetivos pr-determinados.
dentro de uma sala especfica dentro da utilizao do sistema durante a semana?
empresa? Ser que devemos lev-lo para Existe algum mtodo do SGBD que pro- Dentre diversos outros mtodos, a tcnica de brainstorming
prope que um grupo de pessoas - de duas at dez - se
um lugar fora do ambiente da empresa? cesse com mais velocidade consultas num renam e utilizem as diferenas em seus pensamentos e
Como podemos perceber, a melhor res- perodo de mltiplos registros? ideias para que possam chegar a um denominador comum
posta depender da situao em que voc Qual limite mximo de tempo que uma eficaz e com qualidade, gerando assim ideias inovadoras que
levem o projeto adiante.
se encontra, mas lembre-se: esta uma transao pode consumir (para evitar
grande responsabilidade e devemos ter o gargalos)? Quando se necessita de respostas rpidas a questes
relativamente simples, o brainstorming uma das tcnicas
maior cuidado possvel, pois geralmente Com que frequncia os dados no banco mais populares e eficazes. Esta tcnica vem sendo difundida e
temos algo em mos que jamais pode ser sero modificados? inserida ainda em diversas outras reas, tais como educao,
negcios, informtica, Internet e outras situaes mais tcnicas.
deletado, perdido e danificado.
Antes que uma estratgia seja definida, Diversos SGBDs permitem o backup de
uma das atividades que pode ser til a dados. Podemos considerar essa opo
elaborao de um plano de ao, e para uma das mais bsicas que eles oferecem ao e que utilizaremos como exemplo um banco
isso podemos realizar uma tcnica conhe- usurio. Neste artigo, utilizaremos o SQL de dados simples para fins demonstrativos e
cida como brainstorming (Nota DevMan 1) Server 2008 R2 com objetivo de apresentar este estar disponvel para download.
para planejarmos a melhor estratgia de algumas opes que so oferecidas para o
backup para nossa empresa. usurio atravs de um cenrio prtico. Vale Cenrio prtico para uso de backup
Apesar de nunca sabermos qual seria informar que no demonstraremos como Para facilitar o entendimento sobre o
a melhor estratgia de backup, aqui vo proceder para efetuar a restaurao do banco uso de backup no SQL Server, iremos rea-

34 SQL Magazine Edio 81

sql81.indb 34 29/10/2010 13:55:58


ou pers istncia"

d e backup no SQL Server 2008


dia a dia
Lucas Souza

lizar nossas operaes atravs do Object LOG: tipo de backup


Explorer (ver Nota DevMan 2). Nosso no qual a cpia dos da-
cenrio est basicamente criado em cima dos feita para restaurar
de um exemplo de mini-loja que forne- informaes em pontos
ce ingressos apenas para entrada em especficos de um banco
teatros. Alm do domnio da aplicao, de dados, baseando-se,
sabemos que de acordo com os planos por exemplo, nos logs
verificados, a quantidade de transaes gerados em um servidor.
efetuada no banco de dados frequente- Por esta opo permitir Figura 1. Estratgia de backup que iremos seguir
mente baixa. um controle maior do que
Apesar de existirem diversas estrat- ser armazenado, esta ser agendada para
gias de backup para a rea de banco de executar 12 vezes diariamente.
dados, a Figura 1 ilustra uma estratgia
que ultimamente adotada por vrios Como percebemos, no h uma regra geral.
profissionais. Precisamos ser flexveis em relao estra-
Observe que, com base na estratgia que tgia de backup a adotar em nosso cenrio.
temos na Figura 1, possumos trs opes Conforme citado acima, existem diversas
de backup, sendo elas: estratgias de backup para os dados, e pre-
FULL: backup completo agendado para cisamos levar em considerao as caracters-
executar uma vez por dia, porm apenas ticas da nossa empresa ou projeto.
nos dias de domingo, tera e quinta; Neste artigo ser implementada a es-
DIFFERENTIAL: backup que contm tratgia descrita acima e poderemos
um nvel balanceado de dados agen- acompanhar passo a passo a sua definio
dado para executar diariamente quatro utilizando o SQL Server.
vezes por dia. Observe que esta opo Primeiramente, abra o SQL Server 2008,
geralmente possui uma quantidade menor que por padro est situado em Iniciar Figura 2. Identificando o banco de dados db_ticket
de informao quando comparada com a Programas Microsoft SQL Server 2008
opo anterior. SQL Server Management Studio.
Conecte, de preferncia, com a conta
Administrador ou alguma outra que possua
os mesmo privilgios.
Nota do DevMan 2
A Figura 2 ilustra o banco de dados que
Object Explorer utilizaremos como exemplo (db_ticket),
Object Explorer um componente do SQL Server Management relembrando que no iremos mencionar
Studio que permite realizar conexes com instncias de servidores como restaurar o banco de dados (existem
de Banco de Dados, Servios de Anlises de banco de Dados, diferentes mecanismos para restaurao
Servios de Integrao, Servios de Relatrio, dentre outros.
de um banco de dados, no final do artigo,
Ele prov uma viso de todos os objetos em um servidor e na seo de links, so apresentados links
apresenta uma interface grfica para gerenciar tais objetos. As
capacidades do Object Explorer variam de acordo com o tipo de para trabalhos que tratam diretamente da
servidor no qual o SQL Server est instalado, mas geralmente restaurao de bancos de dados). O script
inclui funcionalidades que apoiam o desenvolvimento para
para criao do nosso banco de dados de
bancos de dados e funcionalidades de gerenciamento para
todos os tipos de servidores. exemplo pode ser baixado no portal da
SQL Magazine.

Edio 81 SQL Magazine 35

sql81.indb 35 29/10/2010 13:55:59


Implementando uma estratgia de backup no SQL Server 2008

frequncia e envolvem a repetio de deter-


minados comandos. Alm disso, possvel
que essas rotinas sejam agendadas para se-
rem executadas em alguns momentos, o que
nos permite implementar a nossa estratgia
de backup apresentada na Figura 1.
Figura 3. Verificando as configuraes do SQL Server Agent Para iniciar, criaremos o primeiro job cujo
objetivo criar um evento para executar
o comando de backup do nosso banco de
dados. Para isso, clique na opo SQL Ser-
ver Agent, e em seguida clique com o boto
direito em cima da opo Jobs e clique em
New, conforme a Figura 4.
Aps a janela ser aberta, na caixa de texto
ao lado do campo Name preencha com
job_bkpFull. No campo Owner ser informada
uma conta relacionada ao Job (coloque uma
de sua preferncia, desde que tenha permis-
so para executar as tarefas de execuo do
backup no banco de dados). Em Category,
utilizaremos a opo default [Uncategorized
(Local)], e no campo Description, informe o
seguinte texto: Este job ter por objetivo
disparar um backup completo do banco de
dados. O resultado do preenchimento desta
tela pode ser visto na Figura 5.
Feito isto, clique na opo Steps, que fica
Figura 4. Servio SQL Server Agent New Job Figura 5. Configurando as propriedades Jobs localizado na aba a esquerda na tela logo
abaixo da opo General. Em seguida, cli-
que na opo New, e observe que uma nova
Para implementar as tcnicas de backup Neste caso, percebemos que a utilizao janela foi exibida, onde devemos informar
citadas neste artigo, iremos utilizar um do SQL Server Agent pode ser bastante til as seguintes propriedades (Figura 6):
servio bastante interessante provido no para qualquer cenrio que utilize passos Step name: jobFull;
SQL Server, o SQL Server Agent. para chegar em uma determinada tarefa. Type: Transact-SQL script(T-SQL);
Antes de dar incio apresentao da Run as: deixe em branco;
Conhecendo o Servio SQL Server Agent estratgia de criao e agendamento de database: mster;
Atravs do SQL Server Agent nossos pro- backups, iremos verificar se o servio command: backup database db_ticket to disk
cessos sero automatizados sem que haja do SQL Server Agent est funcionando = g:\db\db_ticket_bkpFULL.
a presena de um indivduo para executar corretamente. Para isso, clique em Iniciar
as operaes. Sendo assim, o SQL Server Programas Microsoft SQL Server 2008 Observe que neste momento que infor-
Agent um servio que permite automati- R2 Configuration Tools Configuration mamos o comando de backup, informando
zar diversas ferramentas administrativas e Manager. O resultado ser uma tela seme- ainda que o banco de dados ser armaze-
comandos Transact-SQL, por exemplo: lhante apresentada na Figura 3. nado em um local definido por ns. Para
Agendamento de tarefas; Aps termos o banco de dados e o servio mais informaes sobre o local de arma-
Processamento de alertas; SQL Server Agent funcionando corretamen- zenamento, veja a sesso Links.
Monitoramento de atividades dirias de te, daremos inicio criao dos backups Feito isso, clique na opo Advanced (aba
gerenciamento de banco de dados (onde baseando-se na estratgia que foi adotada do lado esquerdo da tela) e selecione a op-
podemos incluir tarefas de backup); (ver Figura 1). Isso ocorrer atravs da o Quit the job reporting sucess. Isso tem por
Manuteno de rotinas; criao e agendamento de jobs. objetivo informar o relatrio de sucesso
Replicao automtica de dados entre Jobs pode ser definido como uma rotina caso este seja executado com sucesso. Se
diferentes servidoresl que executada automaticamente por in- deseja conhecer mais sobre as funciona-
Informaes processadas que podem ser termdio de ferramentas administrativas lidades desta janela, veja a sesso Links e
enviadas para e-mails. que geralmente so executadas com grande Referncias, aps isto clique em OK.

36 SQL Magazine Edio 81

sql81.indb 36 29/10/2010 13:55:59


Figura 6. Configurando as propriedades de backup Jobs Figura 7. Configurando as propriedades de agendamento Jobs

Neste momento, aps ter feito a criao Ser executado um backup full do banco E em Description apresente o seguinte tex-
do job, iremos iniciar a criao do agenda- de dados em um horrio no comercial. to: Este job ter por objetivo disparar um
mento, ou seja, indicar em quais momentos Devido a ser um horrio no agradvel backup diferencial do banco de dados.
este job ser executado automaticamente para os usurios, as aplicaes que esto
por nosso servidor de banco de dados. envolvidas com este banco de dados no Feito isso, clique novamente na aba
Para isso, clique em Schedules (localizado correro o risco de sofrer a falta de dispo- Steps e informe as seguintes propriedades
na Figura 5 na aba esquerda logo abaixo nibilidade. (Figura 9):
de Steps) e em seguida selecione a opo Ao trabalhar com a venda de sites, por Step name: jobDiff;
New. Feito isso, preencha os campos com exemplo, preciso analisar perodos de Type: Transact-SQL script(T-SQL);
as seguintes informaes (Figura 7): pico nas buscas por ingresso a fim de Run as: deixe em branco;
Name: jobFull; evitar que seja realizado um backup full no database: master;
Schedule type: Recurring, e marque a momento em que o site mais utilizado command backup database db_ticket
opo ao lado de Enabled; pelos seus usurios. Esta operao deixa to disk = g:\db\db_ticket_bkpDIFF with
Occurs: Weekly; qualquer acesso a banco de dados mais differential.
Recurs every: 4; marque Tuesday, Thurs- lento. Por isso, atentar para a estratgia
day, Sunday. Lembre-se que estes dias foram adequada fundamental para evitar ope- Feito isso, clique em Advanced, selecione
definidos em nossa estratgia (Figura 1). raes mal planejadas. a opo Quit the job reporting sucess. Isso
Em seguida, marque a opo Occurs once tem por objetivo informar um relatrio
at e defina o valor para 04:30:00, e por l- timo, j temos nosso primeiro job cria- de sucesso caso seja executado com su-
timo informe se ter fim este Job. Se sim, do. Daremos continuidade ao restante. cesso.
selecione End Date e indique uma data. Para isso, repita o mesmo processo ante- Neste momento, clique na aba Schedules
Se no, escolha No end date. rior, clique com o boto direito em Jobs e em seguida na opo New. Nesta tela,
New Job e informe as seguintes proprieda- defina os campos com as seguintes infor-
Aps isto, clique em OK e por fim em des (Figura 8): maes (Figura 10):
OK novamente para finalizar a criao de Na caixa de texto ao lado de Name, colo- Name: jobDiff;
nosso primeiro job. que job_bkpDiff; Schedule type: Recurring, e marque a
Observe que essa estratgia de backup Owner informar uma conta relacionada opo ao lado de Enabled;
voltada para um cenrio de uma loja que ao Job (coloque de sua preferncia, desde Occurs: Daily, Recurs every: 30;
fornece ingressos para entrada em teatros. que tenha permisso para executar as Occurs every: marque a opo Occurs
Ento existem diversos motivos para o tarefas que esto por vir); every e defina o valor para 10;
backup full estar com essas definies, por Em Category utilizaremos a opo default e m Starting at, 04:00:00, Ending at,
exemplo: [Uncategorized (Local)]; 23:59:59,

Edio 81 SQL Magazine 37

sql81.indb 37 29/10/2010 13:55:59


Implementando uma estratgia de backup no SQL Server 2008

Por ltimo, informe se este Job ter mais especfico de uma determinada in- Owner estar informando uma conta relacio-
fim. Se sim selecione End Date e indi- formao que ser armazenada no banco nada ao Job;
que uma data. Se no, escolha No end de dados, e como sempre, os horrios de E m Category, utilizaremos a opo default
date. backup esto sempre procura de no se [Uncategorized (Local)];
aproximar de horrio de pico. E em Description, apresente o seguinte texto:
Aps isto, clique em OK e por fim em timo! Para finalizarmos a ltima Este job ter por objetivo disparar um backup
OK novamente para finalizar o nosso operao de backup tipo LOG, repita de log do banco de dados.
segundo job. novamente o passo anterior. Resumin-
Veja que a estratgia de backup com do: clique com o boto direito em Jobs e Aps isto, clique na aba Steps e clique em New.
base na opo Diferencial foi definida por selecione New Job, informe as seguintes Uma nova janela ser exibida, onde informa-
intervalos, apesar da opo Full no ser. informaes (Figura 11): mos as seguintes propriedades (Figura 12):
Dessa forma, podemos obter um controle Name, coloque job_bkpLog; Step name: jobLOG;

Figura 8. Configurando as propriedades principais Jobs Figura 9. Configurando as propriedades de backup Jobs

Figura 10. Configurando as propriedades de agendamento Jobs Figura 11. Configurando as propriedades principais Jobs

38 SQL Magazine Edio 81

sql81.indb 38 29/10/2010 13:56:00


Figura 12. Configurando as propriedades de backup (log) Jobs Figura 13. Configurando as propriedades de agendamento Jobs

Type: Transact-SQL script(T-SQL); Schedule type, Recurring [V];


Run as: deixe em branco; Occurs, Daily;
database: master; Recurs Every, 30;
command: backup log db_ticket to disk O ccurs every, 7 hour(s), Starting At,
= g:\db\db_ticket_bkpLOG. 02:00:00, Ending at, 23:59:59, Start date,
selecione a data desejada, e por ltimo
Feito isso, clique em Advanced, selecione informe se ter fim este Job, se sim se-
a opo Quit the job reporting sucess. lecione End Date e indique uma data,
timo, neste momento j temos trs Jobs se no, escolha No end date e aps isto
criados, cada um deles tem um objetivo clique em OK.
distinto:
1. O primeiro backup foi criado para ser Nesta ltima opo de backup (backup
um dos mais rgidos em relao quanti- log), temos um controle um pouco mais
dade de dados acessada durante a opera- especfico sobre os dados a serem copiados
o (backup full). quando comparamos com a estratgia de
2. O segundo backup tem por objetivo backup anterior. Lembre-se que essa estra-
armazenar uma quantidade menor de tgia est sendo definida para uma loja de Figura 14. Object Explorer Jobs existentes
informaes (backup diferencial), pois tra- ingressos que est iniciando seus projetos
balha apenas com um backup que lida h pouco tempo, ou seja, nossa estratgia Verificando o funcionamento do Backup
apenas com parte dos dados contidos em ainda no est baseada para aplicaes de Apesar dos backups possurem seus
um banco de dados. grande porte. agendamentos pr-definidos, podemos
3. No ltimo backup, criamos o tipo Observe que aps voc ter clicado em ok simular uma execuo sem que haja a ne-
de backup que envolve poucos dados, para finalizar o passo anterior, a prxima cessidade de esperarmos para os devidos
normalmente trabalhando com partes janela exibir as informaes conforme horrios. Para isso, clique com o boto
especficas dos dados alteradas a partir de definimos para ambos Steps e Schedules direito sobre o JOB desejado, no caso
determinados pontos de uso identificados (Passos e Agendamentos). Feito isso, clique utilizaremos a opo job_bkpFull como
a partir dos arquivos de log (backup log). em OK, e por fim em OK novamente para exemplo, e em seguida clique em Start Job
finalizar o nosso terceiro job. at Step. Para os demais testes, basta repetir
Por ltimo, repita mais uma vez os passos Observe que neste momento j temos o mesmo procedimento.
para agendamento do job, lembrando de nossa tarefa completa (Figura 14). Com Observe a Figura 15 que ilustra as trs
alterar as propriedades (Figura 13): isso, basta esperar os backups conforme diferentes formas de backup que utiliza-
Name, jobLog; foram registrados e agendados. mos com base nesse artigo.

Edio 81 SQL Magazine 39

sql81.indb 39 29/10/2010 13:56:00


Implementando uma estratgia de backup no SQL Server 2008

SQL Server TechNet:


http://technet.microsoft.com/en-us/
sqlserver/
Microsoft SQL Server 2008 R2
http://www.microsoft.com/sqlserver/2008/en/
Figura 15. As trs diferentes opes de backup us/r2.aspx
Os arquivos apresentados nesta figura uma miniloja que fornece ingressos Top 10 Best Practices for SQL Server
contm exatamente o resultado dos co- apenas para entrada em teatros. De acor- Maintenance for SAP
mandos de backups definidos ao longo do com os planos de estudo adotados, http://technet.microsoft.com/en-us/library/
de nosso artigo, ou seja, os registros do verificamos que as transaes ainda so cc966447.aspx
banco de dados copiados, podendo ento poucas, dessa forma implementamos SQL Server Backup Best Practices
ser armazenados em outra mdia ou no uma estratgia de backup utilizando as http://www.sqlmag.com/article/backup-recovery/
prprio servidor. Este resultado confirma opes FULL (backup completo), DIFFE- sql-server-backup-best-practices.aspx
o funcionamento de nossa estratgia de RENTIAL (backup que contm um nvel Storage Top 10 Best Practices
backup. A partir disso, o DBA precisa balanceado de dados) e por ltimo LOG http://technet.microsoft.com/en-us/library/
apenas ajustar os agendamentos e os tipos (backup que frequentemente utilizado cc966534.aspx
de backup de acordo com o cenrio de sua para restaurar informaes em pontos
empresa. especfico). Neste sentido, utilizamos
Best Practices Backup System Databases
in SQL Server
o servio do SQL Server chamado SQL
http://www.mssqltips.com/tip.asp?tip=1855
Melhores prticas Server Agent para agendar rotinas de
Esta seo descreve algumas das boas backup sem que haja a presena de um Introduction to Backup and Restore
prticas que podem ser seguidas por DBAs profissional para executar tal atividade, e Strategies in SQL Server
a fim de simplificar o processo de defini- por ltimo, apresentamos algumas boas http://msdn.microsoft.com/en-us/library/
o e implementao das estratgias de prticas para o uso de backups. ms191239(SQL.90).aspx
backup em seus empresas e projetos. SQL Server Backups - Frequently Asked
Obtenha sempre uma estratgia de ba- Questions and Best Practices
ckup para seus dados; Lucas Souza http://www.tek-tips.com/faqs.cfm?fid=5742
Determine onde seus dados sero arma- Lucas.it@hotmail.com
Understanding Backup, Restore and
zenados; Graduando em Cincias da
Disaster Recovery
Crie um plano de desastre, ou seja, se Computao pela Faculdade Fa-
rias Brito. Possui certificaes MCTS http://technet.microsoft.com/pt-br/library/
algo ocorrer de forma inesperada, para
Administration e Development em dd876874(EXCHG.140).aspx
onde devo recorrer;
SQL Server 2008, e atualmente trabalha na empresa BACKUP (Transact-SQL)
Atualize as estatsticas em grandes ta-
VTI - solues em tecnologia. Seus conhecimentos http://msdn.microsoft.com/en-us/library/
belas semanalmente; incluem design, implantao e manuteno de
Utilize quando possvel a tcnica brains- ms186865.aspx
sistemas de banco de dados e desenvolvimento
torming para gerar ideias; de solues para a internet. Tambm escritor e RESTORE
Elabore testes de backup e agendamento colaborador de diversas publicaes nacionais e co- http://msdn.microsoft.com/en-us/library/
antes que sua estratgia esteja em produ- munidades brasileiras sobre as solues Microsoft. aa238405(SQL.80).aspx
o; Atualmente reside em Fortaleza, Cear, com sua
Backup Overview (SQL Server)
Implemente uma estratgia com a uti- famlia, em horas vagas l o livro que tem por ttulo
http://msdn.microsoft.com/en-us/library/
lizao de um Conjunto Redundante de a Biblia Sagrada.
ms175477.aspx
Discos Independentes RAID;
Overview of Restore and Recovery in SQL
Utilize o servio SQL Server Agent para D seu feedback sobre esta edio! eu
Feedback

Server
s
D

agendamento de tarefas, rotinas, coman- A SQL Magazine tem que ser feita ao seu gosto.
sobre e

http://msdn.microsoft.com/en-us/library/
dos e outros. Para isso, precisamos saber o que voc, leitor,
s

ms191253(SQL.90).aspx
ta
edio

acha da revista!
Concluso Backing Up and Restoring Databases in SQL
D seu voto sobre este artigo, atravs do link: Server
Este artigo teve por objetivo apresentar
www.devmedia.com.br/sqlmagazine/feedback http://msdn.microsoft.com/en-us/library/
uma estratgia de backup baseada em
ms187048(SQL.90).aspx

40 SQL Magazine Edio 81

sql81.indb 40 29/10/2010 13:56:02


Edio 81 SQL Magazine 41

sql81.indb 41 29/10/2010 13:56:05


Seo Banco de Dados/Persistncia: "Nesta seo voc encontra artigos banco de dados, SQL ou pers istnci

MySQL Performance Diagnostics &

C Resumo DevMan
omo todos sabem, a Oracle com-
prou a Sun, que por sua vez,
anteriormente havia comprado a De que se trata o artigo:
MySQL AB (Nota DevMan 1), empresa Da configurao para Performance Tuning de um banco de dados em MySQL com objetivo de otimizar
criadora do Banco de Dados MySQL. o desempenho deste Banco de Dados. Este artigo o primeiro de uma sria sobre Performance Tuning
Eu no tive, e continuo no tendo dvidas em MySQL.
de que a Oracle ir investir cada vez mais
no MySQL, pois creio que, para a Oracle Para que serve:
Corporation, ele no um competidor Para configurar o MySQL corretamente para que ele utilize de forma otimizada o mximo de recursos
direto dos Bancos de Dados Oracle: ele possveis do ambiente computacional onde est instalado.
um competidor direto do SQL Server
e do PostgreSQL. No quero dizer aqui Em que situao o tema til:
que um Banco de Dados melhor do Em casos onde o poder de processamento so caractersticas fundamentais do ambiente.
que outro, acredito que cada um tem seu
campo de uso. Portanto, espero ver mais
alguns anncios da Oracle a respeito de mantenedora do Engine InnoDB (o mais
melhorias de escalabilidade do MySQL, utilizado em Bancos de Dados MySQL) j Nota do DevMan 1
especialmente em ambientes Windows fora comprada pela Oracle antes mesmo da
Server, muito em breve. compra da MySQL AB pela Sun. MySQL AB
Confirmando minhas suspeitas, h al- O MySQL um banco de dados perigoso MySQL AB (fundada em 1995 e adquirida pela Sun
guns meses a Oracle anunciou, na prpria para os DBAs dentro das empresas. Isto Microsystems em 2008) foi a empresa responsvel pela criao
do MySQL assim como de produtos tais como MySQL Cluster. A
MySQL Conf, melhorias de escalabilidade porque muitas vezes estes bancos de dados empresa est dualmente sediada em Uppsala, na Sucia, e em
no MySQL, adotando a rvore 5.5 como a aparecem como suporte a alguma aplica- Cupertino, nos Estados Unidos, com escritrios em outros pases
sucessora da 5.1 - descartando a 5.4 (que o especfica, criada para resolver algum (Paris, Frana; Munique, Alemanha; Dublin, Irlanda; Milo, Itlia;
e Tquio, Japo).
foi iniciada pela Sun) e 6.0 (que foi ini- problema pontual (por exemplo, gerar um
ciada antes da 5.4, pela MySQL AB), pelo relatrio executivo) sem contato com a rea Com cerca de 400 funcionrios em 25 pases, a MySQL AB foi
uma das maiores empresas de open source do mundo. Cerca de
menos por enquanto. Mesmo descartando de TI (e os DBAs), at que ele se torne um 70% dos empregados trabalhavam para o MySQL a partir de
as verses anteriores, as funcionalidades sistema importante demais e, subitamente, suas casas.
criadas nestas verses foram incorporadas passe a ser de responsabilidade da equipe
verso 5.5, hoje em estgio Beta. de infraestrutura. Quando chega a este
Mesmo com as melhorias de escalabi- ponto, geralmente ele j est com proble- Diagnostic & Tuning. E se voc acha que
lidade apresentadas nos Benchmarks, o mas de desempenho, e sem uma estrutura apenas clientes ou projetos pequenos, ou
MySQL no tem um bom desempenho de Backup ou sem uma estratgia de Disas- programas atrs de Websites utilizam o
com a configurao padro. Alm disso, ter Recovery (Recuperao de Desastre). MySQL, voc est enganado. Os bancos
um dos Bancos de Dados mais sensveis Adicionalmente, so raros os bons Treina- de dados com uso mais intenso com que
a parmetros do mercado, fazendo com mentos Avanados em MySQL para DBAs, j trabalhei foram todos MySQL, e todos
que uma pequena alterao no arquivo de e muitos DBAs com experincia de outros de clientes grandes.
inicializao traga um grande benefcio, bancos de dados tendem a negligenciar Bem, vamos comear esta srie abordan-
ou cause um grande desastre na aplica- estes aspectos do MySQL, por achar que do alguns destes parmetros, apresentan-
o. Para complicar ainda mais, o MySQL ele um SGBD fcil. do exemplos prticos, com melhoras reais
no propriamente um SGBD, mas um Mas como j explicamos, a arquitetura de desempenho. Fiz os testes abaixo no
encapsulador de Engines de SGBDs, como de encapsulamento de Engines do MySQL meu notebook, um Dual Core com 4GB de
o MyISAM e InnoDB, que j vem habilita- o torna um dos mais complexos do mer- RAM, rodando Ubuntu 10.4, e o MySQL
dos por padro. A propsito, a Innobase, cado, principalmente para Performance padro desta distribuio, o 5.1.41.

42 SQL Magazine Edio 81

sql81.indb 42 29/10/2010 13:56:05


ou pers istncia"

cs & Tuning - Parte 1


Ricardo Portilho Proni

Listagem 1. Comandos SELECT para mostrar a estrutura e tamanho da tabela teste


01. ricardo@ricardo-laptop:~$ mysql -u root -pMinhaSenha 22. +--------------+-----------------------------------+
02. Welcome to the MySQL monitor. Commands end with ; or \g. 23. | id_cliente | nome_cliente |
03. Your MySQL connection id is 6 24. +--------------+-----------------------------------+
04. Server version: 5.1.41-3ubuntu12.6 (Ubuntu) 25. | 1 | c?h_%IGn[Y3jO*z"D50~ |
05. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 26. | 2 | ,,,14W+})\&q/a1;2_E* |
27. | 3 | >e5+677v<XIy6n?v9FsL |
06.
28. | 4 | !1:ihxFk]BCKfkfZiz)k |
07. mysql> USE test; 29. | 5 | z[4k@t/"&8e`!K~ps>?* |
08. Reading table information for completion of table and column names 30. +---------------+-----------------------------------+
09. You can turn off this feature to get a quicker startup with -A 31. 5 rows in set (0.04 sec)
10. Database changed 32.
11. 33. mysql> SELECT COUNT(*) FROM CLIENTES;
12. mysql> DESC CLIENTES; 34.
13. +---------------------+------------------+---------+-------+-----------+---------------------+ 35. +----------------+
14. | Field | Type | Null | Key | Default | Extra | 36.
37. | COUNT(*) |
15. +---------------------+------------------+---------+-------+-----------+---------------------+
38.
16. | id_cliente | int(10) | NO | PRI | NULL | auto_increment |
39. +----------------+
17. | nome_cliente | varchar(255) | NO | | NULL | | 40.
18. +---------------------+-------------------+---------+-------+-----------+---------------------+ 41. | 18105728 |
19. 2 rows in set (0.05 sec) 42.
20. 43. +----------------+
21. mysql> SELECT * FROM CLIENTES LIMIT 5; 44.
45. 1 row in set (18.06 sec)

Otimizando as gravaes Listagem 2. Comandos SELECT para duplicar a tabela 3 vezes, medindo o tempo.
Para iniciar criamos uma tabela sim-
01. mysql> CREATE TABLE CLIENTES_02 Engine=InnoDB SELECT * FROM CLIENTES;
ples no MySQL, conforme Listagem 1,
02. Query OK, 18105728 rows affected (7 min 15.27 sec)
com uma coluna numrica auto incre- 03. Records: 18105728 Duplicates: 0 Warnings: 0
mentvel (id_cliente) e uma coluna de 04.
05. mysql> CREATE TABLE CLIENTES_03 Engine=InnoDB SELECT * FROM CLIENTES;
caracteres de comprimento varivel 06. Query OK, 18105728 rows affected (6 min 45.10 sec)
(nome_cliente), e inserimos nela strings 07. Records: 18105728 Duplicates: 0 Warnings: 0
aleatrias (utilizando um script Perl), at 08.
09. mysql> CREATE TABLE CLIENTES_04 Engine=InnoDB SELECT * FROM CLIENTES;
que ela ficasse com um nmero consi- 10. Query OK, 18105728 rows affected (7 min 6.74 sec)
dervel de linhas - mais de 18 milhes 11. Records: 18105728 Duplicates: 0 Warnings: 0
de linhas, ocupando mais de 800MB em
disco. Com uma tabela deste tamanho,
fica mais fcil simular problemas de tabela, para conferir a quantidade de
desempenho. registros (linhas 33 a 45), o que demorou
Primeiramente conectamos no MySQL 18 segundos.
(linha 1 da Listagem 1), e alteramos o Agora, conforme a Listagem 2, veremos
banco de dados em uso para o test (linha a velocidade de duplicao desta tabela
7). Em seguida, conferimos a estrutura com a configurao padro do MySQL.
da tabela CLIENTES (linhas 12 a 19), e Para isso, executamos o teste 3 vezes, para
fiz um SELECT de 5 linhas, para confe- validar melhor o tempo, e excluir vari-
rir o contedo com a coluna id_cliente veis como o armazenamento de dados
sequencial, e a coluna nome_cliente em cache.
com os nomes aleatrios (linhas 21 a Veja que primeiramente criamos a tabela
31). Depois fizemos um COUTN desta CLIENTES_02, como uma cpia exata da

Edio 81 SQL Magazine 43

sql81.indb 43 29/10/2010 13:56:06


MySQL Performance Diagnostics & Tuning - Parte 1

CLIENTES (linhas 1 a 3 da Listagem 2). CESSLIST pode ser utilizado no utilitrio 15). Veja que a a sada j mudou, exibindo
Em seguida repetimos o procedimento mysqladmin, conforme Listagem 3, onde o que o comando CREATE TABLE est no
mais duas vezes, agora criando as tabelas executamos diversas vezes seguidas durante State chamado de Sending Data. Repare
CLIENTES_03 (linha 5) e CLIENTES_04 a duplicao da tabela CLIENTES. Veja que tambm que este comando j est espe-
(linha 9). importante reparar nos tempos a coluna State mostrou o estado Sending rando h 22 segundos (linha 13).
de cada uma das execues (linhas 2, 6 e data o tempo todo da execuo. Repare tam- Em seguida, esperamos uns 2 minutos, e
10, respectivamente). bm a coluna Time, que indica o nmero executamos o comando novamente (linhas
Nos trs testes, obtivemos os seguintes de segundos que o comando executado est 17 a 23, ainda na Listagem 3). Veja que o
resultados: 7 15.27, 6 45.10 e 7 6,74 aguardando pelo Thread State indicado. State continua o mesmo, mas o tempo de
respectivamente. Como facilidade, para no ter que execu- espera j de 218 segundos (linha 21). Aps
Se precisamos otimizar este tempo de exe- tar o comando repetidamente, utilizamos o trmino do comando CREATE TABLE,
cuo, precisamos saber como ele gasto, o utilitrio do Linux watch, que faz com executamos novamente o comando para
antes de alterarmos algo. O MySQL fornece que um comando seja repetido na tela at verificar os processos (linhas 25 a 31), e
este tipo de informao atravs dos Thread que seja digitado Control+C. Veja como veja que voltamos a ter uma sada que nos
States (Estado de Processos) - similares utilizar o comando watch na Listagem 4. mostra que no h mais nada acontecendo
aos Wait Events do Oracle, embora sejam Primeiramente, executamos o comando no banco de dados.
muito menos detalhados, infelizmente. para verificar os processos antes de iniciar A documentao dos Thread States diz
Para se ter uma ideia, o Oracle 11gR2 tem as duplicaes de tabela demonstradas na apenas o seguinte sobre o Sending Data: O
mais de 1100 Wait Events documentados, Listagem 2, para mostrar ao leitor como processo est processando as linhas para
enquanto o MySQL 5.1 tem apenas 67. Mas a sada deste comando quando nada est um comando SELECT e tambm enviando
mesmo assim eles nos daro uma boa pista acontecendo no banco de dados (linhas 1 a o resultado para o cliente. Isto no ajuda
do que est acontecendo. 7 da Listagem 3), com exceo do prprio muito, mas j sabemos que podemos me-
Para exibir os Thread States atuais, o coman- comando SHOW PROCESSLIST. Depois de lhorar o desempenho deste SELECT.
do SHOW PROCESSLIST pode ser utilizado iniciada uma duplicao de tabela, execu- O Engine InnoDB, que estamos utili-
no prompt do MySQL, ou o comando PRO- tamos o comando novamente (linhas 9 a zando para estes testes, armazena dados

Listagem 3. Comandos para verificar as Threads State do MySQL


01. ricardo@ricardo-laptop:~$ mysqladmin -u root -pMinhaSenha processlist
02. +---+-------+-------------+-----+--------------+------+--------+----------------------+
03. | Id | User | Host | db | Command | Time | State | Info |
04. +---+-------+-------------+-----+---------------+-------+-------+----------------------+
05. | 35 | root | localhost | test | Sleep | 729 | | |
06. | 36 | root | localhost | | Query | 0 | | show processlist |
07. +---+-------+-------------+-----+---------------+-------+-------+----------------------+
08.
09. ricardo@ricardo-laptop:~$ mysqladmin -u root -pMinhaSenha PROCESSLIST
10. +----+------+------------+-------+--------------+--------+------------------+-----------------------------------------------------------------------------------------------+
11. | Id | User | Host | db | Command | Time | State | Info |
12. +----+------+------------+-------+---------------+-------+------------------+-----------------------------------------------------------------------------------------------+
13. | 35 | root | localhost | test | Query | 22 | Sending data | CREATE TABLE CLIENTES_03 Engine=InnoDB SELECT * FROM CLIENTES |
14. | 64 | root | localhost | | Query | 0 | | show processlist |
15. +----+------+------------+-------+--------------+-------+------------------+-----------------------------------------------------------------------------------------------+
16.
17. ricardo@ricardo-laptop:~$ mysqladmin -u root -pMinhaSenha PROCESSLIST
18. +------+------+--------------+------+--------------+-------+------------------+-------------------------------------------------------------------------------------------+
19. | Id | User | Host | db | Command | Time | State | Info |
20. +------+------+--------------+------+--------------+-------+------------------+-------------------------------------------------------------------------------------------+
21. | 35 | root | localhost | test | Query | 218 | Sending data | CREATE TABLE CLIENTES_03 Engine=InnoDB SELECT * FROM CLIENTES |
22. | 158 | root | localhost | | Query | 0 | | show processlist
23. +------+------+--------------+------+--------------+-------+------------------+------------------------------------------------------------------------------------------+
24.
25. ricardo@ricardo-laptop:~$ mysqladmin -u root -pMinhaSenha PROCESSLIST
26. +--------+------+-------------+-------+--------------+------+-------+------------------------+
27. | Id | User | Host | db | Command | Time | State | Info |
28. +--------+------+-------------+-------+--------------+------+-------+------------------------+
29. | 35 | root | localhost | test | Sleep | 411 | | |
30. | 254 | root | localhost | | Query | 0 | | show processlist |
31. +--------+------+-------------+-------+--------------+------+-------+------------------------+

44 SQL Magazine Edio 81

sql81.indb 44 29/10/2010 13:56:06


de tabelas e ndices em um cache (Nota do usurio muda para root (linha 3), e a que melhorar a velocidade de gravao do
DevMan 2) prprio, definido pela varivel executamos o comando para parar (linha 3) InnoDB. A varivel que mais trar veloci-
innodb_buffer_pool_size. O valor padro e logo em seguida o comando para iniciar dade de gravao a innodb_log_file_size,
desta varivel ridiculamente baixo, 8MB. (linha 5) o MySQL. que tambm tem um valor padro ridicu-
Iremos alter-lo para 1GB (a mquina de Na Listagem 7 repetimos os testes, desta lamente pequeno para qualquer carga um
testes tem 4GB), e reexecutar os testes. vez com o cache mais alto. Obviamente s pouco maior de gravao, apenas 5MB. Os
Cuidado para no alterar esta varivel faz sentido o cache ajudar no desempenho Logs de gravao do InnoDB funcionam
em seu ambiente de forma que ela utilize aps a primeira execuo. Como a tabela como os Redo Logs do Oracle, de forma
mais RAM do que o Sistema Operacional tem cerca de 800MB, ela caberia toda no circular - aps um encher, passa-se para
tem disponvel, ou o sistema pode passar cache de 1GB. o prximo, at voltar ao primeiro deles.
a utilizar Swap (memria virtual em dis- Para poder reiniciar os testes, primeiro ex- Como o tamanho padro destes Logs
co), ou o MySQL pode no subir, ou at clumos as trs tabelas cpia da CLIENTES muito pequeno, o InnoDB gasta muito
subir e depois cair durante a execuo de (linhas 1 a 8 da Listagem 7). E ento no- tempo aguardando que o contedo des-
comandos SQL. vamente, criamos a tabela CLIENTES_02, tes Logs seja descarregado no arquivo de
Esta varivel deve ser alterada no arquivo como uma cpia exata da CLIENTES dados. A quantidade padro (controlada
de inicializao, no caso do meu sistema (linhas 10 a 12). Em seguida repetimos pela varivel innodb_log_files_in_group)
operacional, o arquivo /etc/mysql/my.cnf, o procedimento mais duas vezes, agora de Logs tambm pequena, apenas 2.
conforme Listagem 5. Alterar esta vari- criando as tabelas CLIENTES_03 (linha 14) Vamos aumentar para 7 Logs, de 512MB
vel no arquivo /etc/my.cnf faz com que e CLIENTES_04 (linha 18). importante
ela passe a valer apenas aps reiniciar reparar novamente nos tempos de cada
o MySQL. Algumas outras variveis do uma das execues (linhas 11, 15 e 19, res- Nota do DevMan 2
MySQL permitem a alterao online, como pectivamente).
veremos mais adiante. No meu sistema Obtivemos, desta vez, os tempos 7 35.42, Cache
operacional, o MySQL reiniciado com 7 8.75 e 7 34.41. Cache um dispositivo de acesso rpido, interno a um sistema,
os comandos da Listagem 6. O tempo no melhorou em nada, mesmo que serve de intermedirio entre um operador de um processo
e o dispositivo de armazenamento ao qual esse operador acede.
Inicialmente executamos o comando ne- na segunda e terceira execuo. Vamos A vantagem principal na utilizao de uma cache consiste em
cessrio para abrir um shell com o usurio ento abordar a segunda parte que pode evitar o acesso ao dispositivo de armazenamento - que pode
root, pois s ele tem a permisso de parar ser otimizada do Thread State Sending ser demorado -, armazenando os dados em meios de acesso
mais rpidos
o MySQL (linha 1 da Listagem 6). Aps data, a parte de enviar os resultados para
digitar a senha (linha 2) veja que o nome o cliente. Para melhorar esta parte, temos

Listagem 4. Comando para verificar as Thread States do MySQL repetidamente. Listagem 7. Comandos SELECT para duplicar a tabela 3 vezes, medindo o tempo
ricardo@ricardo-laptop:~$ watch mysqladmin -u root - pMinhaSenha PROCESSLIST
01. mysql> DROP TABLE CLIENTES_02;
Listagem 5. Parte do arquivo de configurao do MySQL. 02. Query OK, 0 rows affected (0.10 sec)
03.
[mysqld]
04. mysql> DROP TABLE CLIENTES_03;
user = mysql
socket = /var/run/mysqld/mysqld.sock 05. Query OK, 0 rows affected (0.07 sec)
port = 3306 06.
basedir = /usr 07. mysql> DROP TABLE CLIENTES_04;
datadir = /var/lib/mysql 08. Query OK, 0 rows affected (0.08 sec)
tmpdir = /tmp 09.
skip-external-locking
10. mysql> CREATE TABLE CLIENTES_02 Engine=InnoDB SELECT * FROM CLIENTES;
key_buffer = 16M
max_allowed_packet = 16M 11. Query OK, 18105728 rows affected (7 min 35.42 sec)
thread_stack = 192K 12. Records: 18105728 Duplicates: 0 Warnings: 0
thread_cache_size =8 13.
query_cache_limit = 1M 14. mysql> CREATE TABLE CLIENTES_03 Engine=InnoDB SELECT * FROM CLIENTES;
query_cache_size = 16M 15. Query OK, 18105728 rows affected (7 min 8.75 sec)
log_error = /var/log/mysql/error.log
16. Records: 18105728 Duplicates: 0 Warnings: 0
innodb_buffer_pool_size = 1G
17.
Listagem 6. Comandos para parar e iniciar o MySQL. 18. mysql> CREATE TABLE CLIENTES_04 Engine=InnoDB SELECT * FROM CLIENTES;
19. Query OK, 18105728 rows affected (7 min 34.41 sec)
01. ricardo@ricardo-laptop:~$ sudo bash
02. [sudo] password for ricardo: 20. Records: 18105728 Duplicates: 0 Warnings: 0
03. root@ricardo-laptop:/var/lib/mysql# service mysql stop
04. mysql stop/waiting
05. root@ricardo-laptop:/var/lib/mysql# service mysql start

Edio 81 SQL Magazine 45

sql81.indb 45 29/10/2010 13:56:06


MySQL Performance Diagnostics & Tuning - Parte 1

cada. Vamos aumentar tambm o cache Como nada de graa no mundo da de log ib_logfile0 (linha 8) e ib_logfile1
dos Logs (controlado pela varivel innodb_ informtica, quanto maiores forem os (linha 9), cada um com 5MB.
log_buffer_size, que tem o tamanho padro arquivos e cache de Log, maior ser o tem- Ento paramos o MySQL (linha 14), e
de 1MB) para 256MB, que faz com que a po necessrio para um possvel Recover renomeamos os arquivos ib_logfile0 e
gravao para os prprios arquivos de Log do Banco de Dados em caso de queda do ib_logfile1 (linhas 16 e 17), para que o
possa ser atrasada, melhorando ainda mais MySQL durante as gravaes. MySQL crie os novos arquivos. Em se-
o desempenho das gravaes. A alterao dos arquivos de Log do guida iniciamos o MySQL (linha 18), es-
InnoDB um pouco mais complicada. O peramos alguns segundos (pode levar
Listagem 8. Parte do arquivo de configurao do MySQL. MySQL precisa ser parado, e os arquivos algum tempo para criar os 7 arquivos
de Log antigos precisam ser removidos de 512MB), e verificamos novamente o
[mysqld]
user = mysql (pois so de outro tamanho), conforme contedo do diretrio de dados (linha
socket = /var/run/mysqld/mysqld.sock Listagem 9. Repare que desta vez o MyS- 20). Veja que agora temos 7 arquivos
port = 3306
QL deve demorar um pouco mais para de Log, numerados sequencialmente
basedir = /usr
datadir = /var/lib/mysql ser iniciado, pois ele ir criar os novos (linhas 24, 26, 28, 29, 30, 31 e 32), e agora
tmpdir = /tmp arquivos de Log com 512MB cada. Confi- cada um tem 512MB, como indicamos
skip-external-locking
key_buffer = 16M
ra como ficou o arquivo de configurao no arquivo my.cnf.
max_allowed_packet = 16M na Listagem 8. Agora repetimos o teste, conforme
thread_stack = 192K Novamente abrimos um shell com o Listagem 10.
thread_cache_size =8
query_cache_limit = 1M
usurio root (linha 1 da Listagem 9), Para poder reiniciar os testes, primei-
query_cache_size = 16M pois iremos executar operaes que ro exclumos as trs tabelas cpia da
log_error = /var/log/mysql/error.log requerem um privilgio superior. Em CLIENTES (linhas 1 a 8 da Listagem 10).
innodb_buffer_pool_size = 1G
innodb_log_file_size = 512M seguida, iremos ao diretrio de dados E ento novamente, criamos a tabela
innodb_log_files_in_group = 7 do MySQL (linha 3), e verificamos seu CLIENTES_02, como uma cpia exata
innodb_log_buffer_size = 256M
contedo (linha 4). Repare nos arquivos da CLIENTES (linhas 10 a 12).

Listagem 9. Comandos para trocar os arquivos de Log e reiniciar o MySQL


01. ricardo@ricardo-laptop:~$ sudo bash 19. mysql start/running, process 1097
02. [sudo] password for ricardo: 20. root@ricardo-laptop:/var/lib/mysql# ls -lh
03. root@ricardo-laptop:~# cd /var/lib/mysql/ 21. total 7,7G
04. root@ricardo-laptop:/var/lib/mysql# ls -lh 22. -rw-r--r-- 1 mysql mysql 0 2010-08-04 14:42 debian-5.1.flag
05. total 3,9G 23. -rw-rw---- 1 mysql mysql 4,2G 2010-09-02 07:59 ibdata1
06. -rw-r--r-- 1 mysql mysql 0 2010-08-04 14:42 debian-5.1.flag 24. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:01 ib_logfile0
07. -rw-rw---- 1 mysql mysql 3,9G 2010-09-02 07:26 ibdata1 25. -rw-rw---- 1 mysql mysql 5,0M 2010-09-02 07:59 ib_logfile0.bkp
08. -rw-rw---- 1 mysql mysql 5,0M 2010-09-02 07:26 ib_logfile0 26. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:00 ib_logfile1
09. -rw-rw---- 1 mysql mysql 5,0M 2010-09-02 07:26 ib_logfile1 27. -rw-rw---- 1 mysql mysql 5,0M 2010-09-02 07:56 ib_logfile1.bkp
10. drwx------ 2 mysql mysql 4,0K 2010-08-31 15:26 mysql 28. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:00 ib_logfile2
11. -rw-rw---- 1 mysql mysql 6 2010-07-07 16:10 mysql_upgrade_info 29. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:00 ib_logfile3
12. -rw-rw---- 1 mysql mysql 6 2010-09-02 07:25 ricardo-laptop.pid 30. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:01 ib_logfile4
13. drwx------ 2 mysql mysql 4,0K 2010-09-02 07:25 test 31. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:01 ib_logfile5
14. root@ricardo-laptop:/var/lib/mysql# service mysql stop 32. -rw-rw---- 1 mysql mysql 512M 2010-09-02 08:01 ib_logfile6
15. mysql stop/waiting 33. drwx------ 2 mysql mysql 4,0K 2010-08-31 15:26 mysql
16. root@ricardo-laptop:/var/lib/mysql# mv ib_logfile0 ib_logfile0.bkp 34. -rw-rw---- 1 mysql mysql 6 2010-07-07 16:10 mysql_upgrade_info
17. root@ricardo-laptop:/var/lib/mysql# mv ib_logfile1 ib_logfile1.bkp 35. -rw-rw---- 1 mysql mysql 5 2010-09-02 08:01 ricardo-laptop.pid
18. root@ricardo-laptop:/var/lib/mysql# service mysql start 36. drwx------ 2 mysql mysql 4,0K 2010-09-02 07:48 test

Listagem 10. Comandos SELECT para duplicar a tabela 3 vezes, medindo o tempo

01. mysql> DROP TABLE CLIENTES_02; 11. Query OK, 18105728 rows affected (2 min 45.44 sec)
02. Query OK, 0 rows affected (0.91 sec) 12. Records: 18105728 Duplicates: 0 Warnings: 0
03. 13.
04. mysql> DROP TABLE CLIENTES_03; 14. mysql> CREATE TABLE CLIENTES_03 ENGINE=InnoDB SELECT * FROM CLIENTES;
05. Query OK, 0 rows affected (0.16 sec) 15. Query OK, 18105728 rows affected (2 min 18.15 sec)
06. 16. Records: 18105728 Duplicates: 0 Warnings: 0
07. mysql> DROP TABLE CLIENTES_04; 17.
08. Query OK, 0 rows affected (0.14 sec) 18. mysql> CREATE TABLE CLIENTES_04 ENGINE=InnoDB SELECT * FROM CLIENTES;
09. 19. Query OK, 18105728 rows affected (2 min 42.03 sec)
10. mysql> CREATE TABLE CLIENTES_02 ENGINE=InnoDB SELECT * FROM CLIENTES; 20. Records: 18105728 Duplicates: 0 Warnings: 0

46 SQL Magazine Edio 81

sql81.indb 46 29/10/2010 13:56:07


Em seguida repetimos o procedimen- Ricardo Portilho Proni Wikipedia:
to ma i s dua s vezes, agora c r ia ndo ricardo@nervinformatica.com.br http://www.wikipedia.org/
as tabelas CLIENTES_03 (linha 14) e http://nervinformatica.com.br Documentao MySQL 5.1:
CLIENTES_04 (linha 18). importante http://twitter.com/rportilhoproni
http://dev.mysql.com/doc/refman/5.1/en/index.html
reparar novamente nos tempos de cada Com 20 anos de experincia profis-
uma das execues (linhas 11, 15 e 19, sional, Ricardo Portilho Proni Oracle Parmetros MySQL 5.1
ACE Member eleito pela Oracle Corporation um dos http://dev.mysql.com/doc/refman/5.1/en/server-
respectivamente).
maiores espacialistas do mundo em Oracle Database system-variables.html
Agora sim os tempos melhoraram!
e j trabalhou em grande parte dos maiores bancos
Obtivemos mais de 200% de melhora de dados Oracle do Brasil. certificado em Oracle, Thread States MySQL 5.1
em relao aos primeiros tempos. Veja SQL Server, DB2, MySQL, Sybase e WebSphere. http://dev.mysql.com/doc/refman/5.1/en/general-
que os tempos baixaram para 2 45.44, Membro Snior da equipe do Centro de Excelncia thread-states.html
2 18.15 e 2 42.03. da Solvo S/A, empresa especializada na implemen-
tao e suporte de ambientes de misso crtica com Histrico de Fatured do MySQL
Concluso atuao em toda a Amrica Latina. http://dev.mysql.com/doc/refman/5.6/en/
Como vimos nos exemplos mostrados, o Tambm conselheiro do Grupo de Profissionais development-history.html
desempenho do MySQL pode ser muito Oracle, palestrante do Encontro Nacional de Profis-
sionais Oracle e Instrutor de Treinamentos Avanados
melhorado com poucas configuraes. No D seu feedback sobre esta edio! eu
Feedback

da Nerv.

s
D
prximo artigo desta srie, iremos abor- A SQL Magazine tem que ser feita ao seu gosto.

sobre e
dar a otimizao de leituras. At l! Para isso, precisamos saber o que voc, leitor,

s
ta
edio

acha da revista!
D seu voto sobre este artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback

Edio 81 SQL Magazine 47

sql81.indb 47 29/10/2010 13:56:09


Seo Banco de Dados/Persistncia: "Nesta seo voc encontra artigos banco de dados, SQL ou pers istnci

Explain plan
Desvendando planos de execuo - Parte 3

N Resumo DevMan
as edies passadas abordamos
a interpretao de predicados,
ndices B-Tree, Bitmap, interao De que se trata o artigo:
entre os recursos de hardware, transaes e Este artigo trata dos conceitos envolvidos na anlise de um plano de execuo proveniente do comando
estratgias de acesso em tabelas e ndices. explain plan em banco de dados relacionais. O plano de execuo a estratgia de acesso adotada pelo
Nesta ltima parte focaremos os seguintes otimizador de consultas do banco de dados para que a mesma seja executada de maneira que obtenha
tpicos: a melhor performance possvel.
Estratgias de join (juno) entre
tabelas: Para que serve:
Nested Loops; Esclarecer e desmistificar os mecanismos intrnsecos das etapas de elaborao do plano de execuo,
Sort Merge Join; fazendo com que o DBA entenda o mecanismo de definio de estratgia de acesso e saiba como tirar
Hash Join. proveito dela.

Em toda modelagem de dados, a redun- Em que situao o tema til:


dncia de informaes deve ser sumaria- Atravs da correta interpretao do plano possvel refinar e redirecionar a execuo, e como consequ-
mente descartada e, como consequncia, ncia, atingir um melhor desempenho. O conhecimento e interpretao do plano de execuo se torna
novas tabelas acabam sendo criadas. particularmente til na anlise de consultas que apresentam performance insatisfatria para o sistema
Entretanto, no momento da recuperao como um todo.
ou consulta de informaes, a juno entre
estas tabelas que foram criadas no intuito
de evitar redundncia de informaes encontram em uma nica tabela. Esta si- seria criada e uma juno ser feita com a
acaba sendo inevitvel. tuao extremamente comum e prevista tabela contendo as informaes referentes
E justamente este tipo de juno entre ta- nas regras de modelagem. aos assinantes.
belas que chamamos simplesmente de joins Em muitos casos, para que todas as in-
(significado em ingls para juno). formaes referentes a um determinado Estudo de caso
Junes entre tabelas normalmente contexto esteja na mesma tabela, muitos Neste artigo, para a nova srie de exem-
custam caro para a execuo no banco dados seriam redundantes no momento plos foi includa a tabela JOGADOR ao
de dados e justamente por esse motivo em que um valor deste contexto se altere. modelo que tenho usado no decorrer desta
que devemos garantir que o otimizador Posso exemplificar atravs de uma lista srie. Nesta nova tabela, os jogadores de
utilize a melhor metodologia para traar telefnica. comum encontrarmos uma futebol so listados e a nacionalidade cor-
a melhor estratgia de acesso s tabelas sesso em que se possa verificar todos respondente do atleta definida atravs
envolvidas na(s) juno(es) e esta melhor os telefones e seus respectivos assinantes da coluna PAS_DO_JOGADOR. O ndi-
estratgia pode ser atravs da utilizao de em uma determinada rua. Neste caso, o ce B-Tree tambm foi criado utilizando
um Nested Loop, Sort Merge Join ou ainda contexto sempre o mesmo (assinantes como base a coluna PAS_DO_JOGADOR
um Hash Join. que moram em uma determinada rua), (Figura 1).
Ao final de um breve ensaio decorrente porm os valores deste contexto se alteram
dos conceitos mencionados sero final- (nome de cada assinante). Imagine se, em
mente demonstradas aplicaes prticas cada registro, fossem armazenadas as in-
em Oracle. formaes referentes rua e ao assinante!
Em uma rua em que houvesse 30 assi-
Estratgia de join entre tabelas nantes diferentes, a informao referente
Como falado anteriormente, as junes rua estaria duplicada (exatamente 30
entre tabelas so necessrias em casos vezes). Para contornar esta situao, uma
onde as informaes requeridas no se tabela contendo as informaes da rua

48 SQL Magazine Edio 81

sql81.indb 48 29/10/2010 13:56:10


ou pers istncia"

e3
Reinaldo Tetsuo Katahira

Figura 1. Tabela JOGADOR incluindo suas respectivas nacionalidades e seu ndice B-Tree por Figura 2. Resultado da consulta SQL da combinao das tabelas PAS e JOGADOR
PAS_DO_JOGADOR

Listagem 1. Consulta utilizando JOIN.

SELECT *
Nota do DevMan 1
FROM PAS, JOGADOR
WHERE PAS.NOME_DO_PAS = Cartesian join, Inner join, Left outer join/Right outer Full outer join: Consiste na listagem da combinao
JOGADOR.PAS_DO_JOGADOR join, Full outer join, Semi join, Anti-join das linhas compatveis com as da tabela remanescente
(atendendo ao predicado de juno), adicionando listagem
Cartesian join: Consiste na listagem da combinao de as demais linhas que no apresentaram compatibilidade
Para recuperar a informao de cada todas as linhas de duas tabelas (baseado no conceito de de ambas as tabelas, ou seja, todas os registros das
jogador e a respectiva Confederao que produto cartesiano). tabelas listadas na consulta sero apresentados,
independentemente de haver relacionamento entre os
o mesmo faz parte, necessrio fazer uma registros.
Inner join: Consiste na listagem da combinao das linhas
consulta ao banco de dados fazendo uso da
compatveis com as da tabela remanescente (atendendo
tcnica de juno entre as tabelas PAS e ao predicado de juno), ou seja, com base em uma das Semi join: Consiste na listagem, sobre apenas uma das
tabelas, das linhas compatveis (atendendo ao predicado
JOGADOR. Porm, alm de mencionar as tabelas da juno um inner join retornar somente as
linhas das tabelas remanescentes que possuam relao de juno) com outra qualquer encontrada na tabela
tabelas que faro parte da juno (tabelas existente. Como exemplo, posso citar a tabela CLIENTES e remanescente. Dessa forma, no exemplo de CLIENTES e
definidas na clusula FROM da consulta a tabela COMPRAS. Em um inner join, somente os clientes COMPRAS somente os clientes que possuem compras sero
que j fizeram compras (possuem relao com a tabela listados porm, mesmo que um determinado cliente possua
SQL), necessrio tambm utilizar uma mais de uma compra efetuada (mais de uma combinao
COMPRAS) apareceriam no resultado da consulta, os
tcnica de juno no filtro da consulta registros de clientes que no possuem compras seriam no relacionamento), a informao do cliente ser retornada
(clusula WHERE da consulta SQL). omitidos no resultado. apenas uma vez.
A consulta SQL que retorna as informa-
Left outer join/right outer join: Consiste na listagem Anti-join: Consiste na listagem, sobre apenas uma
es referentes ao jogador e respectiva das tabelas, das linhas no compatveis (atendendo ao
da combinao das linhas compatveis com as da tabela
Confederao pode ser vista na Listagem 1 remanescente (atendendo ao predicado de juno), predicado de juno) com nenhuma outra encontrada na
enquanto que o resultado desta mesma adicionando listagem as demais linhas que no tabela remanescente, ou seja, em CLIENTES e COMPRAS,
apresentaram compatibilidade da tabela posicionada somente os clientes que NO possuem compras sero
consulta SQL apresentada na Figura 2. listados.
esquerda (left outer join) ou direita (right outer join)
J tcnicas de juno podem ser consul- na declarao do FROM da consulta SQL. No exemplo de
tadas na Nota DevMan 1. CLIENTES e COMPRAS, o outer join retornaria tambm os
registros de clientes que no possuem compras.
Com base nestas definies, veremos ago-
ra as tcnicas que o otimizador do banco de
dados utiliza para resolver as junes de

Edio 81 SQL Magazine 49

sql81.indb 49 29/10/2010 13:56:11


Explain plan

tabelas e retornar as informaes solicita-


das da maneira mais rpida possvel. Como
dito no incio, as tcnicas so: Nested Loop,
Sort Merge Join e Hash Join.

Nested Loop
Em um Nested Loop, com base na primeira
tabela da juno, feita a iterao de cada
uma das linhas com todas as linhas das
tabelas remanescentes da juno. Esta
varredura na tabela remanescente pode ser
feita atravs de um ndice (caso exista) ou
atravs de uma varredura completa (Full
Table Scan). realmente o conceito de loop,
ou seja, para cada linha da primeira tabe-
la da juno, feita uma varredura na(s)
tabela(s) remanescente(s) para encontrar
combinaes.
Na estratgia de Nested Loop, a tabela com
menor cardinalidade deve ser utilizada
como tabela base e direcionar a pesquisa
pelos valores na tabela remanescente.
Exemplificando a estratgia de Nested
Loop para a consulta SQL apresentada na
Listagem 1 e, a mesma explicao de forma
grfica na Figura 3.
Figura 3. Demonstrao de Nested Loop 1. Utilizando a estratgia de Full Table Scan,
a tabela PAS inspecionada, resgata-se a
primeira linha NOME_DO_PAS: Brasil
CONFEDERAO: CONMEBOL;
2. Utilizando a estratgia de Index Range
Scan, o ndice B-Tree por PAS_DO_JOGA-
DOR da tabela JOGADOR pesquisado. O
valor Brasil anterior ou igual ao valor
referncia do n raiz Brasil, portanto
direciona-se ao n predecessor;
3. O valor Brasil posterior ao valor re-
ferncia do n intermedirio Argentina,
portanto direciona-se ao n sucessor;
4. O valor Brasil igual ao valor refe-
rncia do n folha Brasil, portanto dire-
ciona-se ao endereo das linhas Bloco: 30
Posio: 1 e Bloco: 32 Posio: 1;
5. Atravs do endereo da linha Bloco: 30
Posiao: 1 e Bloco: 32 Posio:1 os valo-
res Jlio Csar e Kaka so exibidos.

Estes passos so repetidos para todas


as demais linhas da inspeo da tabela
base PAS.
A ordem das linhas exibidas pelo resul-
tado, como pode ser observado, respeita a
Figura 4. Demonstrao de Sort Merge Join ordem de armazenamento da tabela PAS.

50 SQL Magazine Edio 81

sql81.indb 50 29/10/2010 13:56:11


Sort Merge Join com o resultado da funo hash executa- Utilizando os valores da coluna PAS_
Basicamente, um Sort Merge Join faz da na primeira tabela. Sempre que encon- DO_ JOGADOR da tabela JOGADOR
uma ordenao de todas as linhas da tra uma correspondncia entre os valores como referncia hash table exibe-se as
primeira tabela da juno que sejam hash, a informao apresentada. demais colunas da tabela PAS.
relevantes com base na chave de jun- A tabela de menor cardinalidade A ordem das linhas exibidas pelo resul-
o (predicado encontrado na clusula utilizada como tabela base e mapeada tado, como pode ser observado, respeita
WHERE) e tambm executar o mesmo na forma de hash table onde o valor re- a ordem de armazenamento da tabela
processo em todas as outras tabelas ferncia (key) servir para o resgate das JOGADOR.
remanescentes e, ao final, executa uma demais colunas da linha (o conceito de
fuso (merge) entre os registros previa- hash function, muito utilizado em lingua- Exemplo de leitura de plano de execu-
mente ordenados. gens de programao, bastante eficaz o em Oracle
Exemplificando a estratgia de Sort para a pesquisa, entretanto sua aplicao Todos os comandos abaixo so execu-
Merge Join para a consulta SQL apresen- em bancos de dados relacionais ocupa tados no SQL*Plus da Oracle. A tabela
tada na Listagem 1 e, a mesma explicao razovel espao temporrio). Em seguida sh.customers proveniente do pacote nativo
de forma grfica na Figura 4. a tabela remanescente inspecionada de exemplos do Oracle 11g apresenta os
1. Ut i l i za ndo a est ratg ia de Index servindo seus valores como referncia seguintes valores distintos de estado civil
Full Scan o ndice B -Tree da coluna para a hash table. (cust_marital_status) (Listagem 2).
NOME_DO_PAS da tabela PAS ins- Exemplificando a estratgia de Hash A Listagem 3 apresenta uma consulta
pecionado; Join para a consulta SQL apresentada SQL da combinao de vendas (sh.sales)
2. Atravs dos endereos armazenados na Listagem 1 e, a mesma explicao de de todos os clientes (sh.customers) casados,
em ns folhas todas as linhas da tabe- forma grfica na Figura 5. com ano de nascimento (cust_year_of_
la PAS so resgatadas em ordem de 1. Utilizando a estratgia de Table Access birth) ps 1900 e gnero (cust_gender)
NOME_DO_PAS; Full a tabela PAS inspecionada; masculino ou no informado. Normaliza-
3. O resultado temporrio A armaze- 2. A hash table construda e armazenada dos os valores Married (m maisculo),
nado no espao temporrio; no espao temporrio; married (m minsculo) e nulos para
4. Utilizando a estratgia de Index Full 3. Utilizando a estratgia de Table Access married (casado), valores nulos de ano
Scan o ndice B-Tree da coluna PAS_ Full a tabela JOGADOR inspecionada. de nascimento e gnero foram atribudos
DO_ JOGADOR da tabela JOGADOR
inspecionado;
5. Atravs dos endereos armazenados
em ns folhas todas as linhas da tabela
JOGADOR so resgatadas em ordem de
PAS_DO_JOGADOR;
6. O resultado temporrio B armazena-
do no espao temporrio.
Atravs dos dois resultados tempor-
rios realiza-se a consolidao e exibio
do resultado final.
A ordem das linhas exibidas pelo resul-
tado, como pode ser observado, respeita
a ordem da coluna NOME_DO_PAS da
tabela PAS e da coluna PAS_DO_JO-
GADOR da tabela JOGADOR.

Hash Join
Um Hash Join pega a menor tabela e
a percorre executando uma funo hash
(ou algoritmo hash) sobre as colunas
presentes no filtro (clusula WHERE)
e armazena o resultado. Logo depois
executa a mesma funo hash nas tabelas
remanescentes considerando as colunas
presentes no filtro e faz a comparao Figura 5. Demonstrao de Hash Join

Edio 81 SQL Magazine 51

sql81.indb 51 29/10/2010 13:56:11


Explain plan

Listagem 2. Valores distintos de estado civil da tabela ao ano 1900 e ao Nao Informado res- de CUSTOMERS (que atende ao predicado
sh.customers. pectivamente. de filtro cdigo 3), dentre as parties
REM O comando abaixo converte valores NULL na O cdigo (Id) da operao (Operation) nmero 1 a 28 (Pstart e Pstop) da tabela
representao <NULL> para efeito de visualizao. associado ao objeto (Name), atravs da car- SALES, localiza-se o endereo (ROWID)
SET NULL <NULL>
dinalidade estimada (Rows) e leitura em bytes das linhas correspondente ao valor bitmap
SELECT count(*), cust_marital_status estimada (Bytes). Calcula-se o custo (Cost) de cada CUST_ID (que atende ao predicado
FROM sh.customers
GROUP BY cust_marital_status;
que serve de mtrica de suporte s decises de acesso cdigo 6) e eventualmente exibe-
do otimizador de consultas. O tempo estima- se as colunas remanescentes de SALES.
COUNT(*) CUST_MARITAL_STATUS do de execuo (Time) baseado no custo e os Repetem-se os passos at a concluso da
------------- --------------------------------
615 Divorc. limites de parties da tabela (Pstart/Pstop) inspeo de CUSTOMERS.
75 Mabsent para inspeo tambm so fornecidos. A Listagem 4 apresenta as informaes
3 Mar-AF
2034 Married O cdigo da operao no serve como base referentes aos predicados da consulta.
1503 NeverM para a sequncia das etapas. A primeira As estatsticas (statistics)(Listagem 5)
134 Separ.
136 Widowed
operao deste caso o TABLE ACCESS revelam algumas mtricas da execuo
150 divorced FULL em CUSTOMERS, pois pertence corrente.
14253 married
ltima estratgia de join (NESTED LOOP, - As chamadas recursivas (recursive calls),
19094 single
75 widow MERGE JOIN ou HASH JOIN) da ramifi- no contexto Oracle, so chamadas internas
17428 <null> cao. Atravs da inspeo de cada linha do SGBD e diferente das originadas direta-
mente pelo usurio. Uma taxa muito alta de
recursive call sobre as chamadas do usurio
Listagem 3. Consulta s tabelas sh.sales e sh.customers. pode indicar problemas de dimensionamen-
to dos mais diversos tipos de segmento ou
REM O comando SET AUTOTRACE TRACE habilita o modo de investigao e omite a exibio dos dados.
SET AUTOT TRACE EXP STAT dicionrio de dados (data dictionary miss);
- O db block get revela o nmero de blocos
REM O comando abaixo descarrega o buffer cache para que nenhuma das consultas dos testes seja beneficiada.
ALTER SYSTEM FLUSH BUFFER_CACHE; acessados em current mode, portanto blocos
na situao corrente;
SELECT *
FROM sh.sales s, sh.customers c - O consistent get revela o nmero de
WHERE s.cust_id = c.cust_id blocos acessados em consistent mode,
AND DECODE(cust_marital_status, Married, married, NULL, married, cust_marital_status) = married
AND NVL(cust_year_of_birth, 1900) >= 1900
portanto na situao em que foi iniciada
AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M; a execuo (consistncia de leitura tem-
poral discutido no tpico de transaes).
366653 rows selected.
As mtricas somadas de db block get e o
Elapsed: 00:00:14.67 consistent get representam o nmero total
Execution Plan de blocos acessados pela consulta (logical
---------------------------------------------------------- IO ou logical read);
Plan hash value: 1876030245
- O physical read revela o nmero de lei-
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- turas em disco;
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | Pstart | Pstop |
- O redo size revela o espao utilizado em
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 181 | 37829 | 865 (1) | 00:00:11 | | | bytes em redo pela execuo de instruo
| 1 | NESTED LOOPS | | | | | | | | DML (Data Manipulation Language);
| 2 | NESTED LOOPS | | 181 | 37829 | 865 (1) | 00:00:11 | | |
|*3 | TABLE ACCESS FULL | CUSTOMERS | 1 | 180 | 406 (1) | 00:00:05 | | | - O trfego de bytes via SQL*Net revela-
| 4 | PARTITION RANGE ALL | | | | | | 1 | 28 | do pelas mtricas de bytes sent via SQL*Net
| 5 | BITMAP CONVERSION TO ROWIDS | | | | | | | |
|*6 | BITMAP INDEX SINGLE VALUE | SALES_CUST_BIX | | | | | 1 | 28 |
to client, bytes received via SQL*Net from
| 7 | TABLE ACCESS BY LOCAL INDEX ROWID | SALES | 130 | 3770 | 865 (1) | 00:00:11 | 1 | 1 | client e SQL*Net roundtrips to/from client;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Os sorts (memory) e sorts (disks) so rela-
cionados ao espao temporrio utilizado
Listagem 4. Informaes sobre os predicados da consulta. em memria e disco;
- O rows processed referente ao nmero de
Predicate Information (identified by operation id):
linhas exibidas.
-----------------------------------------------------------------------------

3 - filter(DECODE(CUST_MARITAL_STATUS,Married,married,NULL,married,CUST_MARITAL_STATUS)=married Observa-se que so necessrios 1.277.594


AND NVL(CUST_YEAR_OF_BIRTH,1900)>=1900 AND DECODE(CUST_GENDER,NULL,
Nao Informado,CUST_GENDER)>=M) blocos (db block gets+consistent gets) para a
6 - access(S.CUST_ID=C.CUST_ID) execuo da consulta que determinam os

52 SQL Magazine Edio 81

sql81.indb 52 29/10/2010 13:56:12


14,67 segundos gastos. Um TABLE ACCESS Advisor e os resultados obtidos esto Listagem 5. Informaes sobre estatsticas.
FULL encontrado na linha 3 do plano de apresentados na Listagem 10. Statistics
execuo que, de acordo com a crena po- Constata-se que SQL Tuning Advisor ---------------------------------------------------------------------
15635 recursive calls
pular, deve ser imediatamente substitudo no ofereceu conselho de refinamento 0 db block gets
pelo acesso ao ndice, como mostrado na para a especfica consulta SQL. A tcnica 1277594 consistent gets
Listagem 6. de atualizao manual de outlines em 3688 physical reads
0 redo size
O TABLE ACCESS FULL anterior foi casos em que o cdigo fonte no pode 19367861 bytes sent via SQL*Net to client
substitudo pelo TABLE ACCESS BY ser atualizado tambm deve ser evitada e 269289 bytes received via SQL*Net from client
24445 SQL*Net roundtrips to/from client
INDEX ROWID seguido de um INDEX no ser abordada neste artigo. Portanto, 133 sorts (memory)
FULL SCAN. Neste ltimo caso foram resta aprimorar a coleta de estatsticas dos 0 sorts (disk)
366653 rows processed
necessrios 1.330.418 blocos (db block objetos envolvidos nos predicados.
gets+consistent gets), portanto mais blocos
acessados que a consulta anterior resultan-
do em pior resposta de 15,42 segundos. A Listagem 6. Consulta SQL forando o uso de ndice.
crena popular foi desmistificada, por isso ALTER SYSTEM FLUSH BUFFER_CACHE;
partiremos para a anlise da cardinalida-
de dos predicados envolvidos. O hint /*+ SELECT /*+ use_nl(s c) index(c) index(s) */ *
FROM sh.sales s, sh.customers c
gather_plan_statistics */ ilustra um com- WHERE s.cust_id = c.cust_id
parativo entre a cardinalidade estimada e AND DECODE(cust_marital_status, Married, married, NULL, married, cust_marital_status) = married
a real (Listagem 7). AND NVL(cust_year_of_birth, 1900) >= 1900
AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M;
Observa-se que a coluna de cardinalida-
de estimada (E-Rows) e cardinalidade real 366653 rows selected.
(A-Rows) diverge de 1 para 22.848, portan-
Elapsed: 00:00:15.42
to a seletividade estimada do predicado na
operao de cdigo (Id) 3 difere em dema- Execution Plan
----------------------------------------------------------
sia da realidade, afetando assim o plano de
Plan hash value: 245521802
execuo. A Listagem 8 apresenta a anlise
pontual da tabela CUSTOMERS. ---------------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |Cost (%CPU)| Time |Pstart|Pstop |
Atravs da constatao de que a seleti-
---------------------------------------------------------------------------------------------------------------------------------------------------------
vidade real do predicado 22849/55500 | 0 | SELECT STATEMENT | | 181 | 37829 | 109K (1) |00:21:50| | |
(41%) conclui-se que a estratgia de NES- | 1 | NESTED LOOPS | | | | | | | |
| 2 | NESTED LOOPS | | 181 | 37829 | 109K (1) |00:21:50| | |
TED LOOP no a mais eficiente para o |*3 | TABLE ACCESS BY INDEX ROWID | CUSTOMERS | 1 | 180 | 54541(1) |00:10:55| | |
caso especfico, portanto ser definido um | 4 | INDEX FULL SCAN | CUSTOMERS_PK | 55500 | | 117 (1) |00:00:02| | |
hint que direciona a estratgia para HASH | 5 | PARTITION RANGE ALL | | | | | | 1 | 28 |
| 6 | BITMAP CONVERSION TO ROWIDS | | | | | | | |
JOIN com FULL TABLE SCAN em ambas |*7 | BITMAP INDEX SINGLE VALUE | SALES_CUST_BIX | | | | | 1 | 28 |
as tabelas, como mostra a Listagem 9. | 8 | TABLE ACCESS BY LOCAL INDEX ROWID | SALES | 130 | 3770 | 109K (1) |00:21:50| 1 | 1 |
A estratgia de HASH JOIN com TABLE ---------------------------------------------------------------------------------------------------------------------------------------------------------

ACCESS FULL s duas tabelas acessou Predicate Information (identified by operation id):
27.584 blocos (db block gets+consistent ---------------------------------------------------
gets), portanto apenas 2% dos blocos
3 - filter(DECODE(CUST_MARITAL_STATUS,Married,married,NULL,married,CUST_MARITAL_STATUS)=married
acessados em testes anteriores resultando AND NVL(CUST_YEAR_OF_BIRTH,1900)>=1900 AND DECODE(CUST_GENDER,NULL,Nao Informado,
na melhor resposta de 10,64 segundos. CUST_GENDER)>=M)
7 - access(S.CUST_ID=C.CUST_ID)
O buffer cache foi descarregado antes da
execuo da consultas o que culminou na Statistics
leitura em disco de 3102 blocos (physical ----------------------------------------------------------
15635 recursive calls
reads). Constata-se que o ndice de leitura
0 db block gets
em discos foi bastante semelhante nos trs 1330418 consistent gets
testes o que aproximou os tempos de todas 3835 physical reads
0 redo size
as consultas, mas no foi suficiente para 19422964 bytes sent via SQL*Net to client
anular os benefcios da ltima estratgia 269289 bytes received via SQL*Net from client
adotada. 24445 SQL*Net roundtrips to/from client
133 sorts (memory)
Para a tentativa de resoluo do problema 0 sorts (disk)
citado foi avaliado o Oracle SQL Tuning 366653 rows processed

Edio 81 SQL Magazine 53

sql81.indb 53 29/10/2010 13:56:12


Explain plan

Listagem 7. Consulta SQL mostrando o comparativo da cardinalidade.


SET AUTOT OFF | Id | Operation | Name | Starts |E-Rows| A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT /*+ gather_plan_statistics */ * | 1 | NESTED LOOPS | | 1 | | 366K |00:00:24.20| 1274K |
FROM sh.sales s, sh.customers c | 2 | NESTED LOOPS | | 1 | 181 | 366K |00:00:17.60| 1022K |
WHERE s.cust_id = c.cust_id |*3 | TABLE ACCESS FULL | CUSTOMERS | 1 | 1 | 22849 |00:00:00.09| 3879 |
AND DECODE(cust_marital_status, Married, married, NULL, married, | 4 | PARTITION RANGE ALL | | 22849 | | 366K |00:00:13.47| 1018K |
cust_marital_status) = married | 5 | BITMAP CONVERSION TO ROWIDS | | 639K | | 366K |00:00:09.55| 1018K |
AND NVL(cust_year_of_birth, 1900) >= 1900 |*6 | BITMAP INDEX SINGLE VALUE | SALES_CUST_BIX | 639K | | 14207 |00:00:04.40| 1018K |
AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M; | 7 | TABLE ACCESS BY LOCAL INDEX ROWID | SALES | 366K | 130 | 366K |00:00:03.08| 251K |
----------------------------------------------------------------------------------------------------------------------------------------
SELECT *
FROM TABLE(dbms_xplan.display_cursor(null, null, ALLSTATS LAST)); Predicate Information (identified by operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------- 3 - filter((DECODE(CUST_MARITAL_STATUS,Married,married,NULL,married,
SQL_ID dgpg9mj69515g, child number 0 CUST_MARITAL_STATUS)=
------------------------------------- married AND DECODE(CUST_GENDER,NULL,Nao Informado,
SELECT /*+ gather_plan_statistics */ * FROM sh.sales s, CUST_GENDER)>=M AND
sh.customers c WHERE s.cust_id = c.cust_id AND DECODE(TO_CHAR(CUST_YEAR_OF_BIRTH),NULL,1900,
DECODE(cust_marital_status, Married, married, NULL, married, CUST_YEAR_OF_BIRTH)>=1900))
cust_marital_status) = married AND DECODE(cust_year_of_birth, 6 - access(S.CUST_ID=C.CUST_ID)
NULL, 1900, cust_year_of_birth) >= 1900 AND DECODE(cust_gender,
NULL, Nao Informado, cust_gender) >= M

Plan hash value: 1876030245

---------------------------------------------------------------------------------------------------------------

Listagem 8. Anlise pontual da tabela CUSTOMERS.


SELECT count(*)
22849
FROM sh.customers
WHERE DECODE(cust_marital_status, Married, married, NULL, married,
SELECT count(*)
cust_marital_status) = married
FROM sh.customers;
AND NVL(cust_year_of_birth, 1900) >= 1900
AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M;
COUNT(*)
--------
COUNT(*)
55500
--------

Listagem 9. Consulta direcionada para HASH JOIN.


SET AUTOT TRACE EXP STAT --------------------------------------------------------------------------------------------------

ALTER SYSTEM FLUSH BUFFER_CACHE; Predicate Information (identified by operation id):


---------------------------------------------------
SELECT /*+ use_hash(s c) full(c) full(s) */ *
FROM sh.sales s, sh.customers c 1 - access(S.CUST_ID=C.CUST_ID)
WHERE s.cust_id = c.cust_id 2 - filter(DECODE(CUST_MARITAL_STATUS,Married,married,NULL,married,
AND DECODE(cust_marital_status, Married, married, NULL, married, CUST_MARITA
cust_marital_status) = married L_STATUS)=married AND NVL(CUST_YEAR_OF_BIRTH,1900)>=1900 AND
AND NVL(cust_year_of_birth, 1900) >= 1900 DECODE(CUST_GENDER,NULL,Nao Informado,CUST_GENDER)>=M)
AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M;
Statistics
366653 rows selected. ----------------------------------------------------------
0 recursive calls
Elapsed: 00:00:10.64 0 db block gets
27584 consistent gets
Execution Plan 3102 physical reads
---------------------------------------------------------- 0 redo size
Plan hash value: 3549450340 63727095 bytes sent via SQL*Net to client
----------------------------------------------------------------------------------------------------------------------------- 269289 bytes received via SQL*Net from client
| Id| Operation | Name | Rows | Bytes |Cost (%CPU)| Time | Pstart | Pstop | 24445 SQL*Net roundtrips to/from client
----------------------------------------------------------------------------------------------------------------------------- 0 sorts (memory)
| 0 | SELECT STATEMENT | | 181 | 37829 | 903 (2) | 00:00:11 | | | 0 sorts (disk)
|*1| HASH JOIN | | 181 | 37829 | 903 (2) | 00:00:11 | | | 366653 rows processed
|*2| TABLE ACCESS FULL |CUSTOMERS| 1 | 180 | 406 (1) | 00:00:05 | | |
| 3 | PARTITION RANGE ALL| | 918K | 25M | 493 (3) | 00:00:06 | 1 | 28 |
| 4 | TABLE ACCESS FULL | SALES | 918K | 25M | 493 (3) | 00:00:06 | 1 | 28 |

54 SQL Magazine Edio 81

sql81.indb 54 29/10/2010 13:56:12


Para refinar a estimativa de seletividade aproximando da realidade a estimativa de substituram seus respectivos predica-
de predicados a Oracle, a partir do 11g, seletividade (Listagem 11). dos na seo de Predicate Information
prov a funo dbms_stas.create_exten- Constata-se que os cdigos SYS_STU1- refinando a cardinalidade estimada.
ded_stats. Atravs desse recurso a densi- L9I7 HIECMTLCT Y Y98023KQ , SYS_ Atravs dessa atualizao o plano de
dade e o histograma sero coletados dire- STUN_8HNV$R3YSHNMOXC6JBGI6 e execuo reflete o timo sem o auxlio
tamente sobre os predicados predefinidos SYS_STU5K2XH6CR2V4$_17KE9L4LJR de hints.

Listagem 10. Resultados fornecidos pelo Oracle SQL Tuning Advisor.


VAR task_id VARCHAR2(20) AND DECODE(cust_marital_status, Married, married, NULL, married,
cust_marital_status) = married -
EXEC :task_id:= dbms_sqltune.create_tuning_task ( - AND NVL(cust_year_of_birth, 1900) >= 1900 -
user_name => SH, - AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M -
scope => COMPREHENSIVE, - -
time_limit => 1000000000, - )
task_name => sh_customers_sales, -
EXEC dbms_sqltune.execute_tuning_task (sh_customers_sales)
sql_text => -
SELECT * - SELECT dbms_sqltune.report_tuning_task (sh_customers_sales) FROM DUAL;
FROM -
sh.sales s, - DBMS_SQLTUNE.REPORT_TUNING_TASK(SH_CUSTOMERS_SALES)
sh.customers c - --------------------------------------------------------------------------------
WHERE - GENERAL INFORMATION SECTION
s.cust_id = c.cust_id - --------------------------------------------------------------------------------

Listagem 11. Coleta de estatsticas.


SELECT Nao Informado,
dbms_stats.create_extended_stats( cust_gender
SH, )
CUSTOMERS, )
( ) EXTENDED_STAT_3
DECODE( FROM DUAL;
cust_marital_status,
Married, EXTENDED_STAT_3
married, --------------------------------------------------------------
NULL, SYS_STUN_8HNV$R3YSHNMOXC6JBGI6
married,
cust_marital_status EXEC dbms_stats.gather_table_stats(SH, CUSTOMERS)
)
) PL/SQL procedure successfully completed.
) EXTENDED_STAT_1
FROM DUAL; SET AUTOT TRACE EXP
EXTENDED_STAT_1 SELECT *
-------------------------------------------------------------- FROM sh.sales s, sh.customers c
SYS_STU1L9I7HIECMTLCTYY98023KQ WHERE s.cust_id = c.cust_id
AND DECODE(cust_marital_status, Married, married, NULL, married,
SELECT cust_marital_status) = married
dbms_stats.create_extended_stats( AND NVL(cust_year_of_birth, 1900) >= 1900
SH, AND DECODE(cust_gender, NULL, Nao Informado, cust_gender) >= M;
CUSTOMERS,
(
Execution Plan
NVL(cust_year_of_birth, 1900)
----------------------------------------------------------
)
Plan hash value: 3549450340
) EXTENDED_STAT_2
---------------------------------------------------------------------------------------------------------------
FROM DUAL;
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
---------------------------------------------------------------------------------------------------------------------------------
EXTENDED_STAT_2
| 0 | SELECT STATEMENT | | 361K | 76M | 903 (2) | 00:00:11 | | |
--------------------------------------------------------------
|* 1 | HASH JOIN | | 361K | 76M | 903 (2) | 00:00:11 | | |
SYS_STU5K2XH6CR2V4$_17KE9L4LJR
|* 2 | TABLE ACCESS FULL | CUSTOMERS | 2775 |525K | 406 (1) | 00:00:05 | | |
| 3 | PARTITION RANGE ALL | | 918K | 25M | 493 (3) | 00:00:06 | 1 | 28 |
SELECT
| 4 | TABLE ACCESS FULL | SALES | 918K | 25M | 493 (3) | 00:00:06 | 1 | 28 |
dbms_stats.create_extended_stats(
---------------------------------------------------------------------------------------------------------------------------------
SH,
Predicate Information (identified by operation id):
CUSTOMERS,
---------------------------------------------------
(
DECODE( 1 - access(S.CUST_ID=C.CUST_ID)
cust_gender, 2 - filter(C.SYS_STU1L9I7HIECMTLCTYY98023KQ=married AND
NULL, C.SYS_STUN_8HNV$R3YSHNMOXC6JBGI6>=M AND
C.SYS_STU5K2XH6CR2V4$_17KE9L4LJR>=1900)

Edio 81 SQL Magazine 55

sql81.indb 55 29/10/2010 13:56:12


Explain plan

Concluso hint) no passado seja ruim agora e esse fornecidas ao otimizador com a coleta regu-
Como vimos ao longo desta srie de arti- um dos principais motivos para que se lar de estatsticas. Estatsticas atualizadas
gos, o plano de execuo de uma consulta evite o uso de hints. faro com que o otimizador escolha sempre
SQL de extrema importncia para a efi- O ideal sempre deixar na mo do ban- a melhor estratgia de acesso de acordo com
cincia de um SGBD e saber analisar este co de dados para que a escolha da melhor o momento do banco de dados.
plano de execuo uma tarefa primordial estratgia de acesso seja feita. Mas para isso,
para todo e qualquer DBA. muito importante que o DBA fornea
Os planos de execuo fornecem ao DBA informaes para que o otimizador escolha
todas as informaes necessrias para a melhor estratgia. Essas informaes so
Oracle Database Online
a anlise de performance de consultas
Documentation 11g Release 2 (11.2)
mas cabe ao DBA fazer as anlises corre-
http://www.oracle.com/pls/db112/
tamente para tirar do SGBD o mximo
Reinaldo Tetsuo Katahira homepage?remark=tahiti
possvel.
reinaldokatahira@gmail.com
Os hints so bons amigos para fazer Oracle Database 11g Release 2
- IBM Certified Database Admi-
com que o plano de execuo adote uma nistrator DB2v9 http://www.oracle.com/technology/software/
estratgia melhor de acesso, mas muito - Oracle Certified Expert RAC 10g products/database/index.html
importante salientar que os mesmo hints - Oracle Certified Professional
podem tambm ser um grande vilo em - Microsoft Certified Database Administrator D seu feedback sobre esta edio! eu
Feedback

s
D
outro momento. Isso se deve ao fato de - Microsoft Certified Systems Engineer A SQL Magazine tem que ser feita ao seu gosto.

sobre e
um banco de dados ser muito dinmico, - Microsoft Certified Systems Administrator
Para isso, precisamos saber o que voc, leitor,

s
ta
edio

com crescimentos de tabelas e tambm - DBA Oracle na IBM do Brasil em projeto interna-
acha da revista!
cional administrando ambiente de produo de alta
redues de tabelas. Esta alterao no vo-
criticidade. D seu voto sobre este artigo, atravs do link:
lume de dados pode fazer com que uma
- Consultor independente de Bancos de Dados. www.devmedia.com.br/sqlmagazine/feedback
estratgia de acesso boa (forada por um

sql81.indb 56 29/10/2010 13:56:15


e d ba c
k
sobre e
s

ta
edi

Edio 81 SQL Magazine 57

sql81.indb 57 29/10/2010 13:56:18


Seo Banco de Dados/Persistncia: "Nesta seo voc encontra artigos banco de dados, SQL ou pers istnci

Desvendando o Automatic Stora ge

N Resumo DevMan
a primeira parte deste artigo vi-
mos todos os conceitos referen-
tes ao ASM Automatic Storage De que se trata o artigo:
Management e j iniciamos uma sesso Este artigo trata da definio de conceitos e utilizao do ASM Automatic Storage Management, fer-
Mo na Massa em que criamos arquivos ramenta da Oracle para gerenciamento do armazenamento de dados.
no sistema operacional para simular raw
devices que sero utilizados como discos. Para que serve:
Na segunda parte, criamos manualmente Auxiliar os DBAs nas tarefas do dia-a-dia referentes a alocao e gerenciamento de espao para o cres-
uma instncia ASM, inclusive verificando cimento dos bancos de dados.
se a instncia conseguiu enxergar os
discos existentes. Em que situao o tema til:
Na terceira parte comeamos a, efetiva- Em ambientes Single Instance ou Real Application Cluster o ASM se mostra muito til para centralizar o
mente, utilizar o ASM. J sabemos como armazenamento e administrao de espaos, facilitando bastante as tarefas rotineiras do DBA.
criar e gerenciar disk groups. Vimos como
trabalhar com templates e com diretrios na
quarta parte da srie. Na quinta parte apren- +dgroup.file.incarnation Agora que j conhecemos as maneiras
demos como trabalhar com aliases. Continu- Exemplo: +DATA.257.728999701 de referenciar arquivos no ASM, bom
arei nesta edio a desvendar mais algumas Alias do arquivo: o arquivo referenciado termos um certo cuidado ao utiliz-las
caractersticas do ASM. Em particular, atravs do apelido que foi dado no mo- pois os arquivos no ASM no so excludos
iniciaremos a configurao para migrao mento da criao, veja abaixo o formato: automaticamente se:
de um banco de dados para o ASM. +dgroup/directory/filename O(s) arquivo(s) foi(foram) criado(s) utili-
Exemplo: +DATA/rr11g/datafile/ zando um alias, ou seja, no foi utilizado
Os arquivos no ASM ts_sqlmag_01.dbf o formato OMF (Oracle Managed Files);
preciso conhecer alguns detalhes quan- Alias do arquivo juntamente com o Foi executado um Recovery (recuperao)
do trabalhamos com os arquivos no ASM. template: caso tenha sido utilizado um utilizando a tcnica de um determinado
Conhecer estes detalhes podem evitar que template na criao deste arquivo, o mes- ponto no tempo, conhecido como Point-
o DBA perca um tempo precioso tentando mo pode ser referenciado considerando in-Time Recovery.
diagnosticar qual o motivo do problema esta definio, conforme formato descrito
apresentado. abaixo: Nos casos descritos acima, ser neces-
Existem vrias maneiras de referenciar +dgroup(template)/alias srio excluir manualmente os referidos
um arquivo no ASM: Exemplo: +DATA(SQL_MAGAZINE)/ arquivos. E poderemos excluir estes ar-
Qualificao completa do arquivo: esta ts_sqlmag_02.dbf quivos referenciando-os atravs de uma
referncia contempla a informao com- Qualificao incompleta do arquivo: das formas descritas acima, conforme
pleta do arquivo em questo, no seguinte podemos tambm referenciar os arquivo apresentado na Listagem 1.
formato: atravs da qualificao incompleta, como
+dgroup/dbname/file_type/file_ mostrado abaixo: Convertendo o banco de dados para o ASM
type_tag.file.incarnation +dgroup A partir de agora, j conhecemos tudo o
Exemplo: +DATA/rr11g/datafile/ Exemplo: +DATA que precisvamos para utilizar o ASM, o
sqlmag.257.728999701 Q ualificao incompleta do arquivo que falta agora justamente converter o
Formato numrico do arquivo: desta juntamente com o template: esta mais banco de dados da estrutura convencional
forma, o arquivo referenciado conside- uma maneira de referenciar um arquivo para o ASM.
rando as informaes numricas definidas do ASM, veja abaixo: Um ponto interessante que no precisa-
de maneira nica na instncia ASM. O +dgroup(template) mos fazer a converso de todo o banco de
formato apresentado logo abaixo: Exemplo: +DATA(SQL_MAGAZINE) dados diretamente para o ASM. possvel

58 SQL Magazine Edio 81

sql81.indb 58 29/10/2010 13:56:18


ou pers istncia"

ra ge Management - Parte 6
Ricardo Rezende

manter o banco de dados ativo, porm de Altere os parmetros DB_


Listagem 1. Excluindo arquivos do ASM manualmente.
maneira hbrida, ou seja, parte do banco CREATE_FILE_DEST, DB_RE-
de dados no mtodo convencional e parte COVERY_FILE_DEST_SIZE, 01. -- Excluindo o arquivo atravs da qualificao total
do banco de dados no ASM. DB_RECOVERY_FILE_DEST 02. SQL> ALTER DISKGROUP DATA
03. 2 DROP FILE +DATA/rr11g/datafile/sqlmag.257.728999701;
Mas em que situao isso pode ser til? e CONTROL_FILES para que 04.
Atualmente, os bancos de dados tem reflitam a nova localizao 05. Diskgroup altered.
crescido cada vez mais. Mais e mais infor- (veja Listagem 3): 06.
07. Elapsed: 00:00:02.04
maes tem sido armazenadas no banco D B_CREATE_FILE_DEST: 08.
de dados e, com certeza, este fato pode aponta a localizao da criao 09. -- Excluindo o arquivo atravs do formato numrico
10. SQL> ALTER DISKGROUP DATA
ser um grande problema num momento automtica de novos arquivos
11. 2 DROP FILE +DATA.258.728999705;
de migrao como este. do banco de dados caso esta 12.
Apenas para exemplificar, atualmente localizao seja omitida na 13. Diskgroup altered.
14.
um dos bancos de dados que adminis- criao do mesmo;
15. Elapsed: 00:00:03.05
tro, em ambiente de produo, possui D B _ R E C O V E R Y_ F I L E _ 16.
aproximadamente 5TB (TeraBytes) de DEST_SIZE: define o tama- 17. -- Excluindo o arquivo atravs do alias
18. SQL> ALTER DISKGROUP DATA
dados num ambiente de alta disponibi- nho mximo (em Bytes) a ser 19. 2 DROP FILE +DATA/ts_sqlmag_02.dbf;
lidade que opera em regime 24 x 7 (24 usado pelo banco de dados 20.
horas por dia e 7 dias por semana). Este para armazenar os arquivos 21. Diskgroup altered.
22.
um ambiente que definitivamente no de recuperao criados na fast 23. Elapsed: 00:00:05.07
permite uma parada de 12 ou 18 horas recovery area;
para fazer a migrao completa do banco DB_RECOVERY_FILE_DEST:
Listagem 2. Verificando a utilizao do spfile.
de dados. especifica a localizao padro
O que fazer ento? Bem, com base na para a fast recovery area. Esta SQL> SELECT NAME, VALUE
janela de manuteno disponibilizada rea armazena cpias do con- 2 FROM V$PARAMETER
3 WHERE NAME=spfile;
(apenas 3 horas na madrugada de domingo trolfile e dos online redo log files,
2am at 5am) a migrao tem sido feita bem como os archived redo log NAME VALUE
------------ -----------------------------------------------------------------------------
parcialmente, pois o ASM permite isso. files, flashback logs e tambm
spfile /u01/app/oracle/product/11.1.0/db_1/dbs/spfilerr11g.ora
Podemos fazer a migrao de todo o (caso configurado) os backups
banco de dados de uma nica vez, migrar do RMAN; Elapsed: 00:00:00.02
apenas uma tablespace ou ainda migrar CONTROL_FILES: este par-
apenas um datafile. metro define um ou mais nomes
Desta forma, dependendo do tamanho para o controfile, separados por vrgula. est alterado apenas no spfile e ter efeito
da tablespace, tenho utilizado a segunda A Listagem 3 mostra a alterao dos par- apenas na prxima inicializao do banco
ou terceira alternativa. Mostrarei as trs metros do banco de dados para contemplar de dados. O motivo simples: no existe
alternativas nesta srie. a utilizao do ASM (linhas 1 a 18) e logo o controlfile no ASM at este momento,
depois verifica os valores que esto em efei- portanto teramos um erro caso o banco
Iniciando a converso do banco de to no banco de dados (linhas 22 a 34). de dados tentasse ler o controlfile dire-
dados para o ASM Perceba que, mesmo alterando o valor tamente no ASM.
Primeiramente, preciso configurar do parmetro CONTROL_FILES, ao ve- O prximo passo fazer a migrao
todo o ambiente para uma perfeita con- rificar no banco de dados, percebemos do controlfile para o ASM, para isso usa-
verso sem surpresas: que a alterao no est em efeito. Isto se remos o RMAN (Recovery Manager). A
Tenha certeza que o banco de dados deve ao fato de termos utilizado a opo Listagem 4 apresenta o processo.
esteja usando um spfile (Nota DevMan 1) SCOPE=SPFILE no momento da alterao Primeiramente preciso baixar o
(veja Listagem 2). do valor (linha 16), ou seja, o parmetro banco de dados (linha 1 da Listagem 4),

Edio 81 SQL Magazine 59

sql81.indb 59 29/10/2010 13:56:18


Desvendando o Automatic Storage Management - Parte 6

encerra-se a sesso do SQL*Plus (linha 5) deseja restaurar o arquivo, pois o RMAN finalizamos a sesso do RMAN (linha
e inicia-se uma sesso do RMAN conec- utilizar o valor do parmetro CONTROL- 38) e iniciamos uma sesso do SQL*Plus
tando-se ao banco de dados (linha 8). FILE que est definido para a instncia. conectando-se ao banco de dados (linhas
Agora preciso iniciar o banco de dados Lembre-se que este parmetro foi alterado 42 a 48).
em modo NOMOUNT, ou seja, somente a na Listagem 3 (linha 16) porm definido No possvel abrir o banco direta-
instncia iniciada, mas nem mesmo o apenas para o spfile. Ao reiniciar a instn- mente. necessrio primeiro montar
controlfile lido (linha 16). Com a ins- cia, este novo valor passou a ter efeito. o banco de dados, lendo e validando o
tncia inicializada, necessrio restaurar A restaurao foi bem sucedida e o novo controlfile, para depois abr-lo (linha 51).
o controlfile utilizando o arquivo original controfile apresentado na linha 35. Pode- Aps o banco de dados estar montado,
como origem dos dados (linha 27). Perceba mos agora abrir o banco de dados para possvel verificar qual a localizao do
que no preciso indicar o local onde se utilizao normal da aplicao. Para isso, controlfile, as linhas 58 a 64 mostram que

Listagem 3. Alterando parmetros do banco de dados.


01. SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = +DATA; 19.
02. 20. Elapsed: 00:00:00.01
03. System altered. 21.
04. 22. SQL> SELECT NAME, VALUE
05. Elapsed: 00:00:00.04 23. 2 FROM V$PARAMETER
06. SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 2048M; 24. 3 WHERE NAME IN (db_create_file_dest, db_recovery_file_dest_size,
07. db_recovery_file_dest, control_files);
08. System altered. 25.
09. 26. NAME VALUE
10. Elapsed: 00:00:00.04 27. ------------------- ------------------------------------------------------------
11. SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = +FRA; 28. control_files /u01/app/oracle/oradata/rr11g/control01.ctl, /u01/app/oracle
12. 29. /oradata/rr11g/control02.ctl, /u01/app/oracle/oradata/rr11g/
13. System altered. 30. control03.ctl
14. 31.
15. Elapsed: 00:00:00.02 32. db_create_file_dest +DATA
16. SQL> ALTER SYSTEM SET CONTROL_FILES = +DATA SCOPE=SPFILE; 33. db_recovery_file_dest +FRA
17. 34. db_recovery_file_dest_size 2147483648
18. System altered.

Listagem 4. Convertendo o controlfile para o ASM


01. SQL> SHUTDOWN IMMEDIATE; 37.
02. Database closed. 38. RMAN> EXIT
03. Database dismounted. 39.
04. ORACLE instance shut down. 40.
05. SQL> EXIT 41. Recovery Manager complete.
06. Disconnected from Oracle Database 11g Enterprise Edition Release 42. rr11g@OEL64Node01 [/home/oracle] $ sqlplus /nolog
11.1.0.6.0 - 64bit Production 43.
07. With the Partitioning, OLAP, Data Mining and Real Application Testing options 44. SQL*Plus: Release 11.1.0.6.0 - Production on Mon Sep 6 16:26:01 2010
08. rr11g@OEL64Node01 [/home/oracle] $ rman target / 45.
09. 46. Copyright (c) 1982, 2007, Oracle. All rights reserved.
10. Recovery Manager: Release 11.1.0.6.0 - Production on Mon Sep 6 16:24:14 2010 47.
11. 48. SQL> conn / as sysdba
12. Copyright (c) 1982, 2007, Oracle. All rights reserved. 49. Connected.
13. 50. SQL> set line 180 pages 9999 timing on
14. connected to target database (not started) 51. SQL> ALTER DATABASE MOUNT;
15. 52.
16. RMAN> STARTUP NOMOUNT; 53. Database altered.
17. 54.
18. Oracle instance started 55. Elapsed: 00:00:04.73
19. 56. SQL> COL NAME FOR A40
20. Total System Global Area 521936896 bytes 57. SQL> COL VALUE FOR A80
21. 58. SQL> SELECT NAME, VALUE
22. Fixed Size 2145984 bytes 59. 2 FROM V$PARAMETER
23. Variable Size 444596544 bytes 60. 3 WHERE NAME = control_files;
24. Database Buffers 71303168 bytes 61.
25. Redo Buffers 3891200 bytes 62. NAME VALUE
26. 63. ----------------------------- ----------------------------------------------------------------------
27. RMAN> RESTORE CONTROLFILE FROM /u01/app/oracle/oradata/rr11g/control01.ctl; 64. control_files +DATA/rr11g/controlfile/current.256.729015925
28. 65.
29. Starting restore at 06-SEP-10 66. Elapsed: 00:00:00.01
30. using target database control file instead of recovery catalog 67. SQL> ALTER DATABASE OPEN;
31. allocated channel: ORA_DISK_1 68.
32. channel ORA_DISK_1: SID=151 device type=DISK 69. Database altered.
33. 70.
34. channel ORA_DISK_1: copied control file copy 71. Elapsed: 00:00:13.34
35. output file name=+DATA/rr11g/controlfile/current.256.729015925
36. Finished restore at 06-SEP-10

60 SQL Magazine Edio 81

sql81.indb 60 29/10/2010 13:56:18


o controlfile atualmente em uso pelo banco Da mesma forma que os tempfiles, permitindo a excluso (linha 28). Caso,
de dados est no ASM. os online redo log files tambm no so mesmo aps forar um ciclo, o erro per-
Agora s falta abrir o banco de dados e convertidos para o ASM, necessrio sista, force o ciclo mais uma vez que, em
disponibiliz-lo para a aplicao trabalhar excluir e recriar cada um dos grupos. determinado momento, a excluso ser
(linha 67). Porm, no podemos simplesmente possvel.
Precisamos agora converter os tempfiles excluir todos os grupos e recri-los no Aps a excluso do grupo, simplesmen-
para o ASM. Infelizmente no possvel ASM, pois o banco de dados precisa ter, te recriamos o mesmo grupo e automa-
converter o tempfile pura e simplesmente. no mnimo, dois grupos de online redo ticamente o grupo foi criado no ASM
O que devemos fazer criar um novo log files definidos no banco de dados. (linha 34). Repita o processo para todos
tempfile diretamente no ASM e excluir Frente a esta caracterstica, devemos os grupos de online redo log (linhas 40 e
os tempfiles atuais, sem assim alterar ou excluir e recriar cada grupo separada- 45 para o grupo 2 e linhas 51 e 56 para
recriar a tablespace temporria. Veja o mente. A linha 14 apresenta a tentativa o grupo 3).
processo na Listagem 5. de excluso do grupo 1. Tentativa? Sim, Por ltimo, verificamos o estado atual
Primeiramente verificamos os tempfiles tentativa. Perceba, nas linhas 15 a 19 que dos grupos e seus membros (linhas 62 a
da tablespace temporria (linhas 3 a 8 da a tentativa de excluso do grupo ocasio- 75). Perceba que, por segurana, foram
Listagem 5). Logo aps, adicionamos nou um erro. A utilizao dos online redo criados dois membros para cada grupo
um novo tempfile diretamente no ASM log cclica, ou seja, a cada momento um nos diskgroups DATA e FRA.
(linha 11) e verificamos se est tudo OK dos grupos o correntemente utilizado.
(linhas 16 a 22). Pela lei de Murphy, justamente o grupo
Aps constatado que estava tudo OK, 1 estava sendo utilizado no momento
possvel excluir o tempfile armazenado e esse o motivo do erro. Um online
Nota do DevMan 1
na metodologia anterior (linha 25). Fi- redo log group pode estar com um de
O spfile Server Parameter File
nalmente podemos ver que a tablespace trs estados possveis: corrente, ativo
temporria possui toda sua estrutura ou inativo. O Server Parameter File um arquivo binrio localizado no
servidor de banco de dados que contm todos os parmetros
fsica j armazenada no ASM (linhas O estado corrente indica que o grupo de inicializao do banco de dados e gerenciado diretamente
30 a 35). est sendo utilizado naquele momento; pelo banco de dados. Suas principais caractersticas so:
Iremos agora converter os online redo log j o estado ativo indica que o grupo - Cada banco de dados possui apenas um spfile e o mesmo
files para o ASM tambm. Veja o processo necessrio para efetuar uma recupe- deve estar no servidor de banco de dados;
na Listagem 6. rao da instncia em caso de crash; e - O spfile lido e escrito apenas pelo banco de dados, nunca
Em primeiro lugar, verificamos quais finalmente o estado inativo indica pelo cliente ou;
os online redo log files presentes no banco que o grupo no mais necessrio no - um arquivo binrio e no pode ser modificado manualmente
de dados (linhas 1 a 10 da Listagem 6), momento e apenas neste estado que o em um editor de textos;
onde possvel ver que o banco de grupo pode ser excludo. - Os parmetros de inicializao do banco de dados so
dados possui trs grupos de online redo Para resolver este problema, simples- armazenados no spfile de maneira persistente, ou seja,
qualquer alterao feita em um parmetro enquanto o banco
log, porm apenas um membro em cada mente forcei um ciclo, tornando o de dados est em operao ser persistente mesmo quando a
grupo. online redo log group inativo (linha 23) e instncia do banco de dados reiniciada.

Listagem 5. Convertendo a tablespace temporria para o ASM


01. SQL> COL TABLESPACE_NAME FOR A15 19. TABLESPACE_NAME FILE_NAME SIZE_MB
02. SQL> COL FILE_NAME FOR A60 20. -------------------------- ---------------------------------------------------------- ----------
03. SQL> SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 SIZE_MB 21. TEMP /u01/app/oracle/oradata/rr11g/temp01.dbf 31
04. 2 FROM DBA_TEMP_FILES; 22. TEMP +DATA/rr11g/tempfile/temp.257.729017611 32
05. 23.
06. TABLESPACE_NAME FILE_NAME SIZE_MB 24. Elapsed: 00:00:00.01
07. --------------------------- ---------------------------------------------------------- ----------- 25. SQL> ALTER DATABASE TEMPFILE /u01/app/oracle/oradata/rr11g/temp01.dbf DROP;
08. TEMP /u01/app/oracle/oradata/rr11g/temp01.dbf 31 26.
09. 27. Database altered.
10. Elapsed: 00:00:00.01 28.
11. SQL> ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 32M; 29. Elapsed: 00:00:00.14
12. 30. SQL> SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 SIZE_MB
13. Tablespace altered. 31. 2 FROM DBA_TEMP_FILES;
14. 32.
15. Elapsed: 00:00:11.49 33. TABLESPACE_NAME FILE_NAME SIZE_MB
16. SQL> SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 SIZE_MB 34. -------------------------- ------------------------------------------------------------ ----------
17. 2 FROM DBA_TEMP_FILES; 35. TEMP +DATA/rr11g/tempfile/temp.257.729017611 32
18. 36.
37. Elapsed: 00:00:00.01

Edio 81 SQL Magazine 61

sql81.indb 61 29/10/2010 13:56:19


Desvendando o Automatic Storage Management - Parte 6

Listagem 6. Convertendo os online redo log files para o ASM


1. SQL> SELECT L.GROUP#, LF.MEMBER, BYTES/1024/1024 SIZE_MB 42. Database altered.
2. 2 FROM V$LOG L, V$LOGFILE LF 43.
3. 3 WHERE L.GROUP# = LF.GROUP# 44. Elapsed: 00:00:05.92
4. 4 GROUP BY L.GROUP#, LF.MEMBER, BYTES/1024/1024; 45. SQL> ALTER DATABASE ADD LOGFILE GROUP 2 SIZE 20M;
5. 46.
6. GROUP# MEMBER SIZE_MB 47. Database altered.
7. ------------ ---------------------------------------------------------- ------------ 48.
8. 1 /u01/app/oracle/oradata/rr11g/redo01.log 50 49. Elapsed: 00:00:16.13
9. 2 /u01/app/oracle/oradata/rr11g/redo02.log 50 50.
10. 3 /u01/app/oracle/oradata/rr11g/redo03.log 50 51. SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
11. 52.
12. Elapsed: 00:00:00.02 53. Database altered.
13. 54.
14. SQL> ALTER DATABASE DROP LOGFILE GROUP 1; 55. Elapsed: 00:00:06.83
15. ALTER DATABASE DROP LOGFILE GROUP 1 56. SQL> ALTER DATABASE ADD LOGFILE GROUP 3 SIZE 20M;
16. * 57.
17. ERROR at line 1: 58. Database altered.
18. ORA-01624: log 1 needed for crash recovery of instance rr11g (thread 1) 59.
19. ORA-00312: online log 1 thread 1: /u01/app/oracle/oradata/rr11g/redo01.log 60. Elapsed: 00:00:17.84
20. 61.
21. 62. SQL> SELECT L.GROUP#, LF.MEMBER, BYTES/1024/1024 SIZE_MB
22. Elapsed: 00:00:00.28 63. 2 FROM V$LOG L, V$LOGFILE LF
23. SQL> ALTER SYSTEM SWITCH LOGFILE; 64. 3 WHERE L.GROUP# = LF.GROUP#
24. 65. 4 GROUP BY L.GROUP#, LF.MEMBER, BYTES/1024/1024
25. System altered. 66. 5 ORDER BY 1, 2;
26. 67.
27. Elapsed: 00:00:00.53 68. GROUP# MEMBER SIZE_MB
28. SQL> ALTER DATABASE DROP LOGFILE GROUP 1; 69. --------------- -------------------------------------------------------------------- -----------
29. 70. 1 +DATA/rr11g/onlinelog/group_1.259.729019975 20
30. Database altered. 71. 1 +FRA/rr11g/onlinelog/group_1.256.729019977 20
31. 72. 2 +DATA/rr11g/onlinelog/group_2.260.729020091 20
32. Elapsed: 00:00:09.99 73. 2 +FRA/rr11g/onlinelog/group_2.257.729020095 20
33. 74. 3 +DATA/rr11g/onlinelog/group_3.262.729020817 20
34. SQL> ALTER DATABASE ADD LOGFILE GROUP 1 SIZE 20M; 75. 3 +FRA/rr11g/onlinelog/group_3.273.729020821 20
35. 76.
36. Database altered. 77. 6 rows selected.
37. 78.
38. Elapsed: 00:00:17.45 79. Elapsed: 00:00:00.02
39.
40. SQL> ALTER DATABASE DROP LOGFILE GROUP 2;
41.

Pronto, neste momento temos parte da maneira completa ou fracionada. No pr- Ricardo Rezende
configurao do banco de dados para sua ximo artigo desta srie mostraremos como ricardo@sqlmagazine.com.br
converso para uso no ASM finalizada! converter apenas um datafile, apenas uma ricarezende@gmail.com
Blog: http://ricarezende.blogspot.com
tablespace e tambm todo o banco de da-
Twitter: http://twitter.com/ricarezende
Concluso dos de uma s vez.
- DBA Oracle certificado pela Oracle
Mostramos neste artigo algumas parti- Caso voc tenha disponvel uma janela University (DBA 9i track e DBA OCP 10g).
cularidades dos arquivos no ASM e ini- de manuteno confortvel, prefira a - IBM Certified Database Associate DB2 9
ciamos a configurao do banco de dados terceira opo, mas caso seu banco de da- - DBA Oracle na IBM do Brasil em projeto interna-
para a converso total do banco de dados dos seja bastante grande que no permita cional administrando ambiente de produo de alta
para a estrutura do ASM. a converso total do banco de dados, no criticidade.
Na verdade, algumas partes do banco de descarte o uso do ASM, pois a primeira e - Consultor independente de Bancos de Dados.
dados j foram convertidas para o ASM o segunda soluo se mostram ideais. - Editor tcnico da revista SQL Magazine.
que falta converter todo o restante da estru- Desta forma, na prxima edio conti-
D seu feedback sobre esta edio! eu
Feedback
tura dos dados, ou seja, o banco de dados. nuaremos a desvendar os mistrios do
s
D

A SQL Magazine tem que ser feita ao seu gosto.


sobre e

Como mencionamos neste artigo, po- ASM com a converso do banco de dados.
demos converter o banco de dados de No perca! Para isso, precisamos saber o que voc, leitor,
s

ta
edio

acha da revista!
D seu voto sobre este artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback

62 SQL Magazine Edio 81

sql81.indb 62 29/10/2010 13:56:19


Seo Engenharia de Software: Nesta seo voc encontra artigos relacionados
a anlise, modelagem, projeto, testes, entre outros temas relacionados a ES

Especificao de Casos de Uso


na Prtica
Rodrigo Oliveira Spnola

A Resumo DevMan
engenharia de requisitos um ter-
mo usado para descrever as ativida-
des relacionadas produo (levan- De que se trata o artigo:
tamento, registro, validao e verificao) e Este artigo apresenta inicialmente algumas definies associadas engenharia de requisitos e espe-
gerncia (controle de mudanas, gerncia de cificao de requisitos atravs de casos de uso. Em seguida, so apresentados alguns exemplos reais de
configurao, rastreabilidade, gerncia de especificao utilizando casos de uso.
qualidade dos requisitos) de requisitos. A
Figura 1 representa essa definio. Para que serve:
Mas o que podemos entender por re- O objetivo do artigo explicitar de forma prtica como a especificao dos requisitos do software
quisitos? Existem diferentes definies atravs de casos de uso podem ser efetuadas em um nvel de detalhe tal que informaes importantes
encontradas na literatura tcnica: para outras etapas do desenvolvimento como planejamento de testes, projeto e desenvolvimento no
U m requisito uma caracterstica do sis- sejam omitidas.
tema ou a descrio de algo que o sistema
capaz de realizar para atingir os seus Em que situao o tema til:
objetivos; O assunto abordado til no dia a dia do analista de requisitos na realizao de suas atividades.
As descries das funes e restries
so os requisitos do sistema;
Um requisito uma propriedade que o Reduzir o custo de desenvolvimento O objetivo deste artigo no apresentar
software deve exibir para resolver algum (como vimos anteriormente, requisitos mal um referencial terico sobre como lidar
problema no mundo real; definidos causam retrabalho). com cada questo envolvida nas ativida-
Uma condio ou uma capacidade que des dirias de um analista de requisitos.
deve ser alcanada ou estar presente em A atividade de identificao e especifi- Focaremos aqui apenas no ltimo tpico
um sistema para satisfazer um contrato, cao de requisitos do software uma ati- da lista apresentada acima: Definir as
padro, especificao ou outro documento vidade bastante desafiadora. complexo: necessidades do usurio em termos de
formalmente imposto... Identificar as reais necessidades do especificaes. Faremos isto de forma
cliente; totalmente prtica atravs da apresentao
Assim, podemos entender requisitos Lidar com clientes; de um conjunto de casos de uso especifica-
como sendo o conjunto de necessidades F ormalizar as necessidades do cliente dos que podero servir de base para suas
explicitadas pelo cliente que devero ser atravs da especificao de requisitos de atividades como analista de requisitos.
atendidas para solucionar um determina- forma que esta seja de fcil entendimento
do problema do negcio no qual o cliente para o cliente e fornea as informaes Contextualizao dos Exemplos
faz parte. importante estar atento para requeridas pela equipe de desenvolvi- As especificaes de casos de uso apre-
esta definio: embora o requisito seja mento; sentadas neste artigo so fruto da expe-
definido pelo cliente, nem sempre o que L idar com domnios desconhecidos. rincia prtica do autor. Eles no servem
o cliente quer o que o negcio precisa. Entende-se por domnio o contexto para o de gabarito para futuras atividades de
Cabe equipe de consultores identificar qual o software est sendo desenvolvido. especificao, ao invs disso, podem ser
a real necessidade do negcio. Por exemplo: contabilidade, medicina, considerados um ponto de partida para
Neste contexto, requisitos so impor- controle de estoque. Para ilustrar esta que possamos ver na prtica como pode-
tantes para: dificuldade, imagine-se elaborando a es- mos escrever casos de uso.
E stabelecer uma base de concordncia pecificao dos requisitos de um mdulo importante estar atento tambm ao fato
entre o cliente e o fornecedor sobre o que estatstico para um sistema do mercado de que os casos de uso apresentados neste
o software far; financeiro; artigo refletem as caractersticas de escrita
F ornecer uma referncia para a validao Definir as necessidades do usurio em dos autores. Estas caractersticas que en-
do produto final; termos de especificaes. volvem itens como nvel de detalhamento,

Edio 81 SQL Magazine 63

sql81.indb 63 29/10/2010 13:56:19


Especificao de Casos de Uso na Prtica

informaes contidas nos casos de uso, apresentado na Tabela 1 como sendo im- excluso e alterao. Sua especificao est
dentre outras, costumam mudar tambm portantes na descrio de um caso de uso. apresenta na Tabela 2.
de organizao para organizao. A partir de agora apresentaremos dois Para o nosso segundo exemplo, procura-
Tendo isto em mente, para este artigo exemplos de casos de uso. Procuramos uti- mos trabalhar com outra situao bastante
iremos considerar o conjunto de definies lizar como exemplo situaes corriqueiras comum de encontrarmos em sistemas de
no dia a dia do desenvol- informao: consulta a uma dada entidade
vimento de software. e disponibilizao de opes de manipula-
o desta entidade. Mais especificamente,
Exemplos de Casos de trabalharemos com uma funcionalidade de
Uso consulta de cursos para uma empresa que
In icialmente vamos gerencia cursos. A especificao do caso
apresentar um caso de de uso para esta funcionalidade pode ser
uso contendo a descrio vista na Tabela 3.
de um cenrio de cadas-
tro bsico para a entidade Concluso
Pessoa Fsica. Este cadas- Neste artigo apresentamos inicialmente
tro possui as operaes algumas definies associadas engenharia
Figura 1. Engenharia de Requisitos de consulta, incluso, de requisitos. Em seguida, apresentamos

Objetivo: Contm uma breve descrio do objetivo do caso de uso.


Requisitos: Neste campo indicamos a qual requisito funcional o caso de uso em questo est associado.
Atores: Neste campo definimos a lista de atores associados ao caso de uso. Ator qualquer entidade externa que interage com o sistema (neste caso,
com o caso de uso em questo).
Prioridade: Informao identificada junto ao usurio que auxilia na definio dos casos de uso que sero contemplados em cada iterao do desenvolvi-
mento do software.
Pr-condies: Neste campo devemos informar as condies que devem ser atendidas para que o caso de uso possa ser executado.
Freqncia de uso: Informao identificada junto ao usurio que auxilia na definio dos casos de uso que sero contemplados em cada iterao do desenvolvi-
mento do software.
Criticalidade: Informao identificada junto ao usurio que auxilia na definio dos casos de uso que sero contemplados em cada iterao do desenvolvi-
mento do software.
Condio de Entrada: Neste campo definimos qual ao do ator dar incio interao com o caso de uso em questo.
Fluxo Principal: Esta uma das sees principais do caso de uso. onde descrevemos os passos entre o ator e o sistema. O fluxo principal o cenrio que
maisacontece no caso de uso e/ou o mais importante.
Fluxo Alternativo: Fluxo alternativo o caminho alternativo tomado pelo caso de uso a partir do fluxo principal, ou seja, dada uma condio de negcio o caso
de uso seguir por outro cenrio que no o principal caso essa condio seja verdadeira.
Ps-condies: Neste campo devemos informar o estado em que o sistema (ou entidade manipulada no caso de uso) estar depois que o caso de uso for executado.
Regras de negcio: Nesta seo descrevemos todas as regras funcionais que o caso de uso deve cumprir durante sua execuo.
Tabela 1. Conceitos envolvidos na descrio de um caso de uso

Objetivo: Permitir que funcionrios adicionem, consultem, removam ou alterem dados de pessoas fsicas.
Requisitos: -
Atores: Funcionrio
Prioridade: Baixa
Pr-condies:
Freqncia de uso: Eventual
Criticalidade: Baixa
Condio de Entrada: O Funcionrio seleciona a opo Manter Pessoa Fsica.
Fluxo Principal: O sistema apresenta formulrio de busca de pessoas fsicas contendo as informaes: - CPF (campo editvel); - Nome (campo editvel);
- Estado (lista dos Estados brasileiros); - As opes Buscar e Cancelar e - A opo Incluir Nova Pessoa Fsica

O ator escolhe a opo Incluir Nova Pessoa Fsica [A1][A2]


O sistema apresenta formulrio de cadastro de Pessoas Fsicas contendo os seguintes campos a serem preenchidos:

(Informaes Gerais): - CPF (campo editvel); - RG (campo editvel) e - Nome (campo editvel)

Tabela 2. Especificao do caso de uso Manter Pessoa Fsica

64 SQL Magazine Edio 81

sql81.indb 64 29/10/2010 13:56:20


Fluxo Principal: (Endereos)
- Tabela com os endereos cadastrados para a pessoa fsica que est sendo criada (cada endereo adicionado possui as seguintes informa-
es: Logradouro, Bairro, Complemento, CEP, Municpio, Estado e Pas) e a opo de Excluir Endereo [A5]
- Campos: Logradouro (campo editvel), Bairro (campo editvel), Complemento (campo editvel), CEP (campo editvel), Municpio (campo
editvel), Estado (lista de estados brasileiros) e Pas (campo editvel) e a opo de Incluir Endereo [A6][RN2] [RN6]

- Opes de Confirmao: Salvar e Cancelar

O Ator preenche o formulrio apresentado


O Ator seleciona a opo Salvar [A7]
O sistema valida os dados preenchidos [RN4][RN5][A8]
O sistema salva os dados da Pessoa Fsica
O caso de uso encerrado.
Fluxo Alternativo [A1] O Ator seleciona a opo Cancelar
O sistema retorna tela principal e o caso de uso encerrado.
[A2] O Ator informa os dados de busca e seleciona a opo Buscar [RN1]
O sistema recupera as Pessoas Fsicas e apresenta para cada uma, ordenadas de forma ascendente pelo Nome: - Nome (somente leitura);
- CPF (somente leitura); - Municpio (somente leitura) e - Estado (somente leitura)
- Opo de Editar
- Opo de Excluir
O sistema seleciona uma das pessoas fsicas e clica na opo Excluir [A3]
O sistema apresenta tela de confirmao de Excluso contendo as opes: Confirmar e Cancelar
O Ator seleciona a opo Confirmar [A4]
O Sistema efetua a excluso da Pessoa Fsica
O caso de uso retorna ao passo 2 do fluxo alternativo [A2].
[A3] O Ator seleciona a opo Editar
O sistema segue a partir do passo 3 do fluxo principal, porm os campos j vm preenchidos com os dados da pessoa fsica selecionada.
[A4] O Ator seleciona a opo Cancelar
O sistema retorna ao passo 2 do fluxo alternativo [A2].
[A5] O Ator seleciona a opo Excluir
Sistema solicita a confirmao da excluso com as opes confirmar e cancelar
O ator confirma a excluso
O item removido da lista e o sistema retorna ao passo 3 do fluxo principal.
[A6] O Ator seleciona a opo Incluir
O sistema armazena os dados do item inserido, atualiza a tabela e retorna ao passo 3 do fluxo principal.
[A7] O Ator seleciona a opo Cancelar
Sistema retorna ao passo 1 do fluxo principal.
[A8] O Ator preenche dados invlidos
Sistema informa quais os campos foram preenchidos incorretamente e retorna ao passo 3 do fluxo principal.
Extenses: Nenhum
Ps-condies: Os dados da pessoa fsica esto armazenados no sistema.
Regras de negcio: [RN1] Todos os campos de filtro para a consulta de Pessoas Fsicas so opcionais.
[RN2] Apenas um endereo cadastrado pode ser indicado como endereo de cobrana.
[RN4] Todos os campos do formulrio so obrigatrios.
[RN5] No podem ser adicionadas duas pessoas fsicas com o mesmo nmero de CPF.
[RN6] Pelo menos um endereo deve ser inserido. Ao inserir um endereo, todos os dados so obrigatrios, com exceo do campo Complemento.
Continuao: Tabela 2. Especificao do caso de uso Manter Pessoa Fsica

Objetivo: Permitir que Funcionrios acompanhem o ciclo de vida dos cursos ministrados pela organizao.

Requisitos:
Atores: Funcionrio

Prioridade: Mdia

Pr-condies:
Freqncia de uso: Eventual

Criticalidade: Mdia
Condio de Entrada: Funcionrio seleciona a opo Consultar Curso.

Tabela 3. Especificao do caso de uso UC 2 Consultar Curso

Edio 81 SQL Magazine 65

sql81.indb 65 29/10/2010 13:56:20


Especificao de Casos de Uso na Prtica

Fluxo Principal: O Sistema apresenta as seguintes opes para visualizao dos cursos [RN1]:
- Programa (opo Todos + lista de programas) (campo editvel)
- Nmero do Curso (campo editvel)
- Ttulo do Curso (campo editvel)
- Coordenador de Curso (campo editvel)
- Cliente (campo editvel)
- Lista de status: todas (Curso Ativo + Curso Encerrado), Curso Ativo, Curso Encerrado (campo editvel)
O ator preenche os filtros de busca [RN2].
O Sistema apresenta uma lista de cursos de acordo com os filtros fornecidos, ordenada por Ttulo do Curso [A1]:
- Programa (somente leitura)
- Curso (Nmero + Ttulo) (somente leitura)
- Coordenador(es) do Curso (somente leitura)
- Cliente(s) (somente leitura)
- Data de Incio (somente leitura)
- Data de Trmino (somente leitura)
- A opo Detalhar
O Sistema apresenta ao final a opo Voltar
Ator seleciona a opo Detalhar [A2]
O Sistema apresenta tela contendo as informaes:
- Programa
- Curso (Nmero + Ttulo)
- Coordenador(es) do Curso
- Cliente(s)
- Data de Incio
- Data de Trmino
- Valor do Curso
- Carga Horria

O Sistema apresenta ao final do formulrio a opo voltar


O Ator seleciona a opo voltar
O Sistema retorna ao passo 3 do fluxo principal.
Fluxo Alternativo [A1] Curso no encontrado
O Sistema apresenta uma mensagem informando que no foi encontrado nenhum curso com os dados fornecidos e, em seguida,
apresenta o mesmo formulrio com os dados previamente fornecidos
O sistema retorna ao passo 2 do fluxo principal.
[A2] Ator selecionou a opo voltar
Sistema retorna ao passo 1 do fluxo principal.
Extenses:
Ps-condies:
Regras de negcio: [RN1] Caso seja preenchido o Programa e Cdigo do Curso, a busca ser feita usando estas informaes, ignorando as demais opes.
[RN2] Nenhum dos filtros de visualizao obrigatrio.
Continuao: Tabela 3. Especificao do caso de uso UC 2 Consultar Curso

dois exemplos reais de especificao de casos Rodrigo Oliveira Spnola Referncias


de uso. O objetivo foi explicitar de forma prti- rodrigo@sqlmagazine.com.br
ca como estas descries podem ser efetuadas Editor Chefe Engenharia de COCKBURN, Alistair. Escrevendo Casos de Uso Eficazes.
em um nvel de detalhe tal que informaes Software Magazine Bookman, Porto Alegre: 2005.
importantes para outras etapas do desenvolvi- Diretor de Operaes - Kali Software
mento como planejamento de testes, projeto e (www.kalisoftware.com) SOMMERVILLE, Ian. Software Engineering 8th. 8 ed.
desenvolvimento no sejam omitidas. Doutorando e Mestre em Engenharia de Software Pearson: Essex, England: 2007.
pela COPPE/UFRJ. Autor de diversos artigos cientficos
sobre Engenharia de Software publicados em revistas
PRESSMAN, Roger S. Software Engineering - A
D seu feedback sobre esta edio! eu
Feedback
e conferncias renomadas, dentro e fora do pas.
s

Practitioners Approach. 5 ed. Mc Graw Hill: Boston,


D

Experincia de participao em mais de 20 projetos


A SQL Magazine tem que ser feita ao seu gosto.
sobre e

de consultoria para diferentes empresas tendo Estados Unidos: 2001.


Para isso, precisamos saber o que voc, leitor, acha
s

ta
edio
atuado com gerncia de projetos, requisitos e testes
da revista! de software. Implementador certificado do MPS.BR,
D seu voto sobre este artigo, atravs do link: tendo tambm experincia atuando junto a empresas
www.devmedia.com.br/sqlmagazine/feedback certificadas CMMI.

66 SQL Magazine Edio 81

sql81.indb 66 29/10/2010 13:56:25


sql81.indb 67 29/10/2010 13:56:30
Especificao de Casos de Uso na Prtica

sql81.indb 68 29/10/2010 13:56:31