Sei sulla pagina 1di 68

Contedo sobre Modelagem

06 CA ERWin Data Modeler: Modelagem de Dados com ERWin

Sumrio

[ Flavio Jesus de Souza ]

Contedo sobre Boas Prticas

14 SQL Server Reporting Services: Monitorando instncias no SQL Server


[ Walter Santos de Carvalho, Felipe Pereira Delage e Flavio Alexandre Martins ]

22 Pentaho BI: Conhecendo a ferramenta open source BI


[ Andressa de Andrade Freitas ]

Contedo sobre Boas Prticas

28 Oracle RAC com DNS: balanceamento de carga Round Robin


[ Danilo Migliorini Caneschi ]

Contedo sobre Boas Prticas

40 Resolvendo problemas no Oracle e no SQL Server

D
s

[ Flavio Climaco ]

Feedback
eu

46 Oracle Materialized Views: Gerenciando em standby lgicos no Oracle

Artigo no estilo Curso

edio
ta

[ Anderson Araujo de Oliveira ]

sobre e
s

Contedo sobre Boas Prticas

D seu feedback sobre esta edio!

54 Oracle Upgrade: Como fazer upgrade do oracle 11g para 12c Parte 3
[ Ricardo Rezende ]

Contedo sobre Boas Prticas

60 Weka Software: Minerao de dados com Weka


[ Marcelo Josu Telles e Paulo Henrique Santini ]

A SQL Magazine tem que ser feita ao seu gosto. Para


isso, precisamos saber o que voc, leitor, acha da
revista!
D seu voto sobre esta edio, artigo por artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback

Assine agora e tenha acesso a


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

128 Edio - 2015 - ISSN 1677918-5 - Impresso no Brasil

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

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

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

Fale com o Editor!


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

rodrigo Oliveira Spnola


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

CA ERWin Data Modeler:


Modelagem de Dados
com ERWin
A

modelagem de dados a primeira etapa de um


projeto que envolva banco de dados e tem como
seu principal objetivo o desenvolvimento de um
modelo que contenha entidades e relacionamentos, e que
com isso seja possvel representar as especificaes das
informaes do negcio. A modelagem de dados ajuda
a organizar a forma de pensamento sobre os dados, demonstrando o significado e a aplicao prtica deles. Ela
tambm estabelece o vnculo entre as necessidades dos
usurios e a soluo de software que as atende. Para um
modelo de dado alcanar os objetivos esperados, ele deve
fornecer ao desenvolvedor a representao adequada do
ambiente documentada e de preferncia normalizada
para criao dos processos do sistema.
A modelagem de dados segundo o Modelo de Entidade-Relacionamento foi definida em 1976 por Peter
Chen e desde ento ela faz parte do cenrio pertencente
a algum projeto de sistema de banco de dados. Portanto, entender as etapas de um projeto ajudar o leitor a
compreender melhor como funciona e qual o papel da
modelagem de dados.

Projeto de Sistema
Um projeto pode ser definido como um processo nico
e consistente formado por um conjunto coordenado de
etapas datadas para atingir um determinado objetivo.
Num projeto de sistema, a etapa inicial consiste na
interpretao mais realista possvel de um minimundo
qualquer, visando atender um conjunto de necessidades
levantadas diante do cliente. Dada essa abstrao, surge
o que se chama de anlise de requisitos. Em sntese,
essa etapa pode ser encarada como a descrio tcnica
detalhada do que o usurio entende como sendo as
funcionalidades que o sistema tem que possuir. Essa
etapa muito importante, pois todo esse levantamento
ser futuramente validado pelo cliente. Cumprida essa
etapa, a mesma deve ser documentada, pois com essa
documentao o analista ser capaz de dar incio fase
conceitual do modelo.

6 SQL Magazine Edio 128

Fique por dentro


A tarefa de armazenar dados essencial em quase todos os projetos
de sistemas. Essa etapa funciona como a espinha dorsal de um corpo
constitudo de banco de dados, camadas de servidores de aplicao,
front-end diversos, programas, etc. Portanto, sem uma boa modelagem, esse corpo pode ficar vulnervel e adoecer facilmente. Dada
essa importncia, a firmeza do esqueleto corporal est diretamente
relacionada ao banco de dados, onde residiro as informaes que
sero acessadas e atualizadas. Esse artigo tem por finalidade mostrar
ao leitor no que consiste a modelagem de dados e como se d este
processo utilizando o CASE (Computer-Aided Software Engineering) ERWin. Nele sero abordadas as etapas conceituais e fsicas de
um projeto de banco de dados inseridas num projeto de sistema.
A ferramenta apresentada nesse artigo, no s cumpre com os prrequisitos essenciais de anlise de dados, como tambm capaz de
gerar fisicamente o modelo criado nos mais importantes bancos de
dados existentes no mercado.

De posse do modelo criado de forma conceitual, ou seja, independente do banco de dados a ser escolhido para abrigar os dados,
toma-se a deciso de qual banco ser utilizado pelo projeto. Com
isso o d-se incio etapa fsica do projeto. A partir desse momento, propriedades particulares do banco de dados sero levadas em
conta na construo do modelo. Como ser mostrado em breve,
o ERWin faz esse tipo de converso do modelo lgico para fsico
mediante a escolha do banco. Os tipos de dados dos campos das
tabelas, o espao de armazenamento, entre outras caractersticas
passaro a ser relevantes na montagem do modelo fsico. Concluda essa etapa, materializa-se o que foi definido no modelo
dentro do banco propriamente dito e dado o go do projeto em
produo. O que se v a partir da so manobras operacionais e
gerenciais para controlar, manutenir e evoluir o sistema.

Modelo Conceitual
Pode-se dizer que nesse momento surgem as famosas entidades.
E aqui cabe uma observao que deve ser respeitada. Modelar
dados nada mais do que definir conjuntos. Por exemplo, em uma

empresa de TI existem empregados, departamentos e projetos.


O conjunto de empregados constitudo por Maria, Jos, Joo,
Antnio, etc. Os departamentos podem ser de TI, financeiro, RH,
etc. A exata concepo desses conjuntos far a melhor abstrao
dos dados em forma de entidades. As caractersticas de Jos, tais
como CPF, data de nascimento, salrio, etc. podem ser encarados
como os atributos dos elementos do conjunto empregados.
Dada a noo dos conjuntos mais prxima da realidade, para
fechar todo o mapeamento do projeto preciso montar o que se
chama de interoperabilidade entre as entidades, que representa
a capacidade de comunicao entre as partes de um sistema. Essa
noo d origem aos relacionamentos.
Em suma, entidade algo significante sobre o qual a informao precisa ser conhecida ou mantida. Para concluir o exemplo
anterior, as entidades podem ser:
EMPREGADO;
DEPARTAMENTO;
PROJETO.
Relacionamentos so objetos de significncia entre as entidades
que evitam a redundncia dos dados, por exemplo:
Um EMPREGADO pertence a um DEPARTAMENTO;
Um DEPARTAMENTO possui vrios PROJETOS;
Em um PROJETO trabalham vrios EMPREGADOS.
Ou seja, sem a criao dos relacionamentos, todos os dados
deveriam ser replicados entre as entidades para propagar a significncia dos mesmos.
Atributos so informaes sobre uma entidade que precisa ser
conhecida ou mantida. Eles descrevem uma entidade pela qualificao, identificao, classificao, quantidade ou expressando
o estado da entidade. A seguir temos exemplos de atributos da
entidade EMPREGADO:
CPF do EMPREGADO;
Nome e sobrenome qualificam um EMPREGADO;
Categoria da folha de pagamento (semanal, mensal) que classificam um EMPREGADO;
Idade do EMPREGADO;
Status do EMPREGADO (ativo, demitido, aposentado, em
frias).

Modelo Fsico
Uma vez concluda a fase abstrata, d-se incio parte fsica.
Teoricamente, o modelo fsico deve ser gerado a partir do modelo
lgico. Uma vez criado, este deve respeitar as regras do SGBD
escolhido. Nesse sentido, a base de dados ser uma simbiose entre
o modelo e as regras impostas pelo banco em questo.
Para construir o modelo fsico no banco de dados, utiliza-se uma
linguagem de definio de dados que, na maioria das vezes, so
scripts gerados pelo CASE e submetidos ao banco atravs da prpria ferramenta. Vale lembrar que, segundo as melhores prticas,
os objetos criados por esses scripts compem o que se chama de
esquema de banco de dados.

Criar um banco a partir do CASE uma tarefa simples, mas o sucesso do projeto fsico no depende somente disso. Pois se a performance
da aplicao for imprescindvel, o volume de dados e a quantidade
de transaes tero influncia direta no sistema. Portanto, a escolha
correta do banco a ser utilizado vital nesse processo.
Colocando em prtica tudo o que foi dito anteriormente e partindo do pressuposto que o banco escolhido foi o Oracle Database.
A Listagem 1 mostra o script equivalente aos exemplos supra
citados.
Listagem 1. Script de Criao das Entidades
CREATE TABLE EMPREGADO (
CPF INTEGER NOT NULL,
NOME VARCHAR(40),
SOBRENOME VARCHAR(40),
SEXO CHAR(1),
DEPARTAMENTO INTEGER,
FOLHA_PAGAMENTO CHAR(1),
IDADE INTERGER,
STATUS CHAR(1),
);
CREATE TABLE DEPARTAMENTO (
ID INTEGER NOT NULL,
NOME VARCHAR(40),
DESCRICAO VARCHAR(40)
);
CREATE TABLE PROJETO (
ID INTEGER NOT NULL,
NOME VARCHAR(40),
RESPONSAVEL INTEGER,
DEPARTAMENTO INTEGER,
);

Aps a concluso do modelo fsico de suma importncia validar o que foi gerado, pois o modelo deve responder a todos os
requisitos cadastrais e funcionais. Uma forma fcil e prtica para
cumprir essa tarefa criar resposta ao modelo e ver se as entidades
e os relacionamentos atendem a essa solicitao. Para garantir esse
processo deve-se checar se foi gerada alguma associao incorreta
entre as entidades. Verificar se h ou no a necessidade de uma
entidade ou de um relacionamento evitando redundncia dos
dados e excesso dos mesmos. Checar se h a necessidade ou no
de histrico transacional dos registros e de preferncia pensar em
como expurgar esses dados, caso eles no tenham mais utilidade
dentro da base. Essa etapa importante, pois o retrabalho para
esses casos pode se transformar em novo projeto dependendo do
tamanho da mudana a ser processada numa base muito grande.
Um modelo bem estruturado e que atende a todas as exigncias de
um sistema tende a se perpetuar e pode ser facilmente migrado
para outra base sem maiores problemas.

ERWin
O ERwin uma ferramenta que oferece um ambiente colaborativo de modelagem de dados para o gerenciamento de
dados corporativos atravs de uma interface grfica intuitiva.

Edio 128 SQL Magazine

CAERWin Data Modeler: Modelagem de Dados com ERWin

Com o ele, tanto os participantes administrativos, quanto os


tcnicos, podem ter uma viso comum das informaes em contexto atravs de um portal com base na web e de ferramentas de
design para desktop, com suporte de um repositrio de modelos
de nvel corporativo.
As estruturas tcnicas de bancos de dados podem ser visualizadas atravs de um modelo grfico intuitivo fornecendo uma
viso centralizada das principais definies de dados, ajudando
assim o usurio a obter uma compreenso melhor dos dados.
Com interfaces internas para a maioria das plataformas de banco
de dados do mercado, o ERwin consegue ler os formatos tcnicos
de cada uma dessas plataformas exclusivas e converte em scripts
(por exemplo, DDL) a partir de um modelo grfico - essa funcionalidade d-se o nome de engenharia reversa.
A partir desse modelo, possvel fazer alteraes futuras nos
esquemas de banco de dados para que o desenvolvimento possa
ser implementado por meio de um design orientado por modelo.
No s possvel armazenar esquemas tcnicos de banco de dados, procedimentos e outras informaes no modelo, mas tambm
definies e regras de negcios centradas em dados, para que as
implementaes tcnicas possam estar mais bem alinhadas s
necessidades da organizao.
O ERWin possui os seguintes recursos em seu ambiente: visualizao de estruturas de dados complexas, gerao automatizada de
design de banco de dados por meio de modelos de dados grficos,
definio de padres para ajudar a reduzir a redundncia, ferramentas de comparao entre modelo e banco de dados, relatrios
e publicaes destinados a compartilhar informaes com diversas
funes em toda a organizao.
Seus diferenciais so a criao do modelo fsico a partir do lgico
e a criao da estrutura de vrios bancos de dados relacionais, tais
como: DB2 (incluindo DB2 para i5/OS - System i), IDS (Informix),
MySQL, Oracle, Progress, SQL Server, Sybase e Teradata. Adquirindo verses mais avanadas possvel atingir o universo de
Big Data e Nuvem.
Com o intuito de mostrar como se constri um projeto de banco
de dados utilizando o ERWin, esse artigo modela um pequeno
sistema fictcio para instruir o leitor quanto ao processo de modelagem, bem como apresentar os recursos da ferramenta.

- Bancos de Dados;
- Projetos;
- Mquinas;
- Fabricantes de hardware, sistemas operacionais e banco de
dados.
Requisitos funcionais do Sistema:
- O sistema deve ser capaz de identificar a melhor configurao
de hardware e software, segundo as exigncias das aplicaes,
levando em considerao os indicadores de performance, escalonamento, robustez, em funo dos parmetros de custo,
tempo e qualidade;
- O sistema deve contemplar todas as plataformas existentes
com suas respectivas tecnologias;
- O sistema deve gerar relatrio e consultas online respeitando
a atualizao constante de sua base.

Estudo de Caso

De posse da documentao gerada nos itens anteriores e respeitando o conceito de conjuntos, fica fcil perceber quais as
principais entidades compem o sistema. Segundo a Figura 2,
torna-se evidente que os cadastros de Sistemas Operacionais,
Bancos de Dados, Projetos, Fabricantes e Mquinas devem fazer
parte do modelo.
Quanto aos relacionamentos, o analista deve ter em mente que
para armazenar as informaes cadastrais solicitadas nas especificaes, no mnimo ele precisa criar cadastros para:
Todos os bancos de dados existentes;
Saber quais os sistemas que a empresa desenvolve;
Os fabricantes de software (SO e BD) e hardware do mercado;
As mquinas utilizadas.

No mundo de TI existem vrios bancos de dados que residem em


diversos sistemas operacionais, que por sua vez controlam diferentes arquiteturas de hardware. Dependendo de algumas variveis de
projeto, a escolha da combinao hardware, sistema operacional e
banco de dados so essenciais para montar um ambiente de sucesso
adequado s necessidades da empresa. Portanto, o problema de
montar um ambiente pode ser encarado como um estudo de caso
fictcio que ser proposta uma soluo dentro do artigo.
A partir dessas necessidades, foram identificados os seguintes
requisitos do sistema:
Requisitos cadastrais do sistema:
- Sistemas Operacionais;

8 SQL Magazine Edio 128

Criando o Modelo Lgico


Para comear a construo do modelo propriamente dito utilizando o ERWin, necessrio criar um novo modelo dentro
da ferramenta. Como mostrado na Figura 1, onde damos incio
criao do modelo, dentre as quatro opes existentes e para
efeitos conceituais, aconselhvel que se comece pelo modelo
lgico para depois transform-lo em fsico.

Figura 1. Novo Modelo Lgico a partir do ERWin

Nossa interpretao para o modelo : os fabricantes produzem


software e hardwares, onde todo o projeto executado em uma
ou mais mquinas e as mesmas so controladas por sistemas
operacionais (Figura 2). Portanto, para criar os relacionamentos
desse modelo os itens a seguir devem ser considerados:
Tanto um sistema operacional quanto um banco de dados
criado por um fornecedor (FABRICANTE);
Uma mquina controlada por um sistema operacional;
Um projeto executado em uma ou mais mquinas;
Um banco de dados executado num sistema operacional.
O modelo apresentado na Figura 3 reflete as entidades definidas
at aqui e os relacionamentos existentes entre elas.

algumas ideias de novos atributos e eles vo se encaixando nas


entidades. s vezes, ocorre de uma ou outra caracterstica no se
encaixar nas entidades, isso sugere uma reviso do modelo; ou
nascero novas entidades ou a remoo de algumas existentes
daro lugar a novos conjuntos. Nesse modelo seria possvel, por
exemplo, criar novos atributos para ranking de qualidade e informaes quanto ao tempo de montagem de cada mquina.

Criando o Modelo Fsico


Para gerar o modelo fsico, o ERWin tem uma funcionalidade
bastante interessante. A partir do lgico pode-se gerar um novo
modelo fsico, conforme mostra a Figura 4.
Nesse caso, a transformao foi baseada no banco de dados
Oracle.
Para definir a base correspondente ao modelo necessrio fazlo atravs da caixa de dilogo da Figura 5.

Figura 2. Entidades lgicas do Modelo


Figura 4. Derivar um Modelo a partir de outro

Figura 3. Entidade Relacionamento do Modelo

Figura 5. Configurao da base de dados de destino

Os relacionamentos simples (1:N) so representados pelas linhas


tracejadas e os (N:N) com uma linha normal. Quanto aos atributos,
foram criados os que representam caractersticas bsicas de cada
entidade. medida que o modelo vai sendo criado, podem surgir

Aps esse processo chegou-se configurao representada na


Figura 6.
Essa representao do modelo gerada dinamicamente no
momento da transformao do modelo lgico para o fsico.

Edio 128 SQL Magazine

CAERWin Data Modeler: Modelagem de Dados com ERWin

Neste artigo no cabe aprofundar nesse nvel, mas possvel


configurar todos os campos de cada coluna das tabelas segundo
o Target escolhido (ver Figura 7), bem como configurar as propriedades pertinentes ao banco de dados escolhido, escolher os
tipos de dados, locais de armazenamento, etc.

do menu Actions. Em seguida deve-se preencher os dados de


conexo com a base conforme mostra a Figura 9.
Por fim, ao selecionar a opo Actions > Forward Engineer e
nosso modelo sair da prancheta para o banco de dados de nossa
escolha.
As melhores prticas sugerem que nesse momento seja criado
um usurio no banco, que ser o futuro proprietrio dos novos
objetos (tabelas, vises, funes) gerados pela ferramenta e que
o espao para armazenamento esteja previamente configurado
no banco de dados.

Figura 6. Modelo fsico baseado no banco Oracle

Figura 8. Mudana de banco alvo


Figura 7. Escolha da base de dados de destino
Uma ressalva importante deve ser lembrada nesse momento:
nosso modelo no pode criar combinaes de sistemas operacionais, bancos e mquinas que no sejam suportados uns pelos
outros. Portanto, para que isso no acontea, surge um recurso
que se chama desnormalizao da base. Pode ser necessrio impedir que sejam cadastrados dados que fujam a uma determinada
regra funcional criada por conta de alguma necessidade. Alguns
bancos de dados lanam mo de triggers, funes, vises etc. para
implementar essas restries impostas pela a realidade. Para nosso
caso, possvel utilizar as prprias tabelas de BANCO_DADO,
SISTEMA_OPERACIONAL e MAQUINA para criar uma matriz
de compatibilidade e no momento de gerar uma combinao, essas
associaes devem ser respeitadas.
Nunca demais lembrar que a escolha do banco alvo pode ser alterada utilizando a funo de transformao apresentada na Figura 8.
Por exemplo, se for necessrio mudar de Oracle para DB2 bastaria
preencher a caixa de dilogo e dar continuidade ao processo.

Gerao do Modelo
Para gerar o modelo com o ERWin muito simples, basta conectar
base de dados de destino atravs da opo Database Connection

10 SQL Magazine Edio 128

Figura 9. Conexo com a base

Em suma, sempre til seguir a pequena lista de pr-requisitos


para uma adequada configurao do ambiente de banco de
dados:
Espao de permuta para importao e exportao de dados;
Planejamento do tamanho da storage dos dados e/ou arquivos;
Correes (Update, Hot-fix, Patchs de sistema operacional e de
binrio de banco);
Checagem de pacotes adicionais de software de monitorao
e tuning;
Criao logins e definio dos acessos objetivando segurana
das informaes;
Checagem de acessos de rede, tamanho da banda, latncia, etc.

Novos conceitos surgem na criao do modelo fsico atravs do script de criao da base. Os tamanhos dos campos
e os tipos de dados, como CHAR, INTEGER, NUMBER, por
exemplo, devem ser especificados para atender anlise
de requisitos realizada. Se isso no for feito, a estrutura da
base pode passar por manutenes indesejadas quando j
estiver em produo. Com intuito de garantir a integridade
dos dados, surgiro tambm as restries de PRIMARY KEY,
FOREIGN KEY e CHECK CONSTRAINT. Nunca demais
lembrar, mas as chaves primrias so utilizadas para garantir a unicidade dos dados dentro de uma tabela. As chaves
estrangeiras formam os relacionamentos, impedindo que
registros indesejveis sejam cadastrados e que registros pais
sejam removidos quando houver algum filho relacionado.
As restries de checagem so vistas como a manuteno de
um pequeno domnio dentro de possveis valores de dados
em algum campo da tabela.
Um dado relevante do CASE a criao da tabela de relacionamento associativo MAQUINA_PROJETO gerada automaticamente pela ferramenta. Essa a tabela onde sero cadastradas
as combinaes pertinentes aos projetos da empresa. Caber
aos analistas definirem as funcionalidades dos mesmos para
gerar tais combinaes.

Em seguida, temos os dois scripts gerados pelo ERWin a partir


do modelo. O primeiro para Oracle e o segundo para DB2.
Na Listagem 2 apresentado o script de criao das tabelas do
modelo tendo como destino uma base Oracle. Ao ser executado, o
script criar todas as tabelas do modelo no banco de dados.
Na Listagem 3 tem-se o anlogo em DB2. Existe pouca diferena
entre um script e outro, pois as notaes so bem semelhantes.
Os tipos de VARCHAR2 do Oracle tem seu equivalente em DB2
como VARCHAR e o tipo NUMBER no Oracle, passa para DECIMAL em DB2.

Listagem 2. Script de Criao do Modelo para Oracle


CREATE TABLE FABRICANTE
(
CNPJ
CHAR(11) NOT NULL PRIMARY KEY,
RAZAO_SOCIAL
VARCHAR2(120) NOT NULL ,
NOME_FANTASIA VARCHAR2 (120) NOT NULL
);
CREATE TABLE BANCO_DADOS
(
ID_BANCO
INTEGER NOT NULL PRIMARY KEY,
NOME
VARCHAR2(120) NULL ,
TIPO
CHAR(1) NULL ,
NUVEM
CHAR(1) NULL ,
PRECO_LICENCA
NUMBER(9,2) NULL ,
CNPJ
CHAR(11),
CONSTRAINT FK_BD_FABRICANTE FOREIGN KEY(CNPJ) REFERENCES FABRICANTE
(CNPJ)
);
CREATE TABLE SISTEMA_OPERACIONAL
(
ID_SISTEMA_OPERACIONAL CHAR(10) NOT NULL PRIMARY KEY,
NOME
VARCHAR2(50) NOT NULL ,
DESCRICAO
VARCHAR2(60) NOT NULL ,
VERSAO
CHAR(1) NOT NULL ,
PROCESSADOR
INTEGER NOT NULL ,
PRECO_LICENCA
NUMBER(9,2) NULL ,
CNPJ
CHAR(11) NOT NULL,
CONSTRAINT FK_SO_FABRICANTE FOREIGN KEY(CNPJ) REFERENCES FABRICANTE
(CNPJ)

);
CREATE TABLE MAQUINA
(
IP
CHAR(15) NOT NULL PRIMARY KEY,
HOSTNAME
VARCHAR2(50) NULL ,
ARQUITETURA
INTEGER NULL ,
PRECO
NUMBER(9,2) NOT NULL ,
ID_SISTEMA_OPERACIONAL CHAR(10) NOT NULL,
ID_BANCO
INTEGER,
CONSTRAINT FK_MAQ_BANCO FOREIGN KEY(ID_BANCO)
REFERENCES BANCO_DADOS (ID_BANCO),
CONSTRAINT FK_MAQ_SO FOREIGN KEY(ID_SISTEMA_OPERACIONAL) REFERENCES
SISTEMA_OPERACIONAL (ID_SISTEMA_OPERACIONAL)
);
CREATE TABLE PROJETO
(
ID_ PROJETO
INTEGER NOT NULL PRIMARY KEY,
NOME
VARCHAR2(50) NULL ,
DESCRICAO
VARCHAR2(120) NULL
);
CREATE TABLE MAQUINA_ PROJETO
(
IP
CHAR(15) NOT NULL,
ID_PROJETO
INTEGER NOT NULL,
CONSTRAINT FK_MS_MAQUINA FOREIGN KEY(IP) REFERENCES MAQUINA (IP),
CONSTRAINT FK_MS_PROJETO FOREIGN KEY(ID_PROJETO) REFERENCES SISTEMA
(ID_PROJETO)
);

Edio 128 SQL Magazine

11

CAERWin Data Modeler: Modelagem de Dados com ERWin

Listagem 3. Script de Criao do Modelo para DB2


CREATE TABLE FABRICANTE
(
CNPJ
CHAR(11) NOT NULL PRIMARY KEY,
RAZAO_SOCIAL
VARCHAR(120) NOT NULL ,
NOME_FANTASIA
VARCHAR(120) NOT NULL
);
CREATE TABLE BANCO_DADOS
(
ID_BANCO
INTEGER NOT NULL PRIMARY KEY,
NOME
VARCHAR(120) NULL ,
TIPO
CHAR(1) NULL ,
NUVEM
CHAR(1) NULL ,
PRECO_LICENCA
DECIMAL(9,2) NULL ,
CNPJ
CHAR(11),
FOREIGN KEY(CNPJ) REFERENCES FABRICANTE (CNPJ)
);

CREATE TABLE SISTEMA_OPERACIONAL


(
ID_SISTEMA_OPERACIONAL CHAR(10) NOT NULL PRIMARY KEY,
NOME
VARCHAR(50) NOT NULL ,
DESCRICAO
VARCHAR(60) NOT NULL ,
VERSAO
CHAR(1) NOT NULL ,
PROCESSADOR
INTEGER NOT NULL ,
PRECO_LICENCA
DECIMAL(9,2) NULL ,
CNPJ
CHAR(11) NOT NULL,
FOREIGN KEY(CNPJ) REFERENCES FABRICANTE (CNPJ)

A modelagem dos dados correta faz com que se tenha uma reduo na complexidade do projeto a um ponto que o projetista possa
compreender e manipular os dados e no podemos esquecer que
modelar os dados da empresa faz parte do sistema de monitoramento do ciclo de vida das atividades de governana de dados.
Essa atividade crucial no processo de tomada de deciso que os
CIOs fazem uso durante a gesto. Portanto, modelar dados possui
uma funo estratgica dentro de uma empresa.

);
CREATE TABLE MAQUINA
(
IP
CHAR(15) NOT NULL PRIMARY KEY,
HOSTNAME
VARCHAR(50) NULL ,
ARQUITETURA
INTEGER NULL ,
PRECO
DECIMAL(9,2) NOT NULL ,
ID_SISTEMA_OPERACIONAL CHAR(10) NOT NULL,
ID_BANCO
INTEGER,
FOREIGN KEY(ID_BANCO) REFERENCES BANCO_DADOS (ID_BANCO),
FOREIGN KEY(ID_SISTEMA_OPERACIONAL) REFERENCES SISTEMA_OPERACIONAL
(ID_SISTEMA_OPERACIONAL)
);
CREATE TABLE PROJETO
(
ID_SISTEMA
NOME
DESCRICAO
);

INTEGER NOT NULL PRIMARY KEY,


VARCHAR(50) NULL ,
VARCHAR(120) NULL

CREATE TABLE MAQUINA_PROJETO


(
IP
CHAR(15) NOT NULL,
ID_PROJETO
INTEGER NOT NULL,
FOREIGN KEY(IP) REFERENCES MAQUINA (IP),
FOREIGN KEY(ID_SISTEMA) REFERENCES PROJETO (ID_PROJETO)
);

Links:
CA Thecnologies, Descritivo da Soluo, CA ERwin Data Modeler Community
Edition 2013.
CA Thecnologies, Folha de Produto, CA ERwin Data Modeler Workgroup Edition
2013
Heuser, Carlos Alberto, Projeto de Banco de Dados, Srie de Livro Ditticos,
quarta edio, 1998.
Frozza, Angelo Augusto MSc, Projeto de Banco de Dados - Projeto Conceitual,
Instituto Federal de Educao, Cincia e Tecnologia, 2011.

Autor
Flavio Jesus de Souza
flavio.souza@creta.inf.br
Mestre em Computao pela UFRJ, especialidade em Computao Quntica. MBA em TI (MBTI-e) em Gesto Empresarial de TI.
Graduado em Informtica pela UNESA e ex-aluno do IME - Engenharia Mecnica. Certificado em OCE Linux Oracle 10g, OCP ORACLE 8i, 9i e 10g.

