0% acharam este documento útil (0 voto)
21 visualizações68 páginas

Tendências e Dicas em Bancos de Dados

A edição 21 da SQL Magazine aborda temas relevantes sobre bancos de dados, incluindo normalização, modelagem de dados espaciais e o uso de rules no PostgreSQL. Além disso, discute a importância do InterBase 7.5 e apresenta novidades sobre ferramentas e tecnologias, como o XPrevail e o EMS PostgreSQL Data Generator. O editorial destaca a evolução dos SGBDs e as tendências futuras no campo da computação em grade.

Enviado por

Fabio Raymundo
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
21 visualizações68 páginas

Tendências e Dicas em Bancos de Dados

A edição 21 da SQL Magazine aborda temas relevantes sobre bancos de dados, incluindo normalização, modelagem de dados espaciais e o uso de rules no PostgreSQL. Além disso, discute a importância do InterBase 7.5 e apresenta novidades sobre ferramentas e tecnologias, como o XPrevail e o EMS PostgreSQL Data Generator. O editorial destaca a evolução dos SGBDs e as tendências futuras no campo da computação em grade.

Enviado por

Fabio Raymundo
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

S

INA N ew s : v e j a a s ú t l i m a s n ov i d a d e s d o m u n d o S Q L
PÁG
68
CO
M PostgreSQL
O RA Saiba o que são rules e
AG
como utilizá-las
Banco de dados
História e tendências futuras
História

iniciante
Edição 21 :: Ano 2 : R$ 10,50
Banco de dados em grade
Realidade ou ficção?

SQL Server 2000


Entenda os modelos
de recovery

intermediário
InterBase 7.5
Quando e porque migrar

NORMALIZAÇÃO
Aprenda a organizar melhor o esquema
de seu banco de dados
Prevalência de objetos
Conheça essa abordagem
de persistência

Particionamento Sistemas de
no Oracle informações geográficas
Perigos e armadilhas Saiba como efetuar a modelagem
avançado

Parte 2 dos dados espaciais

[Link] 1 3/6/2005 18:43:18


00 100

5 95

5
INTERBASE 7.5 75

25

Agilidade e alto desempenho com total controle 0

O Interbase é o Banco de Dados da suíte Borland, desenhado para acelerar seu


desenvolvimento e distribuição, que combina segurança, facilidade de uso e alta performance.
Independente da plataforma, o Interbase suporta aplicações complexas em atendimento a um
grande número de usuários simultâneos, sendo assim extremamente confiável e econômico
para distribuição e manutenção.

Você que ainda não usa o Interbase 7.5 precisa testar sua performance.
Baixe o Trial com todas as funcionalidades disponíveis em:

[Link]
Mais Informações ligue:

00 100

.br (11)3862-7471
[Link]
5 95

rese
ç ões - bsp@p
5
rma 75

Mais info

5 Distribuidor Oficial 25

[Link] 2 3/6/2005 18:44:22


100

Nesta edição
95

75

25

News Opinião
06. Esteja por dentro das [Link] de dados em grade

R
últimas novidades do realidade ou ficção?
mundo SQL Veja o que é grade computacional, e como o
meio acadêmico e as empresas de Banco de
dados estão lidando com isso

SGBD Mini-Curso
32. Modelagem de dados
08. XPrevail - Uma camada
espaciais
.NET de prevalência de

L
Este artigo apresenta alguns exemplos de
objetos modelagem de dados especiais, e conceitos
Persistência simples e eficiente, inspeção remota de objetos
sobre sistemas de informações geográficas
e programação de aspectos

27. Borland InterBase


Quando e por que migrar para InterBase 7.5
Em foco
42. Normalização
Saiba o que é, e aprenda a utilizar

52. Usando rules no PostgreSQL


Aprenda a utilizar o sistema de rules para estender e dar
mais flexibilidade às suas aplicações
para evitar possíveis problemas e organizar
melhorar os esquemas das relações M
Ferramentas

K
55. Backups com SQL Server
2000 Parte I: Modelos de 62. Perigos e
armadilhas do

T
Recovery
Entenda a arquitetura do log de particionamento - Parte 2
transações e modelos para recuperação Conheça mais algumas armadilhas e dicas sobre
de dados particionamento

100

95

75
Legenda
A Figuras
C Listagens
I Links D Tabelas
E Box

25

5
B Notas
O CD-Rom
F Bibliografia
H Downloads
V Leitura Obrigatória

[Link] 3 3/6/2005 18:45:32


Edição 21

Editorial
Junho . 2005
ISSN 1677-9815

Coordenador Editorial
Gladstone Matos
gladstone@[Link]

S
Editor Geral
abemos que um esquema de banco de Rodrigo Oliveira Spínola
rodrigo@[Link]
dados relacional deve representar atribu-
Equipe Editorial
tos agrupados em tabelas. Estes modelos
Paulo Ribeiro e Ricardo Rezende
conceituais permitem ao projetista identificar
Gerente de Marketing
os elementos que formarão o agrupamento lógico
Kaline Dolabella
das tabelas com seus respectivos campos. Entretanto, mesmo seguindo alguns procedimentos para kaline@[Link]

realização do mapeamento entre modelos conceituais e modelo lógico relacional, ainda faz-se ne- Articulistas desta edição
cessário algum tipo de avaliação com objetivo aperfeiçoar o modelo eliminando anomalias. Neste Fernando Vasconcelos Mendes, Celso H. Poderoso Oliveira, Amir Sa-
mary, Paulo Sérgio Palmério, Vinícius Maeda, Ronaldo Sales, Thiago
contexto, esta edição da SQL Magazine destaca o assunto Normalização. Na matéria serão apre- Simonato, Manuel Antônio de Castro Júnior, Pablo Vieira Florentino,
sentados exemplos práticos de modelagens de dados não normalizados, com suas conseqüências Gustavo Bartz Guedes, Paulo Ribeiro e Arup Nanda

negativas, e algumas abordagens práticas de aplicação do processo de normalização. Tradução


Anna Beatriz
Nesta edição também temos o segundo artigo da série sobre modelagem de dados espaciais. No
abeatriz@[Link]
primeiro artigo da série, publicado na SQL Magazine 18, foram apresentados os conceitos básicos
Projeto Gráfico e Diagramação - pH Design
de geoprocessamento e uma breve introdução às representações espaciais no Oracle Spatial. Já phdesign@[Link]
nesta segunda parte, será abordada a modelagem de dados espaciais através de alguns exemplos.
Diretor de Arte
Gostaria de destacar também a matéria escrita pelo Celso Poderoso: “Banco de dados em grade, Tarcísio Bannwart
realidade ou ficção”. Nela, Celso nos apresenta a tecnologia que promete grandes benefícios para Diagramação e Criação
um futuro não muito distante. É também apresentado como alguns SGBDs estão começando a Jaime Peters Junior
lidar com a computação em grade. Mônica Queiroz

Destaco também a matéria do Paulo Ribeiro: “Backups com SQL Server 2000 Parte I: Modelos Ilustração
de Recovery”. Neste artigo, o autor explora a arquitetura do log de transações e modelos para re- Felipe Natividade Machado

cuperação de dados. Perceba que ainda não são discutidos os tipos de backup oferecidos pelo SQL Revisão
Server. Isto por que é fundamental um entendimento dos diferentes modelos de recovery antes Eduardo Oliveira Spínola
eduspinola@[Link]
de discutir-se a fundo como se deve proceder com backups.
Vamos dar também as boas vindas ao Paulo Palmério. A partir de agora teremos suas matérias Distribuição
Fernando Chinaglia Dist. S/A
sobre InterBase aqui na SQL Magazine. Nesta primeira, intitulada: “Borland InterBase: Quando Rua Teodoro da Silva, 907
Grajaú - RJ - 206563-900
e por que migrar para InterBase 7.5”, ele apresenta alguns motivos para atualização para a versão
mais recente do InterBase. Vale a pena conferir. Para informações sobre veicula- Publicidade
Apresentamos ainda nesta edição o XPrevail, uma abordagem para persistência de objetos. ção de anúncio na revista ou no
site entre em contato com:
Quem nos descreve esse framework é o seu próprio desenvolvedor, Fernando Vasconcelos. Neste
Luiz Cláudio Barreto
artigo, além de entender os conceitos envolvidos na prevalência, você aprenderá na prática como publicidade@[Link]
ela funciona. Uma ótima leitura. Para fechar parcerias ou ações específicas de marketing com
Além destes, temos mais dois artigos. Usando rules no PostgreSQL e Perigos e armadilhas do a DevMedia, entre em contato com:

particionamento - Parte 2. Gerente de Marketing e Atendimento


Kaline Dolabella
Finalizando, sugiro uma leitura crítica da matéria “História dos bancos de dados e tendências kalined@[Link]
futuras”. Certamente você passará analisar a evolução dos SGBDs com mais atenção e entenderá Assistente de Marketing
o porquê das decisões tomadas na evolução dos SGBDs. Jeff Wendell
jeff@[Link]
Desejo a você uma ótima leitura. Um abraço.
Rodrigo Oliveira Spínola
A DevMedia conta Atendimento ao Leitor
editor@[Link] com um departa-
mento exclusivo
para o atendimento ao leitor. Se você tiver algum problema
no recebimento do seu exemplar ou precisar de algum escla-
recimento sobre assinaturas, exemplares anteriores, endereço
de bancas de jornal, entre outros, entre em contato com:
Aline Saldanha – Atendimento ao Leitor
É muito importante para a equipe saber o que em contato com os editores, Leitor sqlmagazine@[Link]

você está achando da revista: que tipo de artigo informando o título e mini- Kaline Dolabella – Gerente de Marketing
você gostaria de ler, que artigo você mais gostou resumo do tema que você gostaria de publicar: kalined@[Link]
e qual artigo você menos gostou. Fique a vontade
Rodrigo Spínola - Editor da Revista
para entrar em contato com os editores e dar a sua Ou pelo telefone: (21) 2283-9012
editor@[Link]
sugestão!
Se você estiver interessado em publicar um Ricardo Rezende - Editor do Site
Realização Projeto Gráfico Apoio
artigo na revista ou no site SQL Magazine, entre ricardo@[Link]

[Link] 4 3/6/2005 18:45:54


Thiago, programador de Web,
agora também hospeda
os sites dos seus clientes.

Revenda LocaWeb.
A LocaWeb é a melhor empresa de hospedagem de sites do Brasil. E agora você
pode oferecer toda esta infra-estrutura para seus clientes como se fosse sua.
Basta contratar a Revenda LocaWeb e usufruir de tecnologia, segurança
e liberdade para que possa administrar como quiser os sites, contas de e-mail,
bancos de dados, espaço em disco e outras ferramentas. Você e seus clientes
ganham. Hospedagem de sites é o nosso negócio e agora é o seu também.

• Domínios e contas de e-mail ilimitadas • Painel Plesk 7.5 Reloaded • Infra-estrutura


no Brasil • Link de 1 Gbps com a Embratel • Servidores com DNS próprio e muito mais.
Acesse [Link]
Apoio

[Link] 5 3/6/2005 18:46:00


Oracle e clientes da América Latina apostam no e-mail e agenda. A ferramenta também permite aos alunos acesso
uso intensivo do Linux online para verificar suas notas e freqüência. “Escolhemos a solu-
Organizações como Senac (Brasil), Cemaco (Costa Rica), ção Oracle na plataforma Linux por ser mais flexível e nos ampliar
Informa (Peru), Suratep (Colômbia) e Hospital Italiano de Buenos as possibilidades de gerenciamento e integração”, explica César
Aires (Argentina) comprovam os benefícios operacionais e eco- Tadeu Fava, gerente de sistemas do Senac São Paulo. “A configu-
nômicos da adoção de produtos Oracle rodando sobre Linux. Em ração de hardware é otimizada com o Linux, o que nos permite
alguns casos, como na Suratep, há o registro de um aumento de processar mais contas por servidor”, comenta ele.
performance do sistema de até 100%. Fonte: Oracle Corporation
A Oracle Corporation é a maior organização de desenvolvimento
de Linux do mundo, com mais de 9 mil profissionais trabalhando Nova seção de download no site brasileiro do
com esse sistema operacional no desenvolvimento de software. A PostgreSQL
empresa desenvolveu uma linha completa de produtos voltados Agora você pode usar o site brasileiro para chegar até o espelho
para essa plataforma, incluindo o banco de dados Oracle 10g com de FTP nacional. O acesso aos fontes e binários do PostgreSQL fica
Real Application Clusters, o servidor de aplicativos Oracle 10g, a mais prático.O endereço da comunidade brasileira, o PostgreSQL
suíte de colaboração Oracle, a suíte de desenvolvimento Oracle BR, é o [Link]/.
10g e o Oracle E-Business Suite. E, de acordo com o relatório Fonte: PostgreSQL BR
anual de banco de dados de 2003 do Gartner, conquistou 69,1%
de participação de mercado entre usuários Linux. Lançado o EMS PostgreSQL Data Generator 2
O EMS Data Generator é um poderoso utilitário para gerar da-
Colaboração entre 4 mil alunos dos de teste para várias tabelas de bases de dados do PostgreSQL
O Senac São Paulo, uma entidade dedicada ao ensino no Brasil, de uma única vez. O assistente permite que seja definida a tabela
adquiriu um conjunto de ferramentas de colaboração da Oracle e campos para geração dos dados, definição dos limites dos valo-
que hoje proporciona benefícios a mais de 4 mil alunos e profes- res, carregar valores de campos BLOB de arquivos, recuperar lista
sores em seu centro universitário. Alunos e professores podem de valores de consultas SQL e muitas outras funcionalidades para
compartilhar apresentações online, documentos, imagens e ar- gerar dados de teste de maneira simples e direta. Também permite
quivos que facilitam o aprendizado. Cada usuário tem 30 MB de uma interface console que possibilita a geração de dados de manei-
espaço virtual para arquivar seus documentos pessoais, além de ra fácil através dos templates.

Cansado de escrever SQL´s no prompt do sistema operacional?


Mude já para Foxy SQL Free!
Se você é daqueles que não agüenta mais escrever códi-
go SQL no prompt do sistema operacional - ou pertence
ao grupo daqueles que desenvolvem aplicações que pos-
suem independência de base de dados - e está a procura
de uma ferramenta única, que permita carregar e executar
queries em SQL, aqui vai uma dica: baixe agora mesmo
o Foxy SQL Free da Charonware (ver A1). O endereço
para download é [Link]/enu/[Link]
Além do visual agradável, a ferramenta permite estabe-
lecer conexões via ADO, ODBC ou Native para Oracle,
Firebird, DB2, Informix, Postgree, Sybase, SQL Server,
etc. O Foxy SQL Free possui um primo mais robusto – e
pago – o Foxy SQL Pro, com recursos adicionais de par-
sing, execução seletiva de comandos no script, geração
do resultado da query em arquivo-texto, CSV ou XML,
entre outras coisas. A versão Pro sai por USD 55. Vale a
A1. Interface do Foxy SQL Free.
pena conferir.

[Link] 6 3/6/2005 18:46:04


As principais características do utilitário são:
• Assistente gráfico amigável;
•Disponível em inglês, francês, alemão, italiano, russo e espanhol;
•Suporta todos os tipos de dados do PostgreSQL incluindo array
e tipos de dados geométricos;

News
•Controle automático de integridade referencial, entre outras.

O utilitário EMS PostgreSQL Data Generator 2.0 está disponí-


vel em [Link] e pode ser baixado diretamente em
[Link]/products/postgresql/datagenerator/download.
Fonte: [Link]/
promete mais segurança e facilidades para os desenvolvedores.
ThinkQuest, da Oracle Education Foundation, Outro item de destaque no produto é a sincronização. Ela permi-
recebe o título de melhor Website para crianças te controlar quais os dados devem ser sincronizados em primeiro
A Oracle Education Foundation anunciou que o programa lugar, agilizando a cobertura wireless disponível. No caso de um
ThinkQuest, o website internacional de biblioteca e competições, dos usuários perder seu dispositivo com dados sigilosos, um sis-
recebeu o título de �Melhor website para Crianças� segundo a tema de criptografia dos dados locais aliada a requisitos rigorosos
Common Sense Media. de autenticação protegem as informações e evita que pessoas não
ThinkQuest, um programa da Oracle Education Foundation, é autorizadas tenham acesso a eles.
uma competição internacional onde times de estudantes e pro-
fessores são desafiados a criar o melhor website educacional. Os Fonte: PCWorld
websites finalizados ficam disponibilizados na biblio-
teca ThinkQuest, um recurso utilizado por muitos ao
redor do mundo. Pode ser acessado em [Link]-
[Link].
A Oracle Education Foundation é patrocinadora
dos programas ThinkQuest e [Link], programas
gratuitos on-line para a comunidade educacional pri-
mária e secundarista. Também subvenciona escolas
e entidades sem fins lucrativos para a promoção de
colaboração global para o aprendizado de tecnologia.
Maiores informações em [Link].
Common Sense Media, uma organização indepen-
dente dedicada a fornecer aos pais, professores e estu-
dantes informações confiáveis e de fácil acesso sobre
mídia em geral, selecionou o programa ThinkQuest
como parte do seu prêmio anual de excelência em en-
tretenimento para crianças e a família. Este prêmio é
oferecido a artistas, shows, produtos e organizações
cujo esforço é inspirado em crianças e na família. A
ThinkQuest e outros ganhadores incluindo Leapfrog,
PBS Kids e Pixar receberam o prêmio em um ban-
quete oferecido em San Francisco no último dia 19
de abril.
Fonte: Oracle Corporation

iAnywhere anuncia versão beta do SQL


Studio 8.0
A iAnywhere Solutions anuncia a versão beta do
SQL Anywhere Studio 8.0, banco de dados para dis-
positivos portáteis. Segundo a empresa, a nova versão

[Link] 7 3/6/2005 18:46:16


XPrevail - Uma camada
.NET de prevalência
de objetos
Persistência simples e eficiente,
inspeção remota de objetos e
programação de aspectos
Fernando Vasconcelos Mendes – “FernandoVM”

I
niciarei o artigo explicando o conceito de prevalência, referenciamos simplesmente como engine.
sua filosofia, funcionamento interno e empregos mais • PrevalentSystem: classes definidas pelo usuário
adequados. Posteriormente, vou expor o que é o proje- que devem referenciar todos os objetos de negócios da
to XPrevail, como ele pode ajudar em uma grande variedade aplicação, ou seja, os objetos que serão persistidos. Os
de cenários e prover uma programação prática e moderna. objetos por ela referenciados serão serializados quando
for solicitado ao PrevalenceEngine um snapshot. Dessa
O que é prevalência? forma, qualquer objeto fora dessa classe terá seu estado
O termo prevalência foi popularizado pelo brasileiro perdido. Grosseiramente, dependendo de seu design,
Klaus Wuestefeld e concretizado no projeto Prevayler, uma ela pode representar um paralelo com uma tabela ou o
implementação em Java. Grande parte da filosofia em- próprio banco de dados. Aqui pode ser empregada facil-
pregada pela prevalência foi originalmente publicada por mente uma variante do patterns DAO (ler B 1).
Andrew D. Birrell, Michael B. Jones e Edward P. Wobber • Snapshot: é o processo no qual o PrevalenceEngine
em 1987 através de um artigo ainda hoje disponível em serializa todos os PrevalentSystems, tal qual eles es-
[Link] tão no momento da solicitação. Isso dá origem a um
Uma interessante leitura. novo arquivo de snapshot, e torna desnecessária a lei-
A prevalência emprega a filosofia descrita no artigo an- tura dos arquivos de operações anteriores (arquivos que
teriormente citado – que poderá ser vista mais adiante na guardam todas alterações realizadas nos objetos
descrição do fluxo do processo de prevalência – para garan- de negócio).
tir a persistência de objetos, utilizando para isso a memória • Operation: pelo conceito original proposto pela pre-
principal do computador (a memória RAM). Todos os obje- valência, toda alteração a ser realizada nos objetos man-
tos de negócios ficam persistidos na memória e há garantia tidos por um PrevalentSystem (ou nele próprio) deve
de que eles serão recuperados fielmente caso haja alguma ser feita através de objetos de classes que implemen-
queda de energia ou falha na aplicação. Em linhas gerais, os tam a interface IOperation definida pelo framework.
objetos em si são mantidos em memória volátil e as altera- Essas instâncias são passadas ao PrevalenceEngine para
ções realizadas neles são mantidas em memória não volátil. registro e execução (no projeto prevayler, a interface
Para entendermos melhor como esse processo ocorre, ve- equivalente chama-se Transaction). Posteriormente ve-
jamos inicialmente alguns termos amplamente divulgados remos que o XPrevail pode tornar essa obrigatoriedade
dentro dessa abordagem de persistência: completamente transparente para o usuário.
• PrevalenceEngine: trata-se de uma classe interna
dos frameworks de prevalência, responsável por todo o B 1. O pattern Data Access Objects - DAO
processo de execução, registro e recuperação das altera- O padrão DAO destina-se a prover uma boa separação entre as
ções realizadas em um PrevalentSystem. Muitas vezes a regras de negócio de uma aplicação e a fonte através da qual ela

8 21ª Edição

[Link] 8 3/6/2005 18:46:27


obtém dados. Esse é um passo importante, se não obrigatório, operações e posteriormente sua execução, onde de fato
para se ter um sistema bem modelado e de responsabilidades ocorrerá a adição do cliente.
abstraídas e bem definidas. 6. Assumindo termos executado várias vezes o item
É extremamente comum termos aplicações que acessam banco 5, além de eventualmente também termos realiza-
de dados para obter os dados com os quais trabalhar. Pois bem, do algumas remoções de clientes, teremos então um
o padrão DAO dita que todo esse acesso deve ser feito através PrevalentSystem contendo uma determinada quantida-
de uma interface por ele definida. Assim, as regras de negócio
de de objetos Client. O arquivo de log de operações
K
de nossa aplicação ficam tanto menos dependente da fonte dos

SGBD
conterá uma versão serializada de todos os objetos (que
dados quanto possível.
implementam IOperation) que efetuaram alterações
Esse padrão pode ser empregado para casos mais simples, como
quando queremos tornar nossa aplicação “independente” do
no PrevalentSystem, exatamente na mesma ordem em
SGBDr utilizado – como a aplicação não acessa diretamente que elas ocorreram.
classes específicas do SGBDr em questão, acessa apenas a 7. Caso nesse ponto ocorresse uma falha de energia.
interface DAO, o processo fica simples e elegante, até quando Nossa aplicação deveria ser reposta no ar, tão logo o
queremos mudar radicalmente a fonte de dados, passando a ambiente tivesse sido restabelecido. No momento da
recebê-los através de um Web Services ou outra coisa desse tipo. inicialização do PrevalenceEngine, ele irá ler todos os
Uma excelente referência sobre esse padrão pode ser encontrada arquivos de log de operações gerados. Des-serializará
no site da SUN através do endereço [Link] todos os objetos contidos nos arquivos e irá executá-los
blueprints/corej2eepatterns/Patterns/[Link].
novamente. Atente para o detalhe que os objetos man-
tidos nesses arquivos são os da classe AddClient, não os
Conhecidos os conceitos, podemos descrever um fluxo da classe Client. O PrevalenceEngine está constante-
simples exemplificando claramente como se dá o processo mente registrando as alterações realizadas nos objetos
de prevalência: de negócios, não os objetos de negócio em si.
1. Precisamos definir uma classe que manterá re- 8. Tendo a aplicação voltado ao ar e seu estado an-
ferência a nossos objetos Client. Ela será nosso terior recuperado, poderíamos gerar mais algumas al-
PrevalentSystem e poderia chamar-se Clients. terações no PrevalentSystem e solicitar um snapshot.
2. Deveremos declarar uma referência para o Nesse momento o PrevalenceEngine irá gerar um
PrevalenceEngine e inicializá-la, momento no qual arquivo novo, não um de operações, mas um especi-
será exigida a informação de quais classes serão os ficamente para o snapshot. Esse arquivo conterá uma
PrevalentSystems. Naturalmente devemos informar versão serializada do PrevalentSystem inteiro, ou seja,
apenas Clients, já que declaramos apenas ela. efetivamente de todos os objetos de negócio. Diga-
3. A inicialização do PrevalentSystem deve ser soli- mos que após o snapshot, fizemos mais algumas alte-
citada ao PrevalenceEngine, através da propriedade rações no estado do PrevalentSystem e ocorreu outra
PrevalentSystem. Ela retornará uma instância da classe falha de energia.
Clients com um estado exatamente igual ao da última 9. Quando nossa aplicação solicitar a inicialização
execução (caso tenha havido uma). do PrevalenceEngine, ele buscará pelo mais recente
4. Como foi dito, qualquer alteração no snapshot gerado. De posse dele, ele des-serializará seu
PrevalentSystem para prevalecer é exigido que seja conteúdo e obterá uma versão do PrevalentSystem. Fei-
feita através de objetos de classes que implemen- to isso, pegará todos os arquivos de log de operações
tem a interface IOperation. Assim, podemos decla- posteriores ao último snapshot e re-executará todas as
rar duas classes, uma chamada AddClient e outra operações em cima do PrevalentSystem obtido anterior-
chamada RemoverCliente, ambas implementando a mente. Isso resultará em um PrevalentSystem tal qual
interface IOperation. Respectivamente, elas seriam existia antes da falha, da forma mais otimizada possível.
utilizadas para adicionar e remover objetos Cliente
do PrevalentSystem. Ao longo desse texto podere- Dentre as principais vantagens do uso de prevalência, po-
mos ver o que o XPrevail propõe uma programação demos citar o grande ganho de performance para consultas
mais simples e intuitiva, não exigindo a criação dessas e a drástica redução de custos de uma solução como: custos
classes auxiliares. de servidor para o banco de dados (hardware), licenças do
5. Para adicionar um cliente, precisamos agora criar software servidor de banco de dados e custo operacional de
uma instância da classe AddClient, passando em seu manutenção, dentre outros.
construtor as informações necessárias à execução de sua
tarefa. Devemos então solicitar ao PrevalenceEngine que Exigências da prevalência
execute essa operação. Isso envolverá a serialização do A prevalência possui dois requisitos obrigatórios a serem
objeto AddClient em um arquivo destinado ao log de atendidos pelos objetos de negócios que serão persistidos,

SQL Magazine . 9

[Link] 9 3/6/2005 18:46:36