Rob, Peter e Coronel Carlos, Sistemas de Banco de Dados - Projeto, Implementao e Administrao, oitava edio norte-americana.

Voc gostou deste artigo?


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

12 SQL Magazine Edio 128

Edio 128 SQL Magazine

13

SQL Server Reporting


Services: Monitorando
instncias no SQL Server
A

tualmente, comum nas corporaes que


vrios servidores de bancos de dados estejam
em produo com o SQL Server. Alm disso,
muitas vezes este ambiente crtico e necessita de
ateno diria em vrios pontos como, por exemplo,
espao em disco, backups realizados, mensagens de
erros da instncia e do sistema operacional. Quando
um servidor est com pouco espao em disco e por
questes burocrticas no se pode comprar um novo
disco e adicion-lo de forma rpida ao servidor, o
espao livre se torna valioso, devendo ser monitorado
a todo momento. Outro exemplo acontece quando se
trabalha em um ambiente mais complexo com Failover
Cluster, onde os dados esto armazenados em LUNs
(BOX 1) dentro de um Storage.
Especificamente neste cenrio, mesmo que o Storage
tenha bastante espao no alocado que possa ser disponibilizado para as LUNs, no uma boa prtica simplesmente aumentar o espao das mesmas sem definir
uma quantidade que realmente atenda a demanda, pois
deixar espao livre em excesso nas LUNs ou em determinada LUN um desperdcio que deve ser evitado. Nestes
casos, quando for solicitada a criao de uma LUN para
armazenar outros bancos de diferentes projetos e a nova
LUN precisar de muitos gigabytes inicialmente, pode
ser que o espao alocado desnecessariamente em outras
LUNs faa falta.
Imagine um cenrio no qual uma LUN de 100GB, ativa
h anos, esteja 99% cheia, com bancos de clientes acessados frequentemente sofrendo inseres e atualizaes
de dados que geram uma mdia de crescimento mensal
da LUN de 2GB. Alm disso, suponha que essa LUN
esteja alocada em um Storage de 10 Terabytes que hospeda vrias LUNs que tambm demandam crescimento
constantemente e este Storage no momento encontra-se
com apenas 300GB de espao no alocado. Espao este
que pode acabar rapidamente se vrias LUNs precisarem
crescer ao mesmo tempo.

14 SQL Magazine Edio 128

Fique por dentro


Este artigo demonstra como administrar instncias SQL Server instaladas em servidores distintos com o auxlio de relatrios construdos
com Reporting Services, sendo estes alimentados por uma rotina
em Integration Services. Vamos demonstrar especificamente como
visualizar o espao disponvel em disco de vrios servidores, porm,
usando a mesma ideia possvel criar inmeros monitoramentos
diferentes.

BOX1. LUN
LUN uma unidade lgica ou um disco de um Storage. Atravs do uso de LUNs possvel obter
uma flexibilidade que muito importante no armazenamento de grandes volumes de dados e em
ambientes crticos, pois as unidades lgicas podem ser movidas ou, em outras palavras, migradas
para servidores diferentes de uma forma prtica, garantindo uma indisponibilidade muito baixa
para acesso aos dados contidos nelas.

Em um ambiente como este, no se pode deixar acabar o espao


livre onde esto os arquivos de banco do SQL Server, pois as aplicaes que escrevem no banco no conseguiro mais inserir ou
alterar dados. Diante disso, torna-se necessrio crescer a LUN para
que ela tenha mais espao livre. Vale ressaltar aqui que no existe
um nmero ideal para crescimento da LUN. Existe sim um custo
benefcio que deve ser analisado. Assim, se optarmos por aumentos
curtos, algo em torno de 10GB a 30GB, teremos que nos preocupar
com a monitorao do tamanho da LUN constantemente de forma
mais recorrente, para evitar que se esgote dentro da unidade lgica.
Se crescermos 100GB, por exemplo, no ser preciso nos preocuparmos com esta unidade lgica to cedo, porm o Storage que estava
com 3% de espao no alocado passar para 2%.
Como mencionamos anteriormente, em algum momento pode
ser indicada a criao de novas LUNs ou aumentar o tamanho das
demais existentes. Por isso, uma boa prtica adicionar espao
nas LUNs de acordo com a demanda, para que o Storage sempre
tenha espao no alocado que possa ser adicionado s LUNs que
realmente necessitem.

Pensando neste problema vamos propor neste artigo um meio


de monitorar recursos ou eventos que acontecem em instncias
e em servidores de banco de dados montando um mecanismo de
monitoramento onde poderemos ao longo do tempo acrescentar
outros itens para serem monitorados. Neste artigo vamos demonstrar especificamente o monitoramento de espao em disco, recurso
que demanda ateno recorrente, j que faltar espao um grande
problema em ambientes que armazenam bancos de dados.
Para colocar em prtica o monitoramento, ser necessria uma
instncia do SQL Server 2012 Developer, incluindo os recursos
Integration Services, Reporting Services e o Visual Studio 2010.

Criando o banco de dados


Para que nosso mecanismo de monitoramento comece a tomar
forma, vamos comear com a criao do banco de dados, utilizando para isso o script da Listagem 1.
Listagem 1. Script para criao do banco de dados.
USE [master]
GO
CREATE DATABASE [DBA_Monitor]
ON PRIMARY
( NAME = NDBA_Monitor, FILENAME = ND:\BancosDados\DBA_Monitor.mdf ,
SIZE = 1976320KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = NDBA_Monitor_log, FILENAME = ND:\BancosDados\DBA_Monitor_log.
ldf , SIZE = 74688KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

Com o banco de dados pronto, podemos criar a tabela que


armazenar os dados referentes ao nosso monitoramento. Para
isso, execute o script da Listagem 2. Definidos o banco e a tabela
TB_DBA_Espaco, preciso que ela seja devidamente populada com
os dados que queremos avaliar. Posteriormente estes dados sero
processados e exibidos em um relatrio, conforme ser mostrado
ao final do artigo.
Para popularmos a tabela TB_DBA_Espaco, vamos extrair dados
que informaro o espao total do disco, o espao ocupado e o espao livre. Para isso, utilizaremos Jobs no SQL Server que, associados
ao SSIS, realizaro a captura diria destas informaes.

atravs desse job que iremos obter as informaes desejadas


(em nosso caso, o espao disponvel nas unidades de disco).
Somente aps a gerao deste arquivo que conseguiremos desenvolver nosso projeto no SSIS.
Listagem 2. Script para criao a tabela TB_DBA_Espaco.
CREATE TABLE [dbo].[TB_DBA_Espaco](
[id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[Drive] [varchar](100) NULL,
[Tamanho] [numeric](18, 2) NULL,
[Usado_MB] [numeric](18, 2) NULL,
[Livre_MB] [numeric](18, 2) NULL,
[Livre_perct] [varchar](20) NULL,
[Usado_perct] [varchar](20) NULL,
[Data_Cadastro] [date] NULL,
[Instancia] [varchar](50) NOT NULL,
CONSTRAINT [PK_TB_DBA_Espaco] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Como nosso job utilizar um comando PowerShell, imprescindvel que a mquina esteja apta e liberada para a execuo
de scripts desse tipo. Para isso, devemos executar os seguintes
passos:
1. Clique no boto iniciar e procure pelo programa chamado
Windows PowerShell;
2. Clique com o boto direito em Windows PowerShell e selecione
a opo Executar como Administrador;
3. Dentro do PowerShell, execute o comando Set-ExecutionPolicyRemoteSigned, depois digite S e d Enter.

Criando o Job no SQL Server


Nosso prximo passo a criao do job que ir executar o
comando PowerShell para obter as informaes das unidades
de disco. Sendo assim, acesse a instncia monitorada atravs do
Object Explorer do SQL Server e selecione a opo Jobs em SQL
Server Agent, conforme a Figura 1.

Criando o projeto SSIS


Podemos ento passar para a segunda etapa do nosso estudo, a
qual consistir no preenchimento da tabela atravs de um projeto
elaborado via SSIS (SQL Server Integration Services) que utiliza
tambm a linguagem de scripts PowerShell.
Caso seja possvel, execute essa segunda etapa de criao do
projeto SSIS no mesmo servidor onde foi criado o banco de dados.
Isto facilitar a organizao do projeto.
Dito isso, aps abrir o Visual Studio, crie um novo projeto selecionando a opo Integration Services Project e salve-o com um
nome de fcil identificao no diretrio de sua preferncia.
Com o projeto SSIS definido, passamos para a etapa de criao
do job na instncia SQL Server a ser monitorada.

Figura 1. Jobs SQL Server


Edio 128 SQL Magazine

15

SQL Server Reporting Services: Monitorando instncias no SQL Server

Nesta tela, clique com o boto direto em Jobs e selecione a opo


New Job. Em seguida, d um nome para identific-lo e especifique
o Owner dele como sendo o usurio sa.
Aps definirmos o usurio sa como sendo o owner deste job,
conforme citado no passo anterior, ainda na tela de criao do
job, esquerda, clique em Steps e depois em New. Na tela que ser
aberta, selecione o Type como PowerShell e informe o cdigo da
Listagem 3 em Command, de acordo com a Figura 2.

10.20.4.18. No necessrio que a pasta do servidor tenha o mesmo


nome da pasta da mquina de onde o arquivo foi gerado.
Portanto, nosso job contar com dois steps: um para a criao do
arquivo CSV e outro para copiar este arquivo da mquina local
para o servidor, como sinaliza a Figura 3.

Figura 3. JOB com os dois steps configurados


Figura 2. Definio do script para criao do arquivo CSV com as informaes
Listagem 3. Script para criao do arquivo .csv.
Get-WmiObject -Class Win32_Volume | where {$_.caption -notlike \* }| select
Name, FreeSpace, Capacity | Export-Csv C:\DBA\MonitoraEspaco_SERVER-SQL
.csv -NoTypeInformation -Delimiter ;;

Note que a parte em negrito corresponde pasta chamada DBA


existente na raiz do diretrio de arquivos desta mquina, local
onde o job foi criado e onde ser gravado um arquivo de nome
MonitoraEspaco_SERVER-SQL.csv aps a execuo desta tarefa
pelo SQL Server. Vale ressaltar que este arquivo pode ser gerado
em qualquer diretrio.
Depois de configurar o primeiro step do job, vamos criar o
segundo step, o qual ir copiar o arquivo gerado no diretrio C:\
DBA da mquina local para uma pasta compartilhada do servidor,
pois ser a partir deste arquivo .csv que iremos ler as informaes necessrias para posteriormente grav-las em nossa tabela
TB_DBA_Espaco. Tal script apresentado a seguir:
Copy C:\DBA \\10.20.4.18\DBA

Para que esse passo seja executado com sucesso preciso ter uma
pasta compartilhada no servidor, pois nesse step estamos copiando o arquivo CSV de uma pasta na mquina local para uma pasta
tambm chamada DBA localizada em nosso servidor, cujo IP

16 SQL Magazine Edio 128

Agora iremos terminar de montar o fluxo do nosso Job. Nesse


momento muito importante que algumas informaes sejam
conferidas, para que todo o processo seja realizado com sucesso,
tais como: certificar que voc possui a permisso para acesso
instncia a ser monitorada, se o banco de dados foi devidamente
criado nesta instncia, com todas as suas tabelas, e tambm que
se tenha permisso nesse banco, para que possamos realizar
consultas via nosso projeto SSIS.
Para executar o job criado e termos a certeza de que o arquivo
existir com as informaes que desejamos, iremos execut-lo
a partir do prprio SSIS, utilizando um componente chamado
Execute SQL Server Agent Job Task, presente na aba Control Flow.
Para configurarmos esse componente, deve-se dar um duplo
clique sobre ele, depois em Connection, clicar em New e digitar o
nome da instncia que est sendo monitorada, alm de preencher
as informaes do usurio SA e sua respectiva senha. Feito isso,
basta selecionar o job criado na listagem que aparecer, ressaltando o fato de que este ter o mesmo nome do job que criamos
anteriormente.
Aps definirmos o job para coleta das informaes, precisamos
configurar uma conexo em nosso servidor principal para gravar
essas informaes no banco que foi criado em nossa primeira
etapa (DBA_Monitor).
Na tela de configurao da conexo, ser necessrio possuirmos
algumas informaes importantes, dentre elas: o nome da instncia e de um usurio para logar, seja via Windows ou SQL Server

Authentication, e depois o nome do banco (DBA_Monitor), como


demonstra a Figura 4.
Para criar a conexo, na tela inicial do SSIS, clique com o boto
direito em Connection managers, opo localizada na parte inferior
central da janela inicial, e selecione New Ole DB Connections.

Aps finalizarmos a conexo para acesso ao SQL Server, conforme mostrado na Figura 4, agora temos que iniciar o nosso fluxo
no SSIS. Para isso, dentro do prprio SSIS, clique em View > Other
Windows > SSIS Toollbox e, na tela de toolbox, d um duplo clique
na opo Data Flow Task.
Logo aps, abra o componente Data Flow Task criado e, na aba de
Data Flow, crie um novo Flat File Source, o qual ir configurar uma
nova conexo para ler o arquivo CSV gerado anteriormente.
Para criarmos esse componente que ir realizar a leitura do
arquivo CSV, dentro de Data Flow Task, clique com o boto direito
em Connection Managers e selecione New Flat File Connection, que
a opo utilizada para a leitura de arquivos .txt e .csv.
Concluda essa etapa, uma nova tela ser aberta, onde devemos
apontar essa conexo para viabilizar a leitura dos dados. A partir
disso conseguiremos recuperar os dados fornecidos pelo job e
popularmos nossa tabela TB_DBA_Espaco.
Neste momento importante atentar para os itens grifados em
vermelho na Figura 5, pois eles iro garantir que as informaes
sejam lidas do arquivo correto e no formato desejado. Note que
o diretrio de onde estamos lendo o arquivo o mesmo diretrio
que foi configurado em nosso job.

Figura 4. Configurao para acesso a instncias SQL Server


Depois de preencher devidamente as informaes solicitadas,
clique em Test Connection e aguarde a mensagem Test Connection
Succeeded. Caso essa mensagem no seja exibida, certifique-se
que as informaes preenchidas estejam corretas e que o usurio
selecionado possui permisso para acesso respectiva instncia
e banco de dados.
Com o projeto criado e as conexes estabelecidas, podemos comear a ler as informaes de espao das LUNs das respectivas
instncias e gerar os arquivos que posteriormente sero lidos
pelo Reporting Services. Vale lembrar que nosso exemplo trata
do monitoramento do espao livre em unidades e LUNs, o que
geralmente um problema recorrente ao lidar com a administrao de servidores.
Durante o desenvolvimento desta parte do projeto, onde ser
utilizado o SSIS, adotaremos trs componentes, os quais sero
descritos a seguir. O primeiro destes componentes ser o responsvel pela leitura do arquivo CSV, o segundo ter a responsabilidade de criar algumas variveis (colunas com informaes
no existentes originalmente no arquivo gerado atravs do Job,
mas que sero necessrias ao persistir os dados no banco, como
o percentual de espao livre, o qual tem de ser obtido atravs de
um clculo) e o terceiro viabilizar a gravao das informaes
que desejamos no banco.

Figura 5. Configurao da conexo para ler o arquivo CSV


Estabelecida a conexo com o arquivo, devemos verificar em
Columns se as informaes esto sendo exibidas corretamente, e
em Advanced, nos certificar que as trs colunas esto com o tipo
String [DT_STR] e com o tamanho definido como 50.
Isto ser extremamente importante mais adiante, quando chegar
o momento de criarmos nossas variveis (as informaes que sero
necessrias para realizarmos a gravao em nossa tabela, mas
que no so trazidas diretamente do arquivo CSV) para gravar
os dados desejados no banco.

Edio 128 SQL Magazine

17

SQL Server Reporting Services: Monitorando instncias no SQL Server

Figura 6. Criao das variveis no Derived Column


Para conferir se este componente de leitura foi corretamente
configurado, podemos clicar na opo Preview (Figura 5) e certificar que as informaes esto sendo lidas adequadamente, ou
seja, se esto sendo exibidas as colunas com as unidades e os seus
respectivos espaos livres e utilizados no momento.
Confirmada essa etapa, nosso prximo passo gravarmos essas
informaes no banco de monitoramento, na tabela TB_DBA_Espaco.
Sendo assim, dentro do componente Data Flow definido anteriormente (em View > Other Windows > SSIS Toollbox), clique em Source
Assistant, selecione a opo Flat File, clique em New e depois em Ok.
Feito isso, automaticamente ser aberta uma outra tela com as conexes de Flat File existentes. Selecione a que criamos anteriormente e
verifique se as colunas esto sendo lidas conforme o esperado.
Assim, conclumos a configurao do componente para leitura
dos dados gravados no arquivo CSV. Agora, ainda dentro do Data
Flow, criaremos algumas colunas atravs de um componente
chamado Derived Column. Este processo importante para que
possamos preencher todas as colunas de nossa tabela TB_DBA_Espaco corretamente. Elas sero criadas agora porque so colunas
que no existem em nosso arquivo CSV, mas que preciso termos
persistidas em nosso banco.
Na Listagem 4 temos a descrio de cada uma das variveis
utilizadas na criao do componente Derived Column.
Listagem 4. Comandos para criao das colunas (variveis).
DataCadastro - GETDATE()
Instancia - (DT_STR,50,1252)SERVER-SQL
Usado_MB - (DT_NUMERIC,18,2)((DT_NUMERIC,18,2)((DT_NUMERIC,18,2)
Capacity - (DT_NUMERIC,18,2)FreeSpace) / 1024 / 1024)
Tamanho_MB - (DT_NUMERIC,18,2)((DT_NUMERIC,18,2)Capacity / 1024 / 1024)
Livre_MB - (DT_NUMERIC,18,2)((DT_NUMERIC,18,2)FreeSpace / 1024 / 1024)
PercFree - (DT_NUMERIC,18,2)((DT_NUMERIC,18,2)FreeSpace / (DT_NUMERIC,18,2)
Capacity * 100)
PercUsado - (DT_NUMERIC,18,2)(100 - ((DT_NUMERIC,18,2)FreeSpace / (DT_
NUMERIC,18,2)Capacity * 100))

A Figura 6 demonstra como cada uma das variveis deve ser configurada no Derived Column. Nesse momento muito importante
conferir se os nomes das variveis e seus respectivos tipos esto

18 SQL Magazine Edio 128

corretos, pois caso os tipos no sejam


especificados adequadamente, haver
divergncia nos tipos dos dados (ex: um
valor string no pode ser convertido em
inteiro) no momento da gravao destas
informaes em nosso banco de dados.
Agora resta gravar as informaes em
nosso banco de dados. Para isso, faremos
uso de um componente chamado OLE
DB Destination, conforme abordado a
seguir, lembrando sempre de conferir o
nome da instncia e da respectiva tabela
onde sero persistidas as informaes.
Caso o mapeamento de cada uma das
colunas da tabela TB_DBA_Espaco no
seja feito automaticamente, o mesmo pode ser feito atravs da
opo Mapping, na qual podemos mapear cada uma das colunas
vindas de nossa origem com as colunas existentes em nossa tabela
do banco de dados destino.
Como deve haver uma precedncia entre as tarefas na aba
Control Flow, para que desta forma o fluxo seja executado corretamente, sendo primeiramente lidas as informaes do arquivo
CSV e depois estas sejam gravadas no banco, devemos, por fim,
ligar o Execute SQL Server Agent Job Task ao Data Flow Task (ver
Figura 7). Dessa forma garantimos que as tarefas sejam executadas na ordem correta. Deste modo, devemos deixar o fluxo
interligado conforme as Figuras 7 e 8.

Criando o projeto SSRS


Aps a concluso do nosso pacote SSIS conforme mostrado
anteriormente, iniciaremos o processo do SQL Server Reporting
Services com a criao do relatrio. Sendo assim, abra o Visual
Studio, clique em New > Project e depois selecione a opo Reporting Services > Report Server Projeto Wizard. Na janela que ser
exibida, informe um diretrio de preferncia e salve o projeto com
um nome de fcil identificao.
O prximo passo para elaborar o projeto de Reports consiste
em configurar a conexo com o banco de dados. Assim, defina o
nome da conexo a ser criada em Data Source e em seguida clique
em Edit, conforme a Figura 9.
Nesse momento ser aberta uma nova tela para configurarmos a
conexo. Nesta tela, deve ser informado o nome da instncia do SQL
Server onde est localizado o banco de dados, alm de selecionar a
opo de autenticao do usurio como Windows Authentication.
Por fim, deve-se especificar o nome do banco (DBA_Monitor) na
listagem de bancos que ser exibida. Aps estes passos, podemos
testar a conexo atravs do boto Test Connection.
De volta tela inicial do Data Source, apenas clique em Next,
pois nossa conexo com o banco de dados de onde iremos ler as
informaes j estar devidamente configurada. O prximo passo
inserirmos a query, responsvel por recuperar os dados usados
no relatrio, na tela de Query String. O cdigo desta consulta
apresentado na Listagem 5.

Figura 7. Fluxo para importao das informaes Control Flow


Listagem 5. Query para leitura de dados na tabela TB_DBA_Espaco.
SELECT Drive, Instancia, Tamanho, Usado_MB, Livre_MB, Livre_perct,
CONVERT(varchar(10), Data_Cadastro, 103) AS Data
FROM TB_DBA_Espaco
WHERE Data_Cadastro BETWEEN @DataInicial AND @DataFinal

Figura 8. Fluxo para importao das informaes Data Flow


Aps inserir este cdigo, podemos avanar. Na tela seguinte
sero mostradas duas opes de tipo de relatrio a ser criado:
tabular e matrix. Em nosso exemplo adotaremos a opo Tabular,
pois faz parte do nosso objetivo expor as informaes em formato
de tabela.
Agora veremos algumas configuraes que so importantes, pois
iremos definir como sero exibidas e agrupadas as informaes

do nosso relatrio. Na opo Available fields sero listados todos os


campos resultantes de nossa query, sendo que iremos distribulos da seguinte forma, para uma melhor visualizao dos dados
no relatrio: a coluna Instancia ser adicionada na guia Page;
a coluna Data_Cadastro ser usada como coluna que vai agrupar
as informaes em Group; e os demais campos sero adicionados
em Details, de acordo com a Figura 10.

Edio 128 SQL Magazine

19

SQL Server Reporting Services: Monitorando instncias no SQL Server

seu respectivo servidor, como a verso do SSRS e principalmente


a URL para acesso a ele (observe a Figura 11).
Aps clicarmos em Next, basta informar um nome para o relatrio. Em nosso exemplo o nomeamos como Relatrio de Espao
em Disco.
Nesse momento, vamos apenas realizar alteraes no layout
do relatrio como, por exemplo, redimensionar o tamanho das
colunas e configurar as variveis que sero usadas na query, para
podermos filtrar por data os dados a serem exibidos.

Figura 9. Tela de configurao do Data Source

Figura 11. Tela de configurao do endereo do servidor SSRS

Figura 10. Tela de configurao dos campos Design Table


Em seguida, devemos definir o layout do nosso relatrio. Para
isso, adotamos a opo Stepped, para que as informaes sejam
exibidas de forma mais espaada e detalhada, e no em blocos,
como ocorreria se selecionssemos a opo Block.
O ltimo passo informar o estilo que o relatrio possuir, o
qual poder ser escolhido de acordo com a preferncia/demanda
do usurio.
Em nosso caso, selecionamos a opo Forest. E ainda antes da
exibio do relatrio, ser necessrio informar as configuraes do

20 SQL Magazine Edio 128

Por fim, adicionaremos as variveis de ambiente ao projeto. Deste


modo, acesse o menu View > Report Data, onde se encontram as
configuraes de Parameters, clique com o boto direito em @DataInicial, selecione a opo Parameter Properties, conforme mostrado
nas Figuras 12 e 13, e depois, na opo Data Type, selecione Date/
Time e clique em Ok. O mesmo deve ser feito com o parmetro
@DataFinal, que ser a outra data que adotaremos para viabilizar
a filtragem dos dados no relatrio.
Enfim podemos visualizar como ficou nosso relatrio, bastando
para isso clicar em Preview. Para definir o perodo desejado, utilizaremos os campos Data Inicial e Data Final. Em seguida, ao clicar
em View Report, observe o resultado final. Nele, sero exibidos os
discos disponveis no servidor separados por Data Cadastro e
pela instncia do SQL Server, conforme expe a Figura 14.
Finalmente temos um relatrio com as informaes dos espaos
em disco da mquina monitorada. Apesar do processo apresentado ser longo, ele extremamente til para os casos em que temos
vrias instncias em vrias mquinas e servidores diferentes que
precisamos monitorar diariamente. Depois de pronto, o nico
trabalho a ser feito visualizar no relatrio se h alguma mquina
que esteja com pouco espao livre, pois essa falta de espao pode

acarretar em srios problemas em ambientes de produo, onde


a utilizao do banco de dados seja de alta disponibilidade.
Vale ressaltar que focamos somente na questo do monitoramento de espao em disco das instncias, contudo, h outros itens que

devem ser monitorados seguindo a mesma linha de raciocnio,


tais como: logs de eventos do Windows, backups no realizados,
jobs que falharam, entre outros.

Autor
Walter Santos de Carvalho
Walter.santoscarvalho@gmail.com
Atua na rea de informtica h mais de sete anos. Formado em
Sistemas de Informao pelo CES-JF. Possui cursos de especializao DBA SQL Server e Oracle. No momento atua como Administrador
de Dados no CAED-UFJF em Juiz de Fora.

Autor

Figura 12. Tela do relatrio.

Felipe Pereira Delage


felipe.delage@gmail.com
Atua no ramo de Tecnologia da Informao h mais de sete
anos. bacharel em Sistemas de Informao pelo Centro de
Ensino Superior de Juiz de Fora (CES-JF) e ps graduado CBA em Gesto
de Projetos pelo IBMEC. Possui curso concludo para certificao Microsoft
SQL Server (10774A / 10775A/ 10777A) realizado no centro de treinamentos NSI (RJ).

Autor
Flavio Alexandre Martins
flavioalexandre@gmail.com
Atua no ramo de Tecnologia da Informao h 10 anos e h 6
anos como DBA MS SQL Server. Tecnlogo em informtica
Empresarial pela Universidade Presidente Antnio Carlos (Unipac).
Possui curso concludo para certificao Microsoft SQL Server (2779 /
2780) realizado na Allen Informtica (RJ).
Links:
Pgina com informaes sobre LUNs:
http://technet.microsoft.com/pt-br/library/cc754590(v=ws.10).aspx

Figura 13. Tela para configurao dos parmetros

Integration services
http://msdn.microsoft.com/en-us/library/ms169917.aspx
Flat File Connections
http://msdn.microsoft.com/en-us/library/ms170583.aspx
OleDB Connections
http://msdn.microsoft.com/en-us/library/ms170365.aspx
Data Flow task
http://msdn.microsoft.com/en-us/library/ms170425.aspx
Reporting services parameters
http://msdn.microsoft.com/en-us/library/dd220464.aspx
Reporting services connections
http://msdn.microsoft.com/en-us/library/ms156450(v=sql.105).aspx

Voc gostou deste artigo?


D seu voto em www.devmedia.com.br/sqlmagazine/feedback
Ajude-nos a manter a qualidade da revista!
Figura 14. Tela do relatrio gerado no Reporting Services
Edio 128 SQL Magazine

21

Pentaho BI:
Conhecendo a
ferramenta open source
E

mpresas de pequeno e mdio porte esto sempre


revendo os sistemas de gesto e traando planejamentos estratgicos alinhados as necessidades
de negcio. Cada vez mais se faz necessrio o acesso
rpido e fcil informao que integre diversas fontes de dados e que estejam organizadas de forma que
tragam subsdios e embasamento aos nveis de direo
e de gerncia. Sendo assim, instituies que possuem
ferramentas open source que conseguem realizar este
trabalho possuem um grande diferencial.
Pentaho uma plataforma open source para criao
de solues para as necessidades de Inteligncia de
Negcios (Business Intelligence). A ferramenta foi
desenvolvida em Java no ano de 2004, pela empresa
Pentaho Corporation nos Estados Unidos. Em seguida,
no ano de 2008, foi considerado um dos melhores softwares para inteligncia empresarial, de acordo com a
revista InfoWorld. Pentaho suporta ETLs (Extraction,
Transformation and Load), relatrios, workflow, OLAP
e minerao de dados com Data-mining e Big Data.
Por ser uma plataforma de cdigo aberto e ter uma arquitetura poderosa, que foi desenvolvida por APIs para
promover o crescimento das solues, desenvolvedores
podem montar rapidamente solues personalizadas de
BI. Dessa forma, possvel aumentar o valor e a capacidade das solues das empresas, criando propostas
superiores s tradicionais do mercado a um custo significativamente baixo.
A corporao auxilia a comunidade de desenvolvedores a integrar as estruturas de solues criadas de forma
organizada, tornando um software conciso e coeso, e
tambm melhorando estas solues na tentativa de criar
um software cada vez mais completo e robusto.
Um bom motivo para utilizar o Pentaho que as empresas esto cansadas de pagar valores abusivos pela
utilizao de softwares de BI. Softwares comerciais, em
geral, tm poucos investimentos para novas pesquisas e
desenvolvimento, enquanto o Pentaho est sendo atuali-

22 SQL Magazine Edio 128

Fique por dentro


Este artigo apresenta o Pentaho BI, uma ferramenta open source que
gerencia e manipula dados. No decorrer do artigo, o leitor poder entender os principais conceitos e recursos que compe esta ferramenta.
O Pentaho uma aplicao robusta que apoia as necessidades das
empresas de pequeno e mdio porte, auxiliando a agregar valor aos
negcios de forma concisa e inteligente, atravs de manipulao de
dados com data warehouse e minerao de dados, sem a necessidade
de um vasto conhecimento em programao e codificao.

zado constantemente pela comunidade de desenvolvedores.


O Pentaho ainda oferece inmeras vantagens sobre os softwares
proprietrios, pois no se baseia em uma verso de cdigo aberto
das ferramentas mais famosas disponveis no mercado. uma
arquitetura desenvolvida do zero, facilmente integrvel com
qualquer processo de negcio, pois utiliza padres populares
como o BPEL.
Sua arquitetura e tecnologia foram criadas para que os esforos
de desenvolvimento estejam focados na melhoria de funcionalidades, ao invs de migrao de softwares legado, mudando de
verso em verso. O processo de efetuar migraes torna os sistemas sucessveis a muitos erros, por tratar e adequar um grande
volume de dados a novos padres criados para o novo software,
e isso ocorre tanto para as informaes j existentes no sistema,
quanto para novas. So riscos grandes que geram custos e tempo,
pois novas verses levam tempo para serem criadas por completo.
A migrao de software legado demora um tempo considervel
para se tornar estvel com ajustes completos e erros mitigados.
Muitas vezes, quando tal estabilidade atingida, o software j
est obsoleto no mercado e no atende mais as necessidades de
seus clientes.
Existe uma licena comercial da Pentaho Corporation que isenta
de obrigaes dos termos da Licena Pblica GNU (GPL). O licenciamento separado por mdulos e componentes:
Pentaho Data Integration (PDI): mdulo de ETL, que tambm
conhecido comoKettle;

Pentaho Analysis Services: mdulo de OLAP, tambm conhecido


comoMondrian OLAP server;
Pentaho Reporting: um mdulo baseado e derivado do projetoJFreeReport;
Pentaho Data Mining: como o nome j sugere, uma ferramenta
para minerao de dados, derivado do projetoWeka;
Pentaho DashBoard: mdulo grfico para gerar dashboards;
Pentaho for Apache Hadoop ou Pentaho BI Suite: a verso
paraHadoop, voltada para clusters e processamento de grandes
massas de dados.

dados e executar o commit, assim, caso haja problema no processo,


reporta por logs em quais dados esto o erro e no perdido o
restante da transao;
Data Cleansing: disciplina de qualidade/limpeza de dados de
Data Warehouse;
Integrao de aplicaes: pode ser integrado via SOAP, iPhone,
Jasper Reports, trinta tipos de bancos, entre outros.

Figura 1. Estrutura da Sute do Pentaho

Para entender melhor o que componente PDI realiza, ser preciso responder a seguinte questo: O que um processo de ETL
(Extract, Transform and Load) e qual sua importncia? ETL um
processo de extrao, transformao e carga de dados, provenientes de uma ou mais bases de dados e destinada a uma ou mais
bases para compor um Data Warehouse.
Este processo o mais crtico e demorado na criao de um
DW, pois consiste na extrao de informaes heterogneas, na
padronizao de dados, na transformao e limpeza destes dados,
e na carga dos dados na base do DW.
Aps ocorrer o processo de extrao, transformao e a limpeza de dados, so efetuadas a correo de erros de digitao e
caracteres desconhecidos, permitindo a descoberta de possveis
violaes e garantindo a integridade dos dados. A importncia
deste processo moldar e entregar os dados formatados para que
estes fiquem de forma homognea para serem carregados no DW
e facilitar as consultas de sistemas OLAP. Assim, transformando
dados em inteligncia empresarial, no intuito de trazer recursos
em dados e anlise para a tomada de deciso, apresentando uma
viso macro dentro de algumas perspectivas.
Mas, o que um sistema de Data Warehouse? um sistema
utilizado para armazenar informaes de forma consolidada. Sua
estrutura favorece a obteno de relatrios e anlise de grandes
volumes de dados, coletando informaes transacionais e auxilia
na obteno estratgica de informaes para tomada de decises,
com a ressalva de que os dados so apenas para consulta.
O PDI uma ferramenta de ETL, que suporta vrios tipos de
entrada e sada, mas com uma vantagem: orientado a metadados. Sendo assim, no preciso escrever nenhuma linha de
cdigo, tornando-o fcil de ser utilizado por qualquer tipo de
usurio.

Pentaho Data Integration

Funcionamento do PDI

PDI ou Kettle um componente responsvel pelos processos de


Extrao, Transformao e Carga (ETL). Apesar de ferramentas
de ETL serem usadas em projetos de data warehouse, PDI pode
tambm ser usado para:
Migrao de dados entre aplicaes e banco de dados, onde permite ao usurio realizar a busca dos dados e percorrer caminhos
onde estes podem ser filtrados e alterados medida que as regras
so criadas nos steps e hops (que veremos a seguir);
Exportar dados de banco de dados para arquivos texto ou
Excel;
Carregar massivamente dados em banco de dados. Realiza carga de forma segura, pois tem o recurso de dosar um volume de

O PDI possui uma ferramenta grfica que desenha e testa


processos, cria Jobs e transformations - chamada Spoon. A
transformao orientada a fluxo de dados (data-flow), pois
formada por um caminho composto de Steps, que so os passos
a serem seguidos pelos dados para que eles sejam transformados
de acordo com as regras programadas dentro destes. Os Hops
so uma representao grfica do dado transitando entre dois
steps, com uma origem e um destino. Caso um step seja destino
de mais de um hop, o sistema tem a inteligncia de fazer um
merge nos dados. Esta transio, no processo de transformao,
assncrona e simultnea, ou seja, um dado flui no fluxo independente de outro.

Na Figura 1 possvel obter uma viso macro da estrutura


que compe as solues Pentaho considerando a sute como um
todo.
Veremos no decorrer deste artigo o que so cada um destes
mdulos e quais recursos estas ferramentas disponibilizam,
apresentando um overview para alinhar conceitos.

Edio 128 SQL Magazine

23

Pentaho BI: Conhecendo a ferramenta open source

No exemplo da Figura 2 possvel observar este processo com


clareza: o Step Text file input representa a entrada de um texto
com dados, que entra em uma condio no Filter rows (faz a
funo do if/else). Se a condio for verdadeira, os dados sero
ordenados no Sort rows e inseridos em alguma tabela no Table
output, caso seja falsa ou ocorra um erro, esta ficar no log e ser
exibido em vermelho na aba de logs, mas o sistema no interrompe
a transao, representado pelo Dummy (do nothing).
Os hops geram um fluxo a ser seguido e permitem que metadados passem de um step a outro, mas tal passagem no ocorre de
forma sequencial. Os hops determinam a direo e o caminho,
mas no necessariamente as sequencias das etapas a serem percorridas pelos dados. Todos os passos so iniciados em paralelo
e o Pentaho tem a inteligncia de lidar com este fato e reagir caso
necessrio.
Tais transformaes geram arquivos de extenso ktr que podem
ser executados dentro de um programa.

pelo Hop verde e verifica a existncia do arquivo e segue para a


transformao principal no step Success. Este exemplo pode ser
utilizado para realizar uma carga de dados noturna, por exemplo,
ou iniciar uma rotina diante de um determinado comportamento.
H diversas possibilidades e estes fluxos podem conter outros
Jobs e ou transformaes.

Figura 3. Exemplo de Transformation bsico

Execuo de Jobs por terminal Kitchen e PAN

Figura 2. Exemplo de transformation bsico


Existem diversos Steps que esto agrupados de acordo com suas
funcionalidades e que podem ser configurados para atender as
necessidades. Para maiores detalhes voc poder buscar a documentao oficial do PDI.
Mas, o que so Jobs? So rotinas de execuo de um bloco de
cdigo, executadas periodicamente. Em outras ferramentas, como
SQL Server, so criados com SQL, enquanto no Pentaho so criados
da mesma forma que as transformations, utilizando steps e hops.
Alm disso, so orientadas a controle de fluxo com diversas possibilidades de execuo e ainda dentro dos Jobs possvel executar
transformations ou ainda, outro Job.
No Kettle, quando o Job executado, a sequncia e a ordem dos
Steps e Hops so respeitadas, ao contrrio do transformation, ou
seja, enquanto um componente executado, os demais aguardam
a concluso desta execuo. Se, em algum momento, voc necessitar que a transformation aguarde o fim de outra, dever gerenciar
este fluxo com Jobs.
Na Figura 3 ser recuperado um parmetro e validado em uma
transformao. O Job ir validar a existncia de um arquivo.
O Job apresentado ser iniciado no step Start e espera por um
arquivo no passo Wait for data file. Se a transformao falhar
por no informar um parmetro ou acontecer algum erro, o Hop
vermelho encaminha o Job para o Send Error Log e envia os
erros para algum lugar pr-definido, como um email, por exemplo, com detalhes das ocorrncias. Caso contrrio, o fluxo segue

24 SQL Magazine Edio 128

possvel utilizar arquivos para serem executados diretamente


por terminais, como executveis. So arquivos que ficam na pasta
de instalao nomeados por Kitchen no caso dos Jobs e Pan quando
so transformaes. Esses arquivos tm formato do tipo .bat ou
.sh e podem ser geradas em outras extenses, isto ir depender
da plataforma que est sendo utilizada. Quando executados via
terminal, ir se comportar da mesma maneira que seria no Spoon,
porm nestes casos, o log ser exibido no terminal, a menos que
seja configurado para exibir em outro local.

Pentaho Reporting
Este mdulo se refere a um conjunto de ferramentas de cdigo
aberto para gerar relatrios, que pode escalar cenrios com mltiplas dimenses em larga escala, de fcil formatao, visualizao
e manipulao de dados, com um alto poder de performance com
um baixo consumo de memria e de processamento.
Nele esto inclusos Report Designer, Reporting Engine e Reportings SDK. Baseia-se em JFreeReports, uma biblioteca open
source do Java. Alm disso, gera relatrios incorporados ao BI com
finalidades gerenciais, operacionais e de produo, que podem
ser usados em outras aplicaes.
Report Designer um editor grfico, responsvel pelo ambiente
visual de design que facilita a formatao e personificao de aparncia de relatrios sofisticados e ricos, podendo ser usado para
desktop. O recurso Reporting Engine faz integrao da biblioteca
JFreeReport do Java para o gerenciamento dos relatrios e o SDK
o apoio de todas as bibliotecas necessrias para o funcionamento
da Engine. Este conjunto de ferramentas possibilita a integrao
com outro aplicativo servidor ou desktop.
O Pentaho Reporting facilmente personalizvel. Utilizando
o styling reports, pode-se manipular a granularidade de aparncia e dados, sendo possvel adicionar recursos visuais como
imagens e logotipos. Suporta tambm a exportao dos relatrios
em diversos formatos: PDF, HTML, XML, CSV, Rich Text ou TXT.

Tem o recurso que permite trabalhar com


mais de 30 fontes de dados ao mesmo
tempo, agrupando as informaes em um
nico relatrio. Alm do mais, as frmulas
do excel podem ser utilizadas para criar
relatrios dinmicos.
Um dos recursos deste mdulo o
Reporting out-of-the-box, um aplicativo
que permite criar relatrios out-of-the-box,
ou seja, relatrios que podem ser usados
em outras aplicaes. Assim, possvel
gerar relatrios de forma simples, como
mostra a Figura 4 ( esquerda), onde
transforma-se dados em informaes de
negcio. possvel at mesmo criar seus
prprios componentes com programao,
integrao com outros sistemas e distribuio independente, agregando valor a
auditoria, finanas, a um portal, sistemas
existentes, entre outros.
Esta aplicao apresenta subsdios para
criar relatrios relacionais e relatrios
analticos (fontes de dados OLAP). Suporta
virtualmente ilimitados sub-relatrios que
podem ser aninhados independentemente
da profundidade. Tambm capaz de
receber parmetro criando informaes
dinmicas com diferentes sistemas de
origem.
Mas, o que vem a ser OLAP? On-Line
Analytical Processing ou Processamento
Analtico On-Line. uma interface com
usurio que utiliza o armazenamento de
informaes para apresentar dados de tal
forma que este usurio passe a ter conhecimento destes dados, e possa analis-los
com profundidade e explor-los de diversos ngulos.
O OLAP e o Data Warehouse trabalham
juntos, de forma complementar, pois
enquanto o DW guarda informaes, o
OLAP as recupera com maior eficincia e
velocidade possvel.

Pentaho Analysis
uma ferramenta para otimizar a capacidade do processamento de anlises
poderosas em um grande volume de dados
multidimensionais, com endereamento
complexo e alta velocidade de resposta.
O Pentaho Business Analytics coloca
anlises poderosas nas mos de usurios
corporativos. Com uma interface intuitiva

Figura 4. Exemplos de relatrio simples e sub-relatrios

Figura 5. Exemplos de dados analticos


e interativa do usurio web, os usurios
no tcnicos podem explorar e visualizar
livremente os seus dados de negcios por
mltiplas dimenses, tais como produto,
geografia e cliente.
possvel criar views multidimensionais com mtricas especficas e atributos
para anlise e integrao de produtos BI
Pentaho. Apresenta ainda uma biblioteca
iterativa para compor anlises: Geo-mapping, como a esquerda da Figura 5, onde
possvel ver um mapa, e como direita,
apresentando a disperso dos dados com
um grfico de bolhas em um produto
cartesiano.
Esta ferramenta trabalha com OLAP,
utilizando cubos e tabelas fato, que consistem em camadas que disponibilizam
informaes em quatro vertentes:
Camada de apresentao: o que
mostrado na tela do usurio e como ele
poder interagir e transformar os dados
em informaes que atendam s suas
necessidades;
Camada dimensional: para apresentar
dados multidimensionais com tabelas e
grficos dinmicos que atendem a exibio

padro de grficos (linha, torta, barras)


e tambm com ferramentas avanadas,
como mapas clicveis, interativos e dinmicos. Esta camada analisa, valida e
executa consultas MDX (Multidimensional
Expressions);
Camada estrela: responsvel pela manuteno de um cache, ou clulas na memria
qualificadas por valores de colunas de
dimenso;
Camada de armazenamento: um
Sistema de Gerenciamento de Banco de
Dados Relacional que guarda consultas
semelhantes em cache.
E de que forma esses cubos podem ajudar
nos negcios? Cada camada pode disponibilizar os dados de formas diferentes,
por exemplo: uma dimenso apresenta
dados atuais e outra, histricos. Esta tcnica promove uma alta performance para
trabalhar com os dados para anlise em
tempo real.
Esta ferramenta prope uma rica interface
grfica com painis iterativos, com um
grande poder de orquestrao, onde voc
pode arrastar e soltar dashboards com

Edio 128 SQL Magazine

25

Pentaho BI: Conhecendo a ferramenta open source

design baseado na web, podendo ser personalizados e construdos exclusivamente


para seu negcio e integrao com portais
e mash-up.

Dashboards
Dashboards so um mdulo para gerar
informaes especficas como desempenho individual, departamental ou at de
toda a empresa, incorporando mtricas,
filtros e relatrios, podendo serem ou no
personalizados. So teis e recomendados
para demonstrar KPIs (indicadores de
performance), e utilizados para apresentar
dados com detalhes. Na Figura 6 so exibidas duas possibilidades de composio
de dashboards.

Mobile BI
E que tal gerenciar tudo isso pelo smartphone e/ou tablet? O Mdulo de BI do

Figura 6. Exemplos de Dashboards

Figura 7. Integrao com Big Data

26 SQL Magazine Edio 128

Pentaho oferece ainda, aos usurios mveis, a oportunidade de se tornarem mais


produtivos e acessar, analisar e compartilhar informaes de negcios de qualquer
lugar, com a criao de novos relatrios
analticos direto no iPad.

Pentaho Big Data Analytics


O Pentaho Big Data Analytics uma
ferramenta que apoia o ciclo de vida de
dados em grande volume, com integrao
de dados e anlise de negcios fortemente
acoplados. Isto permite acelerar o processo
de transformao do Big Data em fonte de
informaes teis, independentemente da
quantidade de fontes que estes dados so
originados.
Mas o que vem a ser Big Data? So
ferramentas de gerncia e anlise de
um grande volume de dados, originado
de fontes diversas. Trabalha em alta ve-

locidade buscando transformar dados


em informaes que agregam valor ao
negcio. Alm disso, auxilia no desenvolvimento de estratgias de mercado,
baseadas na identificao das necessidades do cliente com coeso, confiabilidade, segurana e integridade dos dados.
Tambm importante entender o que
minerao de dados e qual a relao com
este artigo. Data Mining o processo
analtico de minerao de grande quantidade de dados, na busca de padres e/ou
relacionamentos sistemticos, descobrindo
problemas ou oportunidades escondidas,
gerando produtividade e vantagens competitivas.
A premissa do Data Mining uma argumentao ativa, isto , em vez do usurio
definir o problema, selecionar os dados e
as ferramentas para analisar tais dados, as
ferramentas do Data Mining pesquisam
automaticamente os mesmos, procura
de anomalias e possveis relacionamentos, identificando assim problemas
que no tinham sido identificados pelo
usurio.
No mercado existem ferramentas analticas como Hadoop e MapReduce, como
tambm banco de dados preparados para
armazenar, gerenciar e analisar grande
volume de dados, como NoSQL. Mas ento, porque trocar estas ferramentas pelo
Pentaho Analytics? Esta ferramenta faz
integrao com estas outras, utilizando o
que elas tm de melhor e acrescentando
os recursos da Suite Pentaho, com integrao multithreaded, suporte a cluster e
processamento distribudo em vrios ns,
incorporando as ferramentas grficas e
dashboards.
Na Figura 7 possvel entender este
processo um pouco melhor, onde uma
empresa utiliza fontes de dados de diferentes origens, incluindo sistemas de
CRM e ERP, implementando um cluster
do tipo Hadoop para descarregar dados,
reduzindo custos no armazenamento e no
aumento de velocidade de consultas com
Data Mart. Em cima dessa infraestrutura
possvel melhorar a qualidade do Data
Warehouse sem grandes conhecimentos
de codificao utilizando o Big Data integrao do Pentaho.

Com base no que foi apresentado, percebe-se que o Pentaho


oferece ferramentas completas para transformar dados em informaes, agregando valor ao negcio com integrao de diversas
fontes de dados. Trata-se de uma plataforma unificada que fornece flexibilidade, extensibilidade e escalabilidade para atender
as necessidades de TI, promovendo integrao com as melhores
ferramentas do mercado.

Autor
Andressa de Andrade Freitas
andie.andrade@hotmail.com
Analista de Sistemas Ita. Formada em anlise e desenvolvimento de sistemas pela Fatec. Cursando MBI em Tecnologia
de Software na PECE POLI USP. Trabalha h 7 anos com TI, 4 anos com
desenvolvimento e atualmente com gerenciamento de projetos.

Links:
[1] Pentaho
http://www.g3itcon.com/product/pentaho-business-intelligence
[2] Pentaho Business Analytics
http://www.pentaho.com/product/business-visualization-analytics
[3] Big Data In Banking: Its Time To Act
http://www.pentaho.com/sites/default/files/uploads/resources/forrester-research-bigdatain-banking.pdf
[4] Optimize the Data Warehouse
http://www.pentaho.com/Optimize-the-Data-Warehouse
[5] Transformations, Steps, and Hops
http://infocenter.pentaho.com/help/index.jsp?topic=%2Fpdi_user_guide%2Fconcept_
pdi_usr_transformations.html

Voc gostou deste artigo?


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

Edio 128 SQL Magazine

27

Oracle RAC com DNS:


balanceamento de carga
Round Robin
A

s organizaes esto cada vez mais dependentes


do funcionamento adequado de seus bancos de
dados devido ao impacto de seu mau funcionamento e prejuzos gerados. Implantar solues que
realmente garantam a alta disponibilidade em banco de
dados e software, mantendo-o disponvel o maior tempo
possvel com menor nmero de falhas, juntamente com
alto desempenho e segurana, a procura de vrias
empresas. Dessa forma, ferramentas como a Oracle Real
Application Clusters, tambm chamada de Oracle RAC,
tornam-se uma soluo para criao de um ambiente de
alta disponibilidade.
A Oracle RAC um cluster que consiste em mltiplos
computadores interconectados que tm como objetivo
compartilhar e processar requisies efetuadas com softwares para usurios finais, tornando o banco de dados
distribudo. A Figura 1 exemplifica sua arquitetura e
funcionamento. As trs aplicaes/servidores web so
usurios finais que enviam requisies aos servidores
(nodos) clusterizados. Antes da requisio ser recebida
por um dos servidores, o processo responsvel por
efetuar a conexo o chamado SCAN (Single Client
Access Name), que trabalha como um intermedirio entre conexes de usurios e banco de dados. As conexes
s so permitidas quando no h interrupes entre
mquinas usurios, nodo do cluster e servidor de banco
de dados. Em seguida, cada instncia interligada recebe
as requisies efetuando o balanceamento de carga a
fim de distribuir o processamento. Essa distribuio
se d pelo monitoramento de cada instncia que feito
por um processo em background chamado Heartbeat
( um daemon que trabalha em background usado para
monitorar se determinado computador est ativo ou no.
Ele deve ser combinado com um gerenciador de cluster
que possui como tarefa iniciar e parar servios como
endereos IP e servidores web).
SCAN (Single Client Access Name) uma camada entre
os clientes e os ouvintes locais do cluster. Atua como
uma nica conexo para clientes deixando transparente
a falha de algum nodo do cluster. O SCAN precisa que

28 SQL Magazine Edio 128

Fique por dentro


Evitar fracassos e falhas na disponibilidade do banco de dados uma
tarefa difcil que exige investimento e profissionais especializados.
Travamento de servidores, velocidade da conexo via rede, sobrecarga de trabalho nos servidores, tempo de recuperao do banco
de dados, tempo em downtime muito elevado, o retardo da entrega
ou armazenamento dos dados so alguns dos fatores que influenciam
negativamente qualquer soluo para alta disponibilidade em banco
de dados. Neste artigo ser apresentada a ferramenta Oracle Real
Application Cluster, que uma soluo para alta disponibilidade em
banco de dados. Ser visto todo processo de implantao e configurao desta ferramenta em sistema operacional Linux. O tema
til para demonstrar todo processo de instalao e configurao da
ferramenta Oracle Real Application Cluster em um ambiente com
mquinas virtuais.

sejam definidos no mnimo trs endereos IPs que estejam na


mesma sub-rede para utilizar o balanceamento de carga e para
alta disponibilidade independentemente do nmero de nodos no
cluster. O benefcio para os clientes que usam o SCAN que eles
no precisaro de mudanas de configuraes se adicionarmos
ou removermos ns no cluster.
importante observar que o processo de implantao e criao
de um cluster deve contemplar uma anlise e projeo da estrutura do ambiente de acordo com a especificidade da empresa,
entre outras caractersticas e necessidades. Neste contexto, este
artigo apresenta na prtica a instalao da ferramenta Oracle Real
Application Clusters em sua verso 11g Release 2. A Oracle Real
Application Clusters fornece benefcios como:
Alta disponibilidade: segurana para falhas em servidores e
instncias;
Escalabilidade: adicionar mais nodos/servidores em necessidade futuras;
Custo: somente pago o que utilizado;
Computao em grade (Grid);
Aumento e diminuio do cluster conforme necessidade;
Adicionar e remover nodos com facilidade;
Utilizao de repositrio de carga;

Execues de processos de forma paralela;


Distribuio de carga entre os nodos do cluster.

Figura 1. Arquitetura do Oracle RAC


Um dos mais importantes componentes da Oracle RAC o
Oracle Clusterware, um software que agrupa todos os servidores
individuais para que cooperem como um nico sistema. Este
software pode gerenciar todos os processos do cluster de forma
independente assegurando proteo para o ambiente clusterizado.
Qualquer processo que ele gere conhecido como um recurso
de cluster, que pode ser uma instncia ou um servio. O Oracle
Clusterware possui quatro daemons que so iniciados em respawn,
ou seja, responsvel pela reinicializao do servio caso seja
finalizado de forma inesperada ou incorreta. Os daemons so:
CSSD (Cluster Syncronization Services Daemon): responsvel
por controlar todos os nodos do cluster e ajudar no monitoramento
de sade dos ns usando Voting Disk. Se falhar, o servidor reiniciado imediatamente. o processo principal no cluster;
CRSD (Cluster Ready Services Daemon): responsvel pela realizao de todas as operaes de recuperao e gerenciamento
da alta disponibilidade como o gerenciamento do OCR (Oracle
Cluster Registry). Caso algum recurso falhe, ele reiniciado, e se
o servio falhar, o servio reiniciado sem reiniciar o servidor;
EVMD (Event Manager Daemon): responsvel por publicar os
eventos que o CRS cria como, por exemplo: incio da instncia,
parada da instncia, incio e parada do listener. Caso falhe,
reiniciado sem reiniciar o servidor;
OPROCD (Process Monitor Daemon): responsvel pela monitorao do cluster a fim de fornecer I/O fencing. Quando o nodo
apresentar algum problema, esse processo I/O removido. um
processo filho do CSSD, e se falhar reiniciado sem reiniciar o
servidor.

OCR o arquivo de controle do cluster onde so armazenadas


informaes de status de cada recurso, como: os nomes dos nodos,
os endereos IPs e VIPs, qual a localizao do Voting Disk, nome
do banco de dados e instncias, nome dos listeners, etc. A perda
desse arquivo implica em parada total do ambiente. J o Voting
Disk contm informaes sobre a disponibilidade de cada nodo,
sendo que cada instncia registra informaes regularmente nesse
arquivo para indicar que esto ativas. Se um n perder acesso ao
Voting Disk, ele ser reiniciado imediatamente porque faz parte
da arquitetura do CSS (Servio de Sincronizao de Cluster).
Outros recursos importantes que o Oracle RAC possui so o
VIP (Virtual IP), FAN (Fast Application Notification), Database
Services e Cluster Verification Utility:
VIP: o endereo IP virtual de cada ponto do cluster. Se um
nodo cair, outro assume seu VIP. Assim os usurios no percebem
a falha do nodo;
FAN (Fast Application Notification): o mecanismo pelo qual as
aplicaes so informadas da mudana no cluster e informaes
sobre desempenho para que adaptem suas conexes;
Database Services: So abstraes lgicas para gerenciar cargas
de trabalho de banco de dados;
Cluster Verification Utility: um utilitrio para verificao de
componentes do Cluster que pode ser utilizado durante a instalao ou mesmo para diagnosticar um problema em produo.
Nas sees seguintes sero apresentadas as etapas para instalao da ferramenta Oracle RAC, iniciando da configurao do
sistema operacional. Em todo o processo de instalao foram
utilizadas mquinas virtuais usando VirtualBox, na verso 4.2.18
e sistema operacional GNU/Linux Cent OS 5.9 i386 (x86-64),
kernel 2.6.18-348.

Configurao do sistema operacional


A primeira etapa deste artigo deve ser feita para todos os nodos
do cluster. Estamos considerando que o sistema operacional est
instalado com uma memria RAM de no mnimo 2 GB, devido ao
mnimo exigido pelo software Oracle RAC. Tambm necessria
a adio de duas interfaces de rede, uma para conexo interna que
ser usada pelo nodo do cluster e a outra para conexo externa,
usada para receber conexes clientes. Foi instalado o sistema
operacional em trs mquinas virtuais iguais, chamadas respectivamente de RAC01, RAC02 e NFS conforme apresentado
na Figura 2.

Figura 2. Estrutura de nomes das mquinas virtuais

Edio 128 SQL Magazine

29

Oracle RAC com DNS: balanceamento de carga Round Robin

Em cada interface de rede criada na estrutura do Linux, foi dado


o nome eth0 para rede externa e eth1 para rede interna, com os
IPs definidos na Figura 3 configurados para os servidores RAC01,
RAC02 e NFS.
Aps configurao da rede necessrio informar os endereos
IPs no arquivo hosts do S.O. para que seja feito o relacionamento
entre o nome do computador e o endereo IP. Como ser usado o
recurso SCAN do Oracle RAC, necessrio que sejam definidos
no mnimo trs endereos IPs para cada nodo do cluster sendo: IP
virtual, interno e externo. No arquivo hosts foram estabelecidos
os seguintes IPs apresentados na Listagem 1.

net.ipv4.ip_local_port_range: porta inicial e final para trfego


TCP e UDP da rede;
net.core.rmem_default: tamanho do buffer de recepo padro
para todas as conexes;
net.core.rmem_max: tamanho do buffer de recepo mximo
para todas as conexes;
net.core.wmem_default: tamanho do buffer de envio padro
para todas as conexes;
net.core.wmem_max: tamanho do buffer de envio mximo para
todas as conexes.
Parmetros de kernel e limites de valores
fs.aio-max-nr

1048576

fs.file-max

6815744

kernel.shmmni

4096

kernel.sem

250 32000 100 128

net.ipv4.ip_local_port_range

9000 65500

net.core.rmem_default

262144

net.core.rmem_max

4194304

net.core.wmem_default

262144

net.core.wmem_max

1048586

Tabela 1. Parmetros do kernel


Figura 3. Definio dos IPs das interfaces de rede

Criao de usurios e grupos de usurios


Listagem 1. Lista de ips definidos.
# IP externo
192.168.1.10 rac01.rac.com rac01
192.168.1.20 rac02.rac.com rac02
# IP virtual
192.168.1.100 rac01-vip.rac.com rac01-vip
192.168.1.200 rac02-vip.rac.com rac02-vip
# IP interno
192.168.0.1 rac01-priv.rac.com rac01-priv
192.168.0.2 rac02-priv.rac.com rac02-priv
# NFS e DNS
192.168.1.25 nfs.rac.com nfs

Minimizar falhas e travamento do S.O. ajuda a manter o ambiente clusterizado mais seguro. Para isso, os parmetros lidos
pela Oracle RAC foram configurados e devem ser inseridos no
arquivo sysctl.conf, permitindo somente ser usado o valor mximo
definido para cada recurso visto na Tabela 1.
Cada parmetro lido no momento da inicializao do S.O. Suas
funes so distintas e devem ser ajustadas para otimizar o mximo de recurso possvel dentro de um ambiente clusterizado.
Para essa configurao, valem as definies:
fs.aio-max-nr: valor mximo de requisies I/O concorrentes
permitidas;
fs.file-max: total de arquivos que o Linux dever suportar em
paralelo;
kernel.shmmni: mximo de segmentos de memria compartilhada;
kernel.sem: mximo de semforos para performance da rede;

30 SQL Magazine Edio 128

A segunda etapa deve ser realizada para os nodos RAC01 e


RAC02. O usurio oracle e os grupos de usurios oinstall e
dba so criados por medida de segurana para no comprometerem o funcionamento do S.O., como pode ocorrer com o usurio
administrador ao fazer alteraes em arquivos incorretamente.
O grupo dba se faz necessrio por identificar todas as contas de
usurios que possuem privilgios para acessar o banco de dados
como sysdba. J o grupo oinstall serve para ter acesso ao catlogo
de todo o software instalado.
Com os usurios e grupos criados, foram atribudos limites ao
usurio oracle para uso dos recursos do S.O. Esta limitao foi
feita para melhorar o desempenho do software definindo a quantidade de arquivos abertos e processos por usurios ou grupo de
usurios. A Tabela 2 apresenta valores definidos para o usurio
oracle nos tipos soft e hard, e processos nproc, nofile e stack.
O parmetro soft serve para definir o mnimo e o hard definir
o mximo de recursos. Quanto ao nproc, serve para limitar qual
o nmero mximo de processos, e o nofile para limitar o nmero
mximo de arquivos abertos. J o stack define o tamanho mximo
de pilha. Esses parmetros devem ser descritos em linhas informando um domnio, podendo ser o nome do usurio ou grupo
de usurio, o tipo, o item e o valor.

Configurao do servidor NFS


A configurao apresentada nesta etapa foi feita somente para
o nodo NFS, onde ser o servidor de DNS e de balanceamento de
carga. O nome NFS vem de Network File System, um sistema

distribudo de compartilhamento de arquivos e diretrios entre


computadores atravs da interface de rede chamada Sistema de
Arquivo Virtual (VFS), que utiliza protocolo TCP/IP. Ele ser
usado para prover compartilhamento dos arquivos OCR, Voting
Disk e do banco de dados para instalao do Oracle RAC.
As duas instncias (RAC01 e RAC02) referentes a cada n do
cluster acessam o servidor NFS para efetuar a gravao e leitura
nos arquivos OCR e Voting Disk, a fim de monitorar as aes de
cada nodo. Na Figura 4 ilustrado seu funcionamento.
<dominio>

<tipo>

<item>

<valor>

oracle

Soft

nproc

2047

oracle

Hard

nproc

16384

oracle

Soft

nofile

1024

oracle

Hard

nofile

65536

oracle

Soft

stack

10240

Tabela 2. Limitao de recurso para usurio oracle

Figura 4. Estrutura do servidor NFS


Para que os nodos do cluster acessem essas informaes compartilhadas no servidor NFS, se faz necessria a criao de diretrios
onde os arquivos OCR, Voting Disk sero armazenados e esses
diretrios devem ser montados para cada nodo do cluster. Com
isso, esses diretrios so montados com parmetros especficos
como: leitura, gravao, qual tipo de acesso, etc., sendo adicionado
do arquivo etc/exports do sistema operacional. Os principais
parmetros so:
ro: compartilhar para somente leitura;
rw: compartilhar para leitura e gravao;
sync: garante que os dados so gravados automaticamente em
disco aps a transferncia dos mesmos;
async: responde as requisies antes da gravao em disco.
Isso resulta em perda de dados quando h perda de conexo do
servidor;
wdelay: aguarda todos os pedidos em fila antes da gravao
do disco;
no_wdelay: melhora o desempenho quando h vrias solicitaes de gravao para o disco. Isso ocorre porque se houver um

pedido de gravao em andamento, a gravao do disco no


feita aguardando esse pedido;
secure_locks: exige autorizao de todos usurios;
insecure_locks: no exige autorizao de todos os usurios;
root_squash: impede que o usurio root tenha privilgios para
alterar os arquivos;
no_root_squash: permite que o usurio root do S.O. seja utilizado com todos privilgios para alterao do arquivo.
No servidor NFS foi criado o arquivo exports montado da seguinte forma:
/shared_config *(rw,sync,no_wdelay,insecure_locks,no_root_
squash);
/shared_data *(rw,sync,no_wdelay,insecure_locks,no_root_
squash).
J os diretrios montados nos nodos do clusters no arquivo etc/
fstab do sistema operacional seguiram a estrutura:
rw: monta o sistema para leitura e escrita;
bg: se a primeira tentativa de montagem falhar, realiza a montagem em segundo plano. Quando feito em segundo plano, todas
as outras montagens tambm ficam em segundo plano;
hard: se a operao do arquivo NFS tem um grande tempo de
espera, continua solicitando a operao;
nointr: impede que as operaes NFS sejam interrompidas
enquanto aguarda uma resposta do servidor;
tcp: monta o sistema de arquivos usando protocolo TCP;
vers: uma alternativa para nfsvers. O nfsvers utiliza um nmero de verso alternativo para entrar em contato com o servidor
NFS no host remoto;
timeo: valor em dcimos de segundo antes de enviar a primeira
retransmisso do arquivo. O valor padro usado para TCP 60
segundos;
rsize: tamanho mximo de nmero de bytes usado para ler o
arquivo;
wsize: tamanho mximo de nmero de bytes usado para escrever no arquivo;
acregmin: o tempo mnimo em segundos que os atributos de um
arquivo normal devem estar em memria cache antes de solicitar
novas informaes para o servidor;
acregmax: o tempo mximo em segundos que os atributos de um
arquivo normal devem estar em memria cache antes de solicitar
novas informaes para o servidor.
Os diretrios foram montados na seguinte estrutura:
nfs:/shared_config /u01/shared_config nfs rw, bg, hard, nointr,
tcp, vers=3, timeo=600, rsize=32768, wsize=32768, actimeo=0, oac
nfs:/shared_data /u01/oradata nfs rw, bg, hard, nointr, tcp,
vers=3, timeo=600, rsize=32768, wsize=32768, actimeo=0 0 0
Vale observar que antes dos diretrios serem montados, as pastas
shared_config e shared_data foram criadas no servidor NFS
adicionando permisso ao usurio responsvel pela instalao

Edio 128 SQL Magazine

31

Oracle RAC com DNS: balanceamento de carga Round Robin

do Oracle RAC. Sem esta definio, o compartilhamento dos


arquivos OCR e Voting Disk no ser realizado e isso trar total
parada do cluster.

Configurao do DNS
O servidor DNS o principal item para atender a outro recurso
chamado SCAN do Oracle RAC, com a funcionalidade do balanceamento de carga esttico utilizando algoritmo Round Robin. Este
algoritmo utiliza uma tcnica que faz o direcionamento de forma
circular com as requisies que esto sendo distribudas para os
servidores. Por exemplo, as conexes de entrada so direcionadas
para o servidor A, depois para o servidor B e para o servidor C,
retornando ao servidor A. Por ser esttico, o desempenho dos
processadores definido no incio da execuo, tendo como objetivo reduzir o tempo de execuo total de um programa atual,
enquanto minimiza o atraso de comunicao.
Em um ambiente onde vrios nodos atuam como um nico
sistema, a diviso da carga de trabalho feita entre eles para que
possam ter aproveitamento do poder de processamento de cada
mquina, assim ganhando produtividade.
Conforme ilustrado na Figura 5, as requisies clientes
so direcionadas para o servidor DNS e esse servidor retorna
um endereo IP ao cliente em uma ordem diferente para cada
conexo. Durante a instalao da ferramenta Oracle RAC, para
cada um dos trs endereos IPs criado um IP virtual SCAN
e um ouvinte (listener), criando uma relao de dependncia
entre eles. Isso significa que cada par de recurso (IP virtual
SCAN + listener) criado em um servidor diferente no cluster.
Toda conexo que estabelecida armazenada em parmetros
do banco de dados chamados local_listerner e remote_listener.
O local_listener especifica a conexo do ouvinte local. O remote_listener identifica os ouvintes SCAN. Quando um dos nodos
falha, o IP virtual SCAN ir perder conexo com o listener
local. Ao perder a conexo, o recurso SCAN ir redirecionar
essa conexo para o prximo endereo IP (listener local) que
ir acessar os parmetros do banco de dados onde so armazenadas as conexes e direcionar a conexo para o nodo com
menor carga de trabalho.
Foi utilizado para implementao de DNS o BIND (Berkeley
Internet Name Domain) junto ferramenta Nslookup, que serve
para obter informaes de um determinado domnio, host e IP
do servidor.
Com a instalao do BIND, o arquivo named que significa Name
Daemon, seguiu as regras especificadas nas normas do protocolo
DNS. Para conexes das mquinas clientes, dos nodos dos clusters
para o servidor de DNS, a criao de zonas de conexes diretas
e reversas fazem parte do servidor de DNS. Isso ir garantir que
o host do servidor ser traduzido para o seu endereo IP e viceversa. Para as conexes diretas foi criado:
zone localdomain. IN { type master;
file 1.168.192.in-addr.arpa;
allow-update { none; }; };

32 SQL Magazine Edio 128

E para conexes reversas:


zone 1.168.192.in-addr.arpa. IN { type master;
file 1.168.192.in-addr.arpa;
allow-update { none; }; };

Figura 5. Balanceamento de carga utilizando SCAN


Observando esses comandos, a instruo IN responsvel por
fazer apontamento do host do servidor para o endereo IP e na
segunda instruo, efetuar o apontamento do endereo IP ao host.
Para o apontamento ser realizado no arquivo localdomain.zone
criado, devem ser inseridos quais hosts e endereos IP compem
o servidor de DNS informando qual host ir apontar para seu
endereo IP. Veja o exemplo da Listagem 2.
Listagem 2. Definio de IPs
IN NS localhost
localhost
IN
rac01
IN
rac02
IN
rac01-priv
IN
rac02-priv
IN
rac01-vip
IN
rac02-vip
IN
rac01-scan
IN
rac01-scan
IN
rac01-scan
IN

A
A
A
A
A
A
A
A
A
A

127.0.0.1
192.168.1.10
192.168.1.20
192.168.0.1
192.168.0.2
192.168.1.100
192.168.1.200
192.168.1.55
192.168.1.56
192.168.1.57

O mesmo feito para o arquivo 1.168.192.in-addr.arpa.zone. A diferena dessas instrues est na instruo IN PTR, onde acontece o
apontamento reverso (ver Listagem 3). Vale ressaltar que cada nodo
do cluster precisa conter no arquivo resolv.conf o IP do servidor de
DNS e por onde o host ir buscar para que haja comunicao entre
eles. O named deve ser iniciado automaticamente e para isso deve
ser ativado seu respectivo servidor no sistema operacional.

Criao de diretrios para arquivos de configurao


Na instalao do Oracle RAC, vrios arquivos de configuraes
so criados como OCR, Voting Disk, Listeners, arquivos para

manipulao do cluster, arquivos de instalao, etc. Para que


esses arquivos fiquem de fcil acesso e controle, a criao de
uma estrutura de diretrios, como ilustrada na Figura 6, se faz
necessrio nos nodos do cluster. Os mesmos diretrios no so
criados no servidor NFS.
Listagem 3. Arquivo 1.168.192.in-addr.arpa.zone
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 1H
@ IN SOA nfs.rac.com. root.nfs.rac.com. (
2
3H
1H
1W
1H )
0.168.192.in-addr.arpa.
IN NS nfs.rac.com.
10
20
100
200
55
56
57

IN
IN
IN
IN
IN
IN
IN

PTR
PTR
PTR
PTR
PTR
PTR
PTR

rac01.rac.com.
rac02.rac.com.
rac01-vip.rac.com.
rac02-vip.rac.com.
rac01-scan.rac.com.
rac01-scan.rac.com.
rac01-scan.rac.com.

Observe as pastas com destaque em amarelo. Elas foram criadas


somente no nodo NFS com o nome da pasta rac01, porque so
pastas compartilhadas que sero acessadas por todos os nodos
do cluster.
Com os diretrios criados e definidos, o usurio do sistema
operacional responsvel pelo acesso e manipulao da ferramenta
Oracle RAC precisa ter acesso a esses diretrios e os acessar de
uma forma rpida e eficiente. Isso feito inserindo os diretrios,
nome do banco de dados, localizao dos arquivos de instalao,
identificador de cada instncia, definio do terminal para o ambiente Linux, lista de diretrios compartilhados e lista de classes
Java compiladas. Os parmetros que sero adicionados ao arquivo
.bash_profile que contm configuraes que sero executas no
momento da inicializao do login do usurio so:
ORACLE_HOSTNAME: nome host do servidor;
ORACLE_UNQNAME: nome nico para o banco de dados;
ORACLE_BASE: especifica a base de estrutura de diretrios
da Oracle;
ORACLE_HOME: especifica o diretrio que contm o software
da Oracle;
GRID_HOME: especifica o diretrio que contm os arquivos
instalados do Oracle;
ORACLE_SID: especifica o identificador do sistema Oracle. Cada
instncia deve possuir seu identificador nico;
ORACLE_TERM: definio do terminal para o ambiente;
PATH: usado pelo shell para localizar programas executveis;
LD_LIBRARY_PATH: especifica a lista de diretrios que esto
compartilhadas;
CLASSPATH: especifica o diretrio ou lista de diretrios que
contm classes Java compiladas.
Esses parmetros foram configurados no nodo RAC01 e RAC02
conforme Tabela 3.

Figura 6. Estrutura de arquivos


Esses diretrios sero definidos na instalao do Oracle RAC,
que feita somente no nodo RAC01 (nodo principal). Isso porque
a prpria ferramenta j se encaminha de copiar os arquivos de
configuraes criados para os outros nodos do cluster.

Parmetro

Valor

export ORACLE_HOSTNAME

RAC01.rac.com (para o RAC01)


RAC02.rac.com (para o RAC02)

export ORACLE_UNQNAME

ORCL

export ORACLE_BASE

/u01/app/oracle

export ORACLE_HOME

$ORACLE_BASE/product/11.2.0/db_1

export GRID_HOME

/u01/app/11.2.0/grid

export ORACLE_SID

ORCL1 (para o RAC01)


ORCL2 (para o RAC02)

export ORACLE_TERM

Xterm

export PATH

/usr/sbin:$PATH

export PATH

$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH

export LD_LIBRARY_PATH

$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH

$ORACLE_HOME/JRE:$ORACLE_HOME/
jlib:$ORACLE_HOME/rdbms/jlib

Tabela 3. Estrutura do arquivo .bash_profile


Edio 128 SQL Magazine

33

Oracle RAC com DNS: balanceamento de carga Round Robin

Relao de confiana entre os servidores


A relao de confiana permite que um usurio se conecte via ssh
a outro servidor sem precisar se autenticar, sendo importante para
comunicao entre os clusters. Primeiro cada servio deve possuir
sua chave de segurana que a validao na execuo do ssh. O
comando utilizado para criar essa chave foi sshkeygen t rsa.
Depois, deve-se criar a relao de segurana. Isso ir garantir
acesso entre os servidores sem solicitar a senha. Para isso, foi usado
o comando cat /home/oracle/.ssh/id_rsa.pub | ssh oracle@<nome
host do nodo> cat >> /home/oracle/.ssh/authorized_keys. O comando foi executado primeiro no nodo RAC01 e depois RAC02.
No arquivo known_hosts fica a habilitao de comunicao
de confiana entre os IPs. Ela foi feita usando os comandos em

Listagem 4. Definindo a relao de confiana entre os servidores


ssh RAC01 date
ssh RAC02 date
ssh RAC01-priv date
ssh RAC02-priv date
ssh RAC01.rac.com date
ssh RAC02.rac.com date
ssh RAC01-priv.rac.com date
ssh RAC02-priv.rac.com date

Figura 7. Instalao Oracle RAC

Figura 8. Instalao Oracle RAC

34 SQL Magazine Edio 128

apenas um nodo e copiando esse arquivo para o outro. Os comandos podem ser vistos na Listagem 4.
Vale ressaltar que a relao de confiana criada para os servidores do cluster, mas no necessrio para instalao do Oracle
RAC, porque no assistente grfico da instalao da ferramenta h
como criar essa relao de confiana.

Instalao do Oracle RAC


Todos os processos de instalao do Oracle RAC so o uso das
as configuraes e parametrizaes definidas nas etapas vistas
at aqui. O que ser feito a partir de agora direcionar cada configurao para cada etapa da instalao.
Antes da instalao ser iniciada, existe um processo junto aos
arquivos de instalao que serve para analisar se todas as configuraes feitas nas etapas acima sero vlidas para a ferramenta
Oracle RAC, evitando assim problemas durante a instalao. No
comando a seguir, onde definimos RAC01 e RAC02 estamos definindo os nomes dados aos nodos do cluster:
./runcluvfy.sh stage -pre crsinst -n RAC01,RAC02 -fixup verbose.

Para iniciar o assistente grfico de instalao, deve-se ir ao


diretrio onde o software foi baixado, acessar a pasta install e
executar o comando ./runinstaller. At a etapa 4 desta instalao,
temos configuraes para definio
da estrutura do cluster sendo definido Install and Configure Grid
Infrastructure for a Cluster e tipo
de licena como gratuita.
Na prx i ma etapa, v ista na
Figura 7, o local onde definido
o IP pblico virtual (VIP) de cada
nodo do cluster. Essa validao
importante para que haja a relao
de confiana entre eles e tambm
sero esses os IPs usados para mascarar quaisquer falhas que possam
a vir ocorrer em algum nodo. Caso
no tenha sido criada a relao de
segurana descrita na etapa 6, podemos realizar esta configurao
nesta etapa da instalao informando o usurio e senha criados
no sistema operacional.
A prxima etapa ilustrada na
Figura 8 o local de criao dos
arquivos OCR e Vot i ng Disk.
A opo Shared File System (Sistema
de Arquivo Compartilhado) quer
dizer que os arquivos sero criados
no servidor NFS, que possui todos
os diretrios compartilhados.

Nas etapas 8, 9 e 10 definida a localizao para salvar o arquivo OCR e Voting


Disk utilizando a opo redundncia externa (External Redundancy), pois no est
sendo utilizado ASM (Automatic Storage
Management) e no ser feito o espelhamento entre os grupos de volume. O ASM
um gerenciador de volumes e, ao mesmo
tempo, um sistema de arquivos para banco
de dados Oracle o qual suporta configuraes do tipo single-instance e RAC.
O ASM uma soluo alternativa de gerenciamento de volume de discos, sistemas
de arquivos e raw devices. O ASM utiliza
agrupamento de discos para armazenar
arquivos de dados. Um ASM disk group
nada mais do que uma coleo de discos
os quais o ASM gerencia como se fosse
apenas uma unidade de disco.
No ambiente criado neste artigo, para o arquivo OCR foi informado o diretrio compartilhado /u01/shared_config/rac01/ocr
e para o arquivo Voting Disk, o diretrio /
u01/shared_config/rac01/vdsk.
Observe que cada um desses arquivos
essencial para o funcionamento do Oracle
RAC. Esses arquivos no podem ser apagados ou movidos para outro lugar sem
alterao da configurao do software ou
sem ter o backup de segurana.
Nas etapas entre 10 e 15 foram feitas
configuraes dos grupos e diretrios que
sero usados pelo software. Foi definido o
local para salvar arquivos de instalao e
criao do inventrio de softwares instalados. Na etapa 16 acontece a instalao e
cpia dos arquivos para os nodos RAC01
e RAC02.
Aps todo processo de instalao,
necessria a execuo de dois scripts que
serviram para criao dos arquivos OCR
e Voting Disk em cada nodo do cluster.
Os scripts devem ser executados em cada
nodo e na ordem solicitada com o usurio
root do sistema operacional. O primeiro
script orainsRoot.sh executado para definio de privilgios ao usurio e grupo de
usurio para ler e escrever informaes no
diretrio /u01/app/oraInventory. O segundo cria os arquivos OCR e Voting Disk no
servidor NFS com base nas informaes de
cada nodo do cluster. Na Figura 9 possvel
ver esses scripts.

Figura 9. Scripts de Instalao Oracle RAC

Figura 10. Instalao Oracle Database


A instalao do Oracle Cluster concluda com a execuo dos scripts. O prximo
passo a instalao do Oracle Database e
criao do banco de dados. Para iniciar
o assistente grfico do Oracle Database,
deve-se acessar a pasta onde ele foi extrado e executar o comando runinstaller.
At a etapa 2 da instalao temos as
configuraes da licena do software, definindo a opo a ser instalada selecionando
install database software only. Na etapa 3
da Figura 10 temos a seleo dos nodos do
cluster que tero acesso compartilhado ao
banco de dados. Em nosso caso selecionamos os nodos RAC01 e RAC02.
As configuraes que foram feitas at a
etapa 10 j foram definidas na criao dos
diretrios feitos na Etapa 5 deste artigo.
Assim, foi definido no assistente grfico
que a edio do software que foi usada
foi a Enterprise e tambm foram definidos

o local onde foi instalado o software e os


grupos de usurios. Na prxima etapa
apresentada na Figura 11, mostrado em
tela um novo script que deve ser executado
nos nodos RAC01 e RAC02 para que sejam
criados os arquivos de configuraes
definidos anteriormente. Primeiro devemos executar no nodo RAC01 e depois
no RAC02.
O ltimo processo dessa instalao
a criao do banco de dados, que foi
realizado utilizando o assistente grfico
da ferramenta Oracle Database chamado
pelo comando dbca. Na primeira etapa
foi selecionado Oracle Real Application
Clusters Database e na segunda, Create
a Database para criar um novo banco de
dados.
Na Figura 12 foi selecionado o template
General Purpose or Transaction Processing (Uso Geral ou Processamento

Edio 128 SQL Magazine

35

Oracle RAC com DNS: balanceamento de carga Round Robin

Figura 11. Script de Instalao Oracle Database

Figura 12. Criao do banco de dados

Figura 13. Criao do banco de dados

Figura 14. Configurao do Cluster File System

36 SQL Magazine Edio 128

de Transaes) para que esse ambiente


clusterizado seja otimizado de forma que
possa receber milhares de transaes com
muitos usurios concorrentes por dia. Essas
transaes consistem em leitura, gravao e
excluso de dados no banco de dados.
Na instalao do Oracle RAC foi alterado
o arquivo .bash_profile feito na Etapa 5
incluindo o parmetro ORACLE_UNQNAME como ORCL, que o nome nico
do banco de dados, sendo esse o nome e o
prefixo dado ao Global Database Name
e Sid Prefix como ilustrado na Figura 13.
Observe na imagem que os nodos RAC01 e
RAC02 esto selecionados. Isso ir garantir
que o banco de dados ser criado para os
dois nodos.
Umas das etapas mais importantes a
configurao e a definio de senhas para
os usurios do banco de dados. Nessa
atividade so criados os usurios sys,
system, dbsnmp e sysman. As funes
desses usurios so:
sys: pode executar todas as funes
administrativas tais como backup e recuperao. Esse usurio concede privilgios
ao usurio sysdba;
system: pode executar todas as funes
administrativas exceto backup, recuperao e atualizao do banco de dados;
dbsnmp: usado para monitorar e gerenciar o banco de dados no Oracle Enterprise
Manager;
sysman: pode executar todas as funes
administrativas no Oracle Enterprise
Manager.
Em seguida foi definido o local para
armazenar todos os arquivos do banco
de dados usando um sistema de arquivos
chamado Cluster File System (CFS), criado especificamente para uso do cluster.
O CFS permite que o software da Oracle
seja acessado por todos os nodos do cluster. Todas as mquinas do CFS tm acesso
igual a todos os dados e podem processar
qualquer transao. Dessa forma, o Oracle RAC com CFS garante a redundncia
completa do software do banco de dados
para os clusters, enquanto simplifica a
instalao e a administrao. Na Figura 14
foi definido o diretrio do servidor NFS /
u01/oradata.

A rea de recuperao flash (Flash


Recovery Area - FRA) tem como funo
minimizar o gerenciamento do espao em
disco para os arquivos de backup. Quanto
maior for essa rea, mais til se torna.
O ideal que ela seja grande o suficiente
para conter todas as copias dos arquivos
de dados, backups, redo logs, arquivos de
log e arquivos de controle.
Neste artigo, na Figura 15 foi definido
o local para essa funo no servidor NFS
no diretrio compartilhado chamado /
u01/oradata/ com tamanho 150000 MB
reservado para a FRA.
Nas etapas finais foram mantidas as
configuraes padres. Essas configuraes so a definio da criao do Sample
Schemas e memria SGA e PGA. O Sample Schemas so esquemas de exemplos
do banco de dados, podendo ou no ser
criados no momento da instalao. Esses
esquemas fornecem uma plataforma co-

Figura 15. Configurao da Flash Recovery Area


mum para exemplos em cada verso do
banco de dados.
O SGA (System Global Area) um grupo
de estruturas de memria compartilhada que contm dados e informaes de
controle para cada instncia do banco de
dados como, por exemplo: bloco de dados
em cache e reas de SQL compartilhadas.
J o PGA (Program Global Area) uma
regio de memria que contm dados e

informaes de controle para um processo


do servidor, sendo que sua memria no
compartilhada tendo acesso exclusivo
somente para processos do servidor. Veja
na Figura 16 que foi definido o tamanho
total de memria 700MB alocada para
essas estruturas de memria.
Com e s sa lt i ma con f ig u ra o, a
instalao do Oracle Real Application
Clusters com dois nodos e com um

Edio 128 SQL Magazine

37

Oracle RAC com DNS: balanceamento de carga Round Robin

O processo de instalao exige um bom


nvel de conhecimento sobre sistemas operacionais Linux, redes e a ferramenta Oracle
RAC. A Figura 17 representa o ambiente
clusterizado criado neste artigo. Ele recebe
as requisies pelo servidor NFS e tambm
de DNS e as direciona para uma instncia
ativa fazendo o balanceamento de carga.
Esta ferramenta complementar a outras
ferramentas da prpria Oracle, visando
atingir altos nveis de disponibilidade e
garantindo segurana contra perda e acesso
aos dados.

Figura 16. Configurao da memria SGA e PGA

Autor
Danilo Migliorini Caneschi
caneschi.danilo@gmail.com
https://www.linkedin.com/pub/danilo-caneschi/60/710/b71
Recm graduado em Cincias da Computao pela Faculdade
Governador Ozanam Coelho, FAGOC. Atua com analise, adaptao/
correo em banco de dados utilizando SQL e em sistemas ERP.

Links:
[1] Oracle Corporation
http://www.oracle.com/
[2] DNS Bind
http://www.isc.org/
Figura 17. Estrutura do ambiente criado para Oracle RAC
servidor de NFS e DNS com balanceamento de carga Round
Robin est concluda. Uma das formas de saber se a instalao
obteve sucesso acessar o diretrio /u01/app/11.2.0/grid/bin
e executar o comando crsctl status resource t. Ele ir mostrar
que o banco de dados ORCL est com status open para os
dois nodos do cluster.
Este artigo apresentou todos os passos para a instalao da ferramenta Oracle Real Application Cluster com balanceamento de
carga Round Robin, utilizando mquinas virtuais com o objetivo
de criar um ambiente clusterizado.

38 SQL Magazine Edio 128

[3] VirtualBox
https://www.virtualbox.org/
[4] Sistema Operacional Linux CentOS
http://www.centos.org/

Voc gostou deste artigo?


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

Edio 128 SQL Magazine

39

Resolvendo problemas
no Oracle e no SQL Server
A

s empresas que possuem reas destinadas


tecnologia, geralmente possuem uma infraestrutura que suporta todo o ambiente de
servidores, redes, e sistemas operacionais. Geralmente
estas reas acabam criando um setor voltado apenas
para suportar e detectar problemas relativos a erros
causados pelos sistemas e aplicativos, problemas
de softwares e hardwares. E assim no poderia ser
diferente com as reas de desenvolvimento e banco
de dados.
Se tratando de databases, em algumas empresas
onde o ambiente de banco de dados grande, existem
DBAs especializados apenas em suportar e resolver
problemas causados pelos SGBDs e pelos componentes
de bancos de dados.
Um ambiente de banco de dados, seja ele SQL Server
ou Oracle, precisa estar sempre sendo monitorado, o
hardware do servidor que armazena os dados deve
estar sempre sendo revisto em relao a escalabilidade em processamento, memria e discos fsicos.
O sistema operacional precisa ser sempre atualizado,
e as polticas de segurana devem ser sempre revistas. Os backups que so feitos diariamente precisam
ser sempre conferidos e revisados. Um ndice, por
exemplo, um componente do database que precisa
sempre estar sofrendo uma manuteno, afinal com
o crescimento da tabela, a rvore binria do ndice
tambm aumenta e com isso a eficcia deste ndice
pode ser prejudicada.
Toda ferramenta de banco de dados de mercado possui o seu log, onde atravs dele o DBA pode ter uma
noo mais detalhada da sade de seu banco de dados.
aconselhvel que mesmo conhecendo todo o ambiente, o DBA tenha como tarefa diria verificar cada
log a cada dia. Este log uma ferramenta de auxlio e
pode muitas vezes salvar o ambiente de um problema
maior.
O dicionrio de dados de cada database um aliado
importante que pode ajudar ao DBA detectar como
est a performance de seu banco de dados e como
caminha a execuo dos processos conectados no
database.
Neste artigo demonstraremos uma metodologia de
troubleshooting e citaremos alguns exemplos de como

40 SQL Magazine Edio 128

Fique por dentro


Este artigo descreve como detectar alguns problemas e falhas
no funcionamento de um banco de dados em produo. Estes
exemplos sero teis queles que pretendem administrar ou dar
suporte em um database SQL Server ou Oracle, atuando na reparao e soluo de possveis erros, afim de deixar o banco de dados
operacional novamente.

identificar problemas e falhas relacionadas ao banco de dados


nos SGBDs SQL Server e Oracle, e ao mesmo tempo mostraremos a soluo para estes problemas.

Troubleshooting
Troubleshooting a forma de resolver problemas e detectar
falhas e erros de modo sistemtico onde o analista atua na
causa raiz do problema at que este problema seja totalmente
resolvido e assim o produto ou processo volte a ficar disponvel
e operacional.
Em todos os ambientes de databases, sejam eles de maior ou
menor criticidade, importante que o DBA tenha em mente
que erros e falhas sempre vo aparecer e indiferente do problema, o profissional precisa considerar que alm do foco no
processo de identificao, manter a calma um fator de extrema importncia. Isto pode determinar muitas vezes o melhor
caminho na tomada de decises para o sucesso no processo
como um todo.
Alguns passos em relao a troubleshooting se seguidos com
cuidado podem ajudar muito no processo de deteco e correo
do problema, a saber:
Sintomas: Conhea os sintomas, uma coleta de evidncias
primordial para decidir quais so os passos que devem ser
seguidos. Neste aspecto, os logs dos bancos de dados so muito importantes. Sendo assim, colete o mximo de evidncias
possveis;
Problema: Se as consequncias no forem catastrficas, reproduza o problema baseando-se nos sintomas evidenciados
no passo anterior, assim o analista ter a certeza de que o
problema realmente existe;
Hipteses: Formule e separe as possveis hipteses, em
seguida, elas devem ser testadas. Estes testes sero importantes para reduzir o nmero de causas deste problema.

Alteraes feitas recentemente, atualizaes que foram executadas, processos realizados de ltima hora, cargas de dados,
mudana de estruturas e hardwares. Estes so exemplos que
podem ser listados e podem ajudar neste aspecto;
Causa: Neste ponto a causa do problema j deve estar bem
mais clara, e se ela apareceu mediante os passos realizados
anteriormente, com base nas hipteses, alcanar o sucesso pode
estar bem perto;
Correo: Com a causa em mente, o DBA deve verificar a
documentao do produto para no ter dvidas, e assim realizar a correo de maneira segura. Alm disso, um ponto de
extrema importncia, se possvel o planejamento de um rollback
deve ser realizado, afinal, deixar o problema pior do que j se
encontra, pode custar muitas horas extras de trabalho;
Validao: Antes de liberar o ambiente para os usurios,
deve-se validar e testar para ter a confirmao de que o problema est resolvido. Esse pode ser um fator fundamental nas
relaes de confiana entre um DBA e as outras reas;
Documentao: A documentao daquele problema ou daquela falha pode ajudar outras pessoas da empresa em um futuro.
Assim, todo o processo da causa e resoluo deve estar devidamente documentado.
Em muitos casos, uma metodologia de troubleshooting, como
esta apresentada, precisa ser realizada com eficincia e normalmente o tempo que o DBA tem no o bastante para conseguir
percorrer corretamente todas as etapas. Sendo assim, como em
toda metodologia, este processo pode ser moldado, dependendo
da estimativa de tempo que o problema precisa ser resolvido.
Os exemplos aqui relacionados se caracterizam por situaes
que aparecem no dia a dia de um DBA, sendo muito comuns
em ambientes transacionais.

Troubleshooting Acessos
Em um ambiente de banco de dados de uma empresa, controlar
o acesso de usurios pode ser uma tarefa difcil, afinal propor
regras de acesso geralmente limita os acessos das pessoas, e isso
pode gerar um certo desconforto aos analistas. Porm, quando as
polticas de acesso so bem implementadas, o risco de desastres
e execuo errada de comandos diminui e, assim, o ambiente se
torna mais confivel.
Quando um projeto criado na produo, geralmente este projeto
passou pelas etapas de desenvolvimento, foi testado em homologao e posteriormente enviado para a produo. Sendo assim, todas
as polticas de acesso j foram bem definidas desde a sua criao
no ambiente de desenvolvimento. Este o mundo ideal, porm em
alguns casos os acessos no so bem definidos, e somente depois
que o projeto est na produo as pessoas notam que em algum momento faltou uma ou outra permisso de acesso para algum usurio
de aplicao. Isso muito comum nas empresas, principalmente se
este projeto no est documentado e os testes no foram bem feitos.
Neste tpico demonstraremos como detectar problemas de acesso
no banco de dados.

Detectando e Solucionando
Geralmente detectar problemas de acesso no tarefa difcil,
visto que os SGBDs so bem exatos em relao aos tipos de erros
que ocorrem no momento de uma falta de permisso.
Interpretar esses erros cabe ao DBA, que em muitos casos se depara
com variados tipos de mensagens de erros em relao aos acessos.
A falta de acesso pode ser desde a falta da existncia do usurio,
at a falta de permisso de um objeto de banco de dados (tabela,
view, procedure, function, etc.). Demonstraremos a partir de
agora os principais erros em relao aos acessos no SQL Server e
no Oracle. Selecionamos algumas das mensagens de erros mais
comuns e em seguida, descrevemos os comandos que solucionam
tais mensagens de erro (Listagem 1).
Para selecionar o erro 916, o DBA deve conceder acesso de um
usurio na base de dados do SQL Server, em alguns casos o Login
j existe, ento o DBA precisa criar o usurio na base de dados
apenas. No caso do login existir, cabe ao DBA associar o login com
o usurio de banco de dados. Para criar um usurio em uma base
de dados SQL Server e associar este usurio com o login, proceda
conforme a Listagem 2.
O erro 229 est em dois exemplos: o primeiro demonstra que um
usurio no tem acesso a um objeto fone, que pode ser uma tabela
por exemplo. No segundo exemplo, o mesmo erro 229 mostra uma
falha no acesso de um usurio em uma procedure (Listagem 3).
Nos dois exemplos, o DBA deve conceder acesso do usurio nestes componentes. Para conceder acesso tabela fone e procedure
podemos utilizar os comandos:
GRANT SELECT ON fone to user_CRM
GRANT EXEC ON TruncateFone TO user_CRM
Listagem 1. Erro 916.
SQL Server
Erro 916 Falta de acesso ao banco de dados
Msg 916, Level 14, State 1, Line 1
The server principal user_CRM is not able to access the database DB_CRM under
the current security context.
Listagem 2. Concedendo acesso a uma base de dados para o usurio.
Use DB_CRM
CREATE USER user_CRM FROM LOGIN user_CRM;
--Associando login ao usurio.
EXEC sp_change_users_login LOGIN, USER
Listagem 3. Erro 229.
Erro 229 Falta de acesso a uma tabela do banco de dados
Msg 229, Level 14, State 5, Line 1
The SELECT permission was denied on the object fone, database teste1, schema
dbo.
Erro 229 Falta de acesso a uma procedure do banco de dados
Msg 229, Level 14, State 5, Procedure TruncateFone, Line 1
The EXECUTE permission was denied on the object TruncateFone , database
DB_CRM, schema dbo.

Edio 128 SQL Magazine

41

Resolvendo problemas no Oracle e no SQL Server

Demonstraremos no erro 262 que mostra uma falta de acesso para criao de tabelas no SQL Server. Logo em seguida,
temos o comando para conceder acesso de criao de tabelas
(Listagem 4).
Listagem 4. Erro 262.
Erro 262 Falta de acesso para criar tabela em um banco de dados
Msg 262, Level 14, State 1, Line 1
CREATE TABLE permission denied in database DB_CRM.
GRANT ALTER ON SCHEMA::dbo TO user_CRM
GRANT CREATE table TO user_CRM

Oracle
O erro 00942 mostra uma falta de acesso em uma tabela de um
schema:
Error: ORA-00942 table or view does not exist in oracle.

Para solucionar este problema, utilizamos o comando:


GRANT SELECT ON HR.Jobs TO user_CRM

O erro 01031 um erro genrico no Oracle que indica falta de


alguma permisso:
Error: ORA-01031: insufficient privileges.

Esta permisso pode ser de acesso a tabelas ou de execuo de


uma procedure.
Para conceder acesso em tabelas e para execuo de uma procedure no Oracle, podemos proceder da seguinte forma:

Detectando e Solucionando
Quando uma performance est prejudicada, evidenciar o
problema pode ser uma tarefa no muito fcil. Basicamente, a
performance de um banco de dados pode ser entendida como
performance de servidor e performance de aplicao. As aplicaes utilizam as consultas SQL para acessar dados de uma base,
e estas consultas podem estar mal escritas gerando assim um
gargalo muito grande no servidor. Isso traz como consequncia
uma performance ruim.
Tendo em vista que vrios fatores podem influenciar na performance de uma aplicao como rede, host, servidor, o DBA
precisa estar atento a estas variveis. Um passo importante neste
ponto a realizao de um trace, afim de rastrear esta conexo
e finalmente encontrar a query que pode ser um dos motivos de
uma performance prejudicada. Uma query com um tempo de
resposta alto est diretamente ligada a vrios fatores: desde uma
anlise mal feita do modelo de dados, at o uso de ms prticas
em relao linguagem de consultas SQL.
Demonstraremos agora como melhorar uma consulta usando
ndices. Iremos considerar que a query j foi detectada e precisa
ser submetida a um plano de execuo do SGBD para identificar
onde est o gargalo.
O plano de execuo uma arma que o DBA tem como aliada.
Nele possvel ver como o SGBD est processando aquela consulta, e quais os passos percorridos na consulta para chegar ao
resultado final. Tanto o SQL Server como o Oracle possuem esta
ferramenta. Mostraremos o plano de execuo das duas ferramentas em forma de texto.

SQL Server
Inicialmente temos a query na Listagem 5 com o comando que
abre o plano de execuo no SQL Server.

GRANT CREATE ANY TABLE TO user_CRM

Listagem 5. Query usada no plano de execuo do SQL Server

GRANT EXECUTE ON HR.PROC1 TO user_CRM;

SET SHOWPLAN_ALL ON;


GO
SELECT COUNT(*), C.Name AS CATEGORIA
FROM SalesLT.Product P
INNER JOIN SalesLT.ProductCategory C
ON P.ProductCategoryID = C.ProductCategoryID
WHERE P.StandardCost > (SELECT AVG(P.ListPrice) FROM SalesLT.Product P)
GROUP BY C.Name

Troubleshooting ndices
Os ndices dos bancos de dados so uma estrutura que deve ser
observada com cuidado, ao mesmo tempo que um ndice pode
ajudar na consulta, ele tambm pode fazer o contrrio, que seria
tornar a consulta lenta. comum encontrarmos ambientes em
que o analista criou vrios ndices de forma exagerada e nenhum
deles atende sua inteno.
Em muitos casos, o ndice foi criado de forma correta, porm
existem outros fatores em relao performance que devem ser
observados. O ideal que no momento em que a performance
est prejudicada, deve-se observar todas estas outras variveis,
que seriam, componentes de hardware, dimensionamento de
memria, concorrncia, consulta mal escrita, tamanho da tabela,
dentre outros.
Neste tpico iremos demonstrar quando um ndice necessrio
e como detectamos esta necessidade.

42 SQL Magazine Edio 128

SET SHOWPLAN_ALL OFF;


GO

Como j foi dito anteriormente, usaremos o plano de execuo


em modo texto. Esta opo mostra o resultado em ordem numrica, separando cada comando executado de forma organizada.
Na Figura 1 temos o resultado gerado pelo plano de execuo do
SQL Server.
Na linha 5 podemos notar que aparece o operador Nested
Loops. Este operador executa operaes lgicas de juno interna,

juno externa esquerda, left semi join e left anti semi join, onde
fazem uma pesquisa na tabela interna para cada linha da tabela
exterior. Sendo assim, seria interessante criarmos um ndice
nonclustered para o campo StandardCoast, que o campo onde
so filtrados os dados. Neste caso incluiremos a coluna ProductCategoryID, afinal esta coluna usada para unir duas tabelas em
uma clusula Inner Join.

--Criao do ndice no Oracle


CREATE INDEX HR.JHIST_DEPARTMENT_IX ON HR.JOB_HISTORY(DEPARTMENT_ID)

Na Figura 4 apresentamos o plano de execuo novamente, porm agora existe um ndice criado. Notem que o plano de execuo
agora apresenta duas linhas a menos que o primeiro. Isso bom,
afinal, o SGBD agora faz menos execues nesta consulta. Com
isso, as linhas do resultado da consulta diminuram, o valor dos
bytes diminuiu e o custo de CPU tambm.
Em um processo de anlise do plano de execuo, uma ou mais
queries podem ser analisadas em um processo do sistema, normalmente melhorar apenas uma query no o bastante, podem
existir vrias.

Figura 1. Resultado do plano de execuo no SQL Server


Listagem 6. ndice Nonclustered
CREATE NONCLUSTERED INDEX IX_Product_StandardCost
ON [SalesLT].[Product] ([StandardCost])
INCLUDE ([ProductCategoryID])
GO

A Listagem 6 apresenta o comando para criao do ndice nonclustered para a coluna StandardCost da tabela Product.
Na Figura 2, alguns valores do plano de execuo em modo texto,
antes e depois da criao do ndice. Destacamos a coluna TotalSubtreeCost que demonstra o custo de cada linha da instruo
SQL. Podemos notar que este valor diminuiu comparando o antes
e o depois. Podemos notar que os valores da estimativa de linhas,
EstimateRows, tambm diminuiu na penltima linha.

Oracle
Na Listagem 7 apresentamos a query e o comando que abre o
plano de execuo do Oracle.

Figura 2. Valores no resultado do plano de execuo do SQL Server antes e depois da criao
do ndice

Listagem 7. Query usada no plano de execuo do Oracle


SET AUTOTRACE ON EXPLAIN;
SELECT D.DEPARTMENT_NAME, COUNT (H.DEPARTMENT_ID) FROM HR.JOB_HISTORY H
INNER JOIN HR.DEPARTMENTS D ON D.DEPARTMENT_ID = H.DEPARTMENT_ID
GROUP BY D.DEPARTMENT_NAME

Na Figura 3, o plano de execuo apresentado. Podemos notar


que na linha 6 o otimizador usa uma operao de table access
full onde ele l toda a tabela. Em nosso caso a tabela ainda possui
poucas linhas, porm em um caso onde existem muitos registros,
isso pode ser um problema. Seria interessante criarmos um ndice
para essa consulta.
Para criarmos um ndice na coluna department_id da tabela
Job_History, usaremos o seguinte comando:

Figura 3. Resultado do plano de execuo Oracle antes da criao do ndice

Figura 4. Resultado do plano de execuo Oracle depois da criao do ndice

Edio 128 SQL Magazine

43

Resolvendo problemas no Oracle e no SQL Server

Troubleshooting rea Temporria

Erro

Quando Gerado

A rea temporria de um banco de dados extremamente importante para o sistema que usa este banco. Os SGBDs de mercado
proporcionam ao desenvolvedor criar tabelas que existem apenas em tempo de execuo, sendo alocadas assim em uma rea
temporria. Alm de usurios, componentes internos do banco
de dados usam as reas temporrias. Quando essa memria se
torna insuficiente, podem ocorrer interrupes significativas no
database.
O DBA deve ficar atento na criao de tabelas temporrias,
visto que uma vez criada em tempo de execuo, dependendo
de como executado esse processo, uma tabela TEMP pode
encher a rea temporria causando assim um gargalo no banco de dados e prejudicando os outros processos que tambm
utilizam essa rea.
Por precauo, uma rea temporria deve ser criada separada
dos arquivos de dados e dos arquivos de log. Uma boa estratgia em relao infraestrutura de banco de dados criar a rea
temporria em um disco separado. Isso pode melhorar muito a
performance do ambiente.

1101 ou 1105

Qualquer sesso deve alocar espao emtempdb.

3959

O armazenamento de verso est cheio. Este erro normalmente aparece depois de um erro 1105 ou 1101 no log.

3967

O armazenamento de verso forado a ser reduzido porquetempdbest cheio.

3958 ou 3966

Uma transao no pode encontrar o registro de verso


necessrio emtempdb.

Detectando e solucionando
Uma rea Temp deve ser monitorada constantemente. O dicionrio de dados do SQL Server e do Oracle guardam informaes
em relao ao armazenamento do TempDB (SQL Server) e da
tablespace Temporria (Oracle). Sendo assim, detectar uma rea
temporria com pouco espao e o porqu dessa falta de espao
tarefa simples. Mostraremos aqui neste tpico como o DBA pode
detectar uma rea temporria com pouco espao e como ele pode
aument-la para que o banco no fique indisponvel.

SQL Server
No SQL Server a rea temporria o database TempDB, que
um banco de dados de sistema que criado automaticamente
quando o SQL Server instalado. Toda vez que a instncia do SQL
Server iniciada, este banco de dados volta a ficar vazio, afinal
ele somente armazena dados temporrios.
A Tabela 1 mostra a lista de erros relativos aos problemas de
espao no TempDB. Esses erros podem aparecer em aplicativos
em execuo e mesmo no log de erros do SQL Server.
Segue um exemplo de erro comum em relao a espao insuficiente no tempdb:
Server: Msg 1101, Level 17, State 10, Line 1
Could not allocate new page for database TEMPDB.

Para monitorar e detectar os problemas de espao, seguem


na Listagem 8 algumas consultas que podem auxiliar neste
processo.
Na inteno de aumentar o tamanho do tempdb, o DBA tem a
opo de aumentar o tamanho do arquivo temp ou criar mais
arquivos .ndf para o tempdb. As Listagens 9 e 10 demonstram
como executar estes procedimentos respectivamente.

44 SQL Magazine Edio 128

Tabela 1. Tipos de erros relativos Tempdb


Listagem 8. Consultas para monitorar e detectar problemas de espao
--Quantidade de espao disponvel no Tempdb.
SELECT SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
--Determinando a transao mais longa em execuo
SELECT transaction_id
FROM sys.dm_tran_active_snapshot_database_transactions
ORDER BY elapsed_time_seconds DESC;
--Determinando o volume de espao usado por objetos interno
SELECT SUM(internal_object_reserved_page_count) AS [internal object pages
used],
(SUM(internal_object_reserved_page_count)*1.0/128) AS [internal object space
in MB]
FROM sys.dm_db_file_space_usage;
--Determinando o volume de espao usado por objetos do usurio
SELECT SUM(user_object_reserved_page_count) AS [user object pages
used],(SUM(user_object_reserved_page_count)*1.0/128) AS [user object space in
MB] FROM sys.dm_db_file_space_usage;
--Determinando o volume total de espao (livre e usado)
SELECT SUM(size)*1.0/128 AS [size in MB]
FROM tempdb.sys.database_files
Listagem 9. Aumentando o tamanho do arquivo do tempdb.
USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = Ntempdev, SIZE = 350 )
GO
Listagem 10. Adicionando um arquivo no tempdb.
USE MASTER
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = Ntempdev2,
FILENAME = NC:\TempDB\tempdev2.ndf , SIZE = 512MB , FILEGROWTH = 256MB)
Go

Uma boa prtica inserir arquivos na tempdb obedecendo ao


mesmo nmero de Cores da mquina. Isso pode distribuir o processamento melhor na rea temporria do SQL Server.

Oracle
O Oracle tem como rea temporria a tablespace Temp. Nela
pode-se armazenar todas as tabelas temporrias criadas para um
usurio de aplicao. O Oracle geralmente utiliza a tablespace temporria para armazenar objetos transitrios durante as classificaes e agrupamentos de dados e durante a execuo de uma SQL.

As tabelas globais temporrias so armazenadas tambm nesta


tablespace.
Em caso de falha, a tablespace temp pode ser recriada e no
necessita de recuperao, afinal os dados que se alojam nela so
dados transitrios.
Os erros que apresentam sobre a tablespace Temp geralmente
so bem fceis de serem interpretados. Na Listagem 11 apresentamos alguns erros que podem indicar que uma tablespace est
com problemas.
Ao monitorar as tablespaces do Oracle, podemos utilizar comandos SQL que monitorem apenas a tablespace temp. A Listagem 12
demonstra como fazer estas consultas.
Na inteno de recuperar uma tablespace Temp, seguem alguns
comandos na Listagem 13.
Listagem 11. Erros que podem indicar que uma tablespace est com problemas.
--Erro que determina falha na gravao da rea temporria
ORA-01114: IO error writing block to file string (block # string)
--Erro que determina impossibilidade de estender a tablespace Temp
ORA-1652: unable to extend temp segment by 128 in tablespace TEMP
Listagem 12. Determinar a atual tabela temporrio padro para o banco de
dados.
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME=DEFAULT_TEMP_TABLESPACE;
--Visualizar o uso de espao da tablespace Temp.
SELECT * from DBA_TEMP_FREE_SPACE;

Apresentamos um mtodo de troubleshooting para ser seguido


em relao a levantamento e deteco de problemas. Evidenciar
o problema antes que ele acontea uma boa prtica que o DBA
deve ter em mente. Quando detectamos possveis falhas, muitas
vezes a resoluo se torna muito menos traumtica. por isso
que monitorar um ambiente fundamental, verificar os discos,
o espao ocupado pelos datafiles e logfiles, verificar os ndices,
manter sempre atualizado e documentado um relatrio de acessos
e, principalmente, conferir os backups.
Aps o problema ser resolvido, o DBA deve documentar qual foi
a soluo, afinal o mesmo problema pode acontecer novamente.
O sucesso de um troubleshooting depende de vrios fatores.
A metodologia pode ajudar se aliada a um bom conhecimento
tcnico, porm o que pode fazer a diferena conhecer bem o
ambiente, estar familiarizado e ter noo da escalabilidade, da
performance e da segurana.

Autor
Flavio Climaco
f_climaco@yahoo.com.br
Atua no ramo de Tecnologia da Informao h mais de 10 anos.
formado na rea de Tecnologia da Informao pela UNIPAC/JF,
Ps Graduado em Administrao de Banco de Dados pelo CES/JF e MBA
em Administrao de Banco de Dados pela FIAP/SP. Possui certificao
MCITP, MCTS Microsoft SQL Server e OCA, OCP Oracle.
Links:

Listagem 13. Recuperando uma tablespace


-- Alterar a base de dados para utilizar nova tablespace temporria.
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE NEWTEMP;

SQL Server Books Online


http://technet.microsoft.com/en-us/library/ms130214(v=sql.105).aspx

-- Apagar a tablespace antiga.


DROP TABLESPACE TEMPFILE INCLUDING CONTENTS AND DATAFILES;

SQL Server System Error Messages


http://technet.microsoft.com/en-us/library/cc645603(v=sql.105).aspx

-- Alterar o nome da nova tablespace para o nome da antiga.


ALTER TABLESPACE NEWTEMP RENAME TO TEMPFILE;

Oracle Database Documentation Library


http://docs.oracle.com/cd/B19306_01/index.htm

-- Aumentando o tamanho da tablespace.


ALTER DATABASE TEMPFILE /ora01/BD/nome_bd_temp_02.dbf resize 500m;

Oracle Database Error Messages


http://docs.oracle.com/cd/B28359_01/server.111/b28278/toc.htm

-- Criando tablespace Temp em grupos.


CREATE TEMPORARY TABLESPACE lmtemp3 TEMPFILE /u02/oracle/data/
lmtemp301.dbf
SIZE 25M
TABLESPACE GROUP group1;
-- Alterando tablespace de grupos.
ALTER TABLESPACE lmtemp2 TABLESPACE GROUP group2;

Voc gostou deste artigo?


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

Edio 128 SQL Magazine

45

Oracle Materialized
Views: Gerenciando em
standby lgicos no Oracle
U

m dos principais recursos da verso Enterprise


do banco de dados Oracle o Data Guard. Essa
feature a principal ferramenta para disponibilizar o ambiente de alta disponibilidade oferecido pela
Oracle e, em conjunto com o Real Application Cluster,
nos permite disponibilizar o banco de dados para os
usurios mesmo quando ocorre um problema grave no
banco de dados principal.
Alm de providenciar alta disponibilidade para bancos
de dados, podemos utilizar a feature de Data Guard para
criarmos bancos de dados especficos para relatrios
evitando que consultas executadas impactem na performance do banco de dados principal e/ou com informaes histricas, permitindo remover dados que no so
mais importantes para o banco principal mas, mesmo
assim, podero ser lidas em futuras consultas. Um bom
exemplo seria configurar o banco de dados standby para
no replicar o comando alter table drop partition.
Infelizmente, como podemos ver na documentao
da Oracle (vide seo Links), operaes executadas
em materialized views (MV) no so suportadas pelos
processos de atualizao do banco de dados configurado como standby lgico. Dessa forma, consultas
executadas no banco de dados lgico podero retornar
valores diferentes daqueles apresentados no banco de
dados principal.
Nesse artigo iremos demonstrar como manter as materialized views atualizadas no banco de dados lgico
e, tambm, caso a materialized view utilize tabelas de
outros bancos de dados, no qual o banco de relatrio no
tenha privilgio para acessar, como podemos mant-las
atualizadas.

Conhecendo Data Guard


O recurso Data Guard da Oracle nos permite criar
cpias dos nossos bancos de dados, possibilitando
utiliz-las das mais variadas formas como, por exemplo,
usando as cpias apenas para configurao de ambientes de disaster recover, onde poderemos utilizar o banco

46 SQL Magazine Edio 128

Fique por dentro


Esse artigo ir explicar como podemos gerenciar materialized views
em banco de dados Oracle, para que os dados exibidos no banco
principal sejam replicados para o standby Lgico, garantindo que
essas informaes possam ser lidas em relatrios que so executados
no banco de dados de rplica. Para isso, iremos verificar as formas de
atualizar materialized views nos bancos de dados de standby lgico.
Tambm mostraremos como propagar o refresh da materialized views
do banco primrio para o standby e, em casos mais extremos, quando
o banco de dados de rplica no tiver permisso para acessar o usurio
do Database Link, utilizado como origem dos dados da materialized
view, mas tem permisso para ler essas views. O processo de Standby
Lgico da Oracle no suporta operaes de materialized views, o
que pode impactar o resultado de relatrios que sejam executados
no banco de dados de rplica. Seguindo os conceitos apresentados
nesse artigo, iremos demonstrar como replicar essas informaes nos
bancos de dados de rplica.

de rplica como se fosse o banco principal, caso haja corrupo


no banco de dados principal. Ou ainda, permitindo consultar os
dados do banco de rplicas, evitando que relatrios executados
possam impactar negativamente na performance do banco de
dados principal.
Quando necessrio, a ao de mover o banco de dados standby
para principal muito rpida e pode ser executada utilizando
apenas um comando, diminuindo drasticamente o tempo de
indisponibilidade do banco de dados e permitindo que faamos
as correes necessrias no banco primrio, enquanto os usurios
continuam a trabalhar com o banco de rplica.
O Data Guard Oracle nos permite criar trs tipos de standby:
Standby fsico uma cpia exata do banco de dados principal.
gerenciado pelo processo MRP (Managed Recovery Process)
que aplica todas as alteraes de blocos registradas em redo na
rplica do banco de dados;
Standby lgico uma cpia do banco de dados principal. Diferente do standby fsico, ele no aplica as alteraes diretamente
nos blocos. O processo LCR (Logical Change Records) ir ler as in-

formaes contidas nos redos gerados no banco de dados principal,


analis-las e aplic-las no standby lgico. Devido a essa caracterstica, podemos configurar o standby lgico para ignorar comandos
DML e DDL executados para algumas tabelas ou schemas do banco
de dados principal. Alm disso, o standby lgico nos permite criar
objetos que no existem no banco de dados principal como, por
exemplo, criar um ndice para melhorar a performance de uma
consulta que executada exclusivamente no banco de rplica.
Standby snapshot uma verso do banco de dados principal.
A rplica do banco editvel e permite a converso novamente
para standby fsico, caso precisemos receber/aplicar alteraes
ocorridas no banco de dados principal.

Entretanto, quando j possumos um banco de dados standby e


criamos uma materialized view, essa ao gera um erro no banco
de dados standby, que poderemos verificar na view DBA_LOGSTDBY_EVENT. Devido a esse erro, as informaes referentes a
materialized view no sero replicadas.
A criao de uma materialized view ir gerar automaticamente uma tabela no banco de dados, caso procuremos pelo nome
desse novo objeto na view DBA_OBJECTS, encontraremos dois
objetos diferentes com o mesmo nome: um com OBJECT_TYPE
igual MATERIALIZED VIEW e outro com OBJECT_TYPE igual
TABLE.

Conceitos bsicos de materialized views

Testaremos alguns cenrios para atualizao de materialized views em bancos de dados configurados como standby
lgico. Testaremos desde atualizaes bem simples, onde no
h necessidade da materialized view no banco de standby, at
chegarmos no exemplo onde precisamos da MV e o banco de
standby no pode ter os mesmos privilgios que o banco de
dados principal.
Para demonstrarmos os cenrios a seguir, iremos trabalhar com
trs bancos de dados:
ORCL Banco de dados principal;
ORCLS Standby lgico, utilizado nos exemplos como banco
de dados de relatrio;
ODB - Banco de dados de origem. Utilizaremos a tabela TORIGEM como fonte para as materialized views que criaremos.

Materialized views so objetos do banco de dados Oracle utilizados para armazenar dados de consultas que precisem ler uma
grande quantidade de dados de diferentes tabelas/views. Elas
funcionam como uma tabela do banco, populada manualmente
ou via job, que permite a execuo de queries complexas, lendo
um nico objeto de banco de dados. Alm de permitir a criao de
ndices exclusivos, que no impactam na performance das tabelas
usadas como origem de dados para as materialized views.
Alm do uso para gerar uma tabela a partir de uma consulta,
outro uso para as materialized views a criao local de uma tabela existente em outro banco de dados, evitando trfego de rede
durante as consultas, podendo mover este trfego para perodos
onde o banco de dados no esteja muito carregado (quando os
valores da tabela no precisam estar com a verso mais atual).

Relao entre standby lgico e materialized views


Quando trabalhamos com materialized views e standby lgico,
podemos verificar nos bancos de dados que todas as MV, criadas
antes da converso do standby para lgico, so encontradas no
banco de rplica. Porm, MV criadas depois da converso, no
sero criadas no banco de dados. Dessa forma, no teremos acesso
aos dados existentes no banco de dados primrio em sua rplica,
mas, mesmo para as materialized views existentes no standby
lgico, as atualizaes executadas no banco de dados primrio
no sero replicadas para o banco de standby. Isso ocorre devido a
diferena na forma como as alteraes so aplicadas entre standby
fsico e lgico e a forma como este ltimo criado. Para criarmos
um standby lgico, temos que:
1. Criar uma rplica do banco de dados principal com o controlfile
da rplica, configurado como standby fsico;
2. Garantir que a rplica est recebendo os blocos gerados no banco
de dados principal. At esse momento, a rplica um standby
fsico, ento, todas as alteraes de blocos ocorridas no banco
principal sero aplicadas no standby;
3. Converter a rplica para standby lgico. A partir de ento, o Data
Guard para de aplicar as alteraes bloco por bloco, comea a ler os
redos, recria e reaplica os comandos executados no banco de dados
primrio no standby lgico - nesse momento que as atualizaes
para as materialized views param de ser replicadas.

Atualizando as materialized views no standby lgico

Nota. Views Dinmicas do Oracle


Toda referncia feita a uma view dinmica do Oracle ser feita a v$. Caso o banco de dados esteja
configurado como RAC e queira ver as informaes de todos os bancos do cluster, podemos acessar a
view com o mesmo nome, apenas mudando de v$ para gv$. Por exemplo: a view v$instance exibe as
informaes da instncia que estamos logados, enquanto a view gv$instance exibe as informaes
de todas as instncias do cluster.

Atualizar apenas os dados no banco de standby


Quando queremos apenas possuir os dados da materialized
view no banco de dados de standby, temos que garantir que
somente a tabela criada pelo comando create materialized view
exista no banco de standby. Dessa forma, ao atualizarmos a MV
no banco primrio, o processo LCR ir interpretar as alteraes
na materialized view como inserts/deletes na tabela, assim, ele
ir replicar os dados para o banco de standby.
Para deixar o ambiente pronto para o processo LCR atualizar os
dados, podemos ter duas situaes. Na primeira, a materialized
view foi criada no banco de dados primrio, antes de criarmos
o banco de dados de standby. Nessa situao, a materialized
view j existe no banco de dados standby e, por isso, a MV no
permite que os dados sejam atualizados na tabela de referncia.
Podemos verificar na view DBA_OBJECTS que o banco de dados
de standby ter dois objetos para a materialized view, conforme
a Listagem 1.

Edio 128 SQL Magazine

47

Oracle Materialized Views: Gerenciando em standby lgicos no Oracle

Executamos um select na view DBA_OBJECTS para mostrar o


nome e o tipo dos objetos existentes no banco de dados de standby
com o mesmo nome da materialized view existente no banco de
dados primrio.
Nesse caso, basta excluir a materialized view e recriar apenas a
tabela de referncia conforme a Listagem 2.
O primeiro comando executado desabilita a proteo do
standby, permitindo que faamos mudanas na estrutura dos objetos.
O segundo comando remove a materialized view que no precisamos mais no banco de standby. J o ltimo comando executado
reativa a proteo do standby para evitar que ocorram mudanas
nas estruturas do banco de dados.
Para a segunda situao, a materialized view foi criada no banco
de dados primrio aps a criao do banco de dados de standby.
Ao tentar criar a MV no banco de dados de standby, o processo
LCR ir gerar um erro que poderemos verificar na view DBA_LOGSTDBY_PROGRESS, nesse caso, podemos apenas criar a tabela
de referncia no banco de dados de standby. Para verificar se a
materialized view e sua tabela de referncia no foram criadas,
podemos executar o comando apresentado na Listagem 3.
Listagem 1. Objetos existentes no banco de dados de standby
SYS@ORCLS> select object_name, object_type from dba_objects where owner =
AAO and object_name = MV1_TESTE;
OBJECT_NAME
OBJECT_TYPE
------------------------------ ----------------------MV1_TESTE
MATERIALIZED VIEW
MV1_TESTE
TABLE
Listagem 2. Alterando objetos de um banco de dados de standby
SYS@ORCLS> alter database guard none;
Database altered.
SYS@ORCLS> drop materialized view aao.mv1_teste;
Materialized view dropped.
SYS@ORCLS> alter database guard all;
Database altered.
Listagem 3. Verificando eventos no standby
SYS@ORCLS> select status, event from dba_logstdby_events where status like
ORA-16226%;
STATUS
EVENT
----------------------------------------------------------------------------------------------------ORA-16226: DDL skipped due
create materialized view mv2_teste as select
to lack of support
* from torigem@ODB_LINK

Executamos um select na view DBA_LOGSTDBY_EVENTS,


filtrando pelo erro ORA-16226, para verificar se algum comando
executado no banco de dados principal no foi executado no banco
de dados de standby devido falta de suporte. Estamos exibindo as
colunas STATUS, para verificar o erro ocorrido, e a coluna EVENT
para verificar o comando que no foi executado.
Aps garantir que nem a materialized view nem a tabela de
referncia existem no banco de dados de standby, basta criar essa
tabela no banco. Podemos usar um dos procedimentos a seguir:

48 SQL Magazine Edio 128

1. Instanciar a tabela no banco de dados standby. Utilizando o


pacote DBMS_LOGSTDBY procedure INSTANTIATE_TABLE,
podemos buscar no banco de dados primrio todos os dados da
tabela, inclusive os seus registros.
Os parmetros requeridos para a procedure INSTANTIATE_TABLE so:
OWNER Schema dono da tabela a ser instanciada;
TABLE NAME Nome da tabela a ser instanciada;
DATABASE LINK Database link existente no banco de dados
standby apontando para o banco de dados primrio.
Para executar o INSTANTIATE_TABLE, precisamos parar o
processo que est aplicando os REDOS no banco de standby, como
mostra a Listagem 4.
Listagem 4. Atualizando a tabela e/ou materialized ciew no banco de standby
SYS@ORCLS> alter database stop logical standby apply;
Database altered.
SYS@ORCLS> exec dbms_logstdby.instantiate_table
(AAO,MV1_TESTE,FORSTDBY)
PL/SQL procedure successfully completed.
SYS@ORCLS> alter database start logical standby apply;
Database altered.
SYS@ORCLS> select object_name, object_type from dba_objects
where owner = AAO and object_name = MV1_TESTE;
OBJECT_NAME
-----------------------------MV1_TESTE

OBJECT_TYPE
----------------------TABLE

Foramos o banco de standby a atualizar todos os dados de


uma tabela ou materialized view. O primeiro comando executado
desliga a funo do standby que aplica as transaes recebidas do
banco de dados standby. O segundo comando atualiza os dados
da tabela no banco de dados de standby com os dados do banco
de dados primrio, ele atualiza a tabela executando internamente
o comando impdp com os parmetros tables=AAO.MV1_TESTE,
que so o owner e o nome da tabela, e network_link=FORSTDBY,
database link informado como ltimo parmetro que aponta
para o banco de dados primrio. J o ltimo comando reativa o
processo do banco de dados que aplica as transaes recebidas
do banco de dados primrio.
2. Executar a DDL necessrio para criar a tabela. Caso no tenhamos o comando necessrio para criar a tabela no banco de standby,
podemos gerar essa DDL utilizando o pacote DBMS_METADATA
procedure GET_DDL, como mostra a Listagem 5.
Verificamos como gerar a DDL da tabela no banco de dados
primrio. O primeiro comando executado diz que o SQL PLUS

dever exibir os primeiros 20000 caracteres de colunas exibidas


que forem do tipo LONG. Executamos este porque o comando
seguinte, DBMS_METADATA.GET_DDL, retorna o comando
necessrio para recriar um objeto, e o retorno dessa procedure
um objeto do tipo LONG. Os parmetros informados para a procedure DBMS_METADATA.GET_DDL so, tipo do objeto, nome
do objeto, e owner do objeto.

dados primrio, ao contrrio dos outros comandos, e ele atualiza


os dados da materialized view.
Agora que temos a materialized view no banco de dados principal e apenas a tabela de referncia no banco de standby, todas
as atualizaes executadas no banco sero aplicadas no banco
de standby como simples comandos DML, mantendo as tabelas
atualizadas.

Listagem 5. Gerando DDL da tabela necessria

Listagem 6. Criando uma tabela para materialized view criada no banco primrio
depois do standby ter sido criado

SYS@ORCL> set long 20000


SYS@ORCL> select dbms_metadata.get_ddl(TABLE,MV2_TESTE,AAO) from dual;

SYS@ORCLS> select guard_status from v$database;

DBMS_METADATA.GET_DDL(TABLE,MV2_TESTE,AAO)
--------------------------------------------------------------------------------

GUARD_S
------ALL

CREATE TABLE AAO.MV2_TESTE


( CODIGO NUMBER,
NOME VARCHAR2(20)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE USERS

Caso escolha essa opo, deve-se lembrar de dois pontos:


A tabela no banco de standby est vazia e para popul-la, necessitaremos executar um refresh completo no banco primrio;
O banco de dados standby protegido contra alteraes,
como podemos verificar na coluna GUARD_STATUS da view
V$DATABASE. De qualquer forma, o banco de dados nos permite desabilitar a proteo do standby para poder criar um
objeto diretamente nele, que pode, ou no, existir no banco de
dados primrio. Para evitar acidentes no banco de standby lgico, devemos sempre manter a proteo do standby como ALL,
mudando para NONE apenas durante curtos perodos de tempo
para criarmos objetos no banco de standby, e voltando logo em
seguida para ALL.
Na Listagem 6 vemos como criar uma tabela para receber atualizao de uma materialized view em uma tabela no banco de dados
standby. O primeiro select verifica o status da proteo do banco
de dados de standby, nesse caso, a proteo do banco de dados
ALL, informando que no podemos modificar a estrutura dos
objetos no banco de dados. J o segundo comando altera a proteo
do banco de dados standby para permitir alteraes no banco de
dados de standby. O terceiro comando verifica se a proteo do
banco de dados de standby est realmente desativada. J o quarto
comando foi gerado na Listagem 5, o comando necessrio para
criar a tabela no banco de dados standby com a mesma estrutura
da tabela criada no banco de dados primrio, quando foi criada
a materialized view no banco de dados primrio. O quinto comando reativa a proteo do banco de dados de standby. O sexto
comando verifica se o objeto foi criado com sucesso no banco de
dados de standby e o ltimo comando foi executado no banco de

SYS@ORCLS> alter database guard none;


Database altered.
SYS@ORCLS> select guard_status from v$database;
GUARD_S
------NONE
SYS@ORCLS> CREATE TABLE AAO.MV2_TESTE
2 ( CODIGO NUMBER,
3
NOME VARCHAR2(20)
4 ) SEGMENT CREATION IMMEDIATE
5 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
6 NOCOMPRESS LOGGING
7 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1
MAXEXTENTS 2147483645
8 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
9 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE
DEFAULT)
10 TABLESPACE USERS;
Table created.
SYS@ORCLS> alter database guard all;
Database altered.
SYS@ORCLS> select object_name, object_type from dba_objects where owner =
AAO and object_name = MV2_TESTE;
OBJECT_NAME
OBJECT_TYPE
------------------------------ ----------------------MV2_TESTE
TABLE
AAO@ORCL> exec dbms_mview.refresh(MV2_TESTE)
PL/SQL procedure successfully completed.
AAO@ORCL>

Banco de dados principal e standby idnticos


Esse cenrio muito parecido com o status do banco de standby,
quando acabamos de converter o standby para lgico. Ele possui
todos os objetos existentes no banco de dados primrio, mas as
materialized views no recebem atualizaes.
Em um primeiro momento, podemos imaginar em gerenciar
as materialized views da mesma forma que fizemos no exemplo
anterior, mas, no caso de usarmos o standby tambm para garantir
a disponibilidade dos dados, no apenas como banco de dados
para leitura, podemos nos deparar com um problema se o banco
de dados primrio tiver uma falha grave e tenhamos que converter

Edio 128 SQL Magazine

49

Oracle Materialized Views: Gerenciando em standby lgicos no Oracle

o banco de standby em banco primrio, para responder a todas


as requisies da aplicao.
Caso tenhamos seguido o exemplo anterior, ao converter o
banco de standby para primrio perderemos as materialized
views, porque elas no existem nesse banco de dados, teremos
apenas tabelas normais que no recebero mais atualizaes.
Nesse caso, quando quisermos garantir que a materialized view
exista tambm no banco de dados de standby, temos que criar um
procedimento que seja executado no banco de dados de standby
lgico para atualizar a materialized view. A nica diferena desse
procedimento para o procedimento executado normalmente no
banco principal referente proteo dos dados no banco lgico. Como vimos anteriormente, para proteger a integridade dos
dados, o banco de dados lgico no permite alteraes, mas para
atualizar a materialized view, temos que desativar a proteo.
Na Listagem 7 vimos como atualizar uma materialized view
no banco de dados de standby. O primeiro comando executado
verifica os dados existentes na MV no banco de dados primrio.
O segundo comando, executado no banco de dados de standby,
verifica se o SCN dos bancos de dados primrio e standby esto em
sincronia, assim garantimos que as transaes do banco primrio
esto sendo aplicadas no banco de dados standby. J o terceiro
comando lista os valores na materialized view no banco de dados
de standby. Executamos esse comando para comparar os valores
do banco de dados primrio e o banco de dados standby. Como
temos a mesma materialized view no banco de dados standby,
que temos no banco de dados primrio, os dados atualizados no
banco primrio no so aplicados no banco de standby, mesmo
com esse banco em sincronia. O quarto comando desabilita a
proteo do banco de dados standby. O quinto comando, verifica
a proteo do banco de dados de standby para garantir que a
proteo foi desativada.
O sexto comando modifica o usurio logado no banco de dados
standby, mudamos o usurio para o owner da materialized view.
J o stimo comando atualiza a MV no banco de dados de standby, o mesmo comando executado no banco de dados primrio
para atualizar a materialized view. O oitavo comando igual
ao terceiro, executamos ele para garantir que agora os dados da
materialized view no banco de dados primrio e standby esto
idnticos. J o nono comando muda o usurio logado no banco
de dados novamente para o usurio SYS e o por fim, a proteo
do banco de dados de standby reativada.

Criar/remover uma materialized view


Materialized views criadas no banco de dados primrio no
sero recriadas no banco de standby. O mesmo ocorre quando as
MV forem excludas. Por isso, toda vez que precisarmos de MV
no banco de standby, ou precisarmos exclu-las, temos que fazer
diretamente no banco de standby. A criao e excluso ocorre de
forma bem simples, como se fizesse no banco primrio, apenas
precisamos lembrar de desabilitar a proteo do Data Guard.
Aps a criao da materialized view no banco de dados primrio,
podemos ver mensagem no standby conforme Listagem 8.

50 SQL Magazine Edio 128

Listagem 7. Atualizando materialized view no banco de standby


AAO@ORCL> select * from mv3_teste;
CODIGO
---------------1
2
3
4

NOME
-------------------------ANTES MV1_TESTE
ANTES MV2_TESTE
ANTES MV3_TESTE
DEPOIS MV3_TESTE

SYS@ORCLS> select * from v$logstdby_progress;


APPLIED_SCN APPLIED_TIME
---------------------------------------593009 31/08/14 20:52:58
RESTART_SCN RESTART_TIME
---------------------------------------593009 31/08/14 20:52:58
LATEST_SCN LATEST_TIME
---------------------------------------593024 31/08/14 20:53:04
MINING_SCN MINING_TIME
---------------------------------------593010 31/08/14 20:52:58
RESETLOGS_ID
---------------------------------------857054829
CON_ID
---------------------------------------0
SYS@ORCLS> select * from aao.mv3_teste;
CODIGO
---------------1
2
3

NOME
--------------------------ANTES MV1_TESTE
ANTES MV2_TESTE
ANTES MV3_TESTE

SYS@ORCLS> alter database guard none;


Database altered.
SYS@ORCLS> select guard_status from v$database;
GUARD_S
-------------NONE
SYS@ORCLS> conn aao/***
Connected.
AAO@ORCLS> exec dbms_mview.refresh(MV3_TESTE)
PL/SQL procedure successfully completed.
AAO@ORCLS> select * from aao.mv3_teste;
CODIGO
--------------1
2
3
4

NOME
-------------------------ANTES MV1_TESTE
ANTES MV2_TESTE
ANTES MV3_TESTE
DEPOIS MV3_TESTE

AAO@ORCLS> conn / as sysdba


Connected.
SYS@ORCLS> alter database guard all;
Database altered.
SYS@ORCLS>

Nessa listagem vimos erros que ocorrem durante criao de


materialized views em bancos de standby. O comando executado
verifica os eventos ocorridos no processo de standby, executamos
o select na DBA_LOGSTDBY_EVENTS para verificar o STATUS,
que a mensagem de erro, e o EVENT para ver os comandos que
no foram aplicados.
Para criar a MV no standby, primeiro precisamos desativar a
proteo do standby e recriar a materialized view, conforme a
Listagem 9.

Listagem 10. Removendo materialized view


SYS@ORCLS> alter database guard none;
Database altered.
SYS@ORCLS> drop materialized view aao.mv4_teste;
Materialized view dropped.
SYS@ORCLS> alter database guard all;
Database altered.

Listagem 8. Erros de atualizao de materialized view


SYS@ORCLS> select status, event from dba_logstdby_events;
STATUS
EVENT
------------------------------------------ --------------------------------------------------------------ORA-16226: DDL skipped
create materialized view mv4_teste
due to lack of support
as select * from torigem@ODB_LINK
Listagem 9. Criando materialized view no banco de standby
SYS@ORCLS> alter database guard none ;
Database altered.
SYS@ORCLS> conn aao/*
Connected.
AAO@ORCLS> create materialized view mv4_teste as select * from torigem@
ODB_LINK;
Materialized view created.
AAO@ORCLS> conn / as sysdba
Connected.
SSY@ORCLS> alter database guard all;

SYS@ORCLS>

Standby lgico no tem privilgio para utilizar o usurio do


database link
Para trabalhar nessa situao, podemos usar o mesmo procedimento utilizado no cenrio anterior, mas devido ao problema
de no podermos usar o database link criado, podemos alterar a
forma de acessar os dados no banco de dados de origem.
No exemplo anterior, o banco de standby (ORCLS) tinha os
mesmos privilgios que o banco primrio (ORCL), por isso, precisvamos apenas criar a MV no banco de standby e executar um
job para sua atualizao. Porm, caso no tenhamos os mesmos
privilgios, primeiro teremos que discutir com o time de segurana sobre o acesso tabela necessria para a MV. Caso no
possamos acessar o mesmo usurio, podemos, ao menos, criar
um usurio com acesso restrito apenas s informaes necessrias
para a materialized view, como mostra a Listagem 11.

Database altered.
SYS@ORCLS>

Listagem 11. Criando usurio com permisso de leitura nos dados de origem
SYS@ODB> create user AAO_READ identified by *** default tablespace USERS;

Vemos os comandos necessrios para criar materialized view


no banco de standby. O primeiro desativa a proteo do banco
de dados de standby. J o segundo muda o usurio logado no
banco de dados de standby para o usurio que ser owner da
nova materialized view. O terceiro cria a materialized view que
precisamos no banco de dados de standby, foi utilizado o mesmo
comando usado para criar a MV no banco de dados primrio.
O quarto loga no banco de dados com o usurio SYS e por fim,
reativa a proteo do banco de dados de standby reativada.
Depois de criada, a materialized view poder ser atualizada
utilizando o pacote DBMS_MVIEW procedure REFRESH, como j
vimos em exemplos anteriores. O procedimento para excluso da
MV o mesmo usado para a criao, onde teremos que desativar
a proteo do standby, remover a materialized view e reativar a
proteo do standby.
Na Listagem 10 mostramos como remover uma materialized
view do banco de dados standby. Inicialmente desabilitamos a
proteo do banco de dados de standby. Em seguida, removemos
a materialized view que no desejamos e por fim, reativamos a
proteo do banco de dados de standby.

User created.
SYS@ODB> grant create session to aao_read;
Grant succeeded.
SYS@ODB> grant select on aao.torigem to aao_read;
Grant succeeded.
SYS@ODB> create synonym aao_read.torigem for aao.torigem;
Synonym created.
SYS@ODB> conn aao_read/***
Connected.
AAO_READ@ODB> select * from torigem;
CODIGO
----------------1
2
3
4

NOME
--------------------------ANTES MV1_TESTE
ANTES MV2_TESTE
ANTES MV3_TESTE
DEPOIS MV3_TESTE

AAO_READ@ODB>

Edio 128 SQL Magazine

51

Oracle Materialized Views: Gerenciando em standby lgicos no Oracle

Criamos o usurio que ser utilizado por uma materialized view


para ter acesso restrito no banco de dados de origem. Inicialmente
criamos um novo usurio no banco que contm os dados que
usamos para a MV. Em seguida temos o comando que define o
privilgio ao usurio para conectar no banco de dados. O terceiro
comando prov o privilgio de leitura na tabela usada pela materialized view. O quarto loga no banco de dados usado como origem
de dados com o novo usurio criado; e o quinto executa um select
na tabela usada como origem de dados para o banco de dados
de standby, para garantir que o novo usurio tenha o privilgio
necessrio para ler os dados usados pela materialized view.
Agora que j possumos o usurio que tem privilgio restrito
no banco de origem, podemos recriar o database link no banco
de standby utilizando o novo usurio criado, como mostra a
Listagem 12.
Listagem 12. Criando database link para atualizao da materialized view
SYS@ORCLS> alter database guard none;
Database altered.
SYS@ORCLS> conn aao/***
Connected.
AAO@ORCLS> drop database link ODB_LINK;
Database link dropped.
AAO@ORCLS> create database link ODB_LINK connect to AAO_READ identified by
*** using ODB;

Modificamos os dados da tabela de origem para testarmos


atualizao da materialized view. O primeiro comando insere
um novo registro na tabela usada como origem para a materialized view. O segundo completa a transao, tornando os dados
inseridos disponveis para todas as sesses logadas no banco de
dados de origem.
Agora iremos atualizar os registros no banco de dados primrio conforme a Listagem 14. Atualizamos a materialized
view no banco primrio para verificar as alteraes ocorridas
no banco de dados ODB. O primeiro comando DBMS_MVIEW
.REFRESH atualiza os dados da MV, quando no temos um
job para atualiz-la automaticamente. O segundo apenas exibe
se os dados inseridos na tabela de origem foram inseridos na
materialized view.
Listagem 13. Mudando dados de origem para testar atualizao na materialized
view
AAO@ODB> insert into torigem values (5, NOVO DB LINK);
1 row created.
AAO@ODB> commit;
Commit complete.
AAO@ODB>
Listagem 14. Atualizando a materialized view no banco de dados primrio
SYS@ORCL> exec dbms_mview.refresh(AAO.mv_odbtable)

Database link created.

PL/SQL procedure successfully completed.

AAO@ORCLS> conn / as sysdba


Connected.
SYS@ORCLS> alter database guard all;

SYS@ORCL> select * from AAO.mv_odbtable;

Database altered.
SYS@ORCLS>

Criamos database link para atualizao de dados da materialized view. O primeiro comando desativa a proteo do banco de
dados de standby. O segundo conecta no banco de dados com o
usurio owner da MV. O terceiro remove o database link utilizado para leitura da tabela no banco de origem. Esse database link
foi criado quando criamos o banco de dados de standby, e ele foi
criado usando o mesmo usurio/privilgios do banco de dados
primrio. O quarto comando recria o database link usando um
usurio com acesso restrito, para que o banco de dados de standby
no use o mesmo database link para acessar mais informaes
do que so necessrias. O quinto loga no banco de dados com o
usurio SYS; e o ltimo comando reativa a proteo do banco de
dados de standby.
Para testar essa modificao, vamos adicionar alguns registros
tabela de origem no banco de dados ODB, que utilizada como
fonte de dados para a materialized view. Para adicionar os registros no banco de origem, proceda conforme a Listagem 13.

52 SQL Magazine Edio 128

CODIGO
-----------------1
2
3
4
5

NOME
-----------------------------ANTES MV1_TESTE
ANTES MV2_TESTE
ANTES MV3_TESTE
DEPOIS MV3_TESTE
NOVO DB LINK

5 rows selected.
SYS@ORCL>

Agora iremos atualizar os dados no standby lgico. Na


Listagem 15 atualizamos a materialized view no banco de dados
standby. O primeiro comando desativa a proteo do banco de
standby. O segundo loga no banco de dados com o usurio owner da MV. O terceiro atualiza a MV com os dados inseridos na
tabela de origem. O quarto comando verifica se a materialized
view est exibindo todos os dados necessrios. J o quinto loga
no banco de dados com o usurio SYS; e o por fim, reativa a
proteo do banco de dados standby.
Outra opo vlida para essa atualizao seria criar o database
link, com um nome diferente e recriar a materialized view, apontando para o novo database link.

Na Listagem 16 vemos como atualizar materialized views


usando usurio com acesso restrito ao banco de dados de origem.
O primeiro comando desativa a proteo do banco de dados de
standby. J o segundo loga no banco com o usurio owner da MV.
O terceiro cria um database link usando o usurio com acesso
restrito criado no banco de dados de origem. O quarto comando
cria a materialized view usando um database link diferente do
database link, utilizado no banco de dados primrio. O quinto
comando loga no banco de dados com o usurio SYS, e o sexto
reativa a proteo do banco de dados de standby.
Listagem 15. Atualizando a materialized view no banco de dados standby
SYS@ORCLS> alter database guard none;
Database altered.
SYS@ORCLS> conn aao/***
Connected.
AAO@ORCLS> exec dbms_mview.refresh(mv_odbtable);
PL/SQL procedure successfully completed.

Materialized views so excelentes recursos para utilizarmos


quando estivermos trabalhando com queries que tm baixa
performance, permitem a criao de um objeto no banco com
os dados de vrias tabelas ou views evitando joins. Alm disso,
permitem a criao de ndices para selects que no iro impactar
DMLs executadas nas tabelas de origem, e tambm, melhoram
a performance para leitura de dados remotos, criando cpias
locais. Entretanto, para utilizar esse recurso em standby lgico,
precisamos ter cuidado com a atualizao dos dados para o banco
de standby.
Mesmo sendo mais simples gerenciarmos apenas uma tabela no
banco de dados de standby, sem precisarmos nos preocupar com
sua atualizao, essa opo tem um lado negativo: por no termos
e no atualizarmos a materialized view no banco de dados de
standby, caso o banco principal fique indisponvel e precisemos
fazer um Failover ou Switchover para o standby, a materialized no
existir mais, e a tabela no receber mais atualizaes.

Autor

AAO@ORCLS> select * from mv_odbtable;


CODIGO
----------------1
2
3
4
5

Anderson Araujo de Oliveira


aaoliveira@gmail.com
Formado Tecnlogo em Processamento de Dados pela FatecAM e com especializao em Engenharia de Software pelo
IC-Unicamp, trabalha como DBA Oracle desde 2007, Groom (DBA)
Netezza desde 2012.

NOME
----------------------------ANTES MV1_TESTE
ANTES MV2_TESTE
ANTES MV3_TESTE
DEPOIS MV3_TESTE
NOVO DB LINK

5 rows selected.
AAO@ORCLS> conn / as sysdba
Connected.
SYS@ORCLS> alter database guard all;
Database altered.
SYS@ORCLS>

Links:
Gerenciando banco de dados standby lgico Seo Materialized views
http://docs.oracle.com/cd/E11882_01/server.112/e41134/manage_ls.htm#SBYDB4833

Voc gostou deste artigo?

Listagem 16. Criando materialized view usando usurio com acesso restrito
SYS@ORCLS> alter database guard none ;
Database altered.

D seu voto em www.devmedia.com.br/sqlmagazine/feedback


Ajude-nos a manter a qualidade da revista!

SYS@ORCLS> conn aao/*


Connected.
AAO@ORCLS> create database link ODB_LINK_NEW connect to AAO_READ identified by *** using ODB;
Database link created.
AAO@ORCLS> create materialized view mv4_teste as select * from torigem@
ODB_LINK_NEW;
Materialized view created.
AAO@ORCLS> conn / as sysdba
Connected.
SSY@ORCLS> alter database guard all;
Database altered.
SYS@ORCLS>

Edio 128 SQL Magazine

53

Oracle Upgrade: Como


fazer upgrade do oracle
11g para 12c Parte 3
Este artigo faz parte de um curso

Fique por dentro


Consolidao de bancos de dados tem sido a alternativa mais utili-

este artigo ser dada continuidade srie de


forma totalmente prtica. Sero vistas as etapas
para consolidao de um primeiro banco de
dados na nova arquitetura. Neste momento, j temos
um banco na verso 12c, porm ainda non-CDB. Ser
mostrado agora o processo de convert-lo em um PDB,
ou seja: criao do CDB para em seguida efetuar a migrao do non-CDB em PDB.
Esta a metodologia mais comum para estes casos, pois
para utilizar as funcionalidades desta nova arquitetura
o banco de dados j precisa estar na nova verso. Alm
disso, tambm possvel estar na verso 12c, porm
fora da Arquitetura Multitenant. Perceba que utilizar
esta nova arquitetura no mandatrio, mas sim uma
boa soluo para reduo de custos e otimizao de
recursos na consolidao de bancos de dados que no
necessitam de exclusividade na utilizao dos recursos
computacionais disponveis.

Efetuando o backup
O Oracle RMAN (Recovery Manager) um gerenciador
de backup e recuperao fornecido para bancos de dados
Oracle. Ele apresenta funcionalidades de backup, restaurao e recuperao, abordando alta disponibilidade e
recuperao de falhas em casos de desastres. A Oracle
recomenda o RMAN como seu mtodo preferido para
backup e recuperao e apresenta interface em modo de
linha de comando e grfica (via Oracle Enterprise Manager). Os projetistas do RMAN visam a integrao com
servidores de banco de dados Oracle, proporcionando
deteco de corrupo no nvel de bloco durante o backup
e restaurao. O RMAN otimiza o desempenho e consumo do espao durante o backup atravs da multiplexao
de arquivos e compresso de backup-sets.

54 SQL Magazine Edio 128

zada por vrias empresas, dos mais variados segmentos e tamanhos.


A reduo dos custos de TI tem sido o principal fator para esta adoo
e a mais nova funcionalidade do Oracle em sua verso 12c est disponvel justamente para oferecer o que h de melhor para alcanar este
objetivo: a arquitetura multitenant. Neste artigo apresentaremos o
processo de criao de um CDB e finalmente a migrao do non-CDB
para um PDB. Esta discusso til em cenrios onde a verso do Oracle
j est na verso 12c porm fora da arquitetura multitenant e a adoo
desta nova arquitetura permite, entre outros fatores, a consolidao
de vrios bancos em um nico servidor totalmente otimizado.

Tambm se integra com o Oracle Secure Backup e com produtos


de terceiros para gerenciamento de mdia para backup em fita.
Com um sistema de sintaxe de vrios comandos, permite que
os administradores de banco de dados aperfeioem os mtodos
e o desempenho de backups e restauraes de dados. Neste contexto, uma recuperao completa implica em restaurar todas
as informaes disponveis de forma consistente ao ponto mais
atual no tempo, enquanto uma recuperao incompleta permite
especificar uma restaurao em um determinado ponto do tempo
no passado.
A Listagem 1 apresenta como devemos proceder para realizar
o backup do banco non-CDB.
Primeiramente iniciou-se o utilitrio RMAN utilizando o
prprio control file do banco de dados como catlogo (perceba
que no h o parmetro catalog na chamada do utilitrio). Isso
porque no estamos utilizando um banco de dados centralizado que armazene o catlogo de todos os bancos que se deseje
efetuar o backup, como seria o caso de um servidor exclusivo de
backup. Ento efetuou-se uma verificao dos archived redo log
files para que os mesmos fossem registrados/conferidos com
o catlogo (o control file, neste caso), como mostra a linha
09. Esta etapa importante pois, caso no seja feita, o RMAN
retornar erro ao tentar copiar arquivos que j no esto mais

Listagem 1. Efetuando o backup do Banco de Dados non-CDB.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.

[oracle@OEL6-64 backup]$ rman target /


Recovery Manager: Release 12.1.0.1.0 - Production on Thu Nov 20 12:34:42 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

24.
25.
26.
27.
28.
29.

connected to target database: SQL12C (DBID=3124618022)


RMAN> crosscheck archivelog all;
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
specification does not match any archived log in the repository
RMAN> backup database format /oracle/backup/SQL12C_hotfull_%U;
Starting backup at 20-NOV-14
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/oracle/oradata/SQL12c/system01.dbf
input datafile file number=00003 name=/oracle/oradata/SQL12c/sysaux01.dbf

presentes e so desnecessrios. Feito isto, iniciou-se a execuo


do backup. Foi necessria a definio da localizao dos arquivos
gerados (linha 17). Perceba que o backup foi executado com
sucesso (linha 39).

Criando o CDB (Container Database)


Conforme apresentado no artigo passado, para utilizar a arquitetura Multitenant necessrio que haja um Container Database.
possvel criar o CDB de duas formas: 1) atravs do utilitrio
DBCA (Database Configuration Assistant Assistente de Configurao de Banco de Dados) ou 2) atravs de linha de comando
utilizando a instruo CREATE DATABASE. Vale lembrar que em
muitos casos o ambiente grfico no est sequer instalado no servidor de banco de dados, portanto ser abordado aqui o processo
manual, ou seja, atravs do CREATE DATABASE.
A partir da verso 12c do Oracle necessrio definir o parmetro
ENABLE_PLUGGABLE_DATABASE =TRUE para criar um CDB.
Este parmetro permite ao banco de dados, ainda em estado
NOMOUNT, entender que o banco ser criado como um CDB.
Vale lembrar que um CDB pode acomodar at 252 PDBs (Pluggable
Databases) e que o parmetro ENABLE_PLUGGABLE_DATABASE
deve ser definido no arquivo de parmetros de inicializao (o
pfile ou, como mais conhecido, arquivo init.ora). O valor padro
para este parmetro FALSE, mas h rumores de que isso pode
mudar nas verses mais novas.
Para criar o CDB manualmente h, basicamente, trs etapas:
1. Criar/atualizar o arquivo de parmetros de inicializao
(pfile);
2. Executar o comando CREATE DATABASE;
3. Executar o script @?/rdbms/admin/catcdb.sql.

30.
31.
32.
33.
34.
35.
36.
37.

input datafile file number=00002 name=/oracle/oradata/SQL12c/example01.dbf


input datafile file number=00004 name=/oracle/oradata/SQL12c/undotbs01.dbf
input datafile file number=00006 name=/oracle/oradata/SQL12c/users01.dbf
channel ORA_DISK_1: starting piece 1 at 20-NOV-14
channel ORA_DISK_1: finished piece 1 at 20-NOV-14
piece handle=/oracle/backup/SQL12C_hotfull_05po36jn_1_1
tag=TAG20141120T123503 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:15
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 20-NOV-14
channel ORA_DISK_1: finished piece 1 at 20-NOV-14
piece handle=/oracle/backup/SQL12C_hotfull_06po36m2_1_1
tag=TAG20141120T123503 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 20-NOV-14

38.
39.
40.
41. RMAN> exit
42.
43.
44. Recovery Manager complete.

Corrigindo o bug 17033183


No entanto, ao verificar todas as condies do ambiente antes de
iniciar a criao, voc pode se deparar com um bug devidamente
documentado. Na verso 12.1.0.1.0 o arquivo catcdb.sql no foi
disponibilizado junto com a mdia de instalao. Este problema j
est documentado como Bug 17033183 : MISSING FILE CATCDB.
SQL IN $ORACLE_HOME/RDBMS/ADMIN e sua resoluo
se encontra na nota do My Oracle Support Doc ID 1575778.1.
A Oracle disponibilizou um patch de correo, portanto esta a
primeira ao a ser tomada caso esteja na mesma situao. Vale
ressaltar que tal problema no acontece caso utilize o DBCA.
A Listagem 2 apresenta a execuo do opatch para aplicar o
patch recomendado.
Aps efetuar o download do patch diretamente no portal My Oracle Support, ser descompactado o arquivo .zip e o mesmo criou
um diretrio com o nmero do bug. Deve-se acessar o diretrio e
executar o utilitrio opatch (linha 02). Aps a concluso da execuo o arquivo necessrio para a criao do CDB j se encontra
no local desejado. A descompresso necessria pois a Oracle
compacta o arquivo para diminuir o trfego de rede e tornar o
download mais rpido. Em seguida, necessrio executar o script
do patch para corrigir o problema em questo.

Criando o pfile
A primeira etapa a criao do arquivo de parmetros de
inicializao e os diretrios necessrios. A Listagem 3 apresenta a criao dos diretrios administrativos enquanto que a
Listagem 4 mostra a criao do pfile.
Deve-se entrar no diretrio que sero utilizados como base
($ORACLE_BASE) e ento comea-se a criar os diretrios.

Edio 128 SQL Magazine

55

Oracle Upgrade: Como fazer upgrade do oracle 11g para 12c Parte 3

Listagem 2. Execuo do opatch para correo do bug 17033183.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.

[oracle@OEL6-64 ~]$ cd 17316776


[oracle@OEL6-64 17316776]$ /oracle/rdbms/12.1.0/OPatch/opatch apply
Oracle Interim Patch Installer version 12.1.0.1.0
Copyright (c) 2012, Oracle Corporation. All rights reserved.

Oracle Home : /oracle/rdbms/12.1.0


Central Inventory : /oracle/oraInventory
from
: /oracle/rdbms/12.1.0/oraInst.loc
OPatch version : 12.1.0.1.0
OUI version : 12.1.0.1.0
Log file location : /oracle/rdbms/12.1.0/cfgtoollogs/opatch/17316776_
Nov_20_2014_11_36_07/apply2014-11-20_11-36-07AM_1.log
Applying interim patch 17316776 to OH /oracle/rdbms/12.1.0
Verifying environment and performing prerequisite checks...
All checks passed.
Backing up files...
Patching component oracle.rdbms.dbscripts, 12.1.0.1.0...
Verifying the update...
Patch 17316776 successfully applied
Log file location: /oracle/rdbms/12.1.0/cfgtoollogs/opatch/17316776_
Nov_20_2014_11_36_07/apply2014-11-20_11-36-07AM_1.log

24.
25. OPatch succeeded.
Listagem 3. Criao da estrutura de diretrios.
01.
02.
03.
04.
05.
06.
07.
08.

[oracle@OEL6-64 ~]$ cd /oracle


[oracle@OEL6-64 oracle]$ mkdir -p /oracle/admin/SQLCDB/adump
[oracle@OEL6-64 oracle]$ mkdir -p /oracle/admin/SQLCDB/dpdump
[oracle@OEL6-64 oracle]$ mkdir -p /oracle/admin/SQLCDB/pfile
[oracle@OEL6-64 oracle]$ mkdir -p /oracle/audit
[oracle@OEL6-64 oracle]$ mkdir -p /oracle/fast_recovery_area/SQLCDB
[oracle@OEL6-64 oracle]$ mkdir -p /oracle/oradata/SQLCDB
[oracle@OEL6-64 oracle]$ mkdir -p /oracle/oradata/SQLCDB/pdbseed

Criou-se o diretrio para armazenar os arquivos de auditoria do


bando de dados (linha 02) e depois criou-se o diretrio padro para
operaes do utilitrio Data Pump (linha 03). Na linha 4 criou-se
o diretrio onde o pfile ser armazenado.
O diretrio que armazenar os arquivos de log de auditoria foi
criado na linha 5. Criou-se tambm o diretrio para a rea de recuperao rpida (linha 6) e o diretrio onde sero armazenados os
arquivos de dados (data files) (linha 7). Por ltimo, criou-se o diretrio
onde sero armazenados os data files do PDB semente (seed) (linha 8).
Todos estes diretrios devem ser criados para que o bando de dados
armazene seus arquivos de administrao. Caso estes diretrios no
sejam criados o processo de criao do banco falhar.
J na Listagem 4, perceba que se tem um arquivo de parmetros
de inicializao como qualquer outro, com a nica diferena do parmetro enable_pluggable_database definido como true (linha 10).
Este novo parmetro ir permitir que este banco possua PDBs.

Executando o CREATE DATABASE


Agora chegado o momento de executar o comando de criao
do CDB. A Listagem 5 apresenta o processo.
Definiu-se a varivel de ambiente ORACLE_SID para o nome do
CDB a ser criado e tambm as variveis de ambiente PERL5LIB

56 SQL Magazine Edio 128

(linha 02) e PATH (linha 03). Ento iniciou-se o utilitrio SQL*Plus


(linha 04). Conectou-se instncia SQLCDB com o usurio SYS
(linha 10) perceba que h uma mensagem informando que a
instncia no est no ar (linha 11) e iniciou-se a instncia em
modo NOMOUNT (ou seja, apenas lido o arquivo de parmetros
de inicializao, e iniciada a instncia, mas sequer o control file
lido, como mostra a linha 12.

Listagem 4. Contedo do arquivo de parmetros de inicializao (pfile).


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.

[oracle@OEL6-64 oracle]$ cd admin/SQLCDB/pfile/


[oracle@OEL6-64 pfile]$ cat initSQLCDB.ora
db_name=SQLCDB
sga_target=968m
pga_aggregate_target=56m
db_block_size=8192
open_cursors=300
processes=300
compatible=12.1.0.0.0
enable_pluggable_database=true
audit_trail=db
log_archive_format=SQLCDBarch_%t_%s_%r.dbf
control_files=(/oracle/oradata/SQLCDB/control01.ctl, /oracle/
fast_recovery_area/SQLCDB/control02.ctl)
db_recovery_file_dest=/oracle/fast_recovery_area/SQLCDB
db_recovery_file_dest_size=4800m
diagnostic_dest=/oracle
audit_file_dest=/oracle/admin/SQLCDB/adump
remote_login_passwordfile=EXCLUSIVE
undo_tablespace=UNDOTBS1

Primeiramente definiu-se as variveis de ambiente. Iniciou-se o


utilitrio SQL*Plus (linha 04) e conectou-se instncia do banco
(linha 10) que ainda no estava iniciada (linha 11). O prximo passo
foi iniciar a instncia do CDB utilizando o arquivo de parmetros
anteriormente criado (linha 12).
Com a instncia no ar executou-se o comando de criao do
CDB (linhas 20 a 44). Perceba tambm que este um comando
CREATE DATABASE bastante parecido com o que j estamos
acostumados. Algumas diferenas esto na clusula ENABLE
PLUGGABLE DATABASE (linha 40), que define que o banco de
dados criado um CDB que conter tanto o root quanto o seed, e
tambm a clusula SEED FILE_NAME_CONVERT (linhas 41 a
44), que usada para definir os data files do seed, baseados nos data
files do root. possvel definir explicitamente o nome dos data files
do seed ou, caso opte por utilizar OMF (Oracle Managed Files), esta
clusula pode ser omitida.

Executando o catcdb.sql
O script catcdb.sql o responsvel pela criao dos vrios componentes de banco de dados no root, como os pacotes PL/SQL, etc.
A Listagem 6 apresenta a execuo deste script.
Ainda conectado ao CDB atravs do SQL*Plus simplesmente
executou-se o script (linha 01). solicitada uma nova senha para
o usurio SYS (linha 02) e tambm para o usurio SYSTEM (linha
03). O nome da tablespace temporria tambm solicitado (linha
04). O script executado de maneira rpida, e pronto, estamos

Listagem 5. Executando o comando de criao do CDB.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.

[oracle@OEL6-64 pfile]$ export ORACLE_SID=SQLCDB


[oracle@OEL6-64 pfile]$ export PERL5LIB=$ORACLE_HOME/rdbms/admin
[oracle@OEL6-64 pfile]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@OEL6-64 pfile]$ sqlplus /nolog

32.
33.

SQL*Plus: Release 12.1.0.1.0 Production on Thu Nov 20 16:38:40 2014


Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup nomount pfile=/oracle/admin/SQLCDB/pfile/initSQLCDB.ora
ORACLE instance started.
Total System Global Area 1010479104 bytes
Fixed Size
2295896 bytes
Variable Size
268437416 bytes
Database Buffers
734003200 bytes
Redo Buffers
5742592 bytes
SQL> CREATE DATABASE SQLCDB
2 MAXINSTANCES 8
3 MAXLOGHISTORY 1
4 MAXLOGFILES 16
5 MAXLOGMEMBERS 3
6 MAXDATAFILES 1024
7 DATAFILE /oracle/oradata/SQLCDB/system01.dbf SIZE 1536M REUSE
8 AUTOEXTEND OFF EXTENT MANAGEMENT LOCAL
9 SYSAUX DATAFILE /oracle/oradata/SQLCDB/sysaux01.dbf SIZE 1024M REUSE
10 AUTOEXTEND OFF

Listagem 6. Executando o script catcdb.sql.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.

30.
31.

SQL> @?/rdbms/admin/catcdb.sql
Enter new password for SYS:
Enter new password for SYSTEM:
Enter temporary tablespace name: TEMP
Connected.
...
...
...
...
Session altered.

Pluggable database altered.

Pluggable database altered.

Session altered.

com o CDB devidamente criado. Como dito, o script catcdb.sql


o responsvel pela criao dos vrios componentes de banco de
dados no root, como os pacotes PL/SQL. Caso no seja executado,
o banco no ser criado corretamente.

Migrando o non-CDB em PDB


H algumas estratgias para migrar um non-CDB para PDB,
tais como:
Clonar um non-CDB remoto;
Utilizar o utilitrio DataPump (expdp, impdp);

34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.

11 SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP


12 TEMPFILE /oracle/oradata/SQLCDB/temp01.dbf SIZE 100M
REUSE AUTOEXTEND OFF
13 SMALLFILE UNDO TABLESPACE UNDOTBS1
14 DATAFILE /oracle/oradata/SQLCDB/undotbs01.dbf SIZE 768M
REUSE AUTOEXTEND OFF
15 CHARACTER SET AL32UTF8
16 NATIONAL CHARACTER SET AL16UTF16
17 LOGFILE GROUP 1 (/oracle/oradata/SQLCDB/redo01a.log, /oracle/
fast_recovery_area/SQLCDB/redo01b.log) SIZE 50M,
18 GROUP 2 (/oracle/oradata/SQLCDB/redo02a.log, /oracle/
fast_recovery_area/SQLCDB/redo02b.log) SIZE 50M,
19 GROUP 3 (/oracle/oradata/SQLCDB/redo03a.log, /oracle/
fast_recovery_area/SQLCDB/redo03b.log) SIZE 50M
20 USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY oracle
21 ENABLE PLUGGABLE DATABASE
22 SEED FILE_NAME_CONVERT=(/oracle/oradata/SQLCDB/system01.dbf, /
oracle/oradata/SQLCDB/pdbseed/system01.dbf,
23 /oracle/oradata/SQLCDB/sysaux01.dbf, /oracle/oradata/
SQLCDB/pdbseed/sysaux01.dbf,
24 /oracle/oradata/SQLCDB/temp01.dbf, /oracle/oradata/
SQLCDB/pdbseed/temp01.dbf,
25 /oracle/oradata/SQLCDB/undotbs01.dbf, /oracle/oradata/
SQLCDB/pdbseed/undotbs01.dbf);

45.
46. Database created.
47.
48. Elapsed: 00:01:20.96

Utilizar replicao;
Utilizar o pacote DBMS_PDB.
Ser abordado neste artigo a ltima opo. O DBMS_PDB
um pacote construdo pela prpria Oracle e disponibilizado no
banco de dados, parte dos famosos Built-in Packages, que so
os DBMS_*.
Ele permite a criao de um arquivo de metadados em formato
XML referente ao non-CDB, fazendo com que ele seja descrito da
mesma forma que quando um PDB desconectado (unplugged).
Isso permite que o non-CDB possa ser conectado como um PDB
em um CDB existente.
Vale lembrar que todas as funcionalidades presentes no PDB
devem estar presentes no CDB, portanto tome o cuidado de verificar este item. A primeira coisa a ser feita finalizar o non-CDB
e inici-lo em modo somente leitura (read only), como apresentado
na Listagem 7.
Definiu-se a varivel de ambiente ORACLE_SID para o nome
do SID do non-CDB e iniciou-se o utilitrio SQL*Plus (linha 02).
Conectou-se instncia do non-CDB com o usurio SYS (linha 08)
e finalizou-se o banco de dados (linha 10). Em seguida, iniciou-se
o non-CDB em modo read only (linha 14). Abrir o non-CDB em
modo read only um passo obrigatrio, pois para a continuidade do
processo mandatrio que no haja nenhuma alterao no banco
de dados (ter o banco em modo read only oferece essa garantia).
Agora o momento de efetuar a descrio do non-CDB utilizando o procedimento DESCRIBE do pacote DBMS_PDB, ou seja,
DBMS_PDB.DESCRIBE. Este procedimento criar um arquivo

Edio 128 SQL Magazine

57

Oracle Upgrade: Como fazer upgrade do oracle 11g para 12c Parte 3

no formato XML exatamente da mesma forma que a operao de


unplug faz para desconectar um PDB. A Listagem 8 apresenta o
processo.
Simplesmente executou-se o procedimento DESCRIBE do pacote
DBMS_PDB (linha 02) passando como nico parmetro o caminho
e nome do arquivo de sada (linha 03), tudo dentro de um bloco
PL/SQL annimo (linhas 01 a 05). Em seguida, finalizou-se o nonCDB (linha 09). O arquivo XML gerado ser utilizado como base
para a criao do PDB. Este arquivo contm todas as informaes
relativas estrutura do non-CDB para ser clonado no PDB.
O non-CDB foi finalizado ao final do processo pois no precisamos mais dele e teramos apenas recursos do servidor sendo
utilizados inutilmente.

Listagem 7. Finalizando o non-CDB e inicialiando em modo read only.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.

[oracle@OEL6-64 ~]$ export ORACLE_SID=SQL12c


[oracle@OEL6-64 ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Thu Nov 20 18:26:19 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup open read only;
ORACLE instance started.
Total System Global Area 935317504 bytes
Fixed Size
2295032 bytes
Variable Size
650119944 bytes
Database Buffers
276824064 bytes
Redo Buffers
6078464 bytes
Database mounted.
Database opened.

Listagem 8. Descrevendo o non-CDB e gerando o arquivo no formato XML.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.

SQL> BEGIN
2 DBMS_PDB.DESCRIBE(
3 PDB_DESCR_FILE => /oracle/admin/SQL12c/SQL12c.xml);
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

A partir de agora nada mais precisa ser feito no non-CDB. Todas


as aes de agora em diante sero executadas no CDB para criar
o novo PDB com base no arquivo XML contendo a descrio do
non-CDB. Veja todo o processo na Listagem 9.
Inicialmente alterou-se a varivel de ambiente ORACLE_SID
para o nome do CDB (linha 01), iniciou-se o utilitrio SQL*Plus
(linha 02) e conectou-se ao CDB com o usurio SYS (linha 08).

58 SQL Magazine Edio 128

Executou-se o comando de criao do PDB (linhas 10 a 13)


definindo o arquivo XML anteriormente criado (linha 11) e informando tambm o de para para converso dos data files
(linha 13). Perceba que o PDB foi criado com sucesso (linha 15).
O Oracle far a leitura do arquivo XML e utilizar o de-para
para identificar onde devero ser armazenados os arquivos do
PDB baseados no non-CDB.
Alterou-se a sesso para se conectar ao recm criado PDB
(linha 17) ou seja, conectou-se ao PDB, e executou-se o script
noncdb_to_pdb.sql, responsvel por fazer uma limpeza no
PDB removendo tudo o que no necessrio e que no deve
estar presente no PDB (linha 21). Esta etapa necessria para
que nenhuma funcionalidade ou informao necessria apenas a
um non-CDB permanea no PDB. A sada deste script bastante
longa, portanto apresentei apenas um extrato.
Em seguida executou-se o comando para abrir o PDB (linha 37)
e verificou-se qual o modo de operao do PDB (linhas 40 a 45).
O PDB deve estar aberto para que as operaes possam acontecer
normalmente (como em qualquer non-CDB). Alm disso, uma validao do modo de abertura sempre prudente de ser executada,
pois caso estivesse em outro modo (que no read write) seria um
sinal de que algo est errado. Pronto, nosso banco de dados j est
devidamente migrado para a arquitetura multitenant.
Um detalhe interessante que o antigo banco de dados non-CDB
continua presente. Ele no est no ar, porm toda a sua estrutura
permanece intacta, ou seja, os data files, control files, redo log files,
etc. no foram tocados. feita uma cpia para o PDB.
Esta uma grande vantagem, pois caso haja algum problema que
no havia sido previsto inicialmente, no haver a necessidade
de executar o desgastante processo de downgrade ou restaurao
de backup, basta redefinir as variveis de ambiente e reiniciar o
non-CDB.
Aps toda a validao e a certeza DE que tudo est OK, basta
remover todos os arquivos e estrutura do non-CDB.
A consolidao de um banco de dados um caminho sem
volta. Uma alternativa interessante para a reduo dos custos
de TI que faz brilhar os olhos de qualquer gestor. A arquitetura
multitenant vem de encontro a esta crescente necessidade e, como
apresentado neste artigo, o processo de adoo desta arquitetura
relativamente simples:
Migrao de verses anteriores para 12c non-CDB;
Criao de um CDB;
Converso do non-CDB em PDB.
Basicamente trs passos com um nvel de complexidade relativamente baixo. No entanto, o processo pode se tornar complicado
caso o DBA no esteja preparado para tal, ou seja, no tenha o
conhecimento prvio para estar seguro do que necessrio para
executar o processo com perfeio.
Nesta srie de artigos tem-se mostrado passo-a-passo como
estar preparado para a transio. No prximo artigo da srie ser
apresentada outra maneira de efetuar o processo uma vez que j
se tem o CDB criado.

Listagem 9. Criando no novo PDB com base no arquivo XML.


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.

[oracle@OEL6-64 ~]$ export ORACLE_SID=SQLCDB


[oracle@OEL6-64 ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Fri Nov 21 09:20:52 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> CREATE PLUGGABLE DATABASE SQLpdb1
2 USING /oracle/admin/SQL12c/SQL12c.xml
3 COPY
4 FILE_NAME_CONVERT = (/oracle/oradata/SQL12c/, /oracle/
oradata/SQLCDB/SQLpdb1/);
Pluggable database created.
SQL> ALTER SESSION SET CONTAINER=SQLpdb1;
Session altered.
SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
SQL> SET SERVEROUTPUT ON
SQL> SET FEEDBACK 1
SQL> SET NUMWIDTH 10

Chamaremos o processo de consolidao de outros bancos


de dados no CDB, ou seja, atualmente temos o CDB chamado
SQLCDB e um PDB chamado SQLPDB1 (ambos criados neste
artigo); faremos a criao de novos PDBs migrando dados para
eles utilizando outras estratgias.

Autor
Ricardo Rezende
ricarezende@gmail.com
http://www.devmedia.com.br/ricardorezende
http://purl.org/ricarezende/blog
http://twitter.com/ricarezende
DBA Oracle certificado pela Oracle University (DBA 9i track e DBA OCP
10g). IBM Certified Database Associate DB2 9. DBA Oracle na IBM do Brasil em projeto
internacional administrando ambiente de produo de alta criticidade. Lider de equipe
de DBAs envolvendo Brasil e Filipinas. Palestrante em vrios eventos em diversas universidades e institutos. Editor tcnico da revista SQL Magazine. Mestrando em Cincia da
Computao pelo Instituto de Computao da Universidade Estadual de Campinas IC
UNICAMP. Docente na Fundao Indaiatubana de Educao e Cultura FIEC.

25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.

...
...
...
9 END;
10 END;
11 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.06
SQL>
SQL> WHENEVER SQLERROR CONTINUE;
SQL> ALTER PLUGGABLE DATABASE OPEN;
PDB altered.
SQL> SELECT name, open_mode
2 FROM v$pdbs;
NAME
-------------SQLPDB1

OPEN_MODE
------------------READ WRITE

1 row selected.

Links:
Backing Up the Database
https://docs.oracle.com/database/121/BRADV/rcmbckba.htm#BRADV8003
How to create a CDB in Oracle 12.1.0
http://juliandontcheff.wordpress.com/2013/06/30/how-to-create-a-cdb-in-oracle-12-1-0/
Multitenant : Create and Configure a Container Database (CDB) in Oracle Database
12c Release 1 (12.1)
http://oracle-base.com/articles/12c/multitenant-create-and-configure-container-database12cr1.php
Multitenant : Migrate a Non-Container Database (CDB) to a Pluggable Database
(PDB) in Oracle Database 12c Release 1 (12.1)
http://oracle-base.com/articles/12c/multitenant-migrate-non-cdb-to-pdb-12cr1.php

Voc gostou deste artigo?


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

Edio 128 SQL Magazine

59

Weka Software:
Minerao de dados
com Weka
A

minerao de dados consiste em um processo


onde so aplicados algoritmos nos dados de um
determinado domnio para encontrar padres
e informaes relevantes. Geralmente os dados so volumosos e possuem grande variao entre os elementos,
o que torna o processo de descoberta de informao
trabalhoso, porm gratificante, pois resulta na descoberta de algo raro e preciso, da o nome minerao de
dados. Para dar suporte minerao de dados, existem
diferentes abordagens:
Classificao Probabilstica: busca prever a classe que
maximiza a probabilidade posterior. A tarefa principal
estimar a probabilidade para cada classe, assumindo que
os atributos so independentes, mesmo assim estes classificadores so interessantes para muitas aplicaes;
Arvores de deciso: neste classificador existe uma
hierarquia de ns que so conectados por ramos.
A classificao dos dados feita em cada nvel da rvore,
pois so seguidos ramos at atingir os ns folha;
Anlise discriminante linear: este classificador parte
do conhecimento de que os elementos observados pertencem a diversos subgrupos e procura-se determinar
funes das n variveis observadas que melhor permitam distinguir ou discriminar entre esses subgrupos
ou classes;
Mquinas de vetor de suporte: nestes classificadores
ocorre a classificao das entradas em duas possveis
classes, o que o torna um classificador linear binrio
no probabilstico.
Em especfico, a classificao uma tarefa da minerao de dados que associa ou classifica objetos a determinadas classes. Seu objetivo prever uma classe de um
novo dado automaticamente. Algoritmos de classificao
so muito utilizados na minerao de dados. Isto pode
ser explicado pelo fato da classificao ser uma das
atividades que mais realizamos para compreender o
ambiente em que vivemos. Estamos sempre classificando
o que vemos em nossa volta e, atribuindo a cada classe

60 SQL Magazine Edio 128

Fique por dentro


Vrios recursos so necessrios para promover a descoberta de
conhecimento em bases de dados. A tcnica de Minerao de dados
ou Data Mining considerada uma delas. Na minerao de dados so
aplicados algoritmos que objetivam identificar padres nos dados originais, sendo que tais algoritmos se baseiam em tcnicas estatsticas,
inteligncia artificial e complexidade de algoritmos. Vrias ferramentas
tm sido desenvolvidas para minerao de dados, uma delas ser explorada neste artigo, a ferramenta Weka. A utilizao desta ferramenta
possibilita o uso de diversos algoritmos de classificao.
Esta discusso til para quem deseja conhecer mais sobre classificadores de dados, algoritmos de classificao e sobre identificao
de padres. Os dados a serem classificados sero retirados do site
dataPoa, onde possvel consultar informaes de diversas reas.
A rea escolhida foi acidentes de trnsito, desta forma o artigo tambm
til para quem se interessa por estatsticas de acidentes de trnsito e
tomada de deciso em situaes de prestao de socorro s vtimas.

identificada um tratamento diferente. Na minerao de dados,


a tarefa de classificar est associada atribuio de uma classe
predefinida a novos fatos que esto em anlise. Dessa forma,
esses algoritmos apoiam o entendimento de dados ou ajudam a
prever como novos dados iro se comportar. Por exemplo, uma
base de dados que armazena informaes sobre acidentes de
trnsito, baseado em histricos de transaes anteriores, pode-se
classificar quais acidentes resultaram (ou resultaro) em vtimas
fatais a partir de suas caractersticas.
Os classificadores oferecem uma ferramenta para inferncia estatstica utilizando o raciocnio probabilstico que engloba teoria de
grafos. A relao entre os eventos estabelecida atravs da teoria
de probabilidade. Um grupo importante de classificadores se apoia
na teoria conhecida como Redes Bayesianas (RBs) proposta pelo
matemtico Thomas Bayes. As RBs so constitudas de ns e arcos,
cada n interpretado como sendo um atributo que pode receber
uma quantidade determinada de valores, tais valores devem ser
nominais, isto assumir um valor previamente estabelecido.
De acordo com o valor que determinado n assume, este pode

estabelecer uma ligao atravs de um arco com um outro n.


Um n da rede (geralmente o ltimo) definido como o n que
identifica a classe de uma instncia.
Para a implementao de uma Rede Bayesiana so necessrios
dois conceitos: evidncia e inferncia. As evidncias so novas
informaes disponveis que surgem em um dado evento. Essa
informao faz com que acontea uma possvel mudana nos estados de um n, sendo assim, inicia-se o processo de propagao
das probabilidades. Por exemplo, caso um n da rede assuma
um valor X, podemos afirmar que essa situao recebe o nome
de instanciao Isso indica que uma RB no necessita que todos
os seus ns tenham os seus valores preenchidos.
O processo de inferncia ocorre quando as probabilidades de
uma rede so calculadas, dada uma ou mais evidncias. O clculo
das probabilidades de um n far com que seja criado um fluxo de
informao que se propagar por toda a rede. Tambm podemos
chamar a inferncia de propagao das probabilidades.
Este artigo analisa alguns algoritmos de classificao baseados em
RB e outros algoritmos importantes para aplicar na rea que estuda
o atendimento de vtimas em acidentes de trnsito. Os acidentes de
trnsito so eventos estocsticos, isto , no previsveis.
Ser utilizado um classificador baseado em RB utilizando como
base informaes coletadas sobre acidentes de trnsito com feridos
e sem feridos, afim de predizer se haver ou no vtimas em um
acidente que ocorreu em um determinado momento.
Este artigo apresenta uma breve introduo sobre a teoria da
probabilidade. Na sequncia apresentado o mtodo proposto
para classificao, incluindo metodologia e implementao.

Teoria da Probabilidade
O clculo de probabilidades um ferramental estatstico destinado ao estudo de fenmenos aleatrios ou probabilsticos.
Em tais fenmenos o resultado de um experimento no pode
ser previsto com certeza, mas geralmente possvel relacionar
todos os resultados possveis de ocorrer. Chamamos de espao
amostral ou espao das probabilidades este conjunto de resultados. Na sequncia, ser explicada a teoria das probabilidades, a
qual fundamenta as Redes Bayesianas, que a base para alguns
classificadores clssicos da literatura.
A tomada de deciso uma teoria prescritiva ou normativa com o
objetivo de ajudar as pessoas a tomarem decises mais adequadas s
suas preferncias. A probabilidade um evento que mede nosso grau
de certeza com relao a algum acontecimento, uma vez que representa nosso grau de crena no possvel resultado. Podemos definir
probabilidade como sendo o quociente entre o nmero de resultado
para os quais o evento em questo se verifica e o nmero de todos
resultados possveis. Desta forma, temos a seguinte equao:
P(A) = m/n.
Onde (m) o nmero de resultados favorveis ao evento (A),
e o (n) o nmero de resultados possveis. Uma probabilidade
geralmente est condicionada com o estado de uma informao

disponvel. bastante frequente o caso em que o estado de uma


informao modificado pela ocorrncia de algum outro evento
relacionado com o experimento em questo. Por exemplo, suponha que desejamos identificar a probabilidade de um evento (A),
indicado por probabilidade de (A) P (A). Se a probabilidade de (A)
for condicionada a outro evento (B), a probabilidade do evento (A)
ser denotada por P (A|B), e chamaremos de probabilidade de (A)
condicionada a (B). Desta forma, temos as seguintes equaes:
P (A|B) = P (A B) / P (B).
P (B|A) = P (A B) / P (A).
Com isso, obtemos a regra do produto, dada pela equao:
P (A B) = P (A) * P (B|A) = P (B) * P (A|B).

Mtodo Proposto
Atualmente existem diversas ferramentas disponveis para o
desenvolvimento de modelos Bayesianos. Para este artigo foi adotado o ferramental estatstico disponibilizado pela Universidade
de Waikato na Nova Zelndia, que se chama Weka. A ferramenta
permite explorar recursos de forma grfica ou ainda adicionar as
suas funcionalidades em programas externos desenvolvidos em
Java, atravs de bibliotecas com os algoritmos implementados em
classes e mtodos.
Para modelar a RB, ser utilizado um conjunto de dados para
sua configurao. O conjunto de dados provm de uma fonte de
dados real, o dataPoa. Os dados utilizados para configurao da
rede sero os dados do ano de 2012, que totalizam 20202 acidentes
registrados na cidade de Porto Alegre - RS. Destes acidentes, houve
um total de 6122 com feridos. possvel utilizar dados de outros
anos, ou ainda unir dados de anos diferentes, gerando bases de
treinamento maiores.
Para realizar a validao do modelo sero classificados dados do ano de 2013, tambm disponibilizados no site dataPoa.
A classificao consiste em atribuir a classe a uma instncia. Cada
instncia (acidente) de 2012, possui um atributo que o classifica,
que o penltimo atributo (FERIDOS), indicando se houve vtima
no acidente ou no. Desta forma, cada instncia dos dados de
2013 ter o atributo classe removido, e em seguida os dados sero
classificados utilizando o modelo desenvolvido, o qual atribuir
o atributo classe probabilisticamente. Por fim, cada instncia ser
validada comparando o atributo classe gerado pelo modelo com
o atributo que de fato foi obtido nos dados coletados.
Os dados coletados so apresentados na Tabela 1, onde a primeira coluna se refere ao atributo e a segunda coluna detalha
cada atributo.
A RB constituda por um algoritmo que consegue realizar
a classificao de 1 at N instncias, desde que tenha recebido
informaes anteriores com a quantidade de instncias maior ou
igual a N. Essa classificao consiste em predizer se um acidente
ocorrido tem ou no vtimas. possvel identificar um acidente

Edio 128 SQL Magazine

61

Weka Software: Minerao de dados com Weka

com sensores especficos, capazes de identificar automaticamente


os itens citados na Tabela 1. Ao identificar um acidente, os dados
so enviados ao modelo Bayesiano e este infere se ir ter vtima
ou no. Com a inferncia realizada possvel tomar aes de
prestao de socorro s vtimas.
Atributo

Significado do atributo

LOG1

Rua no qual o veculo que provocou o acidente se encontra.

LOG2

Indica a prxima rua no trajeto do veculo que provocou o


acidente.

LOCAL

Indica se foi em um segmento continuo da rua ou em um


cruzamento.

DIA_SEM

Indica o dia da semana em que ocorreu o acidente.

TEMPO

Indica as condies do clima que ocorreu o acidente, que so


quatro: Bom, Nublado, Chuvoso e No cadastrado.

NOITE_DIA

Indica se foi noite ou dia que o acidente ocorreu.

REGIO

Indica a regio geogrfica da cidade em que o acidente


ocorreu, so elas cinco possveis: Leste, Norte, Sul, Centro e
No Identificado.

FERIDOS

Indica se houve feridos ou no no acidente ocorrido, com


valores: Sim ou No. Este atributo considerado como o
atributo classe.

FATAIS

Indica se houve vtimas fatais em tal acidente ocorrido, com


valores: Sim ou No. Este atributo tambm pode ser considerado como um atributo classe, para outras finalidades ou
mesmo para outras tomada de deciso.

com vtimas fatais em 2013. As outras telas do sistema so apenas


para testes e gerao de arquivos com dados estatsticos.
Na Figura 2 apresentado o mapa com os acidentes do ano de
2012, utilizando a latitude e longitude dos acidentes.

Tabela 1. Explicao dos ns adotados para construo da RB

Implementao
Para realizar a implementao, os dados originais do dataPoa
foram tratados a fim de obter apenas dados nominais, isto ,
apenas dados que tenham valores previamente identificados, por
exemplo segunda-feira, tera-feira. Os dados disponibilizados
pelo dataPoa encontram-se no formato Comma Separated Values
(CSV), no entanto para facilitar a leitura dos arquivos pelo modelo desenvolvido, os arquivos foram convertidos para o formato
Attribute Relation File Format (ARFF).
Dentre os diversos classificadores disponveis pela ferramenta
Weka, foi utilizado o classificador BayesNet. Durante a implementao foi desenvolvido um sistema para desktop utilizando a
linguagem de programao Java. Na Figura 1 apresentada a tela
principal (Classifiers) do sistema.
Nesta tela possvel selecionar qual a base de treinamento e
definir a(s) instncia(s) a serem classificadas (apenas 2013). Pode
ser classificada apenas uma instncia especfica ou ainda uma
quantidade qualquer desde que menor que 20.202, pois a base
de treinamento possui tal quantidade de instncias. Tambm
possvel classificar grupos pr-definidos de instncias, sendo
que tais grupos foram definidos apenas para fins de testes. Cada
grupo possui 1.550 instncias.
O sistema tambm possui uma tela secundria chamada (Geo
Statistics), onde possvel visualizar graficamente em um mapa da
cidade de Porto Alegre - RS os locais onde ocorreram acidentes no
ano de 2012, 2013, acidentes com vtimas fatais em 2012 e acidentes

62 SQL Magazine Edio 128

Figura 1. Tela principal (Classifiers) do sistema

Figura 2. Mapa com os acidentes ocorridos

Colocando em prtica
Para testar o funcionamento da ferramenta Weka, foram testados exemplos disponibilizados no pacote do mesmo, alm
disso, foi montada uma RB que leva em
considerao nove atributos para definir
a classe de uma instncia.
Para configurao da RB e criao da
tabela de probabilidades foram inseridas
duas instncias de teste, desta forma a
tabela de probabilidades pode ser vista na
Figura 3, com 50% de chance para YES
e 50% de chance para NO.
Para verificar a operao da tabela de
probabilidades foi inserida mais uma
instncia, sendo que esta provocou um
aumento nas chances do atributo classe
receber o valor YES.
Conforme pode ser observado na Figura 4,
a tabela de probabilidades possui um percentual maior de chances (62,50 %) para o
valor YES, j que mais uma instncia foi
adicionada na base de treinamento com o
valor YES.

Figura 3. Teste de probabilidade

Testes e Resultados
Os classificadores da ferramenta Weka
foram testados classificando os dados
de 2012, que totalizam 20.202 acidentes.
A ferramenta realiza a classificao dos
dados e apresenta um relatrio de informaes sobre o comportamento dos dados
de entrada. Os dados de entrada podem
estar em um arquivo ou em um banco de
dados, os dados do experimento estavam
no formato CSV. Para classificar dados de
um arquivo, basta abrir a ferramenta e
clicar no boto Explorer, ser exibida a
tela conforme mostra a Figura 5.
Na tela Explorer existem diversos
painis, o primeiro deles o painel Preprocess. Neste painel possvel visualizar
graficamente o comportamento dos dados,
para isso deve ser selecionado um arquivo
com o boto Open file.... Em seguida
uma das utilidades que pode oferecer uma
visualizao rica sobre os dados a opo
Visualize All. Na Figura 6 apresentado
o resultado da opo Visualize All.
Podemos observar na figura o comportamento, bem como se d a diviso
dos dados de entrada, antes de realizar a
classificao propriamente dita.

Figura 4. Segundo teste de probabilidade

Figura 5. Tela Explorer da ferramenta Weka

Edio 128 SQL Magazine

63

Weka Software: Minerao de dados com Weka

Este comportamento retrata quantitativamente, a diviso dos dados. No atributo


FERIDOS podemos identificar claramente
que a grande maioria (14.080) dos acidentes
no tem feridos, j a parte restante dos acidentes (6.122) tem ferido(s). Nos testes realizados foi considerado apenas se h ferido no

Figura 6. Resultado do Visualize All da ferramenta Weka

Figura 7. Painel Classify da ferramenta Weka

64 SQL Magazine Edio 128

acidente, mas no quantos feridos, apenas


se sim ou no existe ferido.
Para observar as demais quantidades,
basta passar o mouse por cima das barras que indicam os possveis valores
para os atributos, destacados nas cores
azul ou vermelho. Ainda neste painel

podemos observar que atributos que


contm muitos valores possveis no so
exemplificados em barras pois o espao
restrito.
O prximo painel o Classify, nele
possvel escolher entre diversos classificadores, acessando o boto Choose. Na
Figura 7 apresentado o relatrio (Classifier output) sobre os dados que foram classificados. Tais informaes so importantes
para a escolha entre os diversos classificadores disponveis. Na classificao realizada podemos observar 71,1365% de acerto
total, na classificao dos dados. Isso indica
que das 20.202 instncias classificadas,
14.371 foram classificadas corretamente.
Outra informao importante apresentada
no relatrio de classificao a Matriz de
Confuso (Confusion Matrix).
A matriz de confuso apresenta o valor
de classificaes corretas e incorretas. No
exemplo apresentado na ltima figura
identificamos que das 14.371 instncias
que apresentavam valor NO para o atributo FERIDOS, 11.184 foram classificadas
corretamente e das 6.122 instncias que
apresentavam valor YES para o para o
atributo FERIDOS indicando que havia
vtima no acidente, 3.187 foram classificadas corretamente.
Note que quanto menor o erro neste
ltimo caso melhor o classificador. Para
este exemplo prtico se deseja classificar
corretamente todos os acidentes que haviam FERIDOS, a fim de classificar corretamente novos acidentes, para identificar
a real necessidade de envio de equipe de
socorro s vtimas.
O objetivo maior no obter um ndice
alto de acerto total, mas sim um ndice
alto de acerto para Yes. Diante disso,
foram utilizados outros classificados e
comparados os resultados. Os classificadores utilizados foram: BayesNet, RBFNetwork, DecisionTable, IBk, KStar, NaiveBayes,
NaiveBayesSimple e NaiveBayesUpdateable.
Os classificadores NaiveBayesSimple e NaiveBayesUpdateable apresentaram ndice de
acerto idntico ao classificador NaiveBayes.
Na Tabela 2 apresentado o resultado da
anlise dos classificadores.
Aps comparar os classificadores e selecionar o mais adequado, podemos partir

para o prximo passo, classificar os dados de 2013, com a base de


treinamento 2012. Embora o classificador J48 tenha ndice total
superior ao classificador BayesNet, o ndice de acerto para YES
menor do que no classificador BayesNet, por isso o classificador
escolhido foi o BayesNet.
Utilizando a biblioteca da ferramenta Weka, possvel indicar um
arquivo para ser usado no treinamento da rede e outro arquivo
para ser classificado. No experimento realizado, o resultado inicial
apresentado na Tabela 3.
Podemos perceber que o ndice total reduz significativamente,
pois o padro observado nos dados de 2012 no se repete com
exatido em 2013. Desta forma, podemos realizar alteraes nos
dados de 2012 visando melhorar o ndice de acerto para YES.
Dentre as diversas modificaes possveis, podemos implementar inseres de valores novos nos dados de 2012, priorizando o
valor YES nestes atributos novos. Podemos tambm repetir
dados existentes com valor YES. Foram adicionadas instncias
com valor YES, a fim de priorizar o acerto das instncias onde
realmente havia ferido(s) no acidente.
O resultado das classificaes com base nos dados de 2012 com
as modificaes propostas so apresentados na Tabela 4.

Classificador

ndice de acerto
Total

Acerto para YES Acerto para NO

BayesNet

71,1365 %

3.187

11.184

RBFNetwork

71,686 %

2.229

12.235

DecisionTable

71,7553 %

1.672

12.824

IBk

70,9286 %

2.132

12.197

KStar

70,5376 %

2.227

12.023

NaiveBayes

71.8543 %

2.513

12.003

J48

72.4681 %

1.894

12.746

NaiveBayesSimple

71.8543 %

2.513

12.003

NaiveBayesUpdateable

71.8543 %

2.513

12.003

Tabela 2. Resultado da anlise dos classificadores


Classificador

ndice de acerto Total

Acerto para YES Acerto para NO

BayesNet

60,3058 %

865

11.318

Tabela 3. Resultado do classificador BayesNet, treinando em dados de 2012 e classificando


dados de 2013

Edio 128 SQL Magazine

65

Weka Software: Minerao de dados com Weka

Instncias

ndice de acerto Total

Acerto para YES

Acerto para NO

10

39,6713 %

3.999

4.014

100

36,7011 %

4.492

2.922

200

36,6219 %

4.519

2.879

400

36,5724 %

4.526

2.862

1000

36,5724%

4.528

2.860

2000

36,5773%

4.529

2.860

3000

36,5823%

4.529

2.861

4000

36,5724%

4.529

2.859

Tabela 4. Resultado do classificador BayesNet, treinando em dados alterados de 2012 e


classificando dados de 2013
Cada linha da tabela indica uma modificao feita no arquivo
de treinamento, na primeira linha apresentado o resultado
para uma adio de uma ocorrncia com valor YES a cada 10
instncias.
Com os testes realizados nos dados modificados de 2012,
possvel afirmar que ocorre uma estabilidade nas classificaes
ao adicionar a cada 2000 ou 4000 uma nova instncia com o valor
YES, resultado em um ndice total de acerto em torno de 36%.
O maior benefcio fica por conta do ndice de acerto para YES,
neste caso chegando a classificar corretamente 4529 instncias.
O maior ndice de acerto para YES na classificao dos prprios
dados de treinamento apresentados foi de 3187. Desta forma, percebemos o quanto a mais foi classificado corretamente os dados
de 2013 com relao aos prprios dados de 2012.
O uso de classificadores permite predizer a ocorrncia de feridos
em acidentes de trnsito. A previso da existncia de feridos em
acidente de trnsito de fundamental importncia, visto que em
muitos acidentes 69,6960 % (14.080 de 20.202) no h necessidade
de deslocamento de equipe de socorro, conforme observado nos
dados de 2012.
Este artigo contribui para o desenvolvimento de ferramentas
para classificao de dados com a ferramenta Weka. A fonte de
dados utilizada provida de estatsticas de acidentes de trnsito
da cidade de Porto Alegre RS. Os classificadores que adotam a
abordagem Bayesiana a mostra adequada, visto que realizou inferncias muito similares com os dados reais coletados posteriormente (2013), durante a validao realizada na fase de testes.
Quanto capacidade de processamento dos classificadores,
importante destacar que existe diferena no tempo de processamento dos diferentes classificadores, sendo que no presente
experimento no foi considerado o tempo de processamento,
apenas os ndices de acerto, em especial o ndice de acerto para
o atributo YES.

66 SQL Magazine Edio 128

Autor
Marcelo Josu Telles
marcelojtelles@gmail.com
Mestrando em Computao Aplicada pela UNISINOS.
Graduado em Licenciatura da Computao pela Universidade Feevale(2007), especialista em informtica na Educao pela
UFRGS(2011). Cursou disciplinas do Programa de Ps Graduao em
Computao na UFRGS (PPGC e PGMICRO), como aluno especial. Atua como professor
desde 2008. Atualmente leciona na Escola de Educao Profissional Olmpio, Escola
de Educao Bsica Feevale Escola de Aplicao, Instituto de Educao Ivoti. Leciona
as disciplinas de Lgica de Programao, Linguagens de Programao, Eletrnica,
Eletricidade Bsica, Eletrnica para Computao, Sistemas Operacionais, Bancos de
Dados, Manuteno de Computadores e Desenvolvimento de Projetos. Trabalhou com
desenvolvimento de software nas linguagens PHP, Java e Visual Basic.

Autor
Paulo Henrique Santini
paulinho.h.santini@gmail.com
Mestrando em Computao Aplicada pela UNISINOS. Graduado
em Anlise e Desenvolvimento de Sistemas pelo SENAC (2013).
Atualmente, aluno do Programa Interdisciplinar de Ps Graduao em
Computao Aplicada (PIPCA) da Universidade do Vale do Rio dos Sinos
(UNISINOS). Bolsista do projeto Santander Universidades e colaborador em projetos de
pesquisa no Laboratrio de Computao Mvel (MobiLab/UNISINOS). Trabalhou com
ferramentas do Google, como: Google Adwords e Google Analytics, tambm trabalhou
com desenvolvimento de software nas linguagens PHP e Java. Seus interesses de pesquisa
incluem Computao Mvel e Ubqua.
Links:
(1) Boni, Mauro Henrique Lima de. Framework para criao e manipulao de
redes bayesianas em dispositivos mveis, Universidade de Braslia 2013.
http://repositorio.unb.br/handle/10482/13282.
(2) ISBA, International society for bayesian analysis.
http://bayesian.org
(3) Ferramentas para desenvolver uma rede bayesiana
http://www.cs.ubc.ca/~murphyk/Software/bnsoft.html.
(4) Weka, WEKA - Machine Learning Algorithms in Java
http://www.cs.waikato.ac.nz/.
(5) DataPoa, Dados coletados referentes acidentes de trnsito
http://www.datapoa.com.br.

Voc gostou deste artigo?


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

Edio 128 SQL Magazine

67

Weka Software: Minerao de dados com Weka

68 SQL Magazine Edio 128

Potrebbero piacerti anche