eles devem ser serializáveis e determinísticos. Ambas as não é possível em um sistema prevalente de forma
exigências podem ser facilmente entendidas refletindo um transparente (ver Diferenciais do XPrevail, item 7).
pouco sobre o fluxo do processo de prevalência demonstra-
do anteriormente. O que é o XPrevail?
Um objeto determinístico é aquele que submetido a O XPrevail é uma camada .NET de prevalência de ob-
uma mesma série de alterações, em uma mesma ordem, jetos, amigável e estendida, implementada originalmente
sempre resultará em um mesmo estado final. A classe que em Delphi for .NET e atualmente sendo mantida em C#
representa um PrevalentSystem também precisa ser (consultar o blog do projeto para maiores detalhes sobre
serializável. No .NET, a forma mais simples e eficien- a mudança em [Link] Através do
te de tornar uma classe serializável é através do atributo XPrevail podemos trabalhar com a prevalência usando um
SerializableAttribute. modelo mais simples e intuitivo, mais semelhante à ma-
Ainda temos um outro requisito não relacionado à arqui- nipulação de objetos e suas operações tais quais existem
tetura de sua aplicação, trata-se de um requisito físico, no no mundo real, além de termos acesso a recursos adicio-
caso a memória RAM. Para trabalharmos efetivamente com nais como o suporte à AOP (acrônimo de Aspect Oriented
prevalência precisamos dispor de memória suficiente para Programming – programação orientada a aspectos) e à ins-
hospedar todos os nossos objetos de negócios na memória. peção de prevalent systems.
O não atendimento desse requisito pode comprometer um O framework é compatível com qualquer linguagem .NET,
dos grandes benefícios da prevalência, sua surpreendente além de ser freeware e opensource. O manifesto do projeto
performance para consultas. XPrevail, disponível no site [Link], traz os motivos
pelo qual o XPrevail existe, bem como seus diferenciais.
Pontos fracos da prevalência Grande parte desses diferencias buscados foram em prol
Como tudo no mundo, a prevalência não é perfeita. Ela de uma programação mais natural, provendo um framework
também possui características um tanto quanto incômodas. tão transparente e menos intrusivo quanto fosse possí-
Veja uma pequena relação a seguir dos principais pontos vel. Procurou-se deixar o modelo de programação com o
fracos (na minha opinião): XPrevail de tal maneira que uma aplicação ficasse menos
1. Atualmente, nenhuma implementação de prevalên- dependente dele, facilitando a troca do mecanismo de per-
cia conta com um eficiente tratamento de transação. sistência sem grandes esforços.
Isto não significa que não possa haver operações atô- Vejo a persistência como um aspecto isolado de um
micas, isso é tratado facilmente, mas o problema é em software, não devendo influenciar significativamente em
desfazer alterações anteriores em caso de falhas e isolar seu modelo, arquitetura e implementação. Essa ideologia
alterações realizadas por uma transação corrente sem foi uma constante durante a modelagem e implementação
colocar todos os objetos em modo read-only (ver Dife- do XPrevail.
renciais do XPrevail, item 5).
2. Trabalhamos diretamente com classes, objetos e se- Diferenciais do XPrevail
rialização, então - de modo similar a como ocorre nos Dentre os principais diferencias trazidos pelo XPrevail,
bancos de dados quando há alteração na estrutura da ta- posso destacar os seguintes:
bela - quando há mudança na definição das classes pre- 1. Múltiplos prevalent systems. O XPrevail traz o
cisamos de um mecanismo que consiga entender esse MultiSystemsPrevalenceEngine, capaz de trabalhar
processo. Nem todas as implementações de prevalência com múltiplos prevalent systems baseados em proxies
suportam isso (ver Diferenciais do XPrevail, item 6). transparentes do .NET. Esse tipo de engine traz a
3. Atualmente, memória RAM está cada vez mais aces- grande vantagem de não precisar definir novas classes
sível, embora isso ainda possa se tornar um problema. – como na prevalência tradicional – para realizar todas
Normalmente um hardware que trabalha com mais de as alterações no PrevalentSystem e objetos de negócio,
4GB ou 6GB de memória não é muito barato. Acredito essas alterações podem ser feitas através de métodos
que 90% dos aplicativos comerciais atualmente instala- definidos no próprio PrevalentSystem. As chamadas
dos no mercado não chegue a 2GB de tamanho, a maio- a esses métodos são interceptadas e automaticamente
ria não chega nem a 1GB. Superiores a esse tamanho, convertidas em objetos que são, da maneira tradicio-
só encontramos nos sistemas coorporativos de bancos e nal, serializados e executados. Ele possibilita uma boa
grandes organizações. separação de responsabilidades, de modo que cada
4. Outro importante ponto a ressaltar é a questão de PrevalentSystem mantenha operações apenas sobre
integração. Embora a filosofia de integrar aplicações via objetos logicamente relacionados. Além disso, pode-
banco de dados venha felizmente caindo bastante, ela mos usar as classes gerentes do próprio sistema como
ainda é amplamente utilizada. Esse tipo de integração os PrevalentSystems, não precisando criar uma global

10 . 21ª Edição

[Link] 10 3/6/2005 18:46:37


envolvendo-as. De forma resumida, o uso de múltiplos 5. O XPrevail trata a prevalência de modo muito mais
PrevalentSystems ajuda a termos um código amigável granular que as implementações de prevalência tradicio-
e elegante. nais, permitindo o uso de múltiplos prevalent systems
2. Cobertura sobre todos os objetos de negócios. O e atuação direta nos objetos de negócios. Isso facilitará
XPrevail introduz, através do ExtremePrevalenceEngine, a inclusão de suporte eficiente a transações, não impli-
a possibilidade de interceptar todas as requisições re- cando em duplicação de grandes volumes de dados, nem
alizadas aos objetos de negócio e automaticamente impondo grande tempo de read-only para os objetos.
K

SGBD
transformá-las em objetos apropriados, serializá-los e 6. O XPrevail trata tranqüilamente alterações simples
executá-los. Com isso, podemos trabalhar de forma realizadas nas classes, como remoção e inclusão de pro-
completamente transparente, acessando os objetos priedades. Contudo, alterações mais complexas como
de negócios e modificando-os diretamente, sem a in- mudança de nomes e de namespaces, dentre outros,
tervenção de uma classe externa, nem mesmo de um ainda não está disponível, mas está em andamento. Essa
PrevalentSystem. Esse é um importante passo no pro- implementação será similar à do [Link] do
cesso de tornar o uso do XPrevail – e da prevalência colega Rodrigo B. de Oliveira, baseada em arquivos xml
- mais amigável ao código cliente. Com algumas poucas de mapeamentos.
exigências, poderemos fazer a prevalência dos objetos 7. É pretendido que o XPrevail venha a contemplar,
de negócios, mesmo para alterações realizadas direta- além da já disponível prevalência, tanto a persistência
mente neles. Isso também contribui para uma forma em banco de dados, como a replicação de sistemas pre-
de programação mais natural e menos dependente do valentes para banco de dados, possibilitando assim a
XPrevail ou do conceito de prevalência. integração de sistemas prevalentes com outros sistemas
3. Suporte à programação orientada a aspectos. O através de banco de dados.
XPrevail traz a possibilidade de utilizarmos um mo-
delo de desenvolvimento baseado nos conceitos da XPrevail em ação
programação orientada a aspectos, muitas vezes refe- O principal objetivo desse artigo é apresentar o framework
renciada simplesmente como AOP. Grande parte do XPrevail. Apresentarei de forma expositiva como ele fun-
framework é baseado em proxies transparentes do ciona. Em um segundo artigo, enfatizarei maiores detalhes
.NET – uma entidade que nos possibilita interceptar a sobre a programação com o XPrevail apresentando um ro-
execução de métodos, construtores, acesso/escrita em teiro passo-a-passo mais detalhado.
propriedades e etc – ou seja, na interceptação de códi-
go, princípio básico da AOP. Dessa forma, como eu já O ExtremePrevalenceEngine
vinha utilizando uma abordagem similar para comuni- O trecho de código da C1 mostra como declaramos e ini-
cação entre proxies e classes internas do framework, cializamos um engine. No caso, o ExtremePrevalenceEngine
foi apenas questão de publicar uma maneira do códi- para trabalhar com dois prevalent systems, o GenerateKeys
go cliente obter recursos dessa abordagem, tão logo (responsáveis por gerar chaves primárias) e o PeopleManager
eu percebi esse potencial. Os engines do framework (responsável por manter objetos People). O código está em
que implementam a interface IAspectsSupport, Delphi for .NET.
atualmente o MultiSystemsPrevalenceEngine e o
ExtremePrevalenceEngine, disponibilizam meios de C 1. Declarando e inicializando um engine.
registrar aspectos (qualquer objeto que implemente a
var
interface IAspect) e revogar os registros efetuados. Esse
Engine : ExtremePrevalenceEngine;
é um recurso extremamente útil e poderoso, certamen-
GenKeys : GenerateKeys;
te ele será ainda bem desenvolvido nas versões futuras
PManager : PeopleManager;
do XPrevail.
begin
4. Inspeção remota de prevalent systems. Incluído na
Engine := [Link]
versão 0.9.5-alpha, esse recurso permite execução de enceEngine([typeof (GenerateKeys), typeof(Clients)],
código arbitrário (em c#) no processo remoto rodando [Link] ([Link], ‘data’));
o XPrevail através de um shell disponibilizado. Isso per- GenKeys := [Link][typeOf(
mite uma grande gama de recursos relacionados à ins- GenerateKeys)] as GenerateKeys;
peção e intervenção em objetos. Através dele podemos PeopleManager := [Link][typeof(Peo
criar e destruir objetos, chamar métodos, ver e alterar pleManager)] as PeopleManager;
propriedades, dentre outros. Entenda por código arbi- {…}
trário qualquer código fornecido, desde que válido, ou end.
seja, sem erros de sintaxe, semântica e etc.

SQL Magazine . 11

[Link] 11 3/6/2005 18:46:38


Embora, a princípio, esse trecho possa parecer con- C 2. Adicionando uma pessoa.
fuso ele não é complicado, essa versão do construtor de var
ExtremePrevalenceEngine – chamada pela factory – requer ID : String;
dois parâmetros, o primeiro é um array contendo os tipos begin
dos prevalent systems com os quais ele irá trabalhar. Esse ID := [Link]([Link](
tipo é extraído através do operador typeof. O segundo pa- typeof(People)));
râmetro é uma string informando em que pasta serão salvos [Link](ID, Name, Email, BirthDate);

os arquivos de operações e snapshots. end;

Na seqüência, vemos que as instâncias dos prevalent


systems são solicitadas ao engine – através do membro C 3. Editando uma pessoa.
PrevalentSystems. Como já foi descrito nesse artigo, isso
var
se faz necessário porque é o engine que cuidará para que o
Ind : Integer;
usuário receba instâncias de prevalent systems exatamente
Pp : People;
iguais à da execução anterior do aplicativo (caso tenha de
Value : String;
fato havido uma execução).
begin
Feito isso, já podemos começar a realizar operações em
{...}
nossos objetos livremente e eles prevalecerão. Veja na C2
Ind := Convert.ToInt32([Link]);
como o processo de incluir uma nova pessoa é bastante Pp := [Link][Ind];
simples – isso seria o equivalente a submeter um insert no {...}
banco de dados. WriteLine (‘’);
Todo o código de inclusão se resume a obter um novo ID, WriteLine (‘Type new value:’);
que servirá de identificador único para o objeto, e poste- Value := [Link] ;
riormente chamar o método AddPeople de PManager – no
caso o prevalent system responsável por manter a entidade case Ind of
People. Após a execução dessa linha sua inclusão prevalecerá, 1 : [Link] := Value;
mesmo que falte energia ou sua aplicação por algum motivo 2 : [Link] := Value;
qualquer seja tirada do ar. Basta repô-la em execução e to- 3 : [Link] :=
dos seus objetos estarão lá disponíveis para uso. A exclusão é [Link]([Link]);
um passo igualmente simples e pode ser vista abaixo: else begin
WriteLine(‘Invalid option, exiting.’);
{...} Exit;
[Link]([Link][Index]); end ;
{...} end ;
{...}
A edição também não lhe reservará surpresas. Não con- end;
sidere o maior volume de linhas de código da C3, observe
que a grande maioria deles é apenas para receber entradas C 4. Listando as pessoas.
do usuário, sendo esse um exemplo de uma aplicação con-
var
sole. Veja que depois de obtido o índice da pessoa a ser
Arr : ArrayList ;
editada, e posteriormente qual a propriedade e seu novo
I : Integer;
valor, a edição resume-se a uma atribuição, apenas isso. E
begin
novamente, tenha certeza, essa alteração prevalecerá.
[Link](‘’);
Esse benefício de podermos alterar diretamente os obje-
Arr := [Link] ;
tos de negócios e eles automaticamente persistirem é uma
for I := 0 to [Link] - 1 do
vantagem trazida pelo ExtremePrevalenteEngine. Pela abor- begin
dagem tradicional de prevalência, você teria de criar uma with (Arr[I] as People) do
classe que implementasse a interface IOperation para po- begin
der realizar tal alteração. Se você preferir essa abordagem, [Link](‘[{0}] {1}’,
o XPrevail também suporta esse modelo. &Object(I), Arr[I].ToString);
Na C4 podemos ver como fazemos pesquisas em nossos end ;
objetos. O processo – assim como os demais – é bem sim- end ;
ples; utilizamos para isso nossa própria linguagem de pro- end;
gramação. Temos liberdade para montarmos as pesquisas

12 . 21ª Edição

[Link] 12 3/6/2005 18:46:43


[Link] 13 3/6/2005 18:46:45
tal qual queiramos. Podemos usar for, while, repeat (c# fornecido como exemplo pelo XPrevail (ler B 2). Ele serve
do), if, case (c# switch) e etc. justamente para gerar log de um sistema.
Esse é um dos grandes pontos fortes da prevalência. Justa-
mente por essa abordagem simples e direta, a performance B 2. No XPrevail...
para realização de consultas é surpreendente, chega a ser A versão 0.9.5-alpha do XPrevail já conta com significativos
milhares de vezes mais rápidas que as equivalentes subme- aperfeiçoamentos na parte de suporte a AOP, através do
tidas a um banco de dados. namespace [Link]. Como consta na
Estou certo de que vocês notaram que percorrendo os documentação, esse suporte é, e continuará a ser, simplista porém
passos descritos anteriormente não temos nenhuma instru- prático e eficiente, utilizando-se de uma abordagem dinâmica,
ção SQL envolvida. Um efeito colateral positivo (na minha através da qual podemos registrar (e retirar o registro) aspectos
opinião, embora possa assustar um pouco no início) do con- em runtime, obtendo assim uma flexibilidade surpreendente.
ceito de prevalência é que somos obrigados a encarar com
mais seriedade a orientação a objetos, pois será apenas com A C5 mostra um trecho do namespace FernandoVM.
ela que trabalharemos. [Link], onde encontramos exemplos de
implementações de aspectos para discutirmos rapidamente
Programação orientada a aspectos o código da classe TraceAspect. (código em c#).
A programação orientada a aspectos vem ganhando força Antes da discussão do código apresentado preciso expor
atualmente. Não é para menos, trata-se de uma filosofia rapidamente o significado, de forma resumida, de alguns
de desenvolvimento simples, porém muito interessante e
eficiente, um novo paradigma para o desenvolvimento de
software. C 5. Trecho do namespace [Link].
A AOP é um esforço da comunidade científica em prover public class TraceAspect : Aspect
um novo paradigma de desenvolvimento que tem por ob- {
jetivo resolver problemas onde a orientação a objetos não {...}
se mostrou eficiente. Algumas implementações de AOP private IAdvice[] advices = new IAdvice[1];
se baseiam em interceptação e reflexão computacional, a public TraceAspect(
grosso modo, na capacidade que um sistema computacional TextWriter outputStream, bool fullMode)
pode ter de descrever seus próprios elementos em tempo {
de execução e possivelmente alterá-los. //Montagem de um advice
Um dos pontos chaves da AOP é tratar adequadamente PointCut pointCut;

preocupações ortogonais que, ao nível de análise, normal- if (fullMode)

mente advêm de requisitos não funcionais. Por questões de pointCut = new PointCut( new IJoinPoint[]

simplicidade e didática, vejamos o mais clássico exemplo de { new AllJoinPoint() });

um possível requisito funcional que se encaixa perfeitamen- else


pointCut = new PointCut( new IJoinPoint[]
te como um aspecto, enquanto que sua implementação utili-
{ new AttributeJoinPoint(
zando apenas a orientação a objetos é deselegante: Logging.
typeof(MethodTraceAttribute)) });
Na maioria das vezes, por mais bem modelado que seja
nosso framework de log, somos obrigados a “poluir” nos-
advices[0] =
sas classes funcionais com instruções de log e isso é inde-
new Advice([Link], pointCut,
sejado, pois diminui a coesão e aumenta o acoplamento,
new AdviceExecute([Link]));
por conseguinte, diminui a reusabilidade de nossas classes.
//Fazendo a referência final
Nessa situação, a geração de log passa a ser tratada como
[Link] = advices;
um aspecto de nosso aplicativo, e assim, todo o código é }
implementado de forma centralizada. protected void AfterInvoke(IMessage msg)
No aspecto, nós programamos sobre quais classes e obje- {
tos, métodos e propriedades ela vai atuar, e assim, passando IMethodReturnMessage resultMsg =
o fluxo de execução do programa por um dado trecho espe- msg as IMethodReturnMessage;
cificado pelo aspecto, o código associado é executado. [Link](
A programação orientada a aspectos é um assunto muito “TraceAspect :: (Method:{0}, Args:{1},
interessante e não me resta dúvidas que ela será amplamen- Return:{2})”, [Link],
te empregada em muito pouco tempo. Mas, como esse não [Link], [Link]);
é o tema central desse artigo (quem sabe de um próximo), }
vamos ficando por aqui, mas, para entendermos melhor o }

que foi explicado, vejamos a implementação de um aspecto

14 . 21ª Edição

[Link] 14 3/6/2005 18:46:45


termos comuns no jargão da AOP. São eles: concorrência, profiler, log, persistência, lock e etc. A par-
• Join point: são pontos de junção entre os quais vin- te de aspectos do XPrevail está em constante evolução,
culamos o aspecto e nossos objetos tradicionais, por as próximas versões poderão trazer mais aspectos prontos
exemplo: chamada a um método, construtor ou destru- para uso. Por enquanto é isso, aguardem eventualmente
tor, leitura ou escrita de propriedades e etc. um novo artigo abordando a exploração desse recurso em
• Pointcut: agrupamentos lógicos de join points. maior profundidade.
• Advice: trechos de códigos que são executados quan- Como boas fontes de informações sobre programação
do um pointcut é encontrado. orientada a aspectos, indico:
K

SGBD
• Aspect: entidade que engloba toda essa lógica, poden- [Link]
do reunir vários advices. Ela representa preocupações or- [Link]
togonais (requisitos não funcionais). É preparada, através [Link]
das entidades anteriores, para atuar no ponto certo, exe-
cutando o código definido. Observe que nossas classes Inspeção de prevalent systems
funcionais não conhecem a existência dos aspectos. Imagine que trabalhemos em um software cujos objetos
de negócio e/ou de estados são gerenciados pelo XPrevail.
Bom, agora vamos lá! Observe que a classe TraceAspect Digamos que se trata de uma aplicação complexa e que
herda de Aspect, a classe base para criação de aspectos deve ter o maior up-time possível. Pois bem, imagine agora
no XPrevail – na realidade você pode simplesmente im- que a aplicação está apresentando um problema difícil de
plementar a interface IAspect, embora seja menos práti- detectar, ou mesmo um simples, mas que precise que ela
co. Depois, ela declara um pointcut que tem apenas um seja retirada do ar para corrigir.
joinpoint, que no caso indica membros decorados com o Então, o que você acha de, a qualquer momento, ter
atributo MethodTraceAttribute. Ou seja, sempre que um um shell que lhe conecte diretamente aos objetos de sua
membro marcado com o referido atributo for acessado será aplicação, de modo que você possa consultá-los, chamar
percebido que esse jointpoint foi percebido. métodos, ver e alterar propriedades e etc. Com, isso você
Veja que quando o parâmetro fullMode do construtor de poderia, por exemplo, corrigir algumas informações volá-
TraceAspect é passado como true, a classe na realidade utili- teis que estejam gerando problemas, para posteriormente
za o AllJoinPoint, fazendo com que absolutamente todas as então corrigir tranqüilamente o bug que a gerou e disponi-
chamadas a métodos e propriedades de todas nossas classes bilizar a correção para a próxima atualização agendada. Ou
sejam registradas. apenas consultar alguns objetos, tão logo percebeu que um
Feito isso é declarado um advice associando – note que determinado bug passou a ocorrer em produção.
o método AfterInvoke da classe TraceAspect está sendo Essas são algumas dessas possibilidades, a versão
passado no construtor do advice, como parâmetro para o
delegate AdviceExecute – o código a ser executado quando
um pointcut for satisfeito. E é só isso, basta que agora re-
gistremos o aspecto junto ao Engine. Isso é feito da seguinte
forma:

[Link](
new TraceAspect(null, false));

O código do método AfterInvoke é simples, ele apenas


obtém informações sobre a mensagem (chamada a algum
membro) e registra-as no stream recebido no construtor da
classe TraceAspect.
Essas poucas linhas de códigos são capazes de registrar to-
das as chamadas a métodos e/ou acessos a propriedades de
todos os objetos mantidos pelo XPrevail, sem você precisar
inserir uma única linha de código em suas classes para isso.
Serão registradas no stream de saída linhas semelhantes à
mostrada a seguir:

TraceAspect :: (Method:AddPeople, Args{1, “nome”,


“email”, 0}, Return:People)

Através de aspectos podemos implementar, de for-


ma extremamente elegante, requisitos como controle de

SQL Magazine . 15

[Link] 15 3/6/2005 18:46:47


0.9.5-alpha já conta com uma versão pré-liminar desse re-
curso. Na verdade, a partir desse shell podemos executar
qualquer código c# no contexto remoto em que nossos
objetos estão rodando. Veja a seguir algumas telas exempli-
ficando o acesso via shell.
A A1 demonstra o processo de conexão aos prevalent
systems remotos, realizado de posse do host e porta. Na
seqüência, o comando help é submetido fazendo com que a
lista de comandos atualmente disponível seja exibida.
Já na A2 é visto o acesso aos prevalent systems através A 2. Criação de variáveis locais e descrição de tipos remotos.
do membro pré-definido ps, sendo internamente declarado
com um array de objetos (private object[]s ps;). Na seqü-
ência, é utilizado o comando set do shell para criar variáveis
de ambiente, servindo como atalhos para instruções mais
longas. Por fim, o comando desc é utilizado para descrever
os membros de um determinado prevalent system, cujo re-
sultado é expresso no Shell.
O comando show é utilizado para exibir o valor de uma
propriedade ou qualquer instrução que retorne uma string,
como mostrado na A3. Em seguida podemos testemunhar
a execução de código arbitrário em c# através do comando A 3. Execução de código arbitrário em C# para criar objeto e alterar
exec, que no caso, está criando uma nova instância de People propriedade.

no processo remoto. Isso é constado a seguir solicitando no- projeto em seu blog, lá é o local para quem quiser opinar
vamente a exibição da propriedade Count ($[Link]). a respeito e participar. Dentre os principais recursos em
Para completar a diversão, ainda submetemos código para andamento e/ou agendados, destaco:
alterar uma propriedade do objeto recém criado. • Extensão do suporte à programação orientada a
Por fim, a A4 exemplifica a utilização da instrução para aspetos.
permitir a execução de código em múltiplas linhas através • Suporte à persistência em banco de dados, de modo
do shell. Note também que havendo erros de compilação que o XPrevail possa ser utilizado como uma camada
ou execução no código submetido eles são exibidos no shell, de persistência tradicional. Isso habilitará um mesmo
de forma simples e clara, tal qual reportada pelo compila- projeto a rodar com prevalência e com banco de dados
dor e pelo runtime. de forma transparente.
• Replicação. Isso habilitará o desenvolvimento de
Projeto XPrevail: estado atual e o futuro aplicações tolerantes a falha e possivelmente com ba-
O XPrevial é um projeto pessoal, conduzido de acordo lanceamento de carga. Minha intenção é implementar
com meu tempo livre e encontra-se na versão 0.9.5-alpha. uma rede peer-to-peer de prevalência, funcionando de
Mesmo estando em versão alpha ele já se encontra comple- forma similar a um heap OO distribuído. Posteriormen-
tamente funcional, embora esteja sofrendo refactories cons- te, também há o interesse de implementar a replicação
tantes, então alguns nomes e estruturas podem mudar. de prevalência para banco de dados.
Vários novos recursos ou melhoria e extensão de recur- • Suporte eficiente a transações e lock de objetos.
sos já existentes estão programados para serem realizados. • Disponibilizar uma infra-estrutura básica para publi-
Alguns estão em andamentos, outros planejados e outros car os objetos via .NET Remoting.
apenas agendados. Costumo postar algumas coisas sobre o • Uma ferramenta para tratar a questão de evolução
do modelo de classes.
• E muito mais.

Conclusão
Espero ter podido esclarecer alguns detalhes sobre a pre-
valência e, principalmente, que eu tenha consigo expor-lhes
completamente a filosofia do projeto XPrevail, seus recur-
sos e potenciais. Não deixem de visitar o site do projeto e
comecem já a participar, conto com suas opiniões, críticas e
A 1. Conexão a host remoto e exibição do help de comandos. sugestões. Visitem o site do projeto e participem! S

16 . 21ª Edição

[Link] 16 3/6/2005 18:46:48


G
(fernando@[Link]) é Borland
Delphi Certified, MCP, MCAD e MCSD
for .NET, palestrante de todas as edições
da BorCon. Atuou como articulista,
colunista e editor técnico da revista
ClubeDelphi. É gerente de tecnologia,
arquiteto e coordenador da equipe de
desenvolvimento do produto Tactium, uma
solução real-time distribuída de CTI/CRM
utilizada por mais de 90 empresas, ao
longo de 16 estados brasileiros, na Softium
Informática. Criador e mantenedor do
K
FernandoVM projeto XPrevail. Acesse meu blog em

SGBD
[Link]

A 4. Execução de código arbitrário multi-linhas e com saída no


console local.

E 1. Eu acredito na prevalência!

T udo que, de alguma forma, aponta em uma direção um


pouco diferente de um paradigma amplamente divulgado
sofre uma natural desconfiança ou mesmo resistência lógica de
isso se dá à performance insatisfatória para um dado cenário.
Acredito na prevalência como o único meio de trabalhar
100% orientado a objetos. Esse para mim é seu maior bene-
pessoas mais conservadoras. Isso não é diferente com relação à fício, ainda que haja outros muito importantes que são mais
prevalência versus banco de dados. amplamente comentados como performance, custo e etc.
Não, eu não levantarei aqui a bandeira incondicional desse Acho verdadeiramente fascinante a maneira trans-
conceito, indicando-o como perfeito para qualquer tipo de ce- parente como a persistência é feita através do
nário. Contudo, uma coisa não hesitarei em falar, a prevalência ExtremePrevalenceEngine introduzido pelo projeto XPrevail.
serve para muitos mais situações do que seus “não simpatizan- Modelamos de forma orientada a objetos e não nos preocupa-
tes” acham, ou mesmo pregam. mos com a persistência, programamos com objetos livremente
Assim como existem situações onde hoje a prevalência não é e eles simplesmente prevalecerão.
indicada (tenho um conhecido que é DBA de um banco de da- Justamente por acreditar nesse conceito iniciei o projeto
dos com 40T na Europa), também há inúmeras situações onde XPrevail e o mantenho até então, assim como pretendo
os bancos de dados relacionais, principalmente os mais utilizados estendê-lo.
comercialmente, não é indicada. Na grande maioria das vezes FernandoVM

SQL Magazine . 17

[Link] 17 3/6/2005 18:46:51


Banco de dados em
grade: realidade
ou ficção? Celso H. Poderoso de Oliveira

A
informática é uma ciência muito nova. Novas tec- servidores como se fossem um único (clustering) ou com-
nologias surgem rapidamente e novos componen- partilhando os serviços dos servidores (P2P). A grade com-
tes fazem os computadores cada vez mais rápidos e putacional (também conhecida como computação em grid)
menores. Contudo, quanto maior o poder de processamen- é uma evolução destas tecnologias. Tem como objetivo com-
to, mais as aplicações precisam de recursos. partilhar recursos entre computadores heterogêneos, aumen-
Os computadores de grande porte foram cedendo espaço tando o poder de processamento e permitindo, ao usuário,
aos computadores menores. De computadores isolados a enxergar o recurso computacional como se fosse único.
computadores conectados em redes, as respostas às neces- Em termos de computação distribuída, as principais tec-
sidades dos usuários têm sido mais satisfatórias que no mo- nologias são:
delo anterior. Para equiparar o poder de processamento dos • Clustering: sistemas de dois ou mais computadores
computadores de menor porte aos de maior porte, foram que trabalham como se fossem um único para realizar
criadas estações de trabalho (workstations). Os servidores processamento pesado. É utilizado para processamento
das redes locais foram conectados uns aos outros em um paralelo, balanceamento de carga e tolerância a falhas.
processo de clusterização de servidores e de armazenamen- • P2P: comunicação entre dois ou mais computadores
to de dados. Isso permitiu maior segurança contra even- com objetivo de compartilhar arquivos ou serviços. É
tuais falhas nestes equipamentos e aumentou ainda mais um tipo de rede onde cada computador tem capacidade
o poder de processamento. Pequenos dispositivos foram e responsabilidades iguais. Difere da arquitetura clien-
criados para atender necessidades de deslocamento dos te-servidor porque nesta, um ou mais computadores
usuários. Foram criados os PDAs, pequenos computadores são servidores. Estas redes são simples, mas não ofere-
com poder reduzido de processamento e que evoluíram cem alto desempenho.
para versões mais robustas e que atendem a boa parte das • Grade: grupo de recursos heterogêneos, distribuídos e
necessidades de processamento remoto. Com o surgimen- integrados compartilhando diversos recursos como se fos-
to das redes ponto a ponto (P2P), é possível compartilhar se um único e utilizando redes de altíssima velocidade.
arquivos com diversos computadores. Caso um dos compu-
tadores tenha sua conexão interrompida por qualquer mo- Este artigo pretende mostrar o que é uma grade compu-
tivo, é possível compartilhar o mesmo arquivo com outro tacional, como está o desenvolvimento acadêmico voltado
computador que esteja na rede. para utilização dos sistemas gerenciadores de banco de da-
Distribuir as informações com segurança e rapidez sem- dos (SGBDs) em uma grade e como as principais empre-
pre foi o objetivo da informática. Desde a descentralização sas fornecedoras dos produtos trabalham para adequar-se a
dos servidores, procura-se evoluir a tecnologia integrando esta tecnologia.

18 19ª Edição

[Link] 18 3/6/2005 18:47:05


Por que utilizar uma grade computacional? é dia. Resultado: menos necessidade de investimento em
Hoje em dia, diversos computadores, muitos com alta hardware e melhor utilização dos recursos. Imaginando gran-
capacidade de armazenamento e processamento, são mal des fornecedores de infraestrutura de hardware e software,
utilizados. Seria possível extrair destes equipamentos o pode-se concluir que os investimentos nestas grandes ilhas
máximo de desempenho sem prejudicar suas atividades de processamento poderiam ser melhores aproveitadas.
normais? Fazendo isso, seria possível atender melhor às ne- Uma grade computacional, portanto, pode ser classificada
cessidades de informação dos usuários? quanto a sua abrangência:

Opinião
Estas questões podem parecer muito recentes e para mui- • Local: são grades internas de uma única empresa.
tos, bem pouco importantes, mas o conceito de grade com- Também conhecida por intragrid, enterprise ou campus.
putacional, que pode ser entendido como uma computação • Regional: são grades formadas entre empresas par-
por demanda, é relativamente antigo. Consta que em 1965, ceiras. Também conhecida por extragrid ou partner.
no MIT, foi idealizada uma infra-estrutura computacional • Global: são grades amplas, formadas por grandes
que seria como uma companhia elétrica, telefônica ou de redes interligadas com abrangência em todo mundo.
abastecimento. É exatamente esta a forma que se espera Também conhecida por intergrid.
que seja a informática daqui a algum tempo: os altos in-
vestimentos em infra-estrutura e servidores ficariam por Em qualquer das três situações, os desafios de implan-
conta de algumas empresas que forneceriam e cobrariam tação são muito grandes. As preocupações começam com
pelo serviço prestado. Claro que isso será uma evolução e a simples distribuição de serviços, em tempo real, que são
não uma revolução. Ninguém em sã consciência seria capaz sigilosos para as empresas e, portanto, precisam de meca-
de permitir compartilhar seus recursos ou utilizar recursos nismos de segurança e acesso controlado. Deve-se também
alheios sem ter a certeza de que a informação será preser- prever o nível de disponibilidade dos servidores para execu-
vada e mantida com total segurança. ção dos serviços para, desta forma, garantir a execução do
Diariamente nas empresas nos deparamos com situações serviço no prazo adequado.
em que estamos utilizando pouco ou muito de um deter-
minado equipamento, seja ele o computador local de um Grade é middleware
usuário ou o servidor da empresa. O grande problema é que Entende-se middleware como um software ou produto
hoje em dia o parque de servidores (e computadores de um que permite a transferência de dados entre duas aplica-
modo geral) nas empresas são dimensionados para o pico de ções. Como responsável pela troca de informações entre as
utilização. Desta forma, ainda que precisemos de um ser- aplicações, ele funciona como um elo de ligação entre elas.
vidor trabalhando a plena capacidade por apenas algumas Note que não se deve confundir com a simples importação
horas ou alguns dias por mês, deve-se tê-lo, durante todo e exportação de dados, pois o middleware conecta as duas
o mês, sendo subutilizado. Conclui-se que a subutilização é aplicações, lendo e enviando as informações necessárias
um fato aceito na maior parte das empresas. para processamento.
Seja por um fechamento contábil, folha de pagamento Como uma grade computacional realiza a transferência de
ou programação de produção, sempre há um momento na dados entre as aplicações e faz o vínculo com os recursos
organização em que é necessário utilizar e priorizar os re- onde os dados serão processados (e eventualmente arma-
cursos para determinada tarefa. Agora imagine que, neste zenados) entende-se, portanto, que a própria grade é um
exato momento, seu servidor está ocupado com as rotinas middleware. Há algumas grades disponíveis no mercado.
usuais da empresa. Você tem que compartilhar a sua neces- Entre elas, destaca-se o Globus Toolkit. O Globus é um
sidade extrema com procedimentos que poderiam ser adia- conjunto de ferramentas que realiza o trabalho de conectar
dos, sem prejuízo para companhia. Pior que isso: sua em- e gerenciar recursos. Há diversos recursos disponíveis para
presa possui diversos computadores espalhados em rede e a controle e gerenciamento dos serviços distribuídos, como
maior parte deles sequer percebe que você está precisando o GridFTP, para transferência de arquivos e o GSI (Grid
urgentemente daquele processamento. Você tem recursos, Security Infrastructure). Existe a possibilidade de utilizar
só que eles não podem ser utilizados de maneira inteligente o Storage Resource Broker (SRB) para o acesso às informa-
quando uma situação especial está acontecendo. ções distribuídas. O SRB é responsável pelo armazenamen-
Ao utilizar uma grade computacional, diversas empresas to da localização e criação de réplicas dos dados distribuí-
ou mesmo empresas globais, podem utilizar seus recursos dos pela grade computacional.
ociosos em diferentes países em horários de pouca ou ne- A característica de distribuição de uma grade computa-
nhuma utilização. É o caso de uma empresa que tenha escri- cional faz com que o desenvolvimento de aplicativos seja
tórios em diferentes países, Brasil e China, por exemplo. Os baseado em serviços. Com aplicações baseadas em serviços,
computadores brasileiros poderão ser utilizados para pro- não é necessário depender de um único tipo de recurso,
cessamento durante a noite, exatamente quando na China seja ele o sistema operacional, a rede ou o armazenamento.

SQL Magazine . 19

[Link] 19 3/6/2005 18:47:17


Quando um serviço está indispo-
nível, outro assume automatica-
mente seu lugar, ou seja, o pro-
cessamento não é interrompido.
Outra grande vantagem na utili-
zação de serviços está no fato de
este ser uma entidade que provê
compatibilidade através do uso
de mensagens, com facilidade A 1. O desenvolvimento de aplicações baseadas em JDBC ou ODBC dependem da conexão com cada
banco de dados que a empresa possui. Foi levantada a possibilidade de seguir este modelo, mas utilizando a
para descrever, localizar e utili- Grade. Esta não tem sido a opção da comunidade acadêmica.
zar outros serviços. Os serviços
baseados na web têm interface definida em padrões aber-
tos, como XML. Isso faz com que aplicações completamen-
te diferentes possam ser integradas.

Banco de dados em grade


Até o momento, as aplicações que mais têm utilizado uma
grade computacional são as do meio científico e acadêmico.
São aplicações comuns para utilização em grade aquelas que
exigem um grande volume de cálculos e simulações, como
a identificação de novas moléculas ou a tentativa de locali-
zação de novas estrelas, galáxias e planetas. A característica
básica deste tipo de aplicação é necessitar um alto volume
de processamento paralelo e o armazenamento baseado em
arquivos de dados. Há grades científicas que chegam a utili-
zar pentabytes de armazenamento. Como o processamento
é realizado em paralelo e com um volume muito grande de
dados, em algum momento a informação processada deve
ser centralizada para consolidação dos dados. Com isso não
houve necessidade de integrar sistemas gerenciadores de A 2. Nesta estrutura, o banco de dados virtual se encarrega de
armazenar e distribuir as informações entre os bancos de dados que
bancos de dados na grade, mas sim estabelecer mecanismos
estiverem na grade computacional. As aplicações devem se comunicar
eficientes de processamento e transferência de dados. com o banco de dados virtual e ele resolve as demais questões. A
Por outro lado, as aplicações comerciais não abrem mão comunicação do banco de dados virtual pode se dar com dados
estruturados, semi-estruturados ou não estruturados.
da utilização dos SGBDs. Ninguém, no mundo empresa-
rial, pensaria em reescrever suas aplicações para utilizar
arquivos de dados e, com isso, ter acesso aos benefícios de que cada distribuição de SGBD indique o nível de aderên-
uma grade computacional. O grande problema está na fal- cia aos serviços da grade computacional e o middleware se
ta de padronização dos bancos de dados. Uma alternativa encarregue de distribuir os dados e as operações com base
seria utilizar as APIs de JDBC ou ODBC (ver A1) como nos serviços que devem ser executados e no que o banco de
interface para tratamento dos dados, mas isso seria limitar dados oferece. A maior tendência não está, portanto, em
por baixo a utilização dos principais SGBDs. construir um novo banco de dados, mas sim em permitir
Por isto, trabalha-se com a idéia de se criar um middleware o acesso a qualquer SGBD através de um mecanismo mais
de banco de dados, totalmente baseado em serviços e que potente do que os atuais (JDBC e ODBC).
possa extrair o máximo de cada SGBD disponível na gra- Dentre as principais características de um banco de dados fe-
de computacional. Esse middleware é chamado de banco deralizado está o acesso a qualquer tipo de dado e a diferentes
de dados federalizado (federated database) por servir de implementações de banco de dados. Deve-se ter mecanismos
intermediário entre os diversos SGBDs do mercado (ver de garantia de controle de transações distribuídas, conhecida
A2). Este seria um banco de dados virtual que atenderia como two-phase commit. Como as buscas são distribuídas
às requisições das aplicações e distribuiria o serviço pelos na grade, é necessário que haja mecanismos adequados para
SGBDs da grade. Naturalmente, esse trabalho não é sim- otimizar as consultas, não se limitando às regras (RBO), mas
ples de se realizar. Há grupos que trabalham em uma infra- impondo a pesquisa baseada no custo da operação (CBO).
estrutura de serviços, com a definição de cada elemento É necessário entender que qualquer banco de dados co-
necessário para cada um dos SGBDs. A idéia é fazer com mercial pode ser colocado para trabalhar em uma grade

20 . 21ª Edição

[Link] 20 3/6/2005 18:47:27


computacional. Porém, isso não faz com que as principais São extraídas estatísticas do banco de dados automatica-
vantagens de distribuição de processamento e armazena- mente e ajustes são dinamicamente otimizados. Quando
mento sejam alcançadas. Alguns documentos distribuídos necessário, o próprio banco de dados informa ao DBA onde
pelos fabricantes mostram o uso das ferramentas em grades foi detectado um problema para que ele possa realizar aná-
computacionais, mas eles trabalham isoladamente, como lises e propor modificações no banco. Uma série de alertas
armazenadores únicos de dados. Deve ficar claro que não é e conselheiros foram acrescentados ao banco de dados para
este o objetivo do banco de dados virtual. Deve haver inde- simplificar a administração do SGBD.

Opinião
pendência de implementação. O banco de dados utilizado Para o acesso a dados externos ao banco de dados Oracle,
deve ser transparente para os usuários, como é transparente sejam eles estruturados ou não-estruturados, é possível uti-
o recurso que é utilizado para processamento dos dados. lizar o Oracle Streams. A arquitetura básica do produto é:
Mesmo que os bancos de dados ainda não estejam adapta- captura, estagiamento, propagação e execução. O usuário
dos à grade computacional, ainda assim eles ajudam a me- cria uma rotina de execução, especifica as regras e utiliza um
lhorar o desempenho de aplicações tipicamente voltadas gateway para transformação. É possível utilizar comandos
para uso no meio acadêmico e científico. Isso nos leva a DML e DDL nas fontes externas e efetuar o controle de
crer que, se utilizados como são, também irão gerar bene- transações (two-phase commit). As consultas são otimizadas
fícios para uso empresarial. Há estudos que mostram que a baseadas no custo (CBO). A propagação da distribuição dos
utilização de bancos de dados clusterizados em uma grade dados pode se dar como em um hub ou como um roteador.
computacional melhora o desempenho das aplicações onde Isso quer dizer que pode haver inteligência na distribuição
o processamento é facilmente “paralelizável”. dos dados ao indicar o local específico de armazenamento e
Outro fator importante em uma grade computacional é a recuperação dos dados ou enviar a mensagem pela rede para
independência do equipamento utilizado. Quando um re- que, em algum ponto, alguém se responsabilize pelo arma-
curso falta, outro assume o lugar. Quando instalamos um zenamento ou recuperação da informação (ver A3).
banco de dados isolado isso não acontece, pois, na falta do
servidor, haverá perda de acesso à informação. DB2
Pesquisando as características de alguns dos principais A IBM abraçou a idéia do banco de dados federaliza-
bancos de dados do mercado (DB2, Oracle e SQL Server), do e não coloca recursos específicos de distribuição em
nota-se que há diferentes visões das empresas para a ques- grade computacional no DB2. Com o banco de dados
tão da grade computacional. federalizado, a IBM permite o acesso a qualquer dado dis-
tribuído pela grade computacional, seja ele estruturado
Oracle ou não. Há possibilidade de acesso a diferentes bancos de
No caso da Oracle, a infra-estrutura da grade está base- dados e, como o processamento é centralizado através de
ada em quatro pilares: aplicações, servidores de aplicação, um servidor DB2, as consultas são otimizadas baseadas em
servidores de banco de dados e armazenamento. Como custo (CBO).
nosso interesse é analisar o banco de dados e não toda a Esta estrutura garante a possibilidade de distribuir o arma-
infra-estrutura de grade da Oracle, vê-se que a Oracle uti- zenamento e processamento sem se importar onde, qual dia-
liza o Real Application Cluster (RAC) para estabelecer um leto SQL, como está armazenado ou qual protocolo se deve
cluster de servidores. As ferramentas de manutenção do utilizar. Para realizar o controle das transações distribuídas
banco de dados são válidas para toda a grade computacio-
nal. Desta forma, rotinas de backup, recovery e monitora-
mento de desempenho podem ser realizadas em um único
local e novos nós podem ser acrescentados à grade com
base na necessidade e na carga de trabalho.
Com o Automatic Storage Management (ASM), a adminis-
tração dos meios de armazenamento são realizadas em grupos
de discos (unidade lógica) e não mais em arquivos do banco
de dados. Para o DBA isso significa que deverá ser administra-
do apenas um pequeno grupo de discos. Isso faz com que haja
benefícios semelhantes ao uso de RAID. A diferença é que no
ASM é possível implementar segurança ao nível dos arquivos
e não apenas dos dispositivos de disco além de permitir um
A 3. Na arquitetura da Oracle, o banco de dados se encaixa em
melhor balanceamento de E/S entre os dispositivos. uma grade computacional através da clusterização de servidores,
Por fim, na última versão do banco de dados, a Oracle do armazenamento autogerenciado e dos mecanismos de
autogerenciamento e auto-ajuste. Para se comunicar com outras fontes
investiu no autogerenciamento do banco de dados. de dados, utiliza o Oracle Streams.

SQL Magazine . 21

[Link] 21 3/6/2005 18:47:36


(two-phase commit), a IBM utiliza o DataJoiner enquanto
não estiver disponível no DB2.
O funcionamento da estrutura do banco de dados federali-
zado é: o cliente utiliza JDBC, ODBC ou Web Service para
interagir com o banco de dados. Este, por sua vez, comuni-
ca-se com a fonte de dados (pode ser interna ou externa).
Quando o dado for processado, o banco de dados federaliza-
do retorna a informação a quem solicitou (ver A4).
Há uma preocupação em armazenar metadados das fon-
tes não relacionais. Com isso, novos acessos são otimizados A 4. Na proposta da IBM, as aplicações comunicam-se com o banco
de dados federalizado utilizando interfaces JDBC, ODBC ou Web
com uso de heurísticas específicas. Services. O banco de dados federalizado se comunica com as demais
fontes de dados. Fonte: site da IBM.
SQL Server

I
Até a versão atual (SQL Server 2000), não havia uma pre-
Oliveira. C. H. P. de (2004). Tecnologia de Grid
ocupação específica com a grade computacional. Pelo que Computing utilizando Banco de Dados Oracle.
se vê na documentação do produto, há como ter acesso a Congresso Brasileiro de Ciência da Computação. Itajaí,
SC – Brasil
fontes de dados externas, mas o controle é muito limitado.
Chede, Cesar T. (2004) “Grid Computing: um novo paradigma
Em conversas com profissionais que utilizam o banco de da- computacional”. Editora Brasport, Rio de Janeiro

dos, sabe-se que isso é feito com uso de programas externos Foster, Ian et al. (2001). The Anatomy of the Grid
ao banco de dados. Watson, Paul et al. (2003). Database and the Grid
Ainda não está disponível no site da Microsoft informação Globus Toolkit (2005). Acessado em fevereiro
[Link]
específica sobre a nova versão (SQL Server 2005) para uti-
SRB homepage (2005). Acessado em fevereiro
lização em grades computacionais. [Link]/srb/

Oracle homepage (2005). Acessado em fevereiro


Conclusão [Link]

A grade computacional é uma realidade para as empresas IBM homepage (2005). Acessado em fevereiro
[Link]
comerciais. A utilização de bancos de dados na grade com-
SQL Server homepage (2005). Acessado em março
putacional vai possibilitar ganhos de desempenho e quali- [Link]
dade, como se vê nas aplicações científicas e acadêmicas. Haas, Laura e Lin, Eileen (2002). IBM Federated Database
Techonology. Acessado em março
Atentas às necessidades e benefícios da grade, as empresas [Link]/developerworks/db2/library/techarticle/
que fornecem SGBDs estão preocupadas em adequar seus 0203haas/[Link]

produtos à nova realidade.


Deve-se, no entanto, tomar cuidado ao assumir que, sim-
plesmente comprando um produto, já se está trabalhando em

G
(cpoderoso@[Link]) é Mestrando em
grade. A grade tem uma filosofia muito mais aberta que isso. Tecnologia pelo Centro Paula Souza,
atualmente é Coordenador dos Cursos
Sempre que houver um controle centralizado e baseado em um de Graduação Tecnológica na FIAP –
Faculdade de Informática e Administração
único fornecedor, não teremos uma grade e sim um cluster. Paulista, Professor de Banco de Dados na
Para garantir os benefícios da grade computacional deve- FIAP e no Centro Universitário Fundação
Santo André e Consultor de Informática.
se optar por padrões abertos. O padrão para banco de dados Autor do livro SQL Curso Prático e dos
Guias de Referência Oracle PL/SQL da
ainda não está disponível. Estudos estão sendo feitos para
Celso Poderoso Novatec Editora.
se criar uma infra-estrutura intermediária que seja efetiva- de Oliveira
mente aberta e padronizada. S

22 . 21ª Edição

[Link] 22 3/6/2005 18:47:50


História
dos bancos
de dados e
tendências
futuras
Amir Samary

O
propósito deste artigo não é fazer previsões futu- trazem grandes responsabilidades”, certo? Pois é, estes
rísticas sobre softwares e sistemas de informação, grandes poderes, às vezes, caiam em mãos erradas.
mas observar o que ocorreu e está ocorrendo no
mercado de bancos de dados e sistemas de informação. Ela- Dar um passo para trás para
borei para este artigo uma linha do tempo que não só me dar dois para frente...
serviu de base para escrever, mas também mostrar alguns A década de 80 foi a década relacional. É neste momento
fatos interessantes da história dos nossos atuais bancos de que surgem os grandes bancos de dados relacionais, ditos
dados. de segunda geração, pois vêm após os bancos de primeira
Não é comum pararmos para pensar em como as coi- geração (hierárquicos e de rede). Normas e restrições es-
sas eram feitas antes e no porque de terem mudado. Os tavam agora disponíveis para nortear os analistas durante
primeiros sistemas de bancos de dados foram concebidos o processo de modelagem de suas bases de dados. Padrões
quando a programação estruturada ainda era uma criança e foram evoluídos e definidos, como a linguagem de consulta
a principal preocupação era criar um sistema de banco de estruturada (SQL) que facilitou ainda mais separar o banco
dados capaz de permitir a modelagem de qualquer tipo de de dados da aplicação:
informação. Foi na década de 70 que os primeiros bancos • estabelecendo a linguagem de comunicação entre
de dados hierárquicos e de rede começaram a ser utiliza- estes dois elementos;
dos em larga escala. Bancos poderosos como o Adabas e o • criando e consolidando o modelo cliente/servidor;
Mumps se encontram em produção em grandes empresas • aumentando as possibilidades de diversificação tec-
até hoje. nológica (pois antes, software e hardware, pertenciam
Normalmente, o ambiente de programação era o próprio geralmente a um mesmo fornecedor) e;
ambiente do banco de dados e as aplicações eram sempre • criando ou dividindo profissões como DBAs, analis-
aplicações caractere que rodavam em máquinas de grande tas de sistemas e programadores.
porte, acessadas através de terminais burros. O grande pro-
blema destes bancos de dados foi a extrema liberdade que Foi uma revolução e, como tal, tivemos algumas baixas. Per-
estes sistemas davam aos programadores da época. Como demos muito em flexibilidade (nosso passo a trás), mas ga-
a programação estruturada ainda não era comum, e o pró- nhamos muito em organização, metodologia e simplicidade.
prio banco propunha uma filosofia de livre criação, podería- A década de 90 foi mais uma década de revoluções. As
mos ter, dependendo do programador, sistemas complexos técnicas de desenvolvimento de sistemas evoluíram muito
genialmente desenvolvidos ou sistemas simples geniais e rapidamente e o modelo de desenvolvimento orientado a
desnecessariamente complexos. “Grandes poderes sempre objetos ganhou força. Ficou claro que o modelo relacional

SQL Magazine . 23

[Link] 23 3/6/2005 18:47:56


não era ideal para todos os tipos de aplicações e mesmo desaparecendo na medida que os desenvolvedores reconhe-
aplicações corporativas (financeiras, CRM, ERPs, etc...) cem que é impossível desenvolver novos sistemas em cima
não eram tão bem atendidas como se alardeava. Entidades de um produto que rompe completamente com todos os
simples tornavam-se estruturas complexas, com muitos re- padrões atualmente empregados no mundo. É preciso evo-
lacionamentos e artifícios para simular seu comportamento luir para um produto final que contenha quase tudo que
no mundo relacional. A discussão sobre bancos de dados os bancos de dados de segunda geração contém e conquis-
alternativos ganhou força e muitas modificações começa- taram além dos novos recursos exigidos pelos sistemas de
ram a serem propostas para os bancos de dados de segunda informações atuais.
geração. Desde alterações na linguagem SQL (padrões SQL
99 e SQL 2003 já incluem suporte limitado a estruturas A convergência, enfim!
não convencionais e OO) até produtos completamente no- Até agora, está claro o que são BDs de primeira e segun-
vos e revolucionários. da geração, mas o que seriam os BDs de terceira geração?
Proliferaram-se bancos de dados orientados a objetos, Seriam os BDOOs (bancos de dados orientados a objetos)?
bancos de dados textuais, bancos de dados em memória Não. O debate, as implementações e todos os conceitos
e etc. Todos com vantagens e desvantagens. Percebeu-se, envolvidos até agora devem ser reunidos em uma solução
no entanto, que não poderíamos cometer o mesmo erro convergente, que atenda aos requisitos de um repositório
novamente. Neste caso, não poderíamos ter de volta a de dados, mas que permita uma modelagem mais realista
agora almejada flexibilidade a custo da interoperabilidade dos mesmos.
e de todos os citados benefícios que ganhamos com os pa- Os bancos de dados de terceira geração ou pós-relacionais,
drões definidos pelos bancos de dados de segunda geração. seguem esta linha de raciocínio, procurando manter todos
É por isto que dezenas de implementações de bancos de os recursos conquistados pelos bancos de dados de segunda
dados alternativos surgiram e desapareceram e continuam geração, mas evoluindo-os, trazendo o banco de dados para

24 . 21ª Edição

[Link] 24 3/6/2005 18:48:00


mais perto do domínio da aplicação e do mundo real. Con- ao conceito de convergência. Não é possível escolher atu-
ceitos de orientação a objetos são agora empregados para se almente uma única tecnologia preferencial. Quem trabalha
definir as entidades do banco. Herança e polimorfismo po- em um ambiente corporativo sabe que cada projeto utiliza
dem ser utilizados agora para se criar um modelo físico (de uma tecnologia diferente. Cada cliente da corporação, ao
Pessoa, Cliente e Fornecedor, por exemplo) sem artifícios, qual devemos nos integrar, também fez sua escolha tecno-
trazendo de volta a flexibilidade perdida e, o mais impres- lógica diferente da nossa e que, portanto, precisamos cada
sionante e importante: as consultas e operações (DML e vez mais de padrões e de produtos convergentes que não

Opinião
DDL) podem continuar sendo feitas através da conhecida nos imponham limites ou tecnologias de um fornecedor
e consagrada SQL, permitindo a interoperabilidade entre específico.
sistemas existentes e preservando o investimento em edu-
cação. Ao contrário do que se possa pensar, as exigências da Conclusão
modelagem orientada a objetos não afetam a performance Todos os grandes fornecedores de bancos de dados estão
das aplicações, mas as tornam mais simples. buscando embutir em seus produtos as características de
Estruturas multidimensionais complexas (árvores, arrays, bancos de dados de terceira geração e algumas empresas
listas, etc...) podem ser utilizadas diretamente pelas aplica- chegaram a criar produtos inteiramente novos. Isto fica
ções como tipos de dados nativos, de forma completamente bastante claro ao observar a D1. Linha do Tempo, prin-
transacional e sem artifícios. Os tipos de dados das aplica- cipalmente a partir da década de 90. Já podemos encon-
ções são automaticamente suportados e armazenados sem trar dezenas de empresas conceituadas que utilizam bancos
mapeamentos. Os dados agora possuem comportamento de dados pós-relacionais em suas operações e este número
natural e regras associadas que garantem não só sua integri- tende a crescer cada vez mais. Eles simplificam os siste-
dade dentro do modelo físico, mas também no modelo ló- mas corporativos, diminuindo o número de camadas e de
gico, de forma mais coerente e natural. Estes novos bancos servidores, aumentando, portanto a qualidade dos sistemas
de dados também são multiplataforma, acessam tabelas de desenvolvidos.
outros bancos de dados relacionais ou multidimensionais, Muitas empresas não querem arcar com mudanças mui-
possuem avançadas linguagens de script e instanciam com- to radicais e preferem outras abordagens para chegarem
ponentes Java e ActiveX em stored procedures, triggers e à classificação de banco de dados de terceira geração. Só
métodos. Todos estes recursos estão intimamente ligados o tempo nos dirá, novamente, que futuro está reservado

Ano Evento
Em 1959, a Conference on Data Systems Languages (CODASYL) foi fundada como uma organização voluntária cujo
propósito foi de guiar o desenvolvimento e a padronização de uma linguagem de computador que poderia ser utilizada em
muitos computadores. Este esforço levou mais tarde, indiretamente, ao desenvolvimento do COBOL e também às bases do
modelo hierárquico e navegacional de dados.
Os modelos hierárquicos e navegacionais de banco de dados foram concebidos para serem utilizados nos primeiros
mainframes e se popularizaram a partir daí. Charles Bachman foi um dos pioneiros no campo de banco de dados. Na General
Eletric, em 1960, ele projetou o sistema de banco de dados navegacional IDS (Integrated Data Store). Charles é conhecido
por ter tido vários calorosos debates com Dr. Codd onde discutiam as vantagens e desvantagens do modelo hierárquico/
navegacional x relacional.
Também em 1960 surge o paradigma da orientação a objetos e a primeira linguagem OO: Simula 67, predecessora do
Smalltalk (1971) e de outras linguagens OO.
Em 1965, o Pick, sistema operacional multi-usuário totalmente baseado em um banco de dados hierárquico foi concebido
pelas forças armadas americanas e norteou vários desenvolvimentos futuros. Continua sendo utilizado até hoje e a forma como
ele armazena seus dados pode ser comparada com a forma como os objetos em um banco de dados OO se relacionam através
de ponteiros (OIDs).
Em 1966, o IMS (Information Management System) foi desenvolvido pela IBM também como um banco de dados
1960-1970 hierárquico. Foi o primeiro sistema de banco de dados de grande capacidade e foi utilizado para administrar os dados da
missão Apollo 11, que pousou com sucesso na lua em 1969. Sistemas IBM também formaram as bases sobre as quais a
primeira versão do hoje famoso ERP da SAP foi desenvolvida.
Em 1966, no Hospital Geral de Massachusetts de Boston, nasceu o MUMPS (Massachussets General Hospital Utility
Multi-Programming System - mais considerado uma linguagem com persistência embutida do que um banco com uma
linguagem) e foi o primeiro banco de dados open source, pois o mesmo foi liberado para domínio público da mesma forma
como o Linux, em 1991. Foi o primeiro banco de dados a utilizar uma linguagem interpretada com o propósito de ser multi-
plataforma. Foi também o primeiro sistema de banco de dados a ter embutido em sua linguagem primitivas para multitarefa,
algo que não era comum nos sistemas operacionais da época.
Na época da reserva de mercado, fabricantes brasileiros implementaram sua própria versão do MUMPS, chamando-a de
SuperMumps. Isto é interessante, pois ao contrário do que muitos pensam, o Brasil tem história em desenvolvimento de
software. O mesmo aconteceu em muitos países do mundo, onde o MUMPS ganhou versões locais geralmente compatíveis
com todas as outras no mundo com algumas exceções.
Em 1968, a IBM lança o CICS (Customer Information Control System) que permitia usuários manipular informações online.
Atualmente, o CICS ainda permanece como sendo um dos mais populares monitores de transação do mundo.
Também em 1968, Edsger Dijkstra publica o artigo “Go To Statement Considered Harmful” (algo como “Comandos Goto
considerados perigosos”), que seria um marco na defesa da programação estruturada.

SQL Magazine . 25

[Link] 25 3/6/2005 18:48:01


Em 1970, o modelo relacional foi concebido pelo Dr. Edgar F. Codd (Ted Codd), pesquisador inglês funcionário da IBM
que foi o pai de outras tantas tecnologias e acrônimos utilizados até hoje como o OLAP e as regras de normalização (com a
colaboração do Dr. Chris Date).
Suas propostas revolucionárias demoraram para serem notadas pela IBM, mas Larry Ellison, que fundou a Oracle em 1977,
seguiu-as a risca quando lançou a primeira versão do Oracle, o “Oracle 2”, baseado em um projeto de banco de dados
desenvolvido por ele para a CIA.
Em 1978 é fundada por Terry Ragon, em Cambridge (MA) a InterSystems Corporation, atual fornecedora do banco de
dados pós-relacional Caché e da plataforma de integração corporativa Ensemble.
Também em 1978, a linguagem SQL foi concebida pela IBM para manipular os dados de seu primeiro banco de dados
relacional, o System-R. Mas somente em 1986 a linguagem SQL foi adotada como padrão ANSI e em 1987 como padrão ISO.
1970-1980 Apesar disto, diversos fabricantes adicionaram extensões proprietárias ou alteraram o padrão. Exemplos disto são as
linguagens PL/SQL (Oracle) e Transact-SQL da Sybase e, futuramente, da Microsoft (fundada em 1975 sem ainda ter um banco
de dados próprio).
Além do System-R da IBM e do Oracle, outros projetos estavam se iniciando como o INGRES, em 1974, da Universidade da
Califórnia, Berkeley e o ADABAS da Universidade Técnica de Darmstadt da Alemanha Ocidental, hoje pertencente à Software
AG, cuja sede é na mesma cidade de Darmstadt.
É preciso notar o fato de que o ADABAS é um banco de dados essencialmente hierárquico e hoje é ainda muito utilizado por
governos, instituições financeiras e grandes corporações.
O Ingres, no entanto, é um banco de dados relacional de grande importância, pois seu código serviu de base para diversos
outros bancos de dados como o Sybase, SQL Server, Informix, PostgreSQL e o Illustra.
Surgimento dos primeiros bancos de dados relacionais para PCs (DBASE, PARADOX, CLIPPER, etc...). Foi também
nesta década que empresas como a Oracle, Sybase e Informix cresceram bastante vendendo bancos de dados relacionais
corporativos. Aqui se inicia a era relacional de fato.
Em 1981 a Informix lança o Informix, banco de dados relacional totalmente baseado no Ingres.
Em 1983, a Oracle reescreve todo o seu produto em C para alcançar maior portabilidade e a versão 3 do Oracle é então
lançada no mercado.
Em 1984, é lançado o Oracle 4, também para PC, rodando em MS-DOS utilizando apenas meros 640K de memória.
1980-1990 Em 1988, a IBM lança oficialmente o DB2, uma evolução do antigo System-R.
Em 1989 a Microsoft, em parceria com a Sybase, lança a versão 1.0 do SQL Server (Ashton-Tate/Microsoft SQL Server 1.0).
De fato, a primeira versão do SQL Server nem rodava no Windows e foi totalmente desenvolvida pela Sybase.
Em 1989, é entregue ao mercado o The Object-Oriented Database System Manifesto que agrupou muitos trabalhos sobre
bancos de dados OO, ressaltando suas principais características e requisitos.
É também na década de 80 que as LANs ganham mais força e o modelo cliente/servidor começa a se estabelecer como
padrão para aplicações distribuídas em detrimento das aplicações de processamento centralizado.
Diversas implementações de bancos de dados orientados a objetos acadêmicas começam a aparecer.
Em 1990, a Microsoft lança o SQL Server 1.1 que agora rodava no Windows 3.0, mas o kernel do SQL Server ainda
continuava a ser desenvolvido pela Sybase.
Em 1991 é entregue ao mercado o Third-Generation Database System Manifesto, documento de especial importância onde
são definidos, de forma clara, os conceitos de bancos de dados de primeira geração, segunda geração e terceira geração (alvo
de discussão do manifesto em questão).
Em 1993, é fundado o Object Data Management Group (ODMG) com o papel de padronizar e organizar o desenvolvimento
dos futuros bancos de dados OO. Mas seus padrões nunca foram realmente completamente seguidos e o grupo se desativou
em 2001, dando lugar ao padrão Java Data Objects (JDO) que também está perdendo fôlego atualmente. Dentre os
padrões que foram definidos pelo ODMG, a Object Query Language (OQL) foi o que mais se destacou. Apesar de ter sido
implementada por alguns fabricantes, não deslanchou como padrão. A SQL já estava consagrada e em evolução constante.
Apenas em 1993 é lançada a primeira versão do SQL Server para Windows NT 3.1. Em 1994 termina o acordo entre a
Microsoft e a Sybase, quando as duas já competiam entre si pelos mesmos clientes.
É também na década de 1990 que a Microsoft concebe o ODBC (Open Database Connectivity) que veio a se tornar o
padrão de comunicação entre qualquer aplicação e o banco de dados relacional. Até então, qualquer aplicação que quisesse
1990-2005 utilizar um banco de dados deveria se conectar através de uma API proprietária do banco como a Oracle Call Interface (OCI).
Em 1995 a Informix adquire a Illustra e adiciona recursos de mapeamento objeto-relacional ao seu produto.
Em 1996 é lançado o PostgreSQL, banco de dados objeto-relacional free. A primeira versão estável do Postgres foi concebida
na década de 80 tendo o Ingres como base. Esta nova versão teve como principal adicional o suporte a linguagem SQL.
Em 1997, a InterSystems lança o Caché, primeiro banco de dados de terceira geração a ser utilizado corporativamente. É
o primeiro produto do gênero que atende grande parte do terceiro manifesto sobre bancos de dados de terceira geração. Ele
unifica os modelos hierárquico, relacional e orientado a objetos em um só produto.
Em 1998, a Microsoft lança o SQL Server 7 e em 2000 o SQL Server 2000.
Em 2001, a IBM compra a Informix a assimila sua tecnologia de mapeamento objeto-relacional.
Em 2001, a InterSystems lança o Caché 5, aprimorando ainda mais sua estratégia. O Caché agora seria não só um banco de
dados de terceira geração, mas também um Application Server completo, leve, rápido e orientado a objetos.
Em 1999 a Oracle licencia o Application Server J2EE Orion e em 2002 a Oracle adquire o TopLink, ferramenta de
mapeamento objeto-relacional da WebGain como parte de sua estratégia de oferecer um ambiente de desenvolvimento J2EE
integrado ao seu banco de dados.

D 1. Linha do Tempo.

G
(asamary@[Link]) é formado pela
Universidade do Estado do Rio de Janeiro
e hoje trabalha como Sales Engineer da
para esta tática. Conheço muita gente inclusive que pensa InterSystems Brasil. Amir desenvolve
realmente que a modelagem orientada a objetos não deve bancos de dados não convencionais
(hierárquicos e oo) desde 1997. Hoje
ser aplicada a bancos de dados. Nunca consegui de fato trabalha como consultor em projetos
de integração utilizando o Ensemble,
uma explicação plausível para esta crença, mas os fatos plataforma de integração da InterSystems
estão ai. De uma forma ou de outra, o mundo dos bancos e em projetos de aplicações e portais
corporativos utilizando o Caché como
de dados será (se já não é) diferente do mundo puramen- Amir Samary banco de dados e application server.
te relacional. S

26 . 21ª Edição

[Link] 26 3/6/2005 18:48:02


Borland InterBase
Quando e por que migrar
para InterBase 7.5
Paulo Sérgio Palmério

custo zero, mantenha sua Kombi. Só lembre sempre que


o produto que está utilizando foi escrito em 2000 e certa-
mente a tecnologia evoluiu muito de lá para cá.
Mas, se hoje você, ou o mercado, exige alguns fatores a
mais, vale a pena conhecer algumas implementações que
foram feitas no InterBase 7.5 e ponderar até que ponto elas

T
enho ficado espantado com a quantidade de desen- podem trazer ganhos significativos ao seu negócio.
volvedores ainda utilizando o InterBase 6. Talvez o Existem alguns sintomas ou situações que motivam a mi-
fato de ser freeware tenha motivado a manutenção gração de versões anteriores ou de outros produtos e eles
desta versão, uma vez que diminuir o custo de venda dos apli- estão diretamente relacionados com as áreas em que ocor-
cativos sempre tem sido a tônica entre os desenvolvedores. reram as maiores mudanças no produto:
Quando falamos em software para desenvolvimento es- • Escalabilidade e performance;
tamos sempre ávidos pelas novidades, implementações e • Monitoramento;
recursos da última versão. Mas com o InterBase, talvez • Estabilidade;
por causa da sua simplicidade de uso ou por conformis- • Segurança.
mo com os resultados que ainda vêm sendo obtidos, não
ocorre o mesmo. Problemas de performance
Alguns fatores estão ocorrendo que devem modificar este Se suas aplicações cresceram, seja em número de usuários
panorama de forma bastante significativa. Se por outro lado concorrentes, volume de transações ou de dados manipu-
você utiliza outros bancos de dados e esbarra em limitações lados, certamente você deve estar sentindo a necessidade
de plataforma, custo de implementação ou requisitos de de melhorar a performance. Neste sentido, o InterBase 7.5
hardware para implementações de novos projetos, este ar- apresenta soluções que, independente de modificação em
tigo também poderá ajudá-lo. suas aplicações ou hardware, podem contribuir muito no
desempenho geral.
Considerações iniciais
Quem entre nós não guarda na memória a imagem da ve- Planos de query mais eficientes
lha Kombi? Todos devem concordar que é um veículo de Utilizando-se versões anteriores era comum forçarmos os
preço baixo, quase sem custo de manutenção e “pau para planos de query para a obtenção de melhores resultados.
toda a obra”. Todo dia cruzamos com uma, geralmente arre- As implementações feitas nesta área ao longo das últimas
ada, velha, cheia de carga... e cumprindo seu papel! versões acabaram propiciando uma melhora significativa
Por outro lado, o desenvolvimento de novos veículos criou nos resultados.
utilitários que permitem o transporte de mais carga, com Houve uma reformulação completa do otimizador - que
melhor performance, com mais recursos e custo/benefício hoje possibilita uma utilização mais eficiente de planos - e
bastante razoáveis. uma mudança na metodologia de indexação, que somados
Se você tem em mente um servidor de banco de dados a permitem uma resposta muito mais rápida a consultas.

SQL Magazine . 27

[Link] 27 3/6/2005 18:48:10


Melhor uso de memória de ordem do produto: o InterBase utiliza os recursos de
O tamanho máximo de página de banco foi ampliado para hardware à medida que vão sendo disponibilizados, possibili-
16K e o de cache buffer para 128k, de modo a possibilitar tando e acompanhando o crescimento gradual da utilização.
um aumento significativo da área de memória cache para o Antes, e poucos atentam a este detalhe, não adiantava in-
InterBase. Sabendo-se que o tempo de resposta de acesso à vestir em melhorar o hardware uma vez que não faria dife-
memória é bastante superior ao de acesso a disco, você pode rença em performance.
imaginar o ganho que isto poderá representar em termos de
performance. Desta forma, passa-se a utilizar efetivamente Novos parâmetros de configuração
os recursos de memória disponíveis no hardware, o que na Para permitir a otimização do InterBase em relação aos
prática se traduz em diminuição de tempos de resposta. recursos do hardware em que está instalado, foram disponi-
A área de memória utilizada pelo InterBase conta agora bilizados uma série de novos parâmetros, dentre eles:
com novos recursos e controles que permitem maior efici- • MAX_THREADS: especifica o número máximo de
ência. Existe uma nova área específica e dedicada para sort threads simultâneas em ambientes multi-processados;
e novos mecanismos de gerenciamento e otimização, con- • ENABLE_HYPERTHREADING: habilita ou não a
tando inclusive com ferramenta equivalente a um garbage funcionalidade de processadores HT;
collector (ver A1). • LINGER INTERVAL: tempo de permanência do
banco em memória, após a última conexão ser desativa-
Aumento de usuários concorrentes da (ideal para sistemas com conexões Web).
Os problemas de performance tornam-se nítidos quan-
do existe o aumento do número de usuários concorrentes. Problemas de estabilidade
Normalmente quando uma ou mais query pesadas estão Se você passa por problemas de estabilidade em suas apli-
rodando o efeito é uma degradação geral no desempenho, cações, as implementações efetuadas certamente estarão
refletida como lentidão de resposta às demais solicitações. conferindo maior segurança ao processo.
Existem relatos anteriores de problemas de consumo de
Multi-thread processador, onde ele fica estagnado próximo a 100% sem
Com o novo mecanismo multi-thread do InterBase 7.5, causa aparente e sem que houvesse resposta do servidor.
este panorama foi totalmente modificado e as respostas a Em alguns casos a única saída era reiniciar o servidor.
solicitações simultâneas são imediatas. Uma das áreas tidas como prioritária no desenvolvimento, a
estabilidade recebeu especial atenção nos últimos anos. Não
Suporte a SMP e HT só o tratamento de memória, como o controle de gravações
Some-se a isto a implementação de suporte a SMP foi modificado de modo a permitir maior segurança e confia-
(Servidores Múltiplo processados) e processadores HT bilidade. Foi implementada nova opção de gravação represen-
(Hyper-Threading), e temos o InterBase passando a utilizar tada por solução intermediária entre síncrona e assíncrona,
efetivamente todo o poder de processamento disponível. feita através de escrita forçada temporizada por parâmetro.
O garbage collector foi modificado e trabalhar hoje em
Usando efetivamente os recursos do hardware thread independente, tornando-se viável sua manutenção
Vale sempre lembrar que escalabilidade é uma das palavras ativa sem degradar a performance aos demais usuários.
Houve também uma otimização no controle de
transações em geral, refletindo em maior segurança
e controle.

Monitoramento
Não é raro um usuário cobrar a lentidão do siste-
ma em determinadas circunstâncias de sua operação
que não conseguimos reproduzir. Mesmo em nos-
so próprio servidor, em alguns momentos ficamos
em dúvida sobre que processo está sendo realizado
e causando lentidão geral. Não venha me dizer que
você vai utilizar um monitor de SQL para verificar o
problema. Lembre-se que ele só tem a capacidade de
monitorar a conexão em que estamos e neste caso es-
tamos falando em algum processo lento dentre todos
os que estão em curso em todas as conexões ativas
A 1. Controle de uso de memória – Performance Monitor. no servidor.

28 . 21ª Edição

[Link] 28 3/6/2005 18:48:11


E como fazer para descobrir? Pelo método arcaico a for- Acredito que todo desenvolvedor gostaria de ter um monitor
ma é escrever logs de acesso que permitam identificar os que permitisse verificar a qualidade das queries e permitisse
processos para rastreamento posterior. Vejamos agora as localizar gargalos em suas aplicações. O novo Performance
novidades inseridas na versão 7.5. Monitor tem muito mais que isto e certamente merecerá um
próximo artigo apresentando todos os seus recursos.
Analisando a atividade no servidor
Que tal utilizar uma ferramenta que não só mostre, como Cancelando usuários e conexões
documente em arquivo ou na base, os processos em an- Quem já não ficou nervoso aguardando que uma infindá-
K

SGBD
damento no servidor automaticamente? O Performance vel query executada por engano, ou com construção errada,
Monitor é uma ferramenta que acompanha o InterBase e fosse finalizada? E com aquele usuário que deixou o siste-
permite monitorar e documentar uma série de funcionali- ma conectado impossibilitando uma série de trabalhos de
dades do servidor (ver A2). manutenção?
Como ele utiliza uma conexão via TCP/IP, pode ser exe- Junto com o monitoramento, foram implementadas tabe-
cutado remotamente, permitindo que os problemas de las internas no banco de dados que permitem uma série de
performance possam ser acompanhados e analisados à dis- ações, como derrubar usuários, cancelar queries e mesmo
tância (ver A3). efetuar commit ou rollback à distância. Melhor do que isto
é que todas as funcionalidades do Performance Monitor
Otimizando suas aplicações foram obtidas através de dados em tabelas de sistemas do
A verificação instantânea de queries simultâneas, classifi- InterBase e podem ser acessadas e manipuladas externa-
cadas pelo consumo de processador ou de memória ou pela mente, como qualquer outra tabela.
conexão requisitante são tarefas fáceis de serem efetuadas Quer mais? Que tal utilizar em seu sistema o registro in-
através do Performance Monitor. A análise do uso de me- terno de usuários logados no banco de dados ao invés de
mória, a verificação de transações longas, o consumo de li- construir um sistemas de controle de conexões próprio?
nhas por tabelas ou mesmo a freqüência de utilização de Venha ao novo mundo das tabelas de monitoramento e
procedures passam a ser atividades banais, mas fundamentais aprimore suas aplicações.
à otimização de qualquer sistema (ver A4).
Segurança dos dados
Uma preocupação de todos os usuários de InterBase sem-
pre foi com a segurança de acesso aos dados. Para os que
não sabem, a autenticação de acesso sempre foi feita no
server ([Link]). Com isto, se você não tem a senha de
acesso a um banco em certo servidor, mas consegue copiá-
lo fisicamente para um outro servidor no qual tem uma
senha de acesso, os dados são todos seus. Se você também
está preocupado, ou não sabia que deveria estar, esta novi-
dade por si só pode fazê-lo mudar de banco.

Autenticação por banco de dados


O InterBase 7.5 implementa o EUA (Embedded User
A 2. Controle de conexões – Performance Monitor.

A 3. Controle completo do banco – Performance Monitor. A 4. Visualizando as queries – Performance Monitor.

SQL Magazine . 29

[Link] 29 3/6/2005 18:48:12


Authentication), ou seja, a opção de autenticação de usu- pode ser embutida nas aplicações para simplificar a distribui-
ários por banco de dados e não mais exclusivamente por ção e foi certificado com máquinas com apenas 64MB.
servidor. Com isto, existe a viabilidade de implementa- Sua arquitetura de versionamento permite ao mesmo
ções de senhas diferenciadas para cada banco de dados tempo segurança e facilidade de manutenção, evitando a
rodando no mesmo servidor. Agora, mesmo que um banco obrigatoriedade de um DBA acompanhando os processos.
seja copiado fisicamente, as senhas de acesso são mantidas Com seu custo de implementação e manutenção reduzido
e exigidas em qualquer servidor, garantindo a segurança do ele torna-se uma opção bastante razoável para sistemas que
conteúdo. são comercializados a mercados com diferentes perfis de
usuários, possibilitando a comercialização de sua aplicação
Limitações de SQL em uma faixa de usuários bastante extensa, de uma a cen-
Se estiver tendo dificuldades de limitações de escrita com tenas de conexões.
o SQL, o InterBase 7.5 implementa uma série de funcionali-
dades adicionais que poderão simplificar o trabalho, como: Banco periférico X Corporativo
• Seleção de linhas (ROWS ,PERCENT,TIES); Temos visto o emprego do InterBase no desenvolvi-
• Novos comandos (CASE, COALESCE,NULLIF); mento de sistemas periféricos, como satélites de um
• Suporte a nomes longos; ERP, por exemplo. Nestes casos, ele pode ser uma al-
• Novos tipos de dados; ternativa bastante interessante considerando-se
• Tabelas temporárias Globais. custo/performance.
Às vezes o custo de licenças adicionais do banco de dados
Novos recursos corporativo inviabiliza a implementação deste tipo de siste-
Alguns novos recursos merecem uma citação especial, uma mas. Neste sentido, pelo seu baixo custo, o InterBase pode
vez que podem ser determinantes em situações específicas. ser utilizado como servidor de dados para sistemas de cole-
tas e controles - como máquinas de produção e catracas de
Múltiplas instâncias acesso - e seus dados remetidos ao banco principal com uma
Esta característica habilita que múltiplas instâncias do única conexão, diminuindo o custo geral de implantação.
InterBase funcionem na mesma máquina simultaneamente.
Com isto, você pode instalar e testar o InterBase 7.5 na Versões e licenças
mesma máquina em que você já tem instalado o InterBase Que tal pagar exclusivamente pelo que usa? Assim é o
6, sem prejudicar as aplicações já existentes. licenciamento do InterBase 7.5.

Alias para bancos de dados Versões de server:


Significa a utilização de apelidos para a conexão ao banco • Desktop Edition: contém todas as funcionalidades,
de dados. Com isto, os clientes não precisam saber exata- mas só permite acesso local (não permite monitora-
mente qual caminho físico para chegar ao banco. Além de mento remoto). Ideal para quem quer ter uma aplica-
aumentar o grau de segurança, facilitam a manutenção e ção acessando bancos relacionais com performance a
troca de endereço físico do banco. baixo custo.
• Server Edition: Instalado por servidor e por instância
Roteamento automático de bancos (para o caso de múltiplas instâncias)
Com a implementação de múltiplas instâncias de
InterBase em mesmo servidor, esta funcionalidade possibi- Licenças de acesso
lita que a conexão seja direcionada automaticamente a uma Devem ser adquiridas e aditivadas ao servidor de acordo
determinada instância, de modo que a utilização do banco com a necessidade de conexões simultâneas. Existem paco-
possa ser balanceada entre os serviços. tes com as seguintes quantidades: 1,10, 20 e 50 usuários si-
multâneos. Uma opção interessante é a licença Unlimited,
Baixos custos de implementação que por um preço fixo permite o acesso ao servidor sem
Um dos fatores fundamentais na análise e implemen- limitação de conexões. É ideal para servidores web ou com
tação de um banco de dados é seu custo total, que deve mais de 50 usuários simultâneos.
levar em conta:
• Custo de aquisição; Multi-plataforma
• Custo do hardware necessário; Quando o custo do servidor (incluindo sistema operacio-
• Custo de mão-de-obra para manutenção do banco nal e licenças de acesso ao banco de dados) é um dos fatores
de dados. decisivos na implementação da solução, a consideração do
O InterBase 7.5 foi concebido para ser um banco leve, com InterBase pode significar a viabilização. Um dos fatores
excelente performance e “zero administração”. Sua instalação de sucesso do InterBase é o fato de ser multi-plataforma.

30 . 21ª Edição

[Link] 30 3/6/2005 18:48:13


Com a mesma estrutura de dados, e sem qualquer modifi- contendo todas as funcionalidades no endereço www.
cação de código, apenas efetuando-se um backup/restore, é [Link]/products/downloads/download_interbase.
possível fazer-se a migração de um servidor Windows para html. A instalação é simples e merece um teste compara-
Linux, por exemplo. tivo de performance com seu banco atual. Para isto, nada
Hoje o InterBase oferece suporte a servidores rodando em: melhor do que realizar este teste com sua própria aplicação.
• Windows (NT, 2000, 2003, XP); Confira!
• Linux (Kernel 2.2 e 2.4);
• Solaris (7, 8, 9). Conclusões
K

SGBD
Quem usou ou usa o InterBase 6 tem na lembrança um
Suporte técnico e garantia de evolução banco que serviu como opção para quem vinha de Paradox
Desde 2000 (quando foi lançado o InterBase 6 – open (ou DBF), fácil de usar, mas que apresentava uma série de
source) a Borland tem investido no desenvolvimento de limitações. Certamente, para o InterBase de hoje esta ima-
sucessivos releases que representam as implementações gem é totalmente equivocada.
até o estado atual. E o esforço não para. Se hoje você está O InterBase 7.5, apesar de manter seus requisitos iniciais
preocupado com o suporte, continuidade e evolução do seu - leve, fácil de utilizar e escalável - deve ser associado a
banco de dados, talvez este seja um apelo interessante para um banco robusto, confiável e com excelente performance.
pensar na migração ao InterBase 7.5. Passa a ser obrigatório considerá-lo como opção em novos
Atualmente, existe a opção de suporte gratuito através da sistemas e como upgrade a usuários que entendam que com
Borland ([Link]) ou suporte pago em vários sua utilização terão uma série de benefícios. S
níveis. Para desenvolvedores brasileiros participantes do
programa de parceria existe um grupo de apoio e palestras
técnicas periódicas para melhor utilização dos recursos do

G
(paulos@[Link]) é desenvolvedor
produto. Delphi e InterBase. Trabalha com
desenvolvimento e consultoria de sistemas
Mais do que isto, a Borland mantém uma área de interfa- na Presence Tecnologia e Aplicativos,
empresa Borland Solution Partner e
ce com usuários (QC) em que é permitida aos usuários a responsável pela Distribuição do Borland
submissão de bugs e votação sobre as próximas implemen- Interbase no Brasil.

tações no produto.
Paulo Sérgio
Versão trial Palmério
Existe uma versão de teste disponível para download

NOVO Pervasive PSQL v9


TM

�O Paradox continua corrompendo e


inutilizando seus arquivos?
�Você ainda tem perda de dados e índices
em seu banco de dados?
�A velocidade e a integridade de sua base
de dados está te deixando louco?
�Seu banco de dados não é tão robusto
quanto parece?

Migre para o novo Pervasive PSQL v9TM Vantagens Novidades


Totalmente compatível com o modelo orientado a registros do � Projetado e desenvolvido baseado nas necessidades e � Mecanismo de busca de texto
Paradox, além de ser 100% ANSI SQL. Com os componentes restrições das pequenas e médias empresas livre (FULLTEXT SEARCH)
nativos 100% compatíveis com o TTable/TQuery, você não precisa � Performance relacional e
� Maior economia para o desenvolvedor e para o usuário,
reescrever a sua aplicação. Além de solucionar diversos problemas, transacional incomparável
devido ao seu design integrado, ser auto-configurável e
você terá os seguintes benefícios:
auto-ajustável, o Pervasive PSQL v9TM dispensa a � Novas funcionalidades e
� Não haverá mais perda de dados ou corrupção de
administração minimizando os custos de suporte e sintaxes de SQL
índices/tabelas, instale e esqueça!
maximizando a satisfação dos clientes � Componentes nativos para
� Alto desempenho na rede que não degrada com o aumento do
tamanho das tabelas ou número de usuários � Compatível com padrões do mercado. Inclui drivers Delphi (Table e Query)
� Acessa o banco de dados transacional/relacional sem a ODBC, OLE/DB, JDBC, .NET e componentes/interfaces � Suporte nativo a COBOL
necessidade de mapear um diretório de acesso para Delphi, C++ Builder, C/C++, VB e COBOL (Occurs e Redefines)
� Não vai mais precisar instalar e configurar o BDE/dbExpress nas � Rápido e confiável em sistemas operacionais Linux, � Suporte a arquivos de 128 GB
estações Netware e Windows sem extensões
� Reduz drasticamente o suporte ao cliente, pois o banco de dados � Escalável desde um único usuário até ambiente � Novos utilitários gráficos e de
é totalmente isento de manutenção cliente/servidor sem alterações no aplicativo linha de comando

� [Link] � (11) 3078-1690 � info@[Link]

SQL Magazine . 31

[Link] 31 3/6/2005 18:48:16


Modelagem
de dados
espaciais
Vinícius Maeda, Ronaldo Sales
e Thiago Simonato

N V
o artigo anterior, dados de natureza espacial e o SQL Magazine 18

Oracle Spatial, foram apresentados os conceitos Dados de natureza espacial e o Oracle Spatial

básicos de geoprocessamento e uma breve intro-


dução às representações espaciais no Oracle Spatial.
Neste artigo, iremos abordar a modelagem de dados espa- o armazenamento dessas informações requer funções de
ciais apresentando alguns exemplos. Mas antes de iniciar- análises e apresentação especializadas, não presentes em
mos a discussão sobre a modelagem de dados espaciais, é sistemas de banco de dados convencionais. Os SIGs, além
importante que o leitor conheça mais alguns conceitos so- de tratar os dados convencionais, também tratam outros
bre os sistemas de informações geográficas (SIG). dois tipos de dados; os dados espaciais e os dados pictóri-
cos. No artigo anterior, foi abordada a questão da manipu-
Sistema de informação geográfica lação dos dados espaciais. É importante ressaltar o uso dos
Sistemas de informações são aqueles que possuem como ca- dados pictóricos, pois eles armazenam a imagem represen-
racterísticas principais a coleta, armazenamento, análise e mani- tativa da entidade geográfica.
pulação de dados específicos a uma determinada área. Podemos Conforme Borges (ver a seção ), “sistemas de informa-
destacar como exemplo um sistema de cadastro telefônico. ções geográficas podem ser implementados usando siste-
Quando os dados de interesse dos sistemas possuem algu- mas gerenciadores de banco de dados relacionais, relacio-
ma relação com entidades de expressão espacial (geográfi- nais estendidos e orientados a objetos”. Diversos autores
ca), esses sistemas são conhecidos como sistemas de infor- afirmam que os conceitos de orientação a objetos oferecem
mações geográficas. Além de tratar dos dados espaciais, os um ambiente mais propício para os SIGs. Conceitos como
SIGs também armazenam informações de fenômenos que herança, generalização e especialização, dentre outros, apli-
ocorrem no meio geográfico. Dessa forma, todas as informa- cam-se facilmente às complexidades dos dados espaciais.
ções de natureza espaciais são indispensáveis ao sistema. Em sistemas de informações geográficos, a maioria das me-
Os SIGs armazenam as informações espaciais provenien- todologias de modelagem surgiram a partir das metodologias
tes de diversas fontes, como: fotografias aéreas, imagens convencionais, sendo adicionadas primitivas que permitissem
de satélites, mapas e dados cadastrais urbanos, dentre representar dados espaciais com maior clareza e simplicidade.
outros. Essas informações são coletadas de dispositivos Como diversas metodologias de modelagem de dados espa-
diferenciados, cada um com suas características de co- ciais são fundamentadas nas metodologias das modelagens
leta específicas, como os sensores a bordo de satélites convencionais, também chamada de modelagem de dados
que capturam imagens de formas variáveis para fins es- alfanumérica, faremos uma breve abordagem destas metodo-
pecíficos. Por serem informações de formatos distintos, logias antes de entrarmos na modelagem de dados espacial.

32 19ª Edição

[Link] 32 3/6/2005 18:48:27


Modelagem de dados fará toda a abstração do sistema, e estará se preocupando em
Um modelo de dados é o conjunto de todas as informa- captar todas as informações possíveis para garantir que sua mo-
ções importantes para o sistema. Além de mostrar as fun- delagem abranja todo o sistema.
cionalidades do sistema, este modelo permite descrever as Normalmente, o esquema conceitual é representado de for-
estruturas e operações em um banco de dados. ma gráfica e sem detalhes de implementação. É importante
Em um projeto de desenvolvimento de um sistema de in- que o modelador não se preocupe com detalhes de implemen-
formação, a modelagem é uma das fases mais importantes tação no projeto de modelagem, pois poderá prejudicar a flexi-
O

Mini-Curso
do projeto. Nela, a experiência do projetista (ou modela- bilização do sistema abstraído. Atualmente, diversas empresas
dor) é fundamental para que informações relevantes aos mantêm separadamente os projetistas de modelagem e os pro-
sistemas não sejam omitidas. gramadores. Isso vem ocorrendo para evitar que o projetista
Um modelo é uma abstração de algo do mundo real cujo pro- modele o sistema de acordo com visões de um programador.
pósito é permitir que se conheça o que será tratado antes de Existem diversas metodologias usadas na modelagem con-
construí-lo. A abstração é uma capacidade humana fundamen- ceitual dos dados. A mais conhecida foi proposta por Chen
tal que nos permite lidar com coisas complexas. Por exemplo, (ver a seção ), definida como modelo entidade-relacio-
os engenheiros, artistas e artesãos vêm construindo modelos namento. Embora muito difundida, essa metodologia não
há muito tempo para testar projetos antes de executá-los. Por é ideal para a modelagem de dados espacial. As metodo-
isso, a responsabilidade da abstração é definida por uma pes- logias aplicadas a esta modelagem geralmente são baseadas
soa, também chamada de observador. Fundamentalmente, a nos conceitos de orientação a objetos. As mais conhecidas
abstração feita pelo observador deve ser clara e objetiva para são: OMT (Object Modeling Techinique) e UML (Unified
que outras pessoas possam entender o sistema modelado. Modeling Language).
O modelo abstrato é composto por entidades ou entes Estaremos abordando brevemente na próxima seção os
(tudo aquilo que existe do mundo real e é importante para
essa aplicação) e relacionamentos (relações do sistema a
ser modelado), de acordo com Rodrigues (ver a seção ).
Entes e seus relacionamentos são apresentados em esque-
mas de notações gráficas que servem para visualizar o mo-
delo abstraído.
Existem diversas metodologias de modelagem de dados.
Entre elas, pode-se destacar as mais conhecidas como, mo-
delo entidade-relacionamento (MER) e os modelos orien-
tados a objetos e suas especializações.
A abstração de conceitos e entes existentes no mundo real
é uma parte importante para um sistema de informação.
Tão importante que o sucesso da implementação de um sis-
tema informatizado é diretamente dependente da qualidade
do trabalho de modelagem. Se os conceitos forem excessi-
vamente simplificados, corre-se o risco de deixar de lado al-
guns aspectos importantes da realidade, com conseqüências
sobre as aplicações. Se, por outro lado, as representações se
tornarem complexas demais, corre-se o risco de gerar siste-
mas lentos, sobrecarregados, difíceis de manter.
O objetivo da abstração é isolar os aspectos que sejam
importantes para algum propósito e suprimir os que não o
forem. A abstração deve sempre visar a um propósito, por-
que este determina o que é e o que não é importante.
Para a elaboração de um sistema, existem três níveis de
modelagem em um projeto: modelagem de dados concei-
tual, modelagem de dados lógico e a modelagem de dados
físico, conforme representado na A1. Como o primeiro
nível é o mais importante para a modelagem de dados, esta-
remos enfatizando mais sobre ele nos próximos parágrafos.
A modelagem de dados conceitual é o primeiro nível do proje-
to de modelagem. Será neste nível do projeto que o modelador A 1. Representação das fases da modelagem de dados.

SQL Magazine . 33

[Link] 33 3/6/2005 18:48:32


conceitos da metodologia de modelagem OMT. O interesse do trabalho de conceituação do sistema precisa estar repre-
de falar sobre esse assunto está relacionado à metodologia sentado de maneira concisa e completa.
criada para modelagem de dados espaciais que estaremos Alguns conceitos importantes para a modelagem de dados
abordando nas próximas seções. espaciais estão descritos a seguir. É interessante que o leitor
entenda esses conceitos bases, pois são utilizados na mode-
OMT (Object Modeling Techinique) lagem de dados espaciais.
O método OMT (do inglês, Object Modeling Technique
– Técnicas de Modelagem de Objetos) baseia-se em con- Modelo de campos
ceitos da orientação a objetos. Com o surgimento de apli- O modelo de campos, também conhecido como visão de
cações mais complexas como, processamento de imagens campos, define o mundo real sendo visto como uma super-
digitais, sistemas de informações geográficas, banco de da- fície contínua onde os entes espaciais variam continuamen-
dos multimídia, entre outros, as informações armazenadas te no espaço. Por exemplo, um mapa de vegetação descreve
nos bancos de dados tornaram-se mais complexas. Surgiu uma distribuição que associa a cada ponto do mapa um tipo
a necessidade de modelos de dados que se adequassem específico de cobertura vegetal, enquanto um mapa geo-
a esta nova complexidade. O modelo orientado a objeto químico associa o teor de um mineral a cada ponto. Se ana-
veio atender a estas novas necessidades. Neste modelo, o lisarmos a A2, cada ponto (pixel) da imagem representa
elemento básico é o objeto, que combina estrutura e com- um tipo de vegetação.
portamento dos dados em um único elemento. O objeto é
alguma coisa do mundo real e que faz sentido para a abs- Modelo de objetos
tração do sistema e servem a dois objetivos: eles facilitam a O modelo de objetos, também conhecido como visão de
compreensão do mundo real e oferecem uma base real para objetos, define o mundo real contendo entes identificáveis
a implementação em computador. no espaço. Citamos como exemplo de modelo de objetos
Outros conceitos muito importantes de orientação a ob- um cadastro espacial dos lotes de um município, onde cada
jetos também são aplicados a esta metodologia de mode- lote é identificado como sendo um dado individual, com
lagem, como: classes, operações, métodos, multiplicidade, atributos que o distinguem dos demais. Igualmente, poder-
agregação, generalização e herança, dentre outros. se-ia pensar como geo-objetos os rios de uma bacia hidro-
Para a modelagem de dados espaciais, foram criadas diver- gráfica ou os aeroportos de um estado. A A3 mostra que
sas premissas baseadas em modelagem convencionais, como cada lote possui seus atributos específicos, diferenciando
o modelo Geo-OMT, que é um método de modelagem para dos demais lotes.
dados espaciais proveniente do modelo OMT. Todos esses
métodos serão abordados neste artigo. Representação vetorial
Até está seção, apresentamos ao leitor conceitos impor- Uma das formas de representação dos dados em SIG é a for-
tantes antes de mencionarmos os conceitos de modelagem ma vetorial. A forma vetorial utiliza pontos, linhas e polígonos
de dados espaciais. para representar entes espaciais. Os pontos, linhas e polígonos
são compostos basicamente de pontos que possuem coorde-
Modelagem de dados espaciais nadas (x,y). Uma rede elétrica, de saneamento e de telefonia
O aspecto cognitivo é um fator importante na percepção são representados de forma vetorial (ver A4).
espacial. No modelo humano de percepção espacial, os con-
ceitos usados para compreender o espaço são freqüente-
mente baseados em noções que não podem ser diretamente
implementadas, necessitando de uma definição formal. Ou
seja, é necessário um modelo conceitual para representar as
informações, como mostrado na A11. Estaremos falando
mais sobre essa figura ao final do artigo.
Em SIG, a importância da abstração na construção de
modelos de dados é ainda maior. Em primeiro lugar, em
sistemas geográficos existe uma maior riqueza de represen-
tação, em especial no que tange às possibilidades de rela-
cionamento entre entes. Existe também a necessidade de
incluir na conceituação, aspectos da representação gráfica
que esse pretende adotar para os entes: campos ou objetos,
vetores ou imagens, sem contar os aspectos estéticos, de re-
presentação cartográfica e visual. Ao final, todo o resultado A 2. Representação de um modelo de campos.

34 . 21ª Edição

[Link] 34 3/6/2005 18:48:39


Representação matricial para representação de informação de expressão espacial.
A outra forma de representação de dados em SIG é a Em outras metodologias, foram oferecidas melhorias para
forma matricial (ver A5). Também conhecida com raster, representação das informações. Dentre essas metodologias,
a forma matricial possui como característica o fato de que optamos por trabalhar com a metodologia Geo-OMT, sen-
os dados do mundo real são representados por uma matriz, do esta escolhida pelo fato de ser amplamente utilizada em
e cada célula (geralmente chamado de pixel) desta matriz diversos trabalhos de modelagens de dados espaciais.
possui um valor característico. As imagens obtidas através
O

Mini-Curso
de satélites representam dados em forma matricial. Modelo Geo-OMT
Esta metodologia de modelagem foi proposta por Borges
Metodologias de modelagem de dados (ver a seção ). A proposta do modelo Geo-OMT é unifi-
espaciais car as primitivas geográficas desenvolvidas por diversos au-
Existem diversas metodologias para modelagem de dados tores, além de introduzir novas primitivas buscando suprir
espaciais. Essas metodologias foram criadas e adaptadas a algumas deficiências na representação de dados espaciais.
partir das metodologias de modelagem convencionais que A idéia fundamental ao se estender um modelo de dados é
não possuíam primitivas para a representação das informa- enriquecê-lo, de maneira a torná-lo capaz de suportar novos
ções de expressão espacial. Alguns exemplos são Geo-IFO, conceitos de abstração.
MGEO, GISER, GeoOOA e Geo-OMT. Para grande parte O modelo Geo-OMT está baseado na modelagem de da-
dessas metodologias, foram adicionadas diversas primitivas dos orientado a objetos, sendo uma extensão do modelo
OMT. A partir das primitivas do modelo OMT convencio-
nal, foram adicionadas primitivas geográficas aumentando a
capacidade semântica. Essas primitivas buscam aproximar
o modelo espacial abstraído de um modelo de representa-
ção a ser utilizado.
As primitivas desenvolvidas para o modelo Geo-OMT
permitem modelar a geometria e a topologia dos dados
geográficos. Esse modelo também permite a diferenciação
entre os atributos alfanuméricos e gráficos. As principais
características do modelo Geo-OMT são:
• Segue o paradigma de orientação a objetos e seus prin-
cipais conceitos (classe, herança e objeto, dentre outros).
• Utiliza representações gráficas que facilitam a rápida
A 3. Representação de um modelo de objetos. compreensão e identificação do ente do mundo real.
• Permite diferenciar as representações gráficas
(georreferenciadas) das classes convencionais.
• Utiliza conceitos do modelo de campos e modelo de
objetos em classes.

A 4. Representação vetorial. A 5. Representação raster.

SQL Magazine . 35

[Link] 35 3/6/2005 18:48:42


• Por ser uma extensão do modelo OMT, permite graficamente definida como sendo um retângulo subdi-
uma fácil visualização e entendimento. vidido em quatro partes. A parte mais acima e à direita,
contém o nome da classe e a parte do lado esquerdo apre-
O modelo Geo-OMT possui, em sua estrutura, duas clas- senta um símbolo representando a forma gráfica da classe
ses básicas, georreferenciadas e convencionais. Com essas georreferenciada. Na segunda parte do retângulo, aparece a
classes, são representados os três grandes grupos de dados lista dos atributos gráficos. Já a terceira parte contém a lista
(contínuos, discretos e não-espaciais) encontrados nas apli- dos atributos alfanuméricos (quando houver). E na última
cações espaciais, o que proporciona uma visão integrada de parte do retângulo, temos as operações. Para questões de
todo o espaço modelado. simplificação, as classes podem ser simplificas como mostra
Uma classe georreferenciada descreve um conjunto de a A7, onde está ilustrada uma classe georreferenciada.
objetos que possuem representação espacial e está associa-
da a entes do mundo real. Geo-Campo
Uma classe convencional é o conjunto de objetos que não Numa representação de um fenômeno geográfico sobre
possuem representações espaciais, mas possuem alguma o espaço contínuo (princípio do modelo de campos), cada
relação com objetos espaciais. Um exemplo é a classe de ponto do espaço geográfico possui um valor. Para cada valor
proprietários de imóveis com relação às classes dos lotes que pretendemos representar, uma simbologia é adotada.
georreferenciados. Como exemplo, podemos citar as curvas de níveis, como
Como o modelo Geo-OMT está baseado em orientação a mostrado em (b) na A8.
objeto, as classes georreferenciadas e convencionais podem O modelo Geo-OMT possui cinco especializações da clas-
ser especializadas usando conceitos de herança. As duas se Geo-Campo: Isolinhas, Polígonos Adjacentes, Tesselação,
principais especializações das classes georreferenciadas são Amostragem e Rede Triangular Irregular. Para cada um des-
as classes Geo-campo e Geo-objeto. sas especializações temos uma representação gráfica simbó-
As classes do tipo Geo-campo utilizam o conceito do mo- lica como descrito na A8.
delo de campo, ou seja, os entes são representados por ob-
jetos distribuídos continuamente, como tipo de solo, teor Geo-Objeto
de minerais, etc. Já as classes do tipo Geo-objeto utilizam o O modelo Geo-OMT possui duas sub-classes do tipo
conceito do modelo de objeto, como, postes, rios, etc. Geo-Objeto: Geo-Objeto com Geometria e Geo-Objeto
De acordo com o modelo Geo-OMT, as subclasses geor- com Geometria e Topologia. Cada uma dessas sub-classes
referenciadas possuem representação gráfica simbólica, o possuem suas especializações.
que facilita a identificação do ente abstraído do mundo real Uma subclasse Geo-Objeto com Geometria represen-
e reduz o número de classes que poderiam ser criadas. A ta objetos que possuem apenas propriedades geométricas
A6 apresenta uma simplificação de um método de mode- (ponto, linha e polígono).
lagem para a notação Geo-OMT. Em um método de mode- Uma subclasse Geo-Objeto com Geometria e Topologia
lagem convencional, como o método OMT, seria necessária possui propriedades geométricas e propriedades topológicas
a utilização de três classes para representar um trecho de de conectividade (nó, linha uni-direcionada e linha bi-dire-
pista, como mostrado dentro do retângulo pontilhado da cionada). A A9 ilustra as duas sub-classes de Geo-Objeto.
A6. Utilizando a metodologia Geo-OMT, seria necessária
somente uma classe para esta mesma representação, como
mostrado no retângulo apontado pela seta.

Representação
A representação de uma classe georreferenciada é

A 7. Representação de uma classe georreferenciada e sua


simplificação.

A 6. Simplificação de classe. A 8. Sub-classes de Geo-Campo.

36 . 21ª Edição

[Link] 36 3/6/2005 18:48:51


Laboratório de Sistemas Aplicativos do curso de Pós-Gra-
duação Graduação do Departamento de Engenharia de
Transportes da Escola Politécnica da USP.
Esse trabalho teve como objetivo, desenvolver um SIG
para gestão e operação de rodovias. Os dados são tratados
espacialmente, de forma que todas as ocorrências na ro-
dovia pudessem ser visualizadas e localizadas geografica-
mente em mapas. O sistema, chamado de Jornada, possui
O

Mini-Curso
diversas funcionalidades tais como, controle de ocorrências
(acidentes na pista, animais na pista, veículos enguiçados,
etc), atividades de manutenção, conservação e operação de
A 9. Sub-classes de Geo-Objeto. rodovias. Por se tratar de um trabalho acadêmico, o SIG
foi desenvolvido abrangendo uma pequena parte de uma
rodovia, cerca de 15 km de extensão, na qual todas as fun-
Relacionamentos cionalidades pretendidas pelo sistema foram atingidas.
O modelo Geo-OMT propõe tipos de relacionamentos O sistema permite que o usuário possa cadastrar diversas
entre suas classes. As principais relações espaciais entre as informações em relação à rodovia, de acordo com as fun-
classes georrefenciadas são: cionalidades citadas acima. Dessa forma, o usuário poderá
• Disjunto: quando não existe nenhum tipo de conta- consultar informações como, praças de pedágios, passarelas,
to entre as classes relacionadas; viadutos, placas, PMVs (Painéis de Mensagens Variadas),
• Contém: a classe que contém deve ser do tipo Po- acidentes e também estatísticas dos dados, mostrando-os
lígono (Geo-Objeto) ou Polígonos Adjacentes (Geo- geograficamente em mapas.
Campo); Todas as informações alfanuméricas e espaciais estão sen-
• Dentro de: quando uma instância de uma classe do armazenadas no PostgreSQL. A escolha do PostgreSQL
qualquer está dentro (contida na) em uma instância das se deve pelo fato de ser um banco de dados Open Source.
classes do tipo Polígono ou Polígonos Adjacentes; Uma extensão do PostgreSQL foi utilizada para tratar a
• Toca: existe um ponto em comum (x,y) entre as parte das informações espaciais, o PostGIS. O PostGIS
instâncias das classes relacionadas; contem os tipos que definirão os objetos espaciais. Por
• Cobre/Coberto por: a geometria das instâncias de exemplo, para armazenar a informação pontual, o PostGIS
uma classe envolve a geometria das instâncias de outra contém um tipo específico que define um ponto, assim
classe. A classe que cobre é sempre do tipo polígono como um tipo que define um segmento de reta.
(Geo-Objeto); Para a geração/apresentação dos mapas, foi utilizado o
• Sobrepõe: duas instâncias de classes se sobrepõem MapSever. O MapSever é um servidor de mapas que pega
quando há uma interseção de fronteiras; as informações do banco e gera o mapa para visualização.
• Adjacente: utilizado no sentido de vizinhança, ao Como em todo desenvolvimento de sistemas, há a ne-
lado; cessidade de uma modelagem, para que se tenha a noção
• Perto de: utilizado no sentido de proximidade entre de como o sistema se comportará. Neste caso específico,
as instâncias das classes; dividimos a modelagem em duas partes, modelagem de da-
• Acima/Abaixo: será utilizado quando as instân- dos alfanuméricos e modelagem de dados espaciais. Essa
cias das classes relacionadas estiverem em planos divisão foi feita para um melhor entendimento do sistema,
diferentes; sendo que os dois poderiam estar em um mesmo modelo.
• Entre: quando uma instância está posicionada entre Para a modelagem de dados alfanuméricos, foi feito um
duas instâncias das classes; modelo tratando apenas as informações não-espaciais do
• Coincide: utilizado no sentido de igual; sistema. Informações como, ordens de serviço, ocorrências,
• Cruza: existe apenas um ponto P (x,y) comum entre tipos de serviços, tipos de ocorrências, etc, como mostrado
as instâncias; na A10. Esse modelo foi desenvolvido de acordo com o
• Em frente a: utilizado para dar ênfase à posição de padrão UML (Unified Modeling Language) e foi feito atra-
uma instância em relação à outra; vés do software DBDesigner 4. Foi adotado esse software
• À esquerda / à direita: utilizado para dar ênfase à por se tratar de um software Open Source. Para melhor
lateralidade entre as instâncias. entendimento, explicaremos o modelo abaixo através de
um exemplo.
Exemplo de modelo espacial Quando um veículo localizado sobre o trecho da rodovia,
Apresentaremos nesta seção um exemplo de modelagem suportado pelo sistema, encontra-se parado, o usuário do
retirada de um trabalho feito pelos alunos da disciplina sistema (operador), que o identificou através das câmeras

SQL Magazine . 37

[Link] 37 3/6/2005 18:48:55


ao longo da rodovia, cadastra uma ocorrência em tboco_ há maior freqüência de atropelamentos. De posse desses da-
ocorrência. Se após um certo período esse mesmo veículo dos, a empresa administradora da rodovia poderá construir
não continuou seu trajeto pela rodovia, um veículo da em- passarelas com o intuito de reduzir os atropelamentos.
presa administradora da rodovia se desloca até o local para Como o sistema possui todas as placas cadastradas, pe-
verificar se há problemas. Se for constatado que o veículo riodicamente poderá ser feita uma manutenção nas placas
esteja com problemas, ou seja, uma pane mecânica, uma sabendo o local exato de cada placa. O mesmo serviço de
ordem de serviço é cadastrada em tbose_ordem_serviço manutenção vale para as obras de artes, praças de pedá-
descrevendo qual a intervenção necessária para a realização gios e PMVs.
dos procedimentos cabíveis. Neste caso, o pessoal respon-
sável pelo serviço de guincho se desloca-
rá até o local de onde foi gerada a ordem
de serviço retirando o veículo da rodovia.
Notemos que neste exemplo, diversas in-
formações são armazenadas no banco de
dados, como ocorrência, tipo de ocorrên-
cia, veículo envolvido, ordem de serviço e
tipo de ordem de serviço. Para visualizar
espacialmente no sistema essa ocorrência/
ordem de serviço, foi feita uma modela-
gem de dados espacial para o tratamento
dessas informações.
Para a modelagem de dados espacial, fo-
ram consideradas informações como tre-
cho de pista, propriedades lindeiras, nós,
praças de pedágios, obras de arte (viadu-
tos, pontes e passarelas), etc, como mos-
trado na A11. Este modelo foi desen-
volvido no software Microsoft Visio 2000
com o Stencil Geo-OMT. Foi escolhido
esse software, pelo motivo do Stencil A 10. Modelagem de dados alfanuméricos para um sistema rodoviário.
disponível para modelagem de dados de
natureza espacial.
Nesta modelagem, a classe principal do
sistema é a classe Trecho de Pista. Nela,
outras seis classes estão ligadas, como os
Pedágios, Nós, Obras de Arte, Proprie-
dades Lindeiras e Sinalizações Verticais e
Horizontais Pontuais.
Cada uma dessas classes possui os atri-
butos específicos que as descrevem e as
diferenciam uma das outras. Perceba que
as representações pictóricas de cada clas-
se estão baseadas nas classes geo-campo e
geo-objeto, mostradas nas A8 e 9.
Seguindo o exemplo apresentado ante-
riormente, o operador, a caráter de con-
sulta espacial, poderá visualizar no mapa o
local onde foi aberta a ocorrência/ordem
de serviço. Pois quando aberta inicialmen-
te a ocorrência, foi inserido a localização,
quilômetro da rodovia.
Outras consultas importantes podem ser
feitas através dos mapas, como, locais onde A 11. Modelagem de dados espacial para um sistema rodoviário.

38 . 21ª Edição

[Link] 38 3/6/2005 18:49:03


G
Conclusão (simonato@[Link]) é mestrando
em Geoprocessamento no Departamento
Foram apresentados neste texto conceitos sobre mode- de Transportes na Engenharia Civil da
Escola Politécnica da USP, professor na
lagem de dados focando a modelagem de dados espaciais. FAIMI no curso de Sistemas de Informação
Apresentou-se a Geo-OMT, metodologia de modelagem de e Gerente de Tecnologia da GIS Consult.

dados espaciais.
No próximo artigo desta série, finalizaremos nossa discus-
são com o artigo que tratará das utilidades e aplicações dos
O
Thiago Simonato

Mini-Curso
sistemas de informações geográficas. S

G
([Link]@[Link]) é bacharel em
Ciências da Computação pela UNESP
BORGES, Karla A.V. Modelagem de Dados Geográficos: Rio Claro. Atualmente é mestrando em
Geoprocessamento no Departamento de
Uma extensão do modelo OMT para aplicações geo-
Transportes na Engenharia Civil da Escola
gráficas. Belo Horizonte, 1997. 139p. Dissertação (Mes- Politécnica da USP.
trado) – Escola de Governo, Fundação João Pinheiro.

CHEN, P. Modelagem de dados : a abordagem entidade-relaciona-


mento para projeto lógico. Trad. de Cecilia Camargo Bartalotti . Rev.
de Jose Fabio Marinho de Araújo. São Paulo: McGraw-Hill, 1990.
Ronaldo Sales
ELSMARI, R.; NAVATHE, S.B. Fundamentals of Database Systems. The
Benjamin Cummings, 1994.

G
([Link]@[Link]) é bacharel em
FRANK, Andrew U. Spatial concepts, geometric data models, and ge- Ciências da Computação pela UEMS de
ometric data structures. Computer & Geoscience, London. v.18, n.4, Dourados-MS. Atualmente é mestrando
p.409-417, 1992. do curso de Geoprocessamento na área de
Informações Espaciais do Departamento
RODRIGUES, M. A modelagem de dados Espaciais. Fator GIS: A Revista de Engenharia de Transportes da Escola
Politécnica da USP.
do Geoprocessamento, a.2, n.5, p.39-40, 1994.

RUMBAUGH, J. et al. Modelagem e projetos baseados em objetos.


Trad. de Dalton Conde de Alencar. Rio de Janeiro: Campus, 1997.
Vinicius Maeda

SQL Magazine . 39

[Link] 39 3/6/2005 18:49:08


[Link] 40 3/6/2005 18:49:19
[Link] 41 3/6/2005 18:49:21
Normalização
Aprenda a organizar melhor o esquema
de seu banco de dados
Manuel Antônio de Castro Júnior e
Pablo Vieira Florentino

[Link] 42 3/6/2005 18:49:23


o
Armadilhas da modelagem de dados as regras de normalização são aplicadas aos arquivos do
Um esquema de banco de dados relacional deve represen- sistema e, uma vez normalizados, os diferentes esquemas
tar atributos agrupados em tabelas, utilizando-se para isto, resultantes da normalização de cada um destes é integra-
ou do bom senso do projetista da base de dados ou de um da, gerando o esquema relacional do banco de dados do
mapeamento a partir de um esquema conceitual de dados sistema. Nesta etapa, informações comuns a diferentes es-
(ER, OO ou ER Estendido) para o modelo relacional. Estes quemas devem ser identificadas para que seja representada
modelos conceituais permitem ao projetista identificar os somente uma vez.
elementos que formarão o agrupamento lógico das tabelas Por fim, o esquema relacional desenvolvido é analisado e,
com seus respectivos campos. Mesmo seguindo alguns pro- através de regras de transformação reversa, este é converti-
cedimentos para realização do mapeamento entre modelos do em um esquema conceitual. O resultado final da enge-
conceituais e modelo lógico relacional, ainda faz-se necessá- nharia reversa de dados é, então, este esquema conceitual.
rio algum tipo de avaliação formal no sentido de identificar Caso o objetivo seja construir um novo sistema, os diagra-
esquemas de banco de dados mais bem projetados do que mas conceitual e relacional são utilizados para construir o
outros. banco de dados relacional.
Para que esta avaliação possa ser realizada, uma técnica
foi desenvolvida com o intuito de, dado um esquema de Problemas e anomalias
banco de dados, verificá-lo e transformá-lo para, assim, É possível citar como problemas comuns de integridade e
conceber esquemas de tabelas de dados com organização manutenção dos dados:
mais apropriada. Com esta verificação, almeja-se alcançar • Redundância de dados;
um esquema de dados formado por tabelas que possuam • Inconsistência de dados;
as propriedades desejáveis para o projeto relacional como • Anomalia de exclusão;
distribuição uniforme dos dados sem redundâncias, facili- • Anomalia de inclusão;
dade de conservação da integridade de dados e de manu- • Anomalia de modificação.
tenção dos dados. Quando estas propriedades não se fazem
presentes, alguns problemas podem ocorrer no banco de Estes problemas serão descritos e exemplificados através
dados, como a perda da integridade e dificuldade de manu- do banco de dados ilustrado na A1.
tenção dos dados.
Para facilitar o entendimento dos passos a serem segui- Redundância de dados
dos para uma modelagem de dados apropriada, serão abor- Quando um modelo de dados está definido de forma ina-
dados neste artigo alguns aspectos da normalização como: propriada, um dos problemas comuns que podem ocorrer
anomalias e problemas gerados por uma modelagem não é a redundância de dados. A redundância de dados pode
apropriada, como implementar técnicas que corrijam o ser definida como uma replicação não controlada de um
modelo da base de dados; como re-elaborar a modelagem dado em diferentes partes do banco de dados. Por exem-
para aumentar o desempenho de consultas à base de dados. plo, no banco de dados representado na A1, o nome do
Neste artigo também serão apresentados exemplos práti- funcionário é representado pelo campo NOMEFUNC na
cos de modelagens de dados não normalizados, com suas tabela FUNCIONARIO_DEPARTAMENTO e pelo campo
conseqüências negativas, e algumas abordagens práticas de NOMEFUNC na tabela FUNCIONARIO_PROJETO.
aplicação do processo de normalização. Em um banco de dados que apresenta este tipo de pro-
blema, a manutenção dos dados torna-se complexa. Por
Engenharia reversa de dados exemplo, caso se deseje modificar o nome do funcionário
Outro aspecto importante sobre normalização é seu uso “Helder”, é necessário realizar operações de atualização nas
na engenharia reversa de dados. O termo engenharia rever- duas tabelas. Ainda neste exemplo, deve-se atentar para o
sa vem do fato de usar-se como ponto de partida do pro- fato de que na tabela FUNCIONARIO_PROJETO, dois
cesso de engenharia um produto já implementado (modelo registros devem ser modificados. Raciocínio análogo pode
de implementação) para obter sua especificação (modelo ser utilizado para as operações de inserção e exclusão de
conceitual). dados, que também se tornam complexas, já que devem
A engenharia reversa pode ser utilizada com dois intuitos: ser executadas em maior número e em diferentes tabelas.
Apenas construir a especificação do armazenamento de da- Por fim, a redundância de dados implica também em uma
dos; ou facilitar o processo de reengenharia, onde um novo maior alocação de espaço de armazenamento em disco.
sistema será construído para substituir o sistema legado. Um outro exemplo de redundância de dados
O conceito de normalização é vital para este processo, pode ser observado exclusivamente na tabela
pois é o principal meio de detecção e eliminação das redun- FUNCIONARIO_DEPARTAMENTO, na qual as infor-
dâncias de dados presentes nestes arquivos. Neste intuito, mações sobre diversos departamentos, como número,

SQL Magazine . 43

[Link] 43 3/6/2005 18:49:23


nome e gerente do departamento (respectivamen- acontecer. Neste caso, observando a tabela FUNCIONA-
te, os campos NUMERODEPTO, NOMEDEPTO RIO_PROJETO, se todos os funcionários alocados em um
e MATGERENTE) são continuamente repetidas à projeto específico forem excluídos, serão perdidas também
medida que funcionários para um mesmo departamento todas as informações referentes a este projeto. No caso do
são inseridos. O espaço em disco necessário para armazena- projeto “Macaxeira”, se os funcionários “Jabes” e “Helder”
mento aumenta consideravelmente. forem excluídos da base de dados, todos os dados referen-
tes a este projeto deixam de existir.
Inconsistência de dados
Quando a definição da base de dados determina tabe- Anomalias de inclusão
las com grande redundância de dados, um outro proble- Neste tipo de anomalia é possível identificar duas di-
ma com grande probabilidade de acontecer é a incon- ficuldades básicas. Primeiramente, devemos nos preo-
sistência dos dados. Por exemplo, ao se incluir um novo cupar em manter a consistência dos dados. Na tabela
registro de funcionário para o departamento D1 na tabela FUNCIONARIO_PROJETO, por exemplo, ao se incluir
FUNCIONARIO_PROJETO, por acidente, foi digitado o um novo funcionário alocado ao projeto “Macaxeira”, ape-
nome “Lofística”. Numa segunda ocasião, também aciden- sar da base de dados já possuir informações referentes a
talmente, ao inserir um novo registro na tabela, digita-se este projeto para os funcionários “Jabes” e “Helder”, es-
“Logóstica”. À medida que novos registros são inseridos, tas informações devem ser digitadas novamente. Caso não
maior é a possibilidade de um erro desta natureza acon- sejam digitadas corretamente, problemas já ressaltados de
tecer, fazendo com que o mesmo departamento tenha di- inconsistência de dados ocorrerão na base de dados.
ferentes nomes, tornando os dados inconsistentes. Neste A outra dificuldade refere-se ao fato de inserir um
caso, uma consulta à base de dados que envolva estes re- projeto que ainda não possua funcionários alocados
gistros é dificultada, pois o usuário do banco deve saber para o mesmo. Seria necessário inserir valores nulos ou
que estes erros podem ocorrer na base. Assim, a consulta indevidos para os campos referentes a funcionário na
“Quais são os funcionários do departamento de logística?” tabela FUNCIONARIO_PROJETO (MATFUNC e
deve incluir todas as possibilidades de nome, “Logística”, NOMEFUNC). Além deste, um outro problema é gerado:
“Lofística”, “Logóstica” e qualquer outra variação do nome MATFUNC é um dos campos que compõem a chave pri-
do departamento de Logística como restrição de linhas. Em mária desta tabela.
um pior caso, o usuário pode não ter conhecimento sobre
estes erros, realizando uma consulta que retornará menos Anomalias de modificação
informações do que o realmente desejado. Outro ponto problemático é a questão da modificação de
dados. Em modelos mal projetados, como no caso apre-
Anomalias de exclusão sentado, ao se modificar uma determinada informação, por
Dependendo da forma de organização das informações exemplo, nome do departamento, deve-se fazê-lo em mais
nas tabelas, a exclusão indesejada de alguns dados pode de uma linha. Além disso, pode-se levar a base de dados a

FUNCIONARIO_DEPARTAMENTO
MATFUNC NOMEFUNC DATANASC ENDERECOFUNC NUMDEPTO NOMEDEPTO MATGERENTE
F1 Helder 31/08/1978 [Link] do Rio, 27 D1 Logística F5
F2 Antonio 18/12/1985 R. do Retiro, 33 D2 Qualidade F6
F3 Jabes 03/07/1969 R. Vermelha, 21 D1 Logística F5
F4 Amorim 17/01/1966 R. do Peixe, 78 D2 Qualidade F6
F5 Arthur 23/05/1983 Lad. Cabula, 132 D1 Logística F5
F6 Chico 28/02/1977 R. Monteiro, 133 D2 Qualidade F6

FUNCIONARIO_PROJETO
MATFUNC NUMPROJ HORAS NOMEFUNC NOMEPROJ LOCALPROJ
F1 PR3 20 Helder Pé-de-serra Campina Grande, Caruarú, Piritiba
F2 PR1 10 Antonio Sisaleira São Domingos, Sítio Novo, Valente
F3 PR2 30 Jabes Macaxeira Ibicuí, Mossoró
F1 PR2 15 Helder Macaxeira Ibicuí, Mossoró
F4 PR1 25 Amorim Sisaleira São Domingos, Sítio Novo, Valente
F3 PR3 10 Jabes Pé-de-serra Campina Grande, Caruarú, Piritiba

A 1. Banco de dados não-normalizado.

44 . 21ª Edição

[Link] 44 3/6/2005 18:49:28


[Link] 45 3/6/2005 18:49:29
um estado inconsistente caso a atualização não seja corre- MATFUNC: NOMEFUNC é parcialmente dependen-
tamente efetuada, ou seja, não tenha sido atualiza todas as te de MATFUNC, que por sua vez faz parte da cha-
linhas que possuem tal informação. Por exemplo, o nome ve primária da tabela FUNCIONARIO_PROJETO
do departamento de “Qualidade” (campo NOMEDEP da (MATFUNC e NUMEROP).
tabela FUNCIONARIO_DEPARTAMENTO) pode ter • Transitiva: ocorre quando uma coluna depende
seu conteúdo modificado para “Qualidade e Métrica” em não somente da chave primária da tabela, mas tam-
somente um dos registros da tabela. Desta forma, a infor- bém de uma segunda coluna (ou conjunto de colunas)
mação deste registro estará diferindo das demais linhas que da tabela. Um exemplo deste caso ocorre na tabela
se referem ao mesmo departamento, perdendo mais uma FUNCIONARIO_DEPARTAMENTO, onde o campo
vez a consistência dos dados. Assim, é necessário modificar NOMEDEPTO depende funcionalmente do campo
todos os registros que dizem respeito a este departamento NUMDEPTO, que por sua vez depende da chave pri-
em específico a cada atualização para que seja mantida a mária MATFUNC.
integridade dos dados. Isto terminará gerando um proces-
samento adicional para o sistema. Formas Normais
Definida a primeira versão do modelo relacional, é ne-
Normalização cessário analisá-lo procurando identificar casos em que as
Para impedir a ocorrência destes problemas, é possível tabelas não estejam de acordo com as formas normais. A
efetuar uma análise do modelo de dados e aplicar nele re- este processo, baseado na aplicação das formas normais, é
gras de normalização. Estas regras são baseadas, em geral, dado o nome de normalização. Estas formas normais repre-
na identificação de dependências funcionais que podem sentam regras a serem obedecidas para que um modelo de
existir entre os dados. dados e suas tabelas sejam considerados apropriadamente
Estas regras devem ser aplicadas seguindo-se uma determi- projetados. Neste artigo somente serão abordadas as for-
nada ordem, revisando todas as relações existentes no mode- mas normais mais relevantes.
lo lógico de dados. A seguir são apresentados alguns concei-
tos importantes para o entendimento das formas normais. 1ª forma normal
A 1ª forma normal (1FN) está relacionada com a defi-
Dependência funcional nição formal de uma relação: não deve permitir atributos
A dependência funcional é caracterizada pela existência multivalorados, atributos compostos e suas combinações
de campos em uma determinada tabela relacional cuja (tabelas aninhadas). Em nosso primeiro exemplo, na tabe-
ocorrência de valores está associada a valores que são pre- la FUNCIONARIO_PROJETO, é possível observar que
enchidos em outros campos na mesma tabela. Por exem- os projetos acontecem em diferentes locais. Por exem-
plo, na tabela FUNCIONARIO_DEPARTAMENTO, o plo, o projeto “Pé-de-serra” acontece em três localidades:
campo NOMEFUNC é dependente funcional do campo Campina Grande, Caruarú e Piritiba. Isto caracteriza um
MATFUNC, ou seja, existe uma relação de dependência campo (LOCALPROJ) como um atributo multivalora-
nos valores que preenchem estes campos. Sempre que o do – contendo mais do que um valor atômico. Este fato
valor “F1” aparece no campo MATFUNC, o valor “Helder” conflita com os princípios do modelo relacional, que
deve aparecer no campo NOMEFUNC. Outro exemplo é prega que os valores dos atributos de uma tabela sejam
a dependência funcional entre os campos NOMEPROJ e sempre atômicos.
LOCALPROJ. Toda vez que um determinado valor é atri- Para aplicar a 1FN a esta tabela não-normalizada é possí-
buído ao campo NOMEPROJ, pode-se pré-determinar o vel utilizar duas abordagens:
valor a ser atribuído ao campo LOCALPROJ.
Considerando-se a existência de dois campos CX e CY Definir uma tabela única com dados redundantes
em uma determinada tabela do modelo de dados, pode-se Neste caso, ter-se-ia uma tabela com a mesma estrutura,
dizer que CX depende funcionalmente de CY quando, em na qual a coluna LOCALPROJ passa a somente receber va-
todos os registros da tabela, para cada ocorrência de um lores atômicos (ver A2).
valor particular a CX, um valor particular a CY se repete. Com esta modificação, a nova tabela passa para a 1FN. No en-
Para efetuar a normalização de um modelo de dados rela- tanto, teremos um grande aumento da redundância de dados.
cional, dois tipos de dependências funcionais são de extre-
ma relevância: Definir uma nova tabela para cada tabela aninhada
• Parcial: ocorre quando a chave primária é com- Nesta segunda abordagem, uma nova tabela é gerada a
posta, e existe um campo que depende somente de partir da tabela original e, para cada tabela aninhada (por
parte desta chave primária composta. Por exem- exemplo, um campo multivalorado) identificada, deve ser
plo, a dependência existente entre NOMEFUNC e criada uma nova tabela. No caso apresentado, obter-se-ia a

46 . 21ª Edição

[Link] 46 3/6/2005 18:49:30


tabela original reduzida de alguns campos e uma nova tabe-
la LOCAL_PROJETO (ver A3).
Como pode ser observado na A3, a redundância dos da-
N
Definição da 1ª Forma Normal: Uma tabela está na primeira forma
normal (1FN) quando esta não contém aninhamento de tabelas.
dos sobre as localidades dos projetos deixa de existir, fazendo
com que a quantidade de dados sendo acessados seja menor.
Isto permite que o desempenho do sistema seja melhorado. e eliminando desta os campos que passarão para as novas
tabelas. Feito isto, teremos a seguinte configuração:
T

Ferramentas
2ª forma normal FUNCIONARIO_PROJETO (MATFUNC, NUMPROJ, HORAS)
O objetivo da 2ª forma normal (2FN) é identificar de- FUNCIONARIO (MATFUNC, NOMEFUNC)
pendências funcionais parciais de dados e eliminar possíveis PROJETO (NUMPROJ, NOMEPROJ)
redundâncias de informação em tabelas que já estejam na
primeira forma normal. Como foi definido anteriormente, 3ª forma normal
para checar dependências parciais é preciso analisar aque- Juntamente com a 1FN e a 2FN, a 3ª forma normal (3FN)
las tabelas cuja chave primária é composta e verificar se fecha o conjunto das regras normais de maior relevância para
não existe qualquer campo dependente exclusivamente de definição de um modelo de dados livre das anomalias já ci-
parte da chave primária. Como pode ser observado na ta- tadas. A 3FN foca nas dependências funcionais transitivas
bela FUNCIONARIO_PROJETO, em 1FN, existem duas que podem acontecer entre os dados de tabelas que já este-
dependências parciais: jam na segunda forma normal (2FN). Por exemplo, a tabe-
1. MATFUNC  NOMEFUNC; la FUNCIONARIO_DEPARTAMENTO (apresentada na
2. NUMPROJ  NOMEPROJ; A1) está na primeira forma normal, pois não possui atribu-
tos multivalorados e está na segunda forma normal, já que não
Ou seja: existem dependências parciais – neste caso, deve-se atentar
para o fato de a tabela não possuir chave primária composta.
FUNCIONARIO_PROJETO Entretanto, podem ser identificadas as dependências entre
os campos MATFUNC e NUMDEPTO; NUMDEPTO e
(MATFUNC, NUMPROJ, HORAS, NOMEFUNC, NOMEPROJ) NOMEDEPTO; e NUMDEPTO e MATGERENTE, conforme
ilustrado a seguir:

Nesta tabela, somente o campo HORAS depende da cha- FUNCIONARIO_DEPARTAMENTO


ve primária completa (para determinar a quantidade de (MATFUNC ,NOMEFUNC, DATANASC,
horas em que um FUNCIONARIO está alocado em um ENDERECOFUNCNUMDEPTO,NOMEDEPTO, MATGERENTE)
PROJETO, é necessário saber tanto a matrícula do funcio-
nário quanto o número do projeto). Para que esta tabela
seja passada para a 2FN, acabando com as dependências MATFUNC  NUMDEPTO
parciais da chave primária, é necessário separar os dados em NUMDEPTO  NOMEDEPTO
tabelas livres de dependências funcionais. Assim, duas no- NUMDEPTO  MATGERENTE
vas tabelas (FUNCIONARIO e PROJETO) devem ser de-
finidas, redefinindo a tabela FUNCIONARIO_PROJETO Ou seja, para todas as ocorrências de um determinado

MATFUNC NUMEROP HORAS NOMEFUNC NOMEP LOCALPROJ


1234 PR3 5 Helder Pé-de-serra Campina Grande
1234 PR3 5 Helder Pé-de-serra Caruaru
1234 PR3 5 Helder Pé-de-serra Piritiba
4567 PR1 8 Antonio Sisaleira Valente
4567 PR1 8 Antonio Sisaleira Sítio Novo
4567 PR1 8 Antonio Sisaleira São Domingos
8901 PR2 7 Jabes Macaxeira Ibicuí
8901 PR2 7 Jabes Macaxeira Mossoró
0123 PR3 3 Chico Pé-de-serra Campina Grande
0123 PR3 3 Chico Pé-de-serra Piritiba
0123 PR3 3 Chico Pé-de-serra Caruaru
0123 PR3 3 Chico Pé-de-serra Piritiba

A 2. Tabela em 1FN.

SQL Magazine . 47

[Link] 47 3/6/2005 18:49:31


FUNCIONARIO_PROJETO FUNCIONARIO
MATFUNC NUMPROJ HORAS NOMEFUNC NOMEPROJ
(MATFUNC, NOMEFUNC, DATANASC,
F1 PR3 20 Helder Pé-de-serra ENDERECOFUNC,NUMDEPTO)
F2 PR1 10 Antonio Sisaleira DEPARTAMENTO
F3 PR2 30 Jabes Macaxeira (NUMDEPTO,NOMEDEPTO, MATGERENTE)
F1 PR2 15 Helder Macaxeira FUNCIONARIO_PROJETO
F4 PR1 25 Amorim Sisaleira (MATFUNC, NUMPROJ, HORAS)
F3 PR3 10 Jabes Pé-de-serra PROJETO
(NUMPROJ, NOMEPROJ)
LOCAL_PROJETO
CODLOCAL NUMPROJ LOCALPROJ Desnormalização
L1 PR3 Campina Grande
A desnormalização é uma técnica utilizada para maximi-
L2 PR3 Caruarú
zar o desempenho e/ou simplificar a geração de relatórios
L3 PR3 Piritiba
para o usuário final a partir das tabelas da base de dados.
L4 PR1 São Domingos
Este processo se faz necessário por que o modelo de dados
L5 PR1 Sítio Novo
L6 PR1 Valente
normalizado na 3FN pode requerer um maior número de
L7 PR2 Ibicuí junções para processar uma consulta que atenda a um de-
L8 PR2 Mossoró terminado relatório do que se o modelo estivesse na 2FN
ou 1FN. Estas junções extras podem custar muito caro em
A 3. Tabela em 1FN. termos de CPU ou I/O do disco rígido. Assim, a desnor-
malização dá um passo atrás no processo de normalização,
valor no campo MATFUNC, o mesmo valor para o cam- retornando à 2FN ou 1FN, a depender do caso (ler B1).
po NUMEDEPTO se repete. Ainda, para todas as ocor- Antes de aplicá-la, faz-se necessário uma avaliação criterio-
rências de um determinado valor no campo NUMDEPTO, sa. Suponha que no exemplo utilizado até este ponto tenha-se
os mesmo valores para os campos NOMEDEPTO e um contexto definindo que base de dados contem dados de
MATGERENTE se repetem. Por exemplo, toda vez que uma multinacional com filiais nos cinco continentes. A tabela
o valor “F2” ocorrer no campo MATFUNC, o valor “D2” FUNCIONARIO possui uma cardinalidade de dois milhões de
ocorre em NUMDEPTO e toda vez que o valor “D2” registros, ao passo que a tabela DEPARTAMENTO possui 200
ocorrer para o campo NUMDEPTO, ocorrerão os valo- mil registros e a de PROJETO, 100 mil registros. Na matriz da
res “Qualidade” e “F6” para os campos NOMEDEPTO e empresa existe um diretor de RH com idéias um tanto quanto
MATGERENTE, respectivamente. É importante observar excêntricas: deseja um relatório completo de todos os funcio-
que o campo NUMDEPTPO não faz parte da chave pri- nários com seus respectivos projetos e departamentos a cada 15
mária da tabela. dias. No entanto, a geração deste relatório leva muito tempo
Diante deste cenário, onde um dos problemas é a redun- para ser executada, além de sobrecarregar o sistema. Tudo isto
dância de dados, a aplicação da 3FN leva à geração de uma se dá pelo fato das junções entre as tabelas DEPARTAMENTO,
nova tabela DEPARTAMENTO com os dados dos campos FUNCIONARIO, FUNCIONARIO_PROJETO e PROJETO
com dependência indireta entre si. Nesta nova tabela criada, serem necessárias para o relatório.
a chave deverá ser aquele campo que determina o valor dos Outra razão para a desnormalização é simplificar a for-
demais campos. Como se considera o campo NUMDEPTO mulação de consultas ad-hoc. Este tipo de consulta é ge-
o determinador dos demais campos, ele será a chave primá- ralmente formulado por usuários finais com o intuito de
ria da tabela criada. Além disso, a tabela original FUNCIO- gerar relatórios aleatórios do dia-a-dia. No entanto, estes
NARIO_DEPARTAMENTO deve ser modificada, pois ela
deixa de conter dados referentes a funcionários e departa-
mentos, e passa a referir-se somente a funcionários. Deve-
se, assim, modificar seu nome para FUNCIONARIO (a ta-
bela FUNCIONARIO criada pela normalização 2FN da ta-
N
Definição da 2ª Forma Normal: Uma tabela está na segunda forma
normal (2FN) quando, além de estar de acordo com a primeira forma
normal (1FN), não contém dependências parciais entre seus atributos.
bela FUNCIONARIO_PROJETO deve ser substituída por
esta, por ser mais completa). O campo NUMDEPTO deve
permanecer nesta tabela para que sirva como chave estran-
geira que representa relacionamento de FUNCIONARIO
com a nova tabela DEPARTAMENTO. Assim, tem-se uma
N
Definição da 3ª Forma Normal: Uma tabela está na terceira forma
normal (3FN) quando, além de estar de acordo com a segunda forma
nova versão das duas tabelas que formavam o modelo de normal (2FN), não contém dependências transitivas entre seus atributos.
dados inicial, apresentado na listagem a seguir:

48 . 21ª Edição

[Link] 48 3/6/2005 18:49:36


T

Ferramentas

SQL Magazine . 49

[Link] 49 3/6/2005 18:49:39


usuários possuem grande dificuldade ao ter que realizar desempenho do sistema.
junções entre um número significante de tabelas. Para di- Para a maioria dos esquemas e arquivos de dados, a decom-
minuir este problema, os DBA´s geralmente criam um con- posição até a terceira forma normal (3FN) é suficiente para
junto especial de tabelas projetadas justamente para estes obter um esquema de banco de dados relacional satisfatório.
relatórios ad-hoc. Assim, se os dados são somente utilizados Contudo, há na literatura outras formas normais que garan-
para geração de relatórios, e não em ambientes OLTP, evita- tem um esquema relacional ainda menos sujeitos a redundân-
se problemas inerentes a desnormalização (ler B2). cia de dados, as Formas Normais de Boyce-Codd (FNBC) e a
Para aplicar a desnormalização, podem ser usadas algumas Quarta e Quinta formas normais (4FN e 5 FN). Estas formas
técnicas como replicação de dados ou fragmentação verti- normais serão abordadas em uma próxima edição. S
cal. No caso da replicação, é criado um menor número de
tabelas reunindo uma maior quantidade de informações. No
exemplo de relatório para o diretor de RH, pode ser neces- HEUSER, C. A., 2001, Projeto de Banco de Dados. 4ª
sário retroceder no processo de normalização, desnormali- Edição, Porto Alegre, Brasil, Sagra Luzzatto-UFRGS.

zando os dados em somente uma tabela. Neste caso, poderia NAVATHE, S.,ELMASRI, R., 2001, Fundamentals of Da-
tabase Systems. 3ª Edição, Addison-Wesley, EUA.
ser criada uma tabela FUNCIONARIO_PROJETO_DEPT
que reuniria todos os dados necessários a este relatório. Os SILBERSCHATZ, A., KORTH, H., SUDARSHAN, S., 1999, Sistema de
Banco de Dados. 3ª Edição, Nova Iorque, EUA, McGraw-Hill.
dados seriam replicados então nesta tabela, reduzindo uso
DATE, C. J., 2000, Introdução a Sistemas de Bancos de Dados. Tra-
de CPU e I/O em disco. A A4 traz uma possível represen- dução da 7a edição Americana, Rio de Janeiro, Editora Campus.
tação para a tabela desnormalizada.

B 1. Desnormalização
É importante destacar que a desnormalização é usada para

G
atender a requisitos específicos das aplicações que acessam a é bacharel em Ciência da Computação
base de dados. Requisitos futuros podem não se beneficiar das pela UFBA ([Link]) e Mestre em
Engenharia de Sistemas e Computação
decisões de desnormalização. Assim, somente “desnormalize” pela COPPE/UFRJ ([Link]), na área
de banco de dados. Foi diretor-fundador
quando for realmente necessário. da EmpresaJR. de informática Ufba
([Link]), onde desenvolveu

B 2. Consultas aleatórias diversos sistemas web, e analista de


sistemas, prestando serviços para diversas
organizações na área de desenvolvimento
No caso de consultas aleatórias, é possível usar visões para
Pablo Vieira de sistemas. Além disso, é Professor da
facilitar a formulação dos acessos como uma alternativa à Florentino UniGranrio e analista de sistemas do IBGE.

desnormalização. No entanto, neste caso continua-se com o


problema do desempenho.

G
é doutorando da área de banco de dados
Conclusão pela PUC-Rio ([Link]), Mestre
Como pode ser observado, a aplicação da normalização a em Engenharia de Sistemas e Computação
pela COPPE/UFRJ ([Link]) e
um modelo de dados é um passo fundamental para garantir bacharel em Ciência da Computação
pela UFF ([Link]). Além disso, possui
integridade aos dados e estabilidade ao modelo. A utilização experiência como professor de graduação
da UNESA, é professor do curso de
das três primeiras formas normais representa uma das par- Administração e Tuning de Banco de
Dados I e II da Coordenação Central de
tes mais relevante no processo de definição do esquema de Extensão da PUC-Rio ([Link])
dados. No entanto, a depender da situação e utilizando-se Manuel Antonio e analista de sistemas, já tendo trabalhado
de Castro Júnior em diversas empresas como EDS do Brasil,
do bom senso, o projetista do banco de dados pode recorrer Embratel e Interbrain.
a técnicas de desnormalização para satisfazer a questões de

FUNCIONARIO_PROJETO_DEPARTAMENTO
MATFUNC NUMPROJ HORAS NOMEFUNC NOMEPROJ NUMDEPTO NOMEDEPTO MATGERENTE
F1 PR3 20 Helder Pé-de-serra D1 Logística F5
F2 PR1 10 Antonio Sisaleira D2 Qualidade F6
F3 PR2 30 Jabes Macaxeira D1 Logística F5
F1 PR2 15 Helder Macaxeira D1 Logística F5
F4 PR1 25 Amorim Sisaleira D2 Qualidade F6
F3 PR3 10 Jabes Pé-de-serra D1 Logística F5

A 4. Tabela desnormalizada para melhorar o processamento de consultas para relatórios.

50 . 21ª Edição

[Link] 50 3/6/2005 18:49:47


SQL Magazine . 51

[Link] 51 3/6/2005 18:49:49


Usando rules
no PostgreSQL
Gustavo Bartz Guedes

O
sistema de regras (rule system) do PostgreSQL • Tabela: a tabela a qual a rule está associada.
oferece grande flexibilidade quando é necessário • CondiçãoLógica: uma condição que aciona a regra.
implementar determinadas regras de negócio. Não é possível utilizar outras tabelas ou uma função de
Assim como os triggers, as rules, também chamadas de re- agregação.
gras, são acionadas quando um determinado evento ocorrer • ALSO e INSTEAD: indica se o comando que acio-
em uma tabela. Esse evento pode ser: nou a rule e os comandos definidos serão executados
• INSERT; (ALSO) ou se o comando original será substituído
• UPDATE; (INSTEAD).
• DELETE; • Comando: especifica o comando SQL a ser executa-
• SELECT. do por essa rule. Uma rule do tipo SELECT não suporta
mais de um comando. Entretanto, pode-se especificar
As ações resultantes de uma regra podem ser complemen- mais de um comando colocando-os entre parênteses e
tares ou em substituição ao comando que aciona uma regra. separando-os por ponto-e-vírgula para os demais tipos.
Com esse artigo, espera-se que o leitor fique habilitado
para fazer o uso do sistema de rules do PostgreSQL para NEW e OLD
estender e dar mais flexibilidade às suas aplicações. O nome especial de tabela NEW pode ser utilizado para
referenciar os novos valores inseridos (ON INSERT) ou
Create Rule atualizados (ON UPDATE) em uma tabela. Já nome es-
O comando responsável pela criação de uma rule é o pecial OLD contém os valores apagados através de um
CREATE RULE. Sua sintaxe é apresentada abaixo: DELETE ou UPDATE.

CREATE [ OR REPLACE ] RULE NomeDaRule AS ON evento Exemplo


TO Tabela [ WHERE CondiçãoLógica] Vamos criar uma rule de auditoria em uma tabela que
DO [ ALSO | INSTEAD ] { mantém os dados de funcionários de uma empresa, como
NOTHING | comando | ( comando ; comando ... ) } mostra a A1. Nos exemplos utilizaremos as funções
current_user, que retorna o usuário conectado ao ban-
Onde: co de dados, e o current_timestamp, que retorna a data
• NomeDaRule: nome da nova rule. e a hora atual.
• Evento: indica qual evento está associado à regra. O primeiro passo é criar uma tabela de auditoria que será
Os eventos podem ser: INSERT, UPDATE, DELETE e atualizada toda vez que o salário de um funcionário for mo-
SELECT. Somente um evento pode ser definido. dificado (C1). Essa tabela terá o número do funcionário

52 19ª Edição

[Link] 52 3/6/2005 18:50:00


(n_emp), o novo salário Caso o comando de atualização (C3) seja executado, com
(novo_sal), o usuário que essa nova regra, a tabela emp não será afetada, mas a tenta-
efetuou a alteração (usu- tiva de fazê-lo será gravada na tabela emp_log.
ario) e a data mais a hora
em que a alteração ocorreu Ignorando comandos
(datahora). Para ignorar o comando original e não definir ações com-
O comando para criação plementares, pode-se utilizar a palavra-chave NOTHING
K

SGBD
da rule é apresentado na em conjunto com o INSTEAD. A C5 mostra o comando
A 1. Estrutura da tabela de emp. C2. da C2 reescrito.
Note que a parte em Caso um comando acione essa regra, ele será ignorado
destaque na C2 nos mostra que essa regra só será acionada sem gerar qualquer tipo de erro para o usuário, e as tabelas
quando o salário novo ([Link]) e o salário antigo (OLD. emp e emp_log não terão qualquer alteração.
sal) forem diferentes, indicando portanto, uma alteração no
valor da coluna sal, que contém o salário dos funcionários. Rules e views
O comando da C3 atualiza o salário de um determina- As views são muito utilizadas para gravar no banco de da-
do funcionário e aciona a regra log_emp_rule inserindo um dos uma consulta em uma ou mais tabelas para a visualiza-
novo registro na tabela de auditoria. ção de dados. No PostgreSQL, as views podem ser imple-
Um detalhe importante é que caso exista mais de uma mentadas utilizando o sistema de rules.
rule em uma tabela, a ordem de acionamento segue a or- Apesar de não ser prático, a view criada na C6 também
dem alfabética do nome das rules. poderia ser criada com os dois passos apresentados na C7,
que são exatamente as operações internas realizadas pelo
Substituindo comandos PostgreSQL quando criamos uma view.
Para substituir um comando original por aqueles defi-
nidos na ação de uma rule, basta utilizar a palavra-chave Views atualizáveis
INSTEAD. A C4 mostra o comando da C2 reescrito. Geralmente as views são utilizadas apenas para visuali-
Essa nova regra define que o comando original de atuali- zação de dados, não permitindo a execução de comandos
zação que acionar a regra será ignorado, executando apenas como INSERT, UPDATE e DELETE. Entretanto, o recurso
o comando complementar definido. de views atualizáveis permite que essas modificações sejam
C 1. Tabela. refletidas na tabela a qual uma view está associada. A C8
mostra a implementação de uma view atualizável baseada
CREATE TABLE emp_log (
na view da C6.
n_emp int,
novo_sal decimal(10,2),
O comando de inserção que for aplicado sobre a view será
usuario varchar(50), redirecionado para a tabela emp.
datahora timestamp);
C 5. Ignorando comandos.

C 2. Criação de uma rule. CREATE RULE log_emp_rule AS ON UPDATE TO emp


WHERE [Link] <> [Link]
CREATE RULE log_emp_rule AS ON UPDATE TO emp DO INSTEAD NOTHING;
WHERE [Link] <> [Link]
DO INSERT INTO emp_log
C 6. Criação de uma view.
VALUES (NEW.n_emp, [Link],
current_user, current_timestamp); CREATE VIEW empv AS SELECT nome_emp, n_emp FROM emp;

C 3. Acionando a rule log_emp_rule. C 7. Representação interna da criação de uma view.


UPDATE emp SET sal = sal * 1.1 CREATE TABLE empv (nome_emp varchar(30), n_emp int);
WHERE n_emp = 110; CREATE RULE “_RETURN” AS ON SELECT TO empv DO INSTEAD
SELECT nome_emp, n_emp FROM emp;

C 4. Substituindo comandos.
C 8. Implementação de view atualizável.
CREATE RULE log_emp_rule AS ON UPDATE TO emp
WHERE [Link] <> [Link] CREATE RULE empv_rule AS ON INSERT TO empv
DO INSTEAD INSERT INTO emp_log VALUES (NEW.n_emp, DO INSTEAD INSERT INTO emp (n_emp, nome_emp, sal)
[Link], current_user, current_timestamp); VALUES (NEW.n_emp, NEW.nome_emp, [Link]);

SQL Magazine . 53

[Link] 53 3/6/2005 18:50:10


Apagando uma rule Tabelas de sistema sobre rules
Não é possível desabilitar uma rule, sendo somente possí- A view pg_rules contém informações das rules (D1).
vel apagá-la através do comando DROP RULE. Existe também a tabela pg_rewrite que possui algumas in-
formações mais detalhadas.
DROP RULE NomeDaRule ON Tabela
Nome Tipo Descrição
Schema que contém a tabela onde a
Onde: schemaname Name
regra se encontra.
• NomeDaRule: nome da rule que será apagada. Nome da tabela onde a regra se
tablename Name
• Tabela: nome da tabela onde a rule se encontra. encontra.
rulename Name Nome da regra.

Triggers versus rules definition Text Código fonte da regra.

Apesar de desempenharem papéis semelhantes, existem D 1. Campos da view pg_rules.


diferenças fundamentais entre rules e triggers. Portanto, é
necessário escolher corretamente quando utilizar cada uma. Conclusão
Quando uma rule é acionada, o comando que a acionou Apresentamos neste artigo um recurso pouco conhe-
é reescrito ou um (ou mais) novo comando é gerado para cido e, por isto, raramente utilizado do banco de dados
executar os procedimentos definidos. A chamada da rule PostgreSQL. Por se tratar de um recurso simples de imple-
acontece antes da execução do comando original. Devido a mentar, uma vez que somente código SQL é utilizado, as
esse comportamento, uma rule é acionada uma única vez, rules são um complemento ao uso de triggers.
ao contrário dos triggers que são executados para cada li- As rules podem criar novas possibilidades de modificar
nha afetada pelo comando que o disparou. Podemos pen- o comportamento de um comando SQL e também possi-
sar em triggers como uma reação à modificação dos dados bilitar o uso de funcionalidades novas sobre views, como
de uma tabela. Normalmente esta reação é utilizada para atualização, remoção e inserção. S
implementar regras de negócio mais complexas. Vale lem-
brar que a funcionalidade rule é um recurso específico do
PostgreSQL, dificultando o porte para outros bancos de
dados.

G
(contato@[Link]) é tecnólogo
Outra diferença está relacionada com a diversidade de em informática pela Unicamp. Trabalha
como consultor especialista em banco
comandos suportados. Em rules, só são permitidos coman- de dados e desenvolvimento de software
dos SQL, ao contrário dos triggers que possibilitam o uso na Dextra Sistemas ([Link]),
uma empresa especializada em soluções
das mais diversas linguagens procedurais suportadas pelo corporativas utilizando software livre. Entre
PostgreSQL, como: PL/pgSQL, C, Perl. Como regra geral, outros clientes com o PostgreSQL, a Dextra
Sistemas presta serviços em PostgreSQL
os triggers são indicados para as situações onde regras de
Gustavo para o Metrô-SP e SERPRO.
negócio devem ser acionadas devido a certas modificações Bartz Guedes
de dados.

54 . 21ª Edição

[Link] 54 3/6/2005 18:50:20


Backups com SQL
Server 2000 Parte I:
Modelos de Recovery
Paulo Ribeiro

N
ão se pode falar em backup sem discutir antes os um exemplo clássico: você foi até um caixa-eletrônico para
modelos de recovery. Por isso a matéria “Backups transferir R$ 500,00 de sua conta-corrente para a poupan-
com SQL Server 2000” foi dividida em duas par- ça. A operação foi concluída, mas você percebe no extrato
tes. Na primeira parte exploraremos a arquitetura do log emitido após a operação que o dinheiro saiu da conta-cor-
de transações e modelos para recuperação de dados. Já na rente, mas não entrou em sua conta-poupança. Para im-
segunda, o foco será os tipos de backup existentes nessa pedir esse tipo de situação, os SGBD´s trabalham com o
plataforma. Boa leitura! que chamamos de log de transações. No exemplo anterior,
uma transação seria aberta antes da retirada de R$ 500,00
Recovery? O que é isso? da conta-corrente, sendo fechada somente após a contra-
Recovery quer dizer recuperação, restauração. O termo partida na conta-poupança. Se acontecer qualquer “desvio”
recovery é utilizado para especificar o retorno à operação entre a saída da conta-corrente e a entrada na poupança, a
normal depois de uma falha (o servidor “caiu”, ocorreu transação não é concluída e os R$ 500,00 retornam para a
crash na unidade de disco onde está localizado o database, conta-corrente do usuário.
etc). Dependendo da gravidade da situação, o processo de A função do log data file é dar suporte às transações:
recovery pode envolver a restauração de um backup. quando um comando T-SQL é executado para atualizar
Os modelos de recovery ou recovery models informam um dado, a modificação não é propagada nesse momento
para o engine do SQL Server 2000 como tratar o log de para o arquivo de dados. A alteração acontece primeira-
transações com relação ao processo de log de alguns co- mente em memória e no log de transações; em um segundo
mandos, limpeza das transações já confirmadas no database momento, todo o lote de páginas alteradas em memória
e mecanismos de backup. – conhecidas por dirty pages – serão transferidas para o dis-
O modelo de recovery estipula também o grau de risco co em um processo conhecido por checkpoint. Na página
relativo à perda de dados inerente a um processo de res- em memória fica registrada a posição após a alteração. No
tauração de database. Para que o risco seja pequeno, todas log de transações, além da posição final (após a alteração),
as transações registradas no log devem ser “backupeadas” e ficarão também registrados controles que permitem rever-
logadas ao nível máximo de detalhamento. ter a modificação: em inserções e deleções, toda a linha
A recuperação de um database - assim como os modelos incluída/deletada ficará registrada. Nas atualizações ficarão
de recovery - estão intimamente relacionados com o fun- registradas as posições da linha antes e após a alteração.
cionamento do log de transações, nosso próximo tópico. Dessa forma, se um servidor que se encontra em produção
“cair”, o processo de recovery automático – detalhado no
Para que serve e como funciona o log de tópico O Processo de Recovery – se encarregará da atuali-
transações zação do arquivo de dados através da leitura das transações
Vamos exemplificar o funcionamento do log através de pendentes no log.

SQL Magazine . 55

[Link] 55 3/6/2005 18:50:25


O log de transações até a versão 6.5 era representado por o serviço do SQL Server 2000 sem executar o checkpoint nos
uma tabela de sistema chamada SYSLOGS, criada na própria databases, o que pode acarretar em um maior tempo de recovery
área de dados do database nos limites do arquivo .MDF. A par- quando o serviço for reinicializado.
tir da versão 7.0, o log de transações passou a ser gravado em
outro arquivo, separando-se definitivamente da área de dados. Para executar um “checkpoint manual”, execute o se-
Pode-se pensar no arquivo de log como sendo uma extensa fila guinte comando T-SQL:
de transações, identificadas por um código seqüencial conheci-
do por LSN, acrônimo de Log Sequence Number (ler B1). checkpoint
-----------------------------------------------------
B 1. Arquivo de log The command(s) completed successfully.
Por questões de segurança, é interessante criar o log de
transações (arquivo .LDF) em uma unidade de disco diferente Como o processo de execução do checkpoint está associa-
daquela destinada ao arquivo de dados (arquivo .MDF). Utilizar do à gravação em disco, a situação ideal seria acumular um
outro disco para o log torna possível a execução do backup grande volume de modificações e, se possível, providenciar
do log em caso de crash no disco de dados, fato que se torna a atualização em horários de baixa utilização do servidor.
inviável quando dados e log são gravados na mesma unidade. Poderíamos pensar, por exemplo, em acumular todas as al-
“Backupear” o log após um crash torna viável a reconstrução terações durante o dia e executar o checkpoint durante a
do database sem que sejam registradas perdas históricas – a madrugada. O inconveniente desse raciocínio é que, se o
transação de fato ocorreu, existia em memória e no log de servidor cair, o tempo necessário para efetivar as transações
transações mas não havia sido aplicada no arquivo de dados. existentes no arquivo log após o reboot seria excessivamen-
Se o crash acontecesse nesse momento e o log de transações te alto, e inviável num ambiente de produção.
estivesse no mesmo disco, a transação ficaria perdida no tempo,
acarretando perda de integridade na posição a ser restaurada. O processo de recovery
Se um servidor fosse desligado de maneira não conven-
O processo de checkpoint cional – queda de energia, por exemplo – o que acontece-
A função do checkpoint é atualizar o arquivo de dados do ria com as transações que estavam em andamento? E as
database a partir das páginas modificadas em memória. Esse transações que haviam sido “comitadas” no log e em me-
movimento é periódico e automático, sendo determinado pelo mória, mas que ainda não haviam sido transferidas para o
volume de alterações e não por intervalos regulares de tempo. database pelo processo de checkpoint? Sempre que o ser-
Quando existe pouca atividade do banco, os checkpoints são viço do MSSQLSERVER é iniciado, segue-se um processo
mais espaçados. À medida que a atividade do servidor aumen- de recuperação em todos databases conhecido por recovery
ta, os checkpoints são executados em intervalos menores. automático. Esse processo irá varrer o log de transações
A cada execução do checkpoint, o arquivo de log é mar- de cada database à procura de uma marca sinalizando o
cado para sinalizar que as transações até aquele ponto já último checkpoint executado. Todas as transações identi-
foram propagadas para o arquivo de dados. No próximo ficadas à partir desse LSN serão lidas e avaliadas: transa-
checkpoint, somente as transações à partir dessa marca ções finalizadas (que apresentam COMMIT) serão copia-
– cujas páginas alteradas encontram-se em memória - se- das do log de transações para o arquivo de dados, em um
rão efevidadas. O checkpoint pode ser executado manual- movimento conhecido por ROLLFORWARD. As transa-
mente por usuários pertencentes aos server roles SysAdmin ções que estavam em andamento e ainda não haviam sido
e db_BackupOperator ou ao database role db_Owner. O concluídas no momento da queda do servidor retornarão
checkpoint também é executado automaticamente nas se- ao estado anterior à modificação, em um movimento co-
guintes situações: nhecido por ROLLBACK. Após a reinicialização do servi-
• Quando uma configuração do database é alterada ço MSSQLSERVER, um database tornar-se-á operacional
com o comando ALTER DATABASE; somente após a realização bem-sucedida do processo de
• Quando o serviço do SQL Server 2000 é “stopado” recovery.
através do SQL Server Service Manager, Enterprise O volume de transações atualizadas a cada checkpoint
Manager, comando T-SQL SHUTDOWN (ler B2), deve ser tal que não onere o processo de recovery nem os
comando Windows NT NET STOP MSSQLSERVER recursos existentes no servidor. O número de transações
ou através do botão “Stop” em Serviços no Painel de que desencadeia um checkpoint é calculado automatica-
Controle do Windows NT. mente, mas você pode determinar um limite máximo em
minutos que o SQL Server 2000 pode esperar para realizar
B 2. Comando T-SQL ShutDown o recovery. O padrão é deixar essa tarefa a cargo do SQL
O comando T-SQL SHUTDOWN WITH NOWAIT irá interromper Server 2000, mas você pode configurá-la via sp_Configure

56 . 21ª Edição

[Link] 56 3/6/2005 18:50:27


na opção recovery interval. Vamos conhecer algumas opções por armazenar imagens dos dados antes e após as altera-
para configurar o valor da opção recovery interval: ções, cresce de maneira vertiginosa ocupando precioso es-
• para verificar o status da configuração recovery paço em disco. Em um determinado momento deverá ser
interval no Query Analyzer, ver C1. “descartado”, sob pena de comprometer a capacidade de
• para configurar o recovery interval em 1 minuto, ver C2. armazenamento. Fica em aberto uma pergunda:
• ou no Enterprise Manager, ver A1.
O que fazer para eliminar as transações existentes no log
K

SGBD
Na prática, o que aconteceria se configurássemos o cuja imagem já foi atualizada no database?
recovery interval em dois minutos? Esse tempo seria uti-
lizado pelo SQL Server 2000 para estabelecer um volu-
me de transações tal que, na reinicialização do serviço
MSSQLSERVER, seriam necessários no máximo dois
minutos para deixar o database operacional, efetivando
as transações pendentes no log. O recovery interval, por-
tanto, atua indiretamente na freqüência de execução do
checkpoint, limitando o volume de transações .
Toda operação de inserção, atualização e exclusão de da-
dos possuirá uma imagem no log de transações. Em uma
inserção, o log irá registrar a linha que foi inserida; já na
exclusão, toda a linha que foi deletada. Em atualizações, se-
rão registradas as imagens antes e depois da alteração. Não
é difícil prever que o arquivo de log cresce muito rápido, e
precisa de uma maneira eficiente de limpeza.

Escolhendo o modelo de recovery


Como vimos até aqui, transações são executadas inicial-
mente em memória e no log de transações. Em um segundo
momento, através do processo de checkpoint ou recovery,
serão efetivadas nos arquivos de dados. O log de transações, A 1. Alterando o recovery interval através do Enterprise Manager.

C 1. Verificando a configuração de recovery no servidor SQL Server 2000.

exec sp_configure ‘recovery interval’


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

name minimum maximum config_value run_value


----------------------------------- ------------- ------------- ----------------- ----------
recovery interval (min) 0 32767 0 0

C 2. Alterando o recovery interval.

exec sp_configure ‘recovery interval’,1


reconfigure with override
exec sp_configure ‘recovery interval’

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

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Configuration option ‘recovery interval (min)’ changed from 0 to 1. Run the RECONFIGURE statement to install.

name minimum maximum config_value run_value


----------------------------------- ------------- ------------- ------------ ----------
recovery interval (min) 0 32767 1 1

SQL Magazine . 57

[Link] 57 3/6/2005 18:50:28


O log de um database deve funcionar mais ou menos como porque não geram atividades do log no momento
um rascunho, que é utilizado por algum tempo e depois da operação. Todavia, no momento da execução do
descartado. O log da transação precisa existir pelo menos backup de log, todas as extents modificadas pelo
enquanto o checkpoint não for executado, após isso poderia comando serão acrescentadas, gerando um arquivo
ser “limpo”, liberando precioso espaço em disco. de backup de log consideravelmente maior.
A porção ativa de um log – aquela que identifica as tran-
sações que ainda não foram efetivadas no database – nunca B 3. Descrição resumida dos comandos com log
pode ser truncada. A limpeza, como vimos anteriormente, reduzido no modelo Bulk Logged
deverá ocorrer somente para transações antigas, já atualiza- SELECT INTO: cria uma tabela a partir dos dados extraídos
das no database. A maneira como o log é truncado (limpo) de um comando select;
está intimamente ligada ao modelo de recovery escolhido WRITETEXT/UPDATETEXT: utilizados na manipulação de
para o database, e pode ser efetuada de duas maneiras: colunas image / text;
• Poderíamos determinar que o log de transações fos- BULK INSERT: versão em T-SQL do utilitário BCP, utilizado
se limpo após cada checkpoint. Esse tipo de recovery para importar/exportar dados mantidos em arquivos-texto para
é chamado de Simple e não oferece suporte a backup tabelas em SQL Server 2000;
de log, porque “elimina” as transações já processadas CREATE INDEX: utilizado para criação de índices.
pelo checkpoint. Em caso de uma falha que implique na
utilização de backup, o último backup completo (full) Na criação de um database, o modelo de recovery adotado
deverá ser restaurado. será o mesmo definido para o database model, cuja estrutura
• Uma das grandes vantagens de um sistema de ban- e objetos servem de referência para novos databases. Com o
co de dados transacional é o backup de log. Esse tipo auxílio da função DATABASEPROPERTYEX, vamos verifi-
de backup é extremamente eficiente e rápido, porque car o modelo de recovery do database model (ver C3).
copia somente as modificações que ocorreram num de- Criaremos agora o database DB_TESTE e, em seguida,
terminado intervalo de tempo. Assim, um database que confirmaremos o modelo de recovery SIMPLE transporta-
possui backups de log pode ser reconstruído de maneira do do database MODEL (ver C4).
incremental, aplicando-se o backup full depois de suces-
sivas restaurações dos backups de log até o momento em C 3. Utilizando a função DATABASEPROPERTIEX para verificar o modelo
de recovery.
que ocorreu a falha. Existem dois tipos de recovery que
dão suporte a backup de log: o Bulk_Logged e o Full: select DatabasePropertyEX(‘model’,’recovery’)
• Full Recovery é um método de recuperação que
provê o menor risco de perda de dados em caso de -----------------------------------------------------

falhas. Esse método utiliza backups de database SIMPLE

e log para garantir a recuperação do database até


(1 row(s) affected)
data-points específicos estipulados pelo adminis-
trador. Esse modelo dá suporte integral a todos os
tipos de operação existentes em um database.
• Alguns comandos T-SQL (SELECT INTO, C 4. Criando um database e confirmando o modelo de recovery
“importado” do database MODEL.
WRITETEXT, UPDATETEXT, BULK INSERT)
além do utilitário de linha de comando BCP (ler create database db_teste

B3), são responsáveis por intensa atividade do log select recovery_model=DatabasePropertyEX(‘db_


teste’,’recovery’)
porque estão associados a grandes movimentações
-----------------------------------------------------
de dados. No modelo Bulk Logged, essas operações
são “minimamente logadas”: ao invés de registrar o
The CREATE DATABASE process is allocating 0.63 MB on
que acontece linha-a-linha, esse modelo irá registrar
disk ‘db_teste’.
somente as extents que sofreram alteração, copian-
The CREATE DATABASE process is allocating 0.49 MB on
do-as no final do backup de log. Assim, se um pro- disk ‘db_teste_log’.
cesso de BCP foi responsável pela inserção de 3.000
linhas em uma tabela, não serão registradas 3.000 li- recovery_model
nhas no arquivo de log. Ao invés disso, as extents al- ---------------
teradas pela execução do comando serão “copiadas” SIMPLE
no momento da execução do backup de log. Perce-
bemos então que quando utilizamos esse modelo, (1 row(s) affected)
essas operações em massa ficam mais eficientes

58 . 21ª Edição

[Link] 58 3/6/2005 18:50:31


Para alterar o modelo de recovery do database DB_TESTE: transações que ocorreram desde o último backup do
• Através do comando T-SQL ALTER DATABASE, faça: database até o momento da falha serão perdidas. Se
essa questão não for um empecilho, o modelo Simple
ALTER DATABASE db_Teste SET RECOVERY FULL pode ser adotado;
• Apesar de não possuir o recurso de backup de log, o
• Com o auxílio do Enterprise Manager: selecione o modelo Simple pode ser adotado se você conseguir re-
database e, com o botão direito do mouse acionado, es- construir as transações ocorridas desde o último backup
colha Properties. Selecione a guia Options e escolha o de database até o momento da falha a partir de outras
K

SGBD
modelo em Recovery (ver A2). fontes (acesso a outro servidor que mantenha uma có-
pia das transações, reconstrução das transações a partir
Confirmando o recovery automático no do acesso a outras tabelas, etc).
restart do serviço MSSQLServer
Durante a inicialização do serviço MSSQLServer, os Selecione o modelo Bulk Logged para recovery de um
databases são submetidos a um processo de recovery auto- database se ...
mático. Um database só estará apto para utilização se o pro- • Os dados são críticos,
cesso de recovery for concluído com sucesso, caso contrário • Você realiza operações de bulk load (BCP, SELECT
o status SUSPECT irá impedir sua utilização. INTO, etc) durante horários de baixa utilização do
Confirmar se o recovery dos databases foi concluído com
êxito é um bom hábito. Essa prática deve ser executada
sempre que o serviço MSSQLServer for reiniciado. Exis-
tem duas maneiras para verificação do log de erros do SQL
Server 2000: Enterprise Manager (ver A3) ou através da
execução da procedure SP_READERRORLOG (ver C5).
Na A3 merecem destaque:
• Linha (1) - 2 transactions rolled forward in database
northwind (20): informa que existiam duas transações
comitadas no log que ainda não haviam sido aplicadas
no database. O recovery automático – acionado na ini-
cialização – se encarregou de propagar as transações
para o database;
• Linha (2) - 1 transactions rolled back in database
northwind (20): indica que uma transação registrada
no log ainda estava em andamento no momento da que-
da do servidor. Transações em aberto (sem COMMIT)
não são propagadas para o database;
• Linha (3) - Recovering is checkpointing database A 2. Alterando o modelo de recovery no Enterprise Manager.
northwind (20): após os movimentos de rollback / roll-
forward, o processo de recovery automá-
tico efetua um checkpoint no database,
finalizando sua recuperação;
• Linha (4) - Recovery Complete: indica
o término do processo de recovery para
todos os databases desse servidor.

Optando por um modelo de


recovery
Selecione o modelo Simple para recovery de
um database se...
• Os dados não são críticos;
• O modelo Simple (que corresponde a
Truncate Log on Checkpoint na versão 7.0)
não permite backup de log, por isso exi-
ge restore do último backup de database A 3. Verificação do estado de recovery dos databases através da leitura do log (Enterprise
em caso de falha. Nessa situação, todas as Manager).

SQL Magazine . 59

[Link] 59 3/6/2005 18:50:32


C 5. Verificação do estado de recovery dos databases através da leitura do log (proc.SP_READERRORLOG).

exec sp_readerrorlog
----------------------------------------------------------------------------------------------------

ERRORLOG
----------------------------------------------------------------------------------------------------
2005-04-20 18:28:59.96 server Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 2)
2005-04-20 18:28:59.96 server Copyright (C) 1988-2002 Microsoft Corporation.
2005-04-20 18:28:59.96 server All rights reserved.
2005-04-20 18:28:59.96 server Server Process ID is 3748.
2005-04-20 18:28:59.96 server Logging SQL Server messages in file
‘C:\Arquivos de programas\Microsoft SQL Server\MSSQL\LOG\ERRORLOG’.
2005-04-20 18:28:59.98 server SQL Server is starting at priority class ‘normal’(1 CPU detected).

2005-04-20 18:29:00.01 server SQL Server configured for thread mode processing.

2005-04-20 18:29:00.03 server Using dynamic lock allocation. [500] Lock Blocks, [1000] Lock Owner
2005-04-20 18:29:00.04 spid3 Starting up database ‘master’.

2005-04-20 18:29:00.35 spid3 0 transactions rolled back in database ‘master’ (1).

2005-04-20 18:29:00.37 spid3 Recovery is checkpointing database ‘master’ (1)

2005-04-20 18:29:00.49 server Using ‘[Link]’ version ‘8.0.766’.

database, descartando a utilização de recovery point-in- Conclusão


time (ler B4) durante vigência dessas operações; A escolha do modelo de recovery adequado para as suas
• Você quer agilidade para as operações de bulk load. necessidades é o primeiro passo para criar uma política
eficiente de backup & recovery. O segundo passo – como
B 4. Point-in-time recovery veremos na próxima edição – é a execução do backup pro-
Point-in-time é uma feature que permite a recuperação “parcial” priamente dito. Até breve! S
de um backup de log: serão restauradas todas as transações que
ocorreram até uma marca de tempo especificada no comando de
restauração.

Selecione o modelo Full para recovery de um database

G
(psribeiro@[Link]) é Microsoft
se ... MCDBA e membro da equipe editorial da
SQL Magazine. Atua como DBA-Sênior em
• Os dados são críticos e nenhuma transação pode ser SQL Server na Livraria Saraiva S/A.
perdida;
• Você realiza operações de bulk load (BCP, SELECT
INTO, etc) durante horários de produção e, em caso
de falha que envolva um processo de restauração não
quer descartar a possibilidade de utilizar recuperações Paulo Ribeiro

parciais (point-in-time recovery).

60 . 21ª Edição

[Link] 60 3/6/2005 18:50:39


[Link] 61 3/6/2005 18:50:41
Perigos e
armadilhas do
particionamento
Parte 2
Arup Nanda

SQL Magaz
Perig os e ar
ine 19
m adilhas do
particionam
ento – Part
e1
V
condição, então a segunda coluna não é avaliada. Porém, se

D
ando continuidade à nossa discussão sobre par- o primeiro valor da coluna não for totalmente satisfatório, a
ticionamento, serão apresentadas nesta matéria próxima coluna é considerada. Isto será mais bem entendi-
mais algumas funcionalidades e também, para do utilizando-se um exemplo. Considere C1.
tornar este artigo realmente relevante para o dia-a-dia, abor- Quando uma linha é inserida, poderíamos imaginar que:
darei algumas armadilhas e algumas dicas na utilização deste • se ambos os valores de col1 e col2 são menores que
recurso fantástico mas que deve ser utilizado com cautela. 101, então vão para a partição P1;
• se os valores são menores que 201, porém maiores
Chaves de partição multi-colunadas ou igual a 101, vão para a partição P2;
(Multi-Column Partition Keys) • caso contrário, vão para a partição PM.
A maioria dos documentos, artigos, livros e outras publi-
cações, falam sobre o uso de uma única coluna para chave Vamos ver o que ocorre na prática agora. Veja na C2 todas
de particionamento, mas que tal usar duas ou mais colunas? as linhas da tabela.
Definitivamente é possível, mas em tal caso, como deverí- Em quais partições os registros serão inseridos? Confira-
amos proceder? mos na C3.
Muitas pessoas têm a impressão de que especificando
mais de uma coluna como chave de particionamento, cria- C 1. Criação da tabela exemplo.
se uma tabela particionada multidimensional. Por exemplo, create table ptab1
se você tem uma tabela chamada “faixa de empregado” col1 number(10),
particionada em (DEPTNO, ZIPCODE), isso significa que col2 number(10),
são avaliados os valores de ambas as colunas quando se está col3 varchar2(20)

decidindo sobre a colocação da linha em uma partição? )


partition by range (col1, col2)
Infelizmente, a resposta é não.
(
A segunda coluna na chave de particionamento só é usada
partition p1 values less than (101, 101),
em alguns casos especiais. Ambos os valores não precisam partition p2 values less than (201, 201)
ser satisfeitos para uma linha ir para uma partição espe- )
cífica. A primeira coluna é avaliada antes; se satisfizer à

62 19ª Edição

[Link] 62 3/6/2005 18:50:49


C 2. Registros da tabela exemplo.
O registro REC1 está na partição P1, como esperado.
Mas REC3 deveria estar na partição P1? O valor da coluna select * from ptab1;

COL1, que é 100, é menor que 101 e então satisfaz a con- COL1 COL2 COL3
---------- ---------- ------
dição. Porém COL2 tem 102, e é maior que 101, o valor
100 100 rec1
de limite de COL2. Como é que COL2 foi para a partição
102 102 rec2
P1? A razão é bastante simples: P1 é a primeira partição, 100 102 rec3 T

o
o valor é avaliado pela primeira coluna (COL1) e satisfaz. 102 100 rec4

Ferramentas
Dessa forma, o valor da coluna COL2 não é nem mesmo 101 100 rec5
avaliado. O registro vai para P1, embora o critério de COL2 101 101 rec6
não seja satisfeito. 101 102 rec7
201 100 rec8
Assim, se a segunda coluna (COL2) não é considerada em
201 101 rec9
alguns casos, em que situações ela seria utilizada? Conside-
201 102 rec10
re o registro REC5 no qual o valor de COL1 é 101 (para a
chave de particionamento é um valor que não satisfaz a pri-
meira coluna). Neste caso é considerada a segunda coluna. C 3. Registros inseridos na partição p1.
Como o valor de COL2 é 100, menor que o valor de limite select * from ptab1 partition (p1);
de COL2 na chave de particionamento (101), então, entra COL1 COL2 COL3

na partição P1. Veja na C4 os registros na partição P2. ---------- ---------- ------


100 100 rec1
Os registros REC2, REC4 e REC7 satisfazem as colunas e
100 102 rec3
são, como esperado, inseridos na partição P2. Porém, para
101 100 rec5
REC6, o valor de COL1 é 101, que é o valor limite para
a primeira coluna da chave de particionamento. Assim,
C 4. Registros inseridos na partição p2.
REC6 cai na consideração especial para chaves de particio-
namento multi-colunados. Pelo fato do valor 101 de COL2 select * from ptab1 partition (p2);

ser maior que o valor limite da coluna COL2 da partição COL1 COL2 COL3
---------- ---------- -----
P1 (101 - consideremos que, na criação da partição, foi
102 102 rec2
utilizada a condição less than), as linhas foram para a
102 100 rec4
partição P2. 101 101 rec6
Pela mesma lógica, para os registros REC8, REC9 e REC10 101 102 rec7
o valor de COL1 é 201. Este é exatamente o limite para o 201 100 rec8
valor daquela coluna na chave de particionamento. Porém, 201 101 rec9
o valor de COL2 é menor que 201, valor limite daquela 201 102 rec10

coluna em P2. Então, as linhas foram para a partição P2.


Agora, o que acontece quando você insere uma linha com
COL1 = 201 e COL2 = 201? Esta linha entrará na parti-
ção PM, desde que ambas as colunas não podem estar fora
dos limites. Esquematicamente, a decisão para inserir em
uma partição pode ser explicada pela A1.
Imagine então a situação de efetuar o particionamento
utilizando a lista de particionamento do Oracle 9i, onde não
há o conceito de faixa (range) e, portanto, não há nenhum
valor limite. Neste caso, não teremos o mesmo problema,
pois a lista de particionamento do Oracle 9i não permite
colunas múltiplas.
Aparentemente, considerando a possível confusão sobre
a colocação de linhas em partições, não vale a pena o uso
de chaves de particionamento multi-colunadas. Porém,
em alguns casos especiais, pode ser muito útil. Por exem- A 1. Esquema de decisão de inserção em partição.
plo, considere uma tabela chamada SALES com colunas usar uma chave de particionamento em todas as três colu-
SALES_YEAR, SALES_MONTH e SALES_DAY, em vez nas para efetivamente projetar as partições (ler B1).
de uma única coluna chamada SALES_DATE. Isto é útil em
alguma implementação de projeto de data warehouse para B 1. Armadilha
habilitar dimensões e hierarquias. Em tal caso, você poderia Tenha cuidado quando for definir colunas múltiplas como chave

SQL Magazine . 63

[Link] 63 3/6/2005 18:50:55


de particionamento. Se tiver que fazê-lo, use casos de teste e não para qualquer sub-partição, as estatísticas não serão
precisamente em torno dos valores limite. coletadas para as sub-partições. Isto pode ser verificado ro-
dando o código da C7.
Estatísticas de sub-partições Este comando não retornará nenhuma linha. Mas anali-
O pacote DBMS_STATS já deve ter sido usado por tempo semos as outras opções aqui. Uma tabela pode ter esta-
suficiente para ter coletado estatísticas. Para coletar estatís- tísticas ao nível de tabela somente, chamadas estatísticas
ticas para as tabelas e para seus sub-objetos (por exemplo, GLOBAIS (GLOBAL statistics). Se forem analisadas as
partições e sub-partições), deveríamos usar a função conti- partições da tabela e o otimizador consegue derivar as es-
da no pacote GATHER_TABLE_STATS. A função possui tatísticas globais das partições individuais, então se supõe
dois parâmetros pouco conhecidos que devem ser designa- que as estatísticas para a tabela serão derivadas globalmen-
dos para coletar as estatísticas. te. Examinemos cada opção em detalhes.
• PARTNAME: é supostamente designado para coletar O comando da C8 coleta estatísticas somente ao nível
estatísticas só para a partição nomeada dentro da tabela global. A consulta da C9 confirma isto.
e não para a tabela inteira. Porém, este é um engano. A presença de estatísticas globais indica que a tabela foi
PARTNAME pode ser usado para coletar estatísticas analisada como um todo, mas o otimizador não terá conhe-
também para uma sub-partição específica. Para isso, o cimento das estatísticas de partições individuais. Estas esta-
nome da sub-partição é passado neste parâmetro. tísticas podem ser coletadas utilizando o comando da C10.
• GRANULARITY: instrui o pacote para coletar es- Este comando coleta as estatísticas apenas ao nível de
tatísticas em níveis diferentes e aplicá-los em cascata partição. Neste caso, as estatísticas globais não são coleta-
a outros sub-objetos. Aceita vários valores. O padrão, das na tabela e a consulta retornará um número abaixo de
chamado DEFAULT, instrui o pacote para coletar es- GLOBAL_STATS. Já a consulta da C11 recuperará todas
tatísticas globais e somente nas partições. O valor de
PARTITION instrui o pacote para coletar estatísticas
C 7. Verificação da granularidade.
ao nível de partição. Porém, atribuindo estes valores
não serão coletadas estatísticas ao nível de sub-partição; select partition_name
from user_tab_subpartitions
estes podem ser coletadas designando o valor do parâ-
where last_analyzed is not null;
metro para ALL ou SUBPARTITON.

C 8. Coleta de estatísticas ao nível global.


Consideremos agora a tabela criada na C5.
Analisemos a tabela que usa o valor padrão de granulari- exec dbms_stats.gather_table_stats

dade como na C6. (tabname=>’SPART1’, granularity=>’GLOBAL’)

Note que não informamos a granularidade. Desde que


o valor padrão é para coletar estatísticas para as partições C 9. Confirmação da granularidade.
Select last_analyzed, global_stats
C 5. Criação de tabela exemplo.
From user_tables where table_name = ‘SPART1’;
“create table spart1” Isto retorna
( LAST_ANAL GLO
col1 number, --------- ---
col2 number, 10-MAR-03 YES
col3 varchar2(20)
)
C 10. Coleta de estatísticas ao nível de partição.
partition by range (col1)
subpartition by hash (col2) exec dbms_stats.gather_table_stats
sub-partitions 4 (tabname=>’SPART1’, granularity=>’PARTITION’)
(
partition p1 values less than (101),
partition p2 values less than (201),
C 11. Recuperação de todas as partições.
partition p3 values less than (301), select partition_name, last_analyzed
partition p4 values less than (401), from user_tab_partitions
partition pm values less than (maxvalue) where last_analyzed is not null;
)

C 6. Análise de estatísticas da tabela. C 12. Variação do pacote.


exec dbms_stats.gather_table_stats exec dbms_stats.gather_table_stats
(tabname=>’SPART1’) (tabname=>’SPART1’, granularity=>’SUBPARTITION’)

64 . 21ª Edição

[Link] 64 3/6/2005 18:51:05


as partições. Outra variação do pacote é mostrada na C12. em uma partição satisfazem alguma condição dependen-
Isto coleta estatísticas somente ao nível de sub-partição e te nos valores de limite. ALTER TABLE... MERGE
deduz as estatísticas ao nível de partição. Entretanto, não PARTITION une as duas partições adjacentes e estabe-
coleta estatísticas globais nas partições. lece os limites adequadamente.
O último valor da opção, ALL, executa todos estes – tanto Consideremos o exemplo de uma tabela PART que é parti-
coleta estatísticas ao nível de partição e sub-partição, como cionada por faixa em quatro partições diferentes chamadas P1,
estatísticas globais na sub-partição, partição e tabela. P2, P3 e P4. Para combinar (merge) as partições P3 e P4 e ob-
T

Ferramentas
Assim, o valor padrão para o parâmetro GRANULARITY ter uma partição chamada P34, execute a declaração da C14.
na função de coleta de estatísticas não coleta estatísticas em Porém, em tabelas particionadas por hash não há valores
sub-partições. É preciso configurá-lo para SUBPARTITION de limite e as linhas não são selecionadas como candidatas
ou ALL para coletá-las. para as partições com base em algum tipo de faixa defini-
Em resumo, a D1 mostra os detalhes sobre atribuir gra- da. Assim, um merge não poderá identificar e fixar limites
nularidade e coletar estatísticas. específicos. Deveríamos usar uma cláusula nova chamada
Outro conceito interessante, que não é documentado cla- COALESCE para atingir este objetivo, veja a C15.
ramente, é a opção para só analisar sub-partições. Isto pode Com COALESCE, uma partição específica, normalmente
ser feito usando-se o comando da C13. a última, é selecionada para eliminação. Supõe-se que to-
das as linhas naquela partição são distribuídas igualmente
Rule Based Optimizer (otimizador baseado através das partições restantes e a partição é eliminada. Na
em regras) prática, porém, as linhas são combinadas (merged) com a
Podemos usar particionamento com o Rule Based partição adjacente.
Optimizer (RBO)? A resposta é: claro que podemos. Po- Considerando que isto reduz o número de partições, o nú-
rém, quando o particionamento foi introduzido, o RBO foi mero total não mais é uma potência de dois, provocando uma
considerado legado, e a Oracle decidiu que gradativamen- distribuição de linhas desigual em todas as partições. Para
te fosse encerrado o suporte ao mesmo. Isto conduziu a evitar este problema, executamos o COALESCE mais uma
uma interrupção geral no desenvolvimento de RBO, por- mais vez para obter partições uniformemente carregadas.
tanto hoje, RBO não é utilizado quando trabalhamos com Em resumo, MERGE usa-se para particionamento por fai-
particionamento. Então, para obter completa vantagem xa ou lista quando os valores são claramente identificados
do particionamento, poda de partição (partition prune), por valores limite, e COALESCE usa-se para partições ba-
partition wise join e assim por diante, você tem que usar seadas em hash, para reduzir o número de partições.
o Cost Based Optimizer (CBO). Se você usa o RBO, e
uma tabela na consulta é particionada, o Oracle passa para C 13. Análise de sub-partição.
o CBO enquanto está otimizando. Mas como as estatísticas exec dbms_stats.gather_table_stats
não estão presentes, o CBO compõe as estatísticas, e isto (tabname=>’SPART1’, PART_NAME=>’P1_SYS123’)
poderia conduzir a planos de otimização extremamente ca-
ros e com desempenho extremamente pobre. Assim, em-
bora seja possível, não deveríamos aplicar particionamento C 14. Merge de duas partições.
ao usar o RBO.
ALTER TABLE PART MERGE PARTITIONS P3, P4 INTO
PARTITION P34;
Coalesce vs. Merge (Fusão x Combinação)
Estas duas declarações potencialmente confusas servem
para o mesmo propósito - reduzir o número de partições
C 15. Utilização da cláusula COALESCE.
- e são aplicáveis em esquemas diferentes. Em uma faixa,
ou tabela particionada por lista (list-partitioned table), os ALTER TABLE PART COALESCE;
limites da partição estão claramente definidos, e as linhas

GRANULARITY
Tabela Global Partição Global Estatísticas de Partição Estatísticas de Sub-partição
(Granularidade)
GLOBAL SIM NÃO NÃO NÃO
PARTITION NÃO SIM SIM NÃO
DEFAULT SIM SIM SIM NÃO
SUBPARTITION NÃO NÃO SIM SIM
ALL SIM SIM SIM SIM

D 1. Detalhes de atribuição de granularidade e coleta de estatística.

SQL Magazine . 65

[Link] 65 3/6/2005 18:51:06


Outras dúvidas C 16. Atualização dos índices globais.
Sobre Rebuild Partition e Global Indexes
ALTER TABLE PTAB DROP PARTITION P2 UPDATE GLOBAL
(reconstrução de partição e índices globais) INDEXES;
O Oracle9iR2 oferece cisão de particionamento rápi-
da (fast split partitioning). Tipicamente, durante uma ligação e pode efetuar estas opções de otimização. Mas isto só
operação de cisão (split), o Oracle cria duas partições novas acontece com o hard parse; análises gramaticais subseqüentes
e então redistribui as linhas da partição fonte para as novas ainda mexem com os valores das variáveis de ligação.
partições. Esta é uma operação muito cara do ponto de vis-
ta de consumo de recursos. Além disso, partições de índice Quantas partições podem ser definidas em uma tabela?
locais (local index partitions) ficam inutilizáveis. O Oracle usa um campo de dois bytes para armazenar o
Com a cisão de particionamento rápida, se todas as li- número de segmentos (partições ou sub-partições) o que
nhas existem na mesma partição após a cisão da partição, o habilita 2^16 ou 65536 espaços. Então, o código do Oracle
Oracle simplesmente reutiliza a velha partição e cria uma permite um pouco menos que este valor: 65535. Nota-se
partição vazia. Assim, uma ação de cisão representa mais que este é um limite designado pelo código de software do
uma operação completa do que a criação de uma partição Oracle; o limite real pode ser menor.
nova. Lembremos que toda vez que uma consulta é analisada
Índices globais ficam inutilizáveis quando uma partição é gramaticalmente em um objeto particionado, o metadado
reconstruída. Porém, no 9i, uma nova cláusula atualiza os (isto é, quantas partições e assim por diante) é carregado no
índices globais também (C16). cache de cursor na SGA, significando que a SGA deverá ser
grande o suficiente para manipular uma tabela com várias
Ao usarmos particionamento, deveríamos utilizar bind partições.
variables (variáveis de ligação)?
Esta é uma pergunta interessante. Como nós já sabemos, Conclusões
o uso de variáveis de ligação elimina a necessidade de ana- Podemos concluir, após as duas partes deste artigo, que o
lisar gramaticalmente os cursores e torna mais fácil a reuti- tema “particionamento de objetos” é algo extremamente
lização dos mesmos. útil e que pode nos provê um grande ganho de desempenho
No caso de partições, porém, o uso de variáveis de ligação mas, acima de tudo, é extremamente importante utilizar
conduz a uma situação problemática. Junções e eliminação este recurso com cautela. Da mesma forma que este recur-
de partições só podem acontecer se o otimizador souber so pode nos trazer grandes benefícios, caso não seja muito
com antecedência o predicado de filtragem. O valor das bem planejado e utilizado com responsabilidade, as conse-
variáveis de ligação não é conhecido até chegar a hora da qüências podem ser desastrosas. S
execução, tornando inviável o processo de junção ou elimi-
nação de partição. Então, para tirar proveito destas opções,
Arup Nanda
não deveríamos usar variáveis de ligação. trabalha como DBA Oracle há mais de 10 anos. Possui diversos
No Oracle 9i, a primeira análise gramatical (parse) da decla- artigos técnicos publicados em revistas especializadas em banco de
dados.
ração, chamada de hard parse, verifica o valor da variável de

66 . 21ª Edição

[Link] 66 3/6/2005 18:51:13


g q / / g

Mais do que uma simples


ferramenta de Banco de Dados...
Faça já o
DOWNLOAD
GRÁTIS da nossa
versão de avaliação!
Conheça as novas
características do
c-tree:
• Melhor performance;
• Suporte c-treeSQL para
Windows, Linux, Unix and
Mac OSX;
• Suporte c-tree Server ISAM
para mais de 30 plataformas;
• Triggers nível ISAM;
• Interface Nativa .NET;
• Ferramenta para monitoramento
de performance;
• Suporte a arquivos em memória;
• Flexibilidade sem limites;
Veja as novidades em nosso site:
[Link]
Não fique para traz, só o
novo c-tree oferece tudo isto
e muito mais:
• Processamento de
transações completo
• Thread-safe
• Suporte a arquivos 64 bit (>>4 GB!!)
• Backup dinâmico
• Espelhamento de arquivos ...

O N HE Ç AO
Verifique você mesmo como a tecnologia
C T REE
FairCom pode ajudar você!
V O C-
Download grátis da nossa versão de avaliação: NO
[Link]
FAÇA COMO MUITAS
EMPRESAS NO MUNDO
TODO, VENHA PARA O
Brazil • USA • Europe • Japan C-TREE VOCÊ TAMBÉM!

SGBD desde 1979 • 11-3872-9802 • [Link] • brasil@[Link]


Outras empresas e nomes de produtos são marcas ou marcas registradas de seus respectivos proprietários. © 2005 FairCom Corporation

[Link] 67 3/6/2005 18:51:18


[Link] 68 3/6/2005 18:51:23

Você também pode gostar