Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Projeto/ Modelagem
Boas Prticas
06 Modelagem conceitual de um sistema de manutenes de automveis
[ Claudio Rinaldo ]
Boas Prticas
14 Trabalhando com herana no PostgreSQL
[ Marcelo Josu Telles ]
Minicurso
50 Particionamento no Oracle Parte 2
[ Ricardo Rezende ]
Minicurso
59 Oracle Scheduler Parte 2
[ Ricardo Rezende ]
1
um filtro nos dados usando um DataView (objeto que funciona de forma semelhante a uma View do SQL Server). O filtro seleciona apenas os registros
de acordo com um filtro condicional passado como parmetro para o mtodo. O interessante aqui que no devolvemos essa estrutura para o cliente.
Dinamicamente criamos uma estrutura de dados usando SqlMetaData, onde definimos as colunas e tipos. Depois, varremos a viso e para cada registro
filtrado criamos um SqlDataRecord, enviando ao cliente atravs do Pipe. Isso mostra como podemos manipular dados antes de envi-los ao cliente,
bem como criar uma estrutura dinmica de dados. Voc pode, por exemplo, usar SqlMetaData/SqlRecord para montar sua prpria tabela, com dados
provenientes das mais diversas fontes e obtidos das mais diferentes formas.
Vdeo
Para visualizar acesse o link:
http://www.devmedia.com.br/articles/listcomp.asp?keyword=sql106&codigobanca=green1
Gostou das vdeo aulas? O portal www.devmedia.com.br possui mais de 2 mil vdeo aulas e dezenas de cursos online sobre desenvolvimento de
software! Agora voc pode comprar as vdeo aulas que preferir e fazer sua prpria combinao de vdeos! Saiba mais em www.devmedia.com.br/creditos
eu
Feedback
D seu feedback sobre esta edio!
s
D
A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que voc, leitor, acha da revista!
sobre e
D seu voto sobre esta edio, artigo por artigo, atravs do link:
s
ta
edio
www.devmedia.com.br/sqlmagazine/feedback - Para votar, voc vai precisar do cdigo de banca desta edio, que : green1
Expediente Editorial
EDITORIAL
C
om o implemento de novas tecnologias e o aumento da competitivi-
dade de se esperar que todas as organizaes passem por um pro-
cesso de evoluo em seus sistemas de informao. Independente de
ser motivada pelas deficincias do sistema atual ou pelos ganhos que o novo
sistema trar, a preocupao em no perder informao unnime.
normal que os sistemas tenham estruturas de dados e regras distintas en-
Ano 9 - 106 Edio 2012 - ISSN 1677918-5 - Impresso no Brasil tre si e por isso o processo de migrao pode ser bastante trabalhoso e o risco
de haver uma restrio que impea este processo de ser executado at o fim
muito grande. Como seria impossvel encapsular todo o processo em uma ni-
ca transao do banco de dados, o que permitiria um rollback em caso de erro,
Corpo Editorial algumas tcnicas so fundamentais para manter a rastreabilidade dos dados e
Atendimento ao Leitor
Editor Geral A DevMedia conta com um departamento exclu- poder retomar o processo de migrao de onde parou.
Rodrigo Oliveira Spnola sivo para o atendimento ao leitor. Se voc tiver Neste contexto, a SQL Magazine destaca nesta edio o tema Migrao de
rodrigo.devmedia@gmail.com algum problema no recebimento do seu exemplar Dados. O artigo em destaque apresenta tcnicas fundamentais para migrao
ou precisar de algum esclarecimento sobre assina-
turas, exemplares anteriores, endereo de bancas de dados e as suas melhores prticas atravs da utilizao de ferramenta espe-
Sub Editores
Eduardo Oliveira Spnola e Ricardo Rezende de jornal, entre outros, entre em contato com: cialista gratuita, de cdigo aberto, o Pentaho Data Integration (PDI).
Em complemento, a SQL Magazine traz nesta edio outras matrias muito
Jornalista Responsvel www.devmedia.com.br/central
interessantes envolvendo assuntos como SQL Server, Oracle, Banco de Dados
Kaline Dolabella - JP24185 (21) 3382-5038
na Nuvem e PostgreSQL. Uma tima leitura a todos.
Na Web Publicidade
Para informaes sobre veiculao de anncio na
www.devmedia.com.br/sqlmagazine
revista ou no site e para fechar parcerias ou aes
especficas de marketing com a DevMedia, entre
Distribuio
em contato com:
FC Comercial e Distribuidora S.A Rodrigo Oliveira Spnola
Rua Teodoro da Silva, 907 publicidade@devmedia.com.br
Graja - RJ - 206563-900 rodrigo.devmedia@gmail.com
Editor Chefe da SQL Magazine, Mobile e Engenharia
de Software Magazine.
11-3872-9802
irCom
1 Fa
201
Modelagem conceitual de um sistema de manutenes de automveis
Seo Projeto/Modelagem Nesta seo voc encontra artigos sobre projeto, anlise ou modelagem de dados
Modelagem conceitual:
sistema de manutenes
de automveis
Construindo um modelo para sistemas de frotas
de veculos
Resumo DevMan
D
urante a fase de levantamento de informaes
para o desenvolvimento de sistemas, comum De que se trata o artigo:
encontrarmos clientes e usurios que possuem Este artigo apresenta os conceitos envolvidos na modelagem
completo domnio sobre as informaes que sero traba- conceitual e lgica dos dados que compe o controle de manuten-
lhadas em suas aplicaes, mas que por no possurem es veiculares. Alm disso, ser apresentada a sua derivao para
a viso sistmica inerente aos profissionais de TI, no o modelo fsico na forma de script de banco de dados, bem como
conseguem expressar todos os aspectos que devem ser o entendimento da situao de negcios proposta.
cobertos na modelagem dos dados.
Naturalmente, aqueles que iro usufruir das melhorias Em que situao o tema til:
em seus sistemas atuais ou instalaes de novos aplica- Partindo-se das entidades conceituais de um negcio e o relacio-
tivos devem ser especialistas em suas reas de conheci- namento entre elas, possvel modelar todas as informaes que
mento, deixando a cargo de analistas e desenvolvedores estaro presentes no banco de dados. Tal abordagem comum em
a tarefa de interpretao dos dados e transformao dos diversas situaes reais de desenvolvimento de sistemas, onde o
requisitos em ferramentas utilizveis para o usurio projetista aborda as questes relevantes da modelagem atravs das
final, melhorando assim seu fluxo de trabalho e conse- entidades identificadas na fase de levantamento e na sequncia
quentemente sua produtividade. crias os atributos correspondentes.
O mercado de trabalho em TI utiliza diversas nomen-
claturas para funes semelhantes (analista de sistemas, Modelagem conceitual de um sistema de manutenes de automveis:
analista de requisitos, arquiteto de sistemas) cujas res- Na fase de modelagem de dados de um sistema comercial,
ponsabilidades muitas vezes se sobrepem. Vamos con- comum encontrarmos situaes onde a equipe de projetos aborda
siderar o profissional responsvel pela modelagem de as informaes a serem armazenadas atravs da identificao das
dados apenas como projetista e apresentar um modelo entidades representadas no sistema e a forma como se relacionam.
de negcio cujo foco de fcil compreenso para o leitor: Atravs do entendimento do negcio a ser modelado, possvel
o controle de dados para manuteno de veculos. utilizar diagramas que apresentam graficamente a viso da equipe
Ao analisarmos os dados envolvidos na manuteno de de modelagem, demonstrando como foram definidas as entida-
um veculo, podemos perceber uma quantidade aceitvel des, seus relacionamentos e os atributos identificados para cada
de informaes que pode ser extrada para a criao de uma delas. Para melhor entendimento, utilizamos as entidades e
um modelo de dados e que futuramente venha a gerar atributos envolvidos em manutenes de veculos automotores.
acompanhamentos destas manutenes. Como parte de um sistema maior, foi concentrada a ateno s
O modelo final poderia ser acoplado a outros sis- entidades e informaes que devero ser abordadas para permitir
temas que j possuem a entidade veculo como, por guardar os dados e recuperar informaes gerenciais sobre estas
exemplo, uma locadora de automveis ou uma empresa manutenes.
de transportes. As possibilidades so mais atraentes para
Na implementao fsica do banco de dados foi utilizado o Peas (ex.: Amortecedor, Correia) e Produtos (ex.: leo do Motor,
Microsoft SQL Server 2008 Express (ver Nota do DevMan 4), Lanterna). Estas entidades estaro relacionadas com a entidade
verso gratuita do gerenciador. Apesar das limitaes que apre- Manuteno, que ir centralizar o conceito de algum tipo de ati-
senta em sua utilizao comercial frente s verses pagas, permite vidade que dever ser registrada no sistema.
implantar e utilizar o modelo de dados proposto. Da mesma forma, necessrio prever que uma mesma manu-
teno poder exigir todos estes conceitos como, por exemplo, a
instalao de uma pea que envolva produtos e onde seria cobrada
Nota do DevMan 4 a mo-de-obra na forma de servio. Um dos atributos que j deve
ser identificado neste momento diz respeito questo dos valores,
SQL Server 2008: O SQL Server 2008 Express apresenta em sua verso gratuita ferramentas de onde ser necessrio armazenar em cada uma destas entidades
gerenciamento de fcil utilizao como, por exemplo, a ferramenta de gerenciamento grfico SQL
Server Management Studio (SMSS) Express. Esta verso apresenta limitaes de CPU e memria,
o valor de cada Pea/Produto/Servio e efetuando-se as devidas
respectivamente uma CPU e 1GB RAM, alm da limitao de base de dados de 10GB. Apesar das operaes para obter o valor total da manuteno.
limitaes, a verso liberada para uso comercial. O projetista teria neste ponto da anlise a possibilidade de uti-
lizar mais de uma tcnica de modelagem. Uma alternativa que
foi apresentada no modelo final seria a utilizao dos conceitos
de Generalizao/Especializao, que nos remete s tcnicas de
orientao a objetos no entendimento de como as entidades base
fornecem atributos para as entidades derivadas.
Tutorial Podemos partir dos tipos bsicos de manuteno (Servio/Peas/
Produtos), identificar suas caractersticas em comum e gerar uma
entidade que serviria de base para estas, o que permitiria aplicar
Sistema o conceito de herana. Esta tcnica definida como generalizao,
O ponto de partida ser a existncia de uma entidade veculo, de pois atravs de uma anlise bottom-up, os conjuntos de entidades
onde queremos manter o controle das manutenes efetuadas ao so sintetizados em uma entidade de nvel mais alto com base nos
longo de sua existncia. Conforme indicado anteriormente, uma atributos em comum.
vez definida esta entidade, possvel relacionar o modelo com A outra abordagem seria pensar em uma manuteno e realizar
outros que representam negcios automotivos onde relevante a sua especializao, tcnica top-down que permite destacar na
o controle de manutenes. forma de atributos distintos as entidades dos nveis inferiores.
Dada a maneira como as informaes sero dispostas, com a A representao das tcnicas de generalizao/especializao
utilizao constante do sistema ser possvel extrair diversos para este cenrio pode ser conferida na Figura 3.
nveis de informaes que ajudariam a identificar manutenes
preventivas e antecipar desgaste de peas. Afinal, querendo
ou no, veculos fazem visitas regulares oficinas e servios
especializados como consequncia da prpria utilizao no
cotidiano.
Em seguida, temos outra entidade de grande importncia para
nosso modelo, que a prpria manuteno em si, ou melhor, a
entidade que ir permitir controlar estas informaes. Partindo-
se das entidades principais do sistema, neste caso, Veculo e
Manuteno, ser mais natural a definio das demais, evitando
distraes por parte do profissional que executa a modelagem.
Sendo assim, definimos na Figura 2 que um determinado veculo Figura 3. Generalizao/Especializao das entidades relacionadas Manuteno
ir possuir diversas manutenes.
O projetista, porm, optou por no representar as informaes
desta forma, mantendo a diagramao do modelo conceitual
apenas com o relacionamento direto entre as entidades, como
apresentado na Figura 4. No estudo deste modelo conceitual,
observou-se que o efeito produzido ser o mesmo na derivao
Figura 2. Relacionamento entre as entidades Veculo e Manuteno deste modelo para o lgico que define a estrutura das tabelas no
banco de dados.
Na prxima parte a ser analisada, identificamos que uma No ocorrendo prejuzo para o registro dos dados no sistema ou
determinada manuteno poder ser atravs da execuo de mesmo para as regras de normalizao, as duas formas podem ser
Servios (ex.: Funilaria, Pintura, Instalao) e que poder envolver utilizadas sem prejuzo no resultado final. interessante ressaltar
nome nico no modelo gerado, pois este ser derivado para o telas de cadastro, onde o usurio poder associar uma mesma Pea
modelo fsico, ou se preferir, um script para criao das tabelas ou Produto diversos Fabricantes, que o conceito regularmente
em um banco de dados. encontrado em sistemas automotivos.
Criamos ento as tabelas FABRICANTE_PECA e FABRICANTE_ Estas entidades geradas devero agora ser associadas com as
PRODUTO, que iro relacionar as informaes das entidades en- respectivas entidades de manuteno, ou seja, uma manuteno
volvidas. Este tipo de construo auxilia no desenvolvimento de de Pea dever estar associada Fabricante/Pea e uma de Produto
dever associar-se Fabricante/Produto.
Para que continuemos utilizando a ferramenta brModelo, a
melhor abordagem, pensando-se no produto final que a ge-
rao do modelo fsico, foi a associao direta das entidades de
manuteno de Pea e Produto diretamente com as entidades
menores, ao invs das entidades associativas. Novamente nas
Figuras 8 e 9 possvel observar estas caractersticas, sendo
que em outras ferramentas CASE o modelo poderia assumir
variaes com o mesmo propsito.
Analisando-se em seguida os demais conceitos de Montadora,
Loja e Oficina, assumiu-se que uma manuteno poder ser feita
em uma oficina que pode ou no pertencer prpria montadora e
que tambm desejamos guardar as informaes de onde o veculo
foi adquirido.
Da mesma forma, a loja poder pertencer ou no uma
montadora, caracterizando uma concessionria, porm man-
teremos o relacionamento entre estas entidades como descrito
na Figura 10.
Aproveitando-se a explicao sobre a entidade Montadora, tam-
bm podemos definir que esta fabrica diversos Modelos, cada um
caracterizado por um nico Tipo (passeio, carga, utilitrio, etc.)
e que ir gerar diversos Veculos. Fechamos assim o conceito do
modelo como um todo, voltando entidade Veculo. Basta agora
finalizar a incluso dos demais atributos s tabelas, ressaltando-se
duas caractersticas em nosso modelo final:
Consideramos chaves auto incrementadas, exceto pela chave
da tabela Veculo, para a qual sugerido o nmero do Rena-
Figura 8. Relacionamento lgico entre as entidades de Manuteno vam, o qual consta na forma de valor nico para o sistema do
Figura 9. Relacionamento conceitual entre as entidades de Manuteno Figura 10. Relacionamento conceitual entre Montadora/Veculo/Oficinas
A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e
ta
edio
Trabalhando com
herana no PostgreSQL
O Resumo DevMan
padro SQL:1999 (ver Nota do DevMan 1) intro-
duziu uma srie de extenses, para o at ento
suficiente padro SQL-92. Uma das extenses De que se trata o artigo:
do SQL:1999, definida como herana de tabela, par- Este artigo descreve conceitualmente o recurso herana de tabelas
cialmente oferecida pelo PostreSQL. Para utiliz-la ne- oferecido pelo Gerenciador de Bancos de Dados Objeto-Relacional
cessrio compreender a sua respectiva sintaxe. Ao longo (SGBDOR) PostgreSQL. Alm de conceituar, ser dada nfase em
deste artigo ser apresentado desde como implementar exemplos diversificados, visando esclarecer a utilidade e a forma de
o recurso de herana at como realizar as consultas em utilizao de tal recurso bem como compreender a sintaxe especfica
tabelas que herdam atributos. do PostgreSQL para herana de tabelas. Como objetivo o artigo busca
Verses anteriores do PostgreSQL utilizavam sintaxes explorar a forma que o PostgreSQL permite a implantao do recurso
que foram reestruturadas a partir da verso 7.1. Atual- de herana, limitando-se em apresentar detalhes para: criao dos
mente a verso disponibilizada no site do desenvolve- tipos (type) de dados, criao das tabelas (table) e desenvolvimento
dor a 9.2, no entanto, a verso adotada para os testes de consultas (view e function) dos dados.
que sero realizados neste artigo a 9.0. O SGBDOR
PostgreSQL pode ser obtido no site do prprio desenvol- Em que situao o tema til:
vedor ou tambm no site EnterpriseDB, que um dos Durante o desenvolvimento de estruturas para armazenar dados,
patrocinadores oficiais do PostgreSQL. existe a necessidade de levar em considerao exigncias das apli-
Assim, neste artigo ser apresentada a sintaxe do caes e recursos que o banco de dados oferece. O banco de dados
PostgreSQL, bem como suas modificaes para imple- PostgreSQL 9.0 apresenta algumas caractersticas importantes de
mentao de herana em tabelas. Para isso, ser criado serem conhecidas. As funcionalidades do PostgreSQL esto em
um banco de dados e duas tabelas (uma delas com he- conformidade com o SQL-92 e ainda admite vrios recursos da
rana) para testar o funcionamento das consultas sobre SQL:1999. Neste sentido, o presente artigo visa apresentar formas
tais dados. Para verificar motivos de implantar tabelas de utilizao do recurso de herana em tabelas.
com herana, sero desenvolvidas tabelas sem herana,
para no final do artigo realizar comparaes em um mo- Trabalhando com herana no PostgreSQL:
delo com herana e um modelo sem herana. Ao final, o Neste artigo ser apresentada a sintaxe do PostgreSQL bem como
artigo destaca a importncia e os aspectos que podem suas modificaes (da verso 7.1 em diante) para implementao de
obter vantagem com o correto uso de herana. herana em tabelas. Ser criado um banco de dados e duas tabelas
(uma delas com herana) para testar o funcionamento das consultas
sobre tais dados. Para conhecer motivos de implantar tabelas com
Tutorial herana, sero desenvolvidas tabelas sem herana, para no final
do artigo realizar comparaes em um modelo com herana e um
modelo sem herana. Embora algumas fontes indiquem que no
Desenvolvimento da base de dados, tabelas e vises vantajoso utilizar herana, inclusive alguns sites indicam no
Nos testes feitos ao longo deste artigo ser utilizada a utilizar, o artigo destaca a importncia e os aspectos que podem
base de dados da Listagem 1. obter vantagem com o correto uso de herana.
O conceito de herana proposto pelo SQL:1999 define
que uma tabela pode herdar atributos de uma outra tabe-
la, facilitando em algumas situaes a manipulao dos ainda no suportado pelo PostgreSQL, pois o PostgreSQL, no
dados, alm de armazenar em apenas um local dados contempla todas as funcionalidades de forma idntica.
de mesma estrutura. No PostgreSQL temos a clusula No PostgreSQL, quando um tabela criada, podemos utilizar a
INHERITS, que uma extenso do PostgreSQL clusula INHERITS citada acima. Desta forma, a tabela receber
linguagem. O estilo de herana proposto no SQL:1999 todas as colunas de uma outra tabela. Abaixo temos um exemplo
SQL:1999 ou SQL3 um conjunto de tipos, formas de armazenamento e operaes sobre dados. 2;Maria;1975-07-22;1450.10
Este conjunto foi proposto por uma srie rgos e publicado na ISO (International Organization for
Standardization) em 1999. A proposta fruto de anos de estudo e tem como resultado um documento 3;Pedro;1974-12-01;2000.90
onde so definidas regras e demais detalhes de funcionamento que constituem o padro SQL:1999.
4;Floriano;1968-12-21;1700.45
Listagem 8. Busca dos dados apenas da tabela empregados Perceba que a clusula UNION ALL pode no atender plena-
mente a necessidade, pois como feita uma unio de todas as
-- View: dados_empregados
-- DROP VIEW dados_empregados;
linhas, o resultado ser uma repetio de um registro (todos os
CREATE OR REPLACE VIEW dados_empregados AS registros da tabela gerentes tambm esto na tabela empre-
SELECT empregados.codigo, empregados.nome, empregados.datanascimento, gados). Observe abaixo o resultado da consulta anterior (no
empregados.salario
FROM ONLY empregados;
apresenta a comisso):
ALTER TABLE dados_empregados OWNER TO postgres;
1;Julio;1970-01-15;1000.50
2;Maria;1975-07-22;1450.10
Desta forma, a view ir retornar o seguinte resultado:
3;Pedro;1974-12-01;2000.90
1;Julio;1970-01-15;1000.50
4;Floriano;1968-12-21;1700.45
2;Maria;1975-07-22;1450.10
5;Maximiliano;1965-10-19;1900.99
3;Pedro;1974-12-01;2000.90
4;Floriano;1968-12-21;1700.45
5;Maximiliano;1965-10-19;1900.99
Para obter apenas os dados dos funcionrios que so gerentes,
podemos apenas utilizar a view dados_gerentes apresentada
sem a necessidade de utilizar a clusula ONLY. Perceba que a Caso no estivssemos utilizando o ALL, o resultado seria o
view dados_gerentes mostra o mesmo resultado caso tivesse seguinte:
a clusula ONLY. A view gerentes utilizando a clusula ONLY
ficar da seguinte forma: 1;Julio;1970-01-15;1000.50
2;Maria;1975-07-22;1450.10
SELECT gerentes.codigo, gerentes.nome, gerentes.datanascimento, gerentes.salario,
gerentes.comissao 3;Pedro;1974-12-01;2000.90
5;Maximiliano;1965-10-19;1900.99
A seguir temos o resultado da consulta anterior com ONLY e da
view dados_gerentes sem o uso do ONLY:
Note que dessa forma resolvemos o problema da repetio, mas
4;Floriano;1968-12-21;1700.45;10 a consulta continua no apresentando a comisso.
5;Maximiliano;1965-10-19;1900.99;18
Mais detalhes sobre a sintaxe do PostgreSQL
Como a visualizao dados_gerentes foi desenvolvida na Nas verses anteriores a 7.1 do PostgreSQL, tais consultas eram
tabela gerentes, a qual apenas recebe os atributos de uma outra feitas de formas diferentes. O comportamento padro era no
tabela (empregados), os dados relativos a empregados (que no incluir as tabelas descendentes, ou seja, as tabelas que herdam.
so gerentes) no so encontrados na tabela gerentes. O contrrio Portanto, os comandos SELECT, UPDATE, DELETE no funcio-
no verdadeiro, pois na tabela empregados, a qual armazena navam com a mesma lgica apresentada acima utilizando ONLY.
os atributos que so herdados, todos os dados de empregados Descobriu-se que isso ocasionava muitos erros, e que tambm
e gerentes so encontrados (com exceo da comisso), j que a violava o padro SQL:1999. Na sintaxe antiga, para incluir as ta-
comisso faz parte da estrutura da tabela gerentes. belas descendentes era necessrio anexar um sinal de * (asterisco)
Para mostrar os dados das duas tabelas, podemos proceder como ao nome da tabela, conforme exemplo a seguir:
mostrado na Listagem 9.
SELECT * FROM empregados*;
Listagem 9. Unio das consultas s duas tabelas Na verso 9.0 do PostgreSQL, o uso do asterisco tambm funciona
sem problemas, mostrando dados de empregados e gerentes. Des-
SELECT ta forma, as verses posteriores a 7.1 ainda permitem especificar
empregados.codigo, empregados.nome, empregados.dataNascimento, emprega-
explicitamente a varredura das tabelas descendentes anexando o
dos.salario
*, assim como especificar explicitamente para no varrer as tabelas
from empregados
descendentes escrevendo ONLY. A partir da verso 7.1 o com-
UNION ALL
select gerentes.codigo, gerentes.nome, gerentes.dataNascimento, gerentes.salario
portamento padro para nomes de tabelas sem adornos passou a
from gerentes ser varrer as tabelas descendentes tambm, enquanto antes desta
verso o comportamento padro era no varrer as tabelas descen-
1 -- Function: junta_empregados_com_gerentes()
2 -- DROP FUNCTION junta_empregados_com_gerentes();
3 CREATE OR REPLACE FUNCTION junta_empregados_com_gerentes()
4 RETURNS SETOF dados_gerentes AS
5 $BODY$
6 DECLARE
7 dados dados_gerentes;
8 BEGIN
9 FOR dados IN SELECT * FROM dados_empregados LOOP
10 RETURN NEXT dados;
11 END LOOP;
12 FOR dados IN SELECT * FROM dados_gerentes LOOP
13 RETURN NEXT dados;
14 END LOOP;
15 RETURN;
16 END;
17 $BODY$
18 LANGUAGE plpgsql VOLATILE
19 COST 100
20 ROWS 1000;
21 ALTER FUNCTION junta_empregados_com_gerentes() OWNER TO postgres;
Na linha 19 temos o parmetro (que deve ser um inteiro po- menor volume de dados. Uma amostra de 50.000 empregados
sitivo) que define o custo estimado de execuo para a funo e 50.000 gerentes chega a apresentar um tamanho 25% menor
em unidades de cpu_operator_cost (ver Nota do DevMan 2). quando se utiliza herana e demais recursos aqui discutidos.
Caso uma funo retorne um conjunto, o valor informado em
cpu_operator_cost o custo por linha retornada. Se o custo Com relao velocidade nas consultas, quando se utiliza
no for especificado, 1 (uma) unidade atribuda para funes herana, testes preliminares demonstram que existe uma
de linguagem C, e 100 (cem) unidades para as funes em todas pequena desvantagem com relao utilizao de relaciona-
as outras linguagens. mento e RIGHT JOIN, mas no chega a ser uma desvantagem
significativa.
s
D
tem a necessidade de controle de chaves estrangeiras. Alm A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e
disso, os dados de um gerente, por exemplo, s precisam ser voc, leitor, acha da revista!
s
ta
edio
Migrao de dados
utilizando Pentaho
Data Integration
Como migrar os dados com segurana para um
novo sistema de informaes?
Resumo DevMan
C
om o implemento de novas tecnologias e o au- De que se trata o artigo:
mento da competitividade de se esperar que O artigo apresenta tcnicas fundamentais para migrao de dados e as
todas as organizaes passem por um processo suas melhores prticas atravs da utilizao de ferramenta especialista
de evoluo em seus sistemas de informao. Indepen- gratuita, de cdigo aberto, Pentaho Data Integration (PDI).
dente de ser motivada pelas deficincias do sistema atual O case utilizado o de uma suposta fuso entre duas lojas de e-
ou pelos ganhos que o novo sistema trar, a preocupao Commerce, no qual o sistema de uma delas, armazenado em MySQL, se
em no perder informao unnime. tornar responsvel por gerir as informaes sendo necessria, portanto,
Existem ferramentas que movem os dados de uma uma migrao de dados do SQL Server para o MySQL.
estrutura para a outra, entretanto no permitem maio-
res tratamentos, pois resumem-se a um de-para nos Em que situao o tema til:
tipos de dados. Entretanto, como na maioria dos casos Sistemas de informao tm um ciclo de vida til e, com o tempo,
a mudana do Sistema Gerenciador de Banco de Dados tornam-se obsoletos, sendo necessria a evoluo deste. Nestes casos,
Relacional (SGBDR) vem aliada a uma nova verso do existe a preocupao de no perder informao e de melhorar a qua-
sistema, esse tipo de ferramenta pouco auxilia. lidade dos dados armazenados. Ocorre que muitas vezes a migrao
normal que os sistemas tenham estruturas de dados exige que seja feita quente, ou seja, com a base Destino em operao,
e regras distintas entre si e por isso o processo de migra- e algumas tcnicas so fundamentais para garantir a integridade dos
o pode ser bastante trabalhoso e o risco de haver uma dados e minimizar o tempo deste processo, independente dos bancos
restrio que impea este processo de ser executado at de dados envolvidos.
o fim muito grande. Como seria impossvel encapsular
todo o processo em uma nica transao do banco de Migrao de dados utilizando Pentaho Data Integration:
dados, o que permitiria um rollback em caso de erro, Processos de migrao de dados so sempre desafiadores e esto se
algumas tcnicas so fundamentais para manter a ras- tornando cada vez mais necessrios.
treabilidade dos dados e poder retomar o processo de Embasado em um case do cotidiano de um Administrador de Dados,
migrao de onde parou. este artigo mostra de forma prtica solues para resolver alguns dos
O incio da execuo de qualquer projeto de Tecnologia problemas mais comuns em processos de migrao de dados, situaes
da Informao e Comunicao (TIC) o levantamento de carentes de anlise pela doutrina especializada. So abordadas a instala-
requisitos e de regras de negcio. Esta etapa fundamen- o e a configurao do Pentaho Data Integration, assim como tcnicas
tal para delimitar o que se espera como resultado deste de validao, formatao e desduplicao de dados, tcnicas para
trabalho e como ele ser validado e com a migrao de minimizar o tempo de execuo do processo de migrao e tambm para
dados no diferente. Abaixo apresentam-se os requi- permitir a rastreabilidade dos dados, fundamental para que o resultado
sitos e regras de negcio do case proposto. possa ser aferido de forma segura.
foram criadas com a engine InnoDB, que cidade. Com isso, tem-se inicialmente que de Extract, Transform and Load (ETL veja
permite, entre outras coisas, a integrida- no ser necessrio tratamento algum ao a Nota do DevMan 1) de cdigo aberto e
de referencial. Percebe-se tambm uma migrar essa informao. desenvolvido em Java, como o Pentaho
base de dados bastante similar ao sistema Com essa anlise prvia das bases, bem Data Integration (PDI), garante que os
Origem. A tabela de produto, diferente- como dos requisitos e regras de negcio, requisitos sejam contemplados.
mente da base Origem, est normalizada, possvel mensurar com assertividade O PDI uma das ferramentas da sute
pois possui referncia para a tabela de o esforo que ser empreendido nessa Open Source de BI Pentaho e comumente
produtocategorias, que tem um autorre- migrao. chamado pelos nomes dos projetos que
lacionamento para possibilitar a criao lhe deram origem, como o Kettle. Essa
da rvore de categorias em vrios nveis. Pentaho Data Integration (Kettle) ferramenta se encaixa perfeitamente neste
Entretanto, a tabela cliente, assim como na A migrao ser realizada entre SGBDRs estudo de caso, pois pode ser utilizada em
base Origem, est redundando o nome da distintos e a utilizao de uma ferramenta qualquer plataforma, de forma gratuita,
alm de dar embasamento para a futura
montagem de Datamarts.
Nota do DevMan 1 Com a adoo do PDI, a migrao prati-
camente independe dos SGBDRs Origem
Extract, Transform and Load - ETL e Destino e permite que os dados passem
O processo de ETL dividido em trs etapas: por processos de validao, higienizao,
formatao, desduplicao, sincroniza-
Extraction (extrao): Consiste na leitura de dados a partir de uma ou mais fontes como, por exemplo, na obteno de todos os registros
adicionados ou alterados depois da ltima carga, na leitura de pginas da web, de webservices, XML, XLS, CSV, JSON, alm de formatos Big o, etc. Ele se conecta em praticamente to-
Data, como Hadoop, Cassandra, MongoDB e HBase. dos os bancos de dados, acessa webservice,
Transformation (transformao): Consiste na alterao da forma ou do contedo do dado para que se encaixe estrutura da base http, l e gera xml, json, csv, excel, etc.
Destino. A transformao ocorre, por exemplo, ao se fazer um lookup pelo nome da cidade para armazenar o seu cdigo, ao ajustar o
nome do bairro a partir do seu CEP, ao invalidar um registro por ter CPF ou e-mail invlidos, ao fazer decodificaes, renomeaes, clculos,
agregaes, etc.
Load (carga): Consiste na gravao dos dados em seu destino, independente do seu formato, que pode ser em um arquivo, em uma tabela
da base transacional, em uma dimenso ou tabela fato de um cubo ou em format Big Data.
Tutorial
A ETL uma das etapas do processo de Business Intelligence, que visa a criao de um grande armazm para os dados, da o nome em
ingls datawarehouse. Para que o processo de Business Intelligence se tornasse vivel foi necessrio o desenvolvimento de ferramentas
especialistas, capazes de executar todas as tarefas exigidas pela atividade. A adoo destas ferramentas para outros processos, como a Download, Instalao e Configurao
migrao e a sincronizao de dados entre sistemas transacionais era apenas uma questo de tempo. Hoje em dia estas ferramentas so
utilizadas para atividades como garimpagem de dados, leitura e anlise de contedo das redes sociais e bolsas de valores, envio de email
do PDI
marketing, etc. Para a realizao das atividades aqui
propostas, ser utilizado o Pentaho Data
Integration, disponvel para download
no sourceforge. Ao final deste artigo
esto disponveis os links para os arqui-
vos citados, as bases de dados e o fonte
capaz de executar toda a migrao e a
conferncia de dados migrados, com um
nico clique.
Pa ra i n ic ia r as at iv idades, faa o
download da verso mais recente do PDI
e descompacte o arquivo, disponibilizado
em formato .zip com aproximadamente
350MB, seguindo as etapas de acordo com
o seu Sistema Operacional (SO):
Para o caso do Mac, basta executar Data In-
tegration 64-bit ou Data Integration 32-bit.
Para o Linux instale o JavaRuntime En-
vironment (JRE), com o Path apontando
para a pasta $JAVA_HOME/bin. Por exem-
plo, digite no terminal ou inclua no etc/
profile export PATH=$PATH:/usr/java/
Figura 3. Modelo de ER da base Destino em MySQL jdk1.6.0_07/bin e ento execute spoon.sh.
Organizao
O PDI permite armazenar todo o processo em banco de dados.
Nota do DevMan 3
Entretanto, para isso seria necessria a criao do repositrio do
Busca pelo nome do componente
Pentaho. Neste case, utilizaremos a opo de salvar em arquivos e
para a organizao foi criada uma pasta chamada SQLMagazine O PDI possui duas abas no frame esquerdo. Na primeira, chamada View, esto todos os objetos
utilizados, enquanto na segunda, chamada Design, esto todos os componentes disponveis para
onde eles sero salvos. utilizao. Ambas possuem, na parte superior, um campo de busca pelo nome do componente.
Ao longo deste artigo ser criado um arquivo .ktr para cada
transformao que armazenar uma srie de steps. As flechas
(hops) que ligam os steps indicam a direo do fluxo dos dados Ao lado de Connection, clique em New... e preencha com os
entre eles. dados de conexo da base de Origem, em SQL Server, conforme
Uma transformao pode ser executada individualmente ou a Figura 4.
fazer parte de um Job, que permite a execuo de transformaes Agora em Options, useCursorFetch, preencha com true e pressio-
ou at mesmo de Jobs em sequncia, armazenados em arquivos ne enter. Este procedimento vai facilitar a leitura de tabelas com
.kjb. Tanto os arquivos .ktr quanto os .kjb possuem o formato xml, grande volume de dados. Feito isso, selecione a opo Test para
sem criptografia. se certificar que a conexo est correta e ento em OK. Clique
Uma dica importante, embora trivial, lembrar-se de antes de em Get SQL select statement e selecione com duplo clique a tabela
iniciar os trabalhos, ter o backup das bases de trabalho. O ideal vendedor, conforme a Figura 5.
que o processo de migrao seja criado sempre acessando bases Neste momento voc ser questionado: Do you want to include the
de desenvolvimento. Depois do processo pronto e completamente field-names in the SQL? Clique em Yes para que o PDI gere a query
testado, basta alterar os endereos das conexes para que apontem com os nomes das colunas ao invs do SELECT *. Em seguida cli-
para as bases de produo (veja Nota do DevMan 2) e ento exe- que em Preview e em OK para visualizar as primeiras 1000 linhas.
cutar novamente, com a mxima segurana e performance. Clique em Close para fechar o Preview e em Step name escreva um
nome que no deixe dvidas da sua funcionalidade, como, por
Conexo Origem exemplo: L vendedor. Ao final, selecione a opo OK para
Para que tenhamos acesso aos dados, existe a necessidade de que fechar o step e, por fim, salve o arquivo. Neste momento, temos
sejam criadas as conexes com os bancos envolvidos. Isto feito nossa conexo com a base de origem configurada.
Figura 4. Conexo para a base Origem, em SQLServer Figura 6. Criando conexo Origem, para SQLServer
Conexo Destino
Com a conexo para a base Origem em SQL Server j con-
figurada, realizaremos um procedimento parecido para nos
conectarmos base Destino no MySQL conforme especificaes
descritas abaixo.
Inicialmente, arraste para a rea de programao do PDI o step
Table output, que fica na categoria Output. Crie uma seta de liga-
o (hop) entre os dois steps, clicando no primeiro step, mantendo Figura 7. Conexo para a base Origem, em MySQL
pressionada a tecla shift, arraste at o step Table output, tal como se
visualiza na Figura 6. Para testar efetivamente as conexes, rode a transformao pelo
Na sequncia, com um duplo clique em Table output, que tem a menu Action, Run ou clicando no cone verde da transformao,
finalidade de persistir os dados, informe em Step name o nome com boto de Play. A tela representada na Figura 8 ser visuali-
teste. Agora clique em New..., ao lado de Connection e preencha zada, onde ser possvel configurar alguns parmetros para a sua
com os dados de conexo da base de Destino, em MySQL, con- execuo. Selecione a opo Launch.
forme Figura 7. Com isso, a primeira migrao de dados da tabela vendedor do banco
Feito isto, clique em Test para se certificar que a conexo est origem para a tabela teste do banco destino foi efetivada. Observe os
correta e ento em OK. No campo Target table escreva teste. resultados diretamente no banco de dados. Com isso foram testados
O prximo passo clicar em SQL e visualizar a DDL para a criao os drivers de conexo, encodes, grants de banco, de rede, etc.
por grupo de informaes: Requisitos e Regras de Negcio, Anli- colunas que recebero valor neste Insert. Selecione, em Table field
se dos dados, Algoritmo e ento um passo a passo com as devidas e em Stream field a coluna dsNome.
orientaes para a migrao. Feito isso, agora arraste o componente Update da categoria
Para a Tabela Filial, tal como salientado nos requisitos, a base Output e crie uma seta de ligao entre os dois steps. Edite o step,
Destino no permite nomes de filiais duplicados. d o nome de Update idBaseDestino e selecione a conexo para
Com uma rpida anlise, percebe-se que no h duplicidade nos a base Origem.
dados de filiais nas bases Origem e Destino. Como so poucos Em Target table escreva filial. Conforme se visualiza na Figura 10,
registros, facilmente se verifica tambm que as filiais da Origem indique os campos de look up, ou seja, os campos chave. Neste caso,
no existem no Destino, dispensando a validao. Table Field e Stream field recebem id. Em Update fields, escreva
No PDI, o componente Table output tem a opo de retornar idBaseDestino em Table Field e Stream Field. Ainda na Figura 10,
o id autoincremento do registro gerado. O Componente Insert/ a coluna idBaseDestino, referida no passo anterior, ainda no existe
Update, que seria conveniente neste caso, no retorna o id gerado, no banco Origem. Para cri-la, pressione SQL. Neste passo, o PDI
por isso no ser til. pode sugerir a criao de um ndice na coluna id. Como a chave
Ento, o processo deve persistir os dados das filiais na base Des- primria e no existe a necessidade, basta apagar do script sugerido.
tino, recuperar o id gerado e armazen-lo com o registro Origem, Clique em Execute e a mensagem de sucesso ser apresentada.
na coluna idBaseDestino.
Para a elaborao deste filtro seguiremos alguns os passos. Ini-
cialmente, crie uma transformao e salve com o nome: 1-Filial.
Feito isso, arraste um componente Table input, d o nome de L
filial e selecione a conexo para a base Origem. Neste momento,
clique em Get SQL select statement e selecione com duplo clique a
tabela filial e ento em Yes. Em seguida, faa um Preview dos dados
e clique em OK para fechar o step. Ento, arraste o componente
Table output e crie uma seta de ligao entre os dois steps. Ser
necessrio tambm editar o step, dando o nome de Cria filial e
selecionando a conexo para a base Destino.
Na sequncia (ver Figura 9), em Target table escreva filial.
Vendedor
Seguindo a padronizao estabelecida neste artigo, apresentam-
Figura 9. Table output para gravar filial se, na continuidade, os Requisitos e Regras de Negcio, a Anlise
dos dados, o Algoritmo e ento um passo a passo com as devidas
Ainda na Figura 9, marque a opo Return auto-generated key, orientaes para efetuar a migrao dos vendedores. importante
e informe logo abaixo idBaseDestino como nome da coluna, registrar, embora implcito, que a repetio destes passos por um
em nosso result set, que vai receber o valor da chave primria administrador de dados tem como resultado um raciocnio mais
de autoincremento gerada na base Destino. Tambm nesta tela, automatizado.
marque a opo Specify database fields para que, na segunda aba, Como requisito da tabela vendedor, a base Destino no permite
com nome Database fields, seja possvel fazer o mapeamento das e-mail de vendedores duplicados. Dentre as regras de negcio, o
9. Faa a ligao do step Criar Registro? para este step, informando lecionados os campos a serem includos. Conforme Figura 14, a
que para ser executado no caso de Result is FALSE; coluna id foi excluda deste mapeamento, pois na base Destino o
10. Inclua o componente Update este fluxo, chame-o de Update registro receber um valor automaticamente. Confirme e feche o
idBaseDestino e aponte para a tabela vendedor da base Origem e step;
configure para que o id do vendedor encontrado com mesmo e-mail 15. Aps estas etapas, deve-se, por fim, gravar na base Origem o
seja gravado na coluna idBaseDestino, da mesma forma utilizada id gerado para os vendedores, informando que no existia na base
com a filial. Inclua, alm disso, o campo bJaExistiaNoDestino para Destino. Copie e cole o step criado no Passo 8 e altere o valor do
ser atualizado. Como o registro que est sendo atualizado o booleano para False, ligando-o ao fluxo;
mesmo da query inicial, tem-se a certeza de que o registro existe. 16. Copie e cole o step criado no Passo 10, ligando-o ao fluxo e
Assim, podemos marcar o Skip lookup para ganhar em perfor- em Update fields, Stream field, troque de idBaseDestino para idBase
mance; DestinoCRIADO;
11. Agora crie os campos idBaseDestino, bJaExistiaNoDestino clican- 17. Execute a transformao e verifique no resultado que dos 60
do em SQL, conforme Figura 12. Perceba que tipos booleanos so vendedores da base Origem, somente 50 foram includos na base
criados como char(1) e recebero como seus valores Y ou N; Destino, pois 10 deles j existiam com o mesmo e-mail, conforme
12. Feito isso, os steps para a condio verdadeira sero criados, a Figura 15;
ou seja, o registro de Vendedor. Inclua o step Calculator e faa a
ligao dele com o step Criar Registro?, informando que para ser Por fim, verifique os dados em ambas as bases e certifique-se de
executado no caso de Result is TRUE. Como o prprio nome diz, ter salvo a transformao que acabamos de desenvolver.
este step utilizado para fazer clculos e criar novas colunas no
resultset. Neste estudo de caso, ser utilizado para retirar da string Cliente
do telefone tudo o que no for numrico. Para isso, em new field Seguindo a padronizao adotada neste artigo, os Requisitos e
escreva dsCelularSomenteNumeros; em Calculation selecione Regras de Negcio, a Anlise dos dados, o Algoritmo e ento um
dentre as diversas funes disponveis Return only digits from passo a passo com as devidas orientaes para a migrao dos
string A; em field A selecione dsCelular e, finalmente, em Value clientes so apresentados a partir de agora.
Type selecione String. Para a tabela cliente como requisito deste case, tm-se que a
13. Para obter os campos para o celular, inclua, conforme Figura 13, base Destino no permite duplicidade nos e-mails de clientes.
o step String Cut ao fluxo; Por outro lado, a regra de negcio para esta tabela refere-se ao
14. Para incluir o vendedor, inclua ao fluxo o step Table output, telefone celular, que na base Origem um nico campo string, com
apontando para a tabela vendedor da base Destino, marque Return formataes como (11)99917-7758. Entretanto, na base Destino,
auto-generated key e informe idBaseDestinoCRIADO como nome esta informao deve ser gravada em dois campos numricos
para esta informao. Marque Specify database fields e, na segunda distintos, um para o DDD e outro para o celular.
aba, clique em Get fields para que o PDI busque todos os valores Considerando que o volume de dados significativo, impres-
e ento em Enter field mapping para que graficamente sejam se- cindvel conferir a qualidade destes via SQL, na base Origem,
para verificao de eventual duplicidade de e-mail,
conforme a Listagem 3.
Concluiu-se que h vrios clientes cadastrados
com o e-mail em duplicidade. Tal como ocorreu com
a migrao dos vendedores, os clientes podem j
possuir cadastro na base Destino, razo pela qual,
o processo deve permitir a criao uma lista destes
clientes.
Outro detalhe interessante de ser comentado que neste estudo 9. Por fim, execute a transformao e verifique a quantidade de
de caso a unicidade do cliente feita por e-mail, mas poderia ser clientes criados e de pr-existentes. Observe tambm a velocidade
por CPF. (nmero de registros includos por segundo) obtida, conforme
7. Edite o step Criar vendedor e chame-o de Criar cliente. Em Target pode ser visualizado na Figura 20. Caso acontea qualquer tipo de
table, troque de vendedor para cliente. Na aba Database fields, clique erro e o processo tenha sido interrompido, para se evitar a leitura
em Get fields, Clear and add all e ento em Field mapping, tal como de um registro j migrado, edite o primeiro step, incluindo ao final
realizado nos casos anteriores, excluindo a coluna id, conforme da query a instruo where idBaseDestino is null.
a Figura 19;
8. Edite o ltimo step, Update idBaseDestinoCRIADO e, em Target Por fim, verifique os dados em ambas as bases e certifique-se de
table, troque de vendedor para cliente; ter salvo a transformao que acabamos de desenvolver.
Outras informaes, mesmas tcnicas Na continuidade, deveremos verificar se o montante total das
A migrao das demais informaes que completam este notas fiscais no Destino sofreu o acrscimo do mesmo valor
processo, como subcategoria de produto, produto, notafiscal e do total das notas fiscais na Origem. Para isso, as queries das
notafiscal_produto se utilizam das mesmas tcnicas vistas nos Listagens 4 e 5 sero utilizadas.
passos anteriores e poder ser visualizada, na ntegra, nos fontes
disponibilizados no portal da SQL Magazine. Listagem 4. Queries para conferncia final na base Origem.
Vale salientar que as procedimentos adotados at aqui
sero comuns em diferentes migraes de dados e sero a USE MagazineSetorial;
base para, com pequenas adaptaes, migrar outros dados -- a quantidade de registros que no
com segurana, contemplando os requisitos e respeitando as -- tm um correspondente no Destino
regras de negcio. SELECT count(*)
FROM dbo.cliente
WHERE idBaseDestino IS NOT NULL;
SELECT count(*)
FROM dbo.notafiscal
WHERE idBaseDestino IS NOT NULL;
SELECT count(*)
FROM dbo.notafiscal_produto
WHERE idBaseDestino IS NOT NULL;
sistemas de alta disponibilidade, j atuou em instituies como PUC-PR, A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e
Esfera Informtica, Badesc, Gennera, Cetil e Knowtec. Atualmente voc, leitor, acha da revista!
s
ta
edio
Particionamento de
dados no SQL Server
M
onitorar, propor e implementar solues
para melhoria do ambiente funo do DBA. Resumo DevMan
Desde a verso 2005 do SQL Server (Verso
Enterprise) disponibilizada a funcionalidade de par- De que se trata o artigo:
ticionamento de dados. Esta facilita o gerenciamento Particionamento de dados o recurso no qual o administrador de
de dados que so inseridos atravs de sistemas OLTP e banco de dados poder ter o domnio dos locais onde seus dados so
tambm dados que podem ser utilizados para emisso armazenados. Atualmente, no utilizando esta funcionalidade, podemos
de relatrios gerenciais e sistema OLAP. O particiona- determinar em qual diretrio ou diretrios nossos arquivos de filegroup
mento de dados melhora o desempenho e simplifica a ficaro armazenados, porm no caso de vrios filegroups no temos a
manuteno. Quando uma tabela grande particionada, certeza de qual lugar seu registro realmente est. Com o particionamento
ao se executar uma consulta, blocos menores dos dados dos dados, podemos ter um gerenciamento melhor dos dados, ganhando
so lidos, fazendo com que as informaes sejam retor- em performance e tambm acompanhando em que partio/filegroup
nadas de forma mais rpida. o registro est alocado.
Quando no utilizado o particionamento de dados
no SQL Server, pode-se armazenar uma tabela dentro Em que situao o tema til:
de um filegroup apenas, e este filegroup pode conter As informaes contidas neste artigo podem ser aplicadas em am-
vrios arquivos em vrios discos, porm voc como DBA bientes de banco de dados de qualquer porte, fazendo com que o
no consegue determinar em qual destes arquivos ou gerenciamento dos dados seja melhorado. "Espalhando" os dados em
em qual dos discos voc ir armazenar uma parte dos diferentes discos no servidor, o banco de dados visa melhorar o desem-
dados. Ao particionar uma tabela no banco de dados, penho das leituras, facilitando assim a busca por resultados, onde ao
pode-se realizar um dimensionamento fsico dos dados, invs de consultar toda a massa de dados, faz-se apenas a consulta em
ou seja, em um ambiente onde se tem mais que um disco uma parte da mesma.
para se armazenar os dados e um deles mais lento,
pode-se escolher armazenar os dados que so utilizados Particionamento de dados no SQL Server:
para emisso de relatrios ou armazenamento de dados Este artigo introduz o conceito de particionamento de dados no banco
histricos (possivelmente dados referentes a notas ficais de dados SQL Server, podendo ser aplicado a partir da verso 2005 verso
de uma empresa que precisam ficar arquivados durante Enterprise. Ao longo do artigo sero abordados o conceito de filegroup,
pelos cinco anos) no disco mais lento e no disco com funes de partio e esquemas de partio, que so os primeiros passos
maior velocidade os dados atuais. para criar uma tabela particionada. Sero mostrados tambm os meios de
O particionamento dos dados feito com base em um gerenciamento do particionamento de dados, onde poder se incluir e
atributo, ou seja, um campo da tabela no momento da excluir intervalos de particionamento e transferir dados de parties entre
insero ser verificado e, com isso, o engine do SQL tabelas utilizando o menor esforo administrativo possvel.
Server saber para qual filegroup dever encaminhar
o registro. Alm da tabela, o particionamento tambm
pode ser utilizado em um ndice ou view indexada, reaproveitado em mais de um particionamento e que estabelece
e funcionam da mesma forma como explicado para a os limites (intervalo) dos dados a serem inseridos nas tabelas.
tabela. Quando um ndice estiver utilizando a mesma O esquema de partio um objeto no banco de dados que
regra de particionamento da tabela, dizemos que a tabela relacionado diretamente com a funo de partio, onde faz o
est alinhada, ou seja, os dados da tabela e ndice so apontamento do intervalo com o filegroup ao qual os dados devem
armazenados no mesmo filegroup. ser armazenados e tambm declarado no momento da criao
Para criar uma tabela, ndice ou view indexada, uma da tabela, ndice ou view indexada.
funo de partio e esquema de partio devem ser Aps a tabela ser criada e os dados serem includos em todas as
criados no banco de dados. A funo de partio um parties, surgem necessidades de administrao destas parties,
objeto independente no banco de dados que pode ser sejam por motivos de se fazer ajustes no intervalo da funo de
Partio Filegroup Valor mnimo Valor mximo Para que se possa criar um esquema de partio, utiliza-se o co-
1 FG1 - 01/01/2012 mando CREATE PARTITION SCHEME, conforme Listagem 4.
2 FG2 02/01/2012 01/02/2012 Neste comando temos que:
3 FG3 02/02/2012 01/03/2012
CREATE PARTITION SCHEME: Determina que est sendo
criado um esquema de partio;
4 FG4 02/03/2012 01/04/2012
Partition_scheme_name: Especifica o nome do esquema de
5 FG5 02/04/2012 01/05/2012
partio a ser criado;
6 FG6 02/05/2012 01/06/2012 AS PARTITION partition_function_name: Neste parmetro ser
7 FG7 02/06/2012 01/07/2012 apontada a funo de partio no qual o esquema de partio ir
8 FG8 02/07/2012 01/08/2012 ser relacionado;
9 FG9 02/08/2012 01/09/2012 [ALL]: Caso o parmetro seja especificado, apenas um filegroup
poder ser especificado no parmetro TO file_group_name (mos-
10 FG10 02/09/2012 01/10/2012
trado a seguir);
11 FG11 02/10/2012 01/11/2012
TO ({file)_gripo_name | [PRIMARY]} [ ,...n]): Neste parmetro
12 FG12 02/11/2012 01/12/2012 dever ser especificado o filegroup onde cada um dos intervalos
13 FG13 02/12/2012 + sero armazenados. Caso PRIMARY seja especificado, todos os
intervalos sero armazenados no filegroup principal do banco de
Tabela 1. Funo de partio com RANGE LEFT
dados.
Merge
Assim como o operador SPLIT utilizado para
incluir um intervalo dentro de um particionamento,
o operador MERGE faz o inverso, ou seja, retira um
intervalo do particionamento. Continuando com
o exemplo da tabela pedidos, a Listagem 10 ir
retirar o intervalo do ms de janeiro de 2013 criado
anteriormente.
Com este comando, os valores do ano de 2013
Figura 3. Verificando o nmero de parties voltaro a ser armazenados na partio junto com
do ento que fazer a deleo dos dados na tabela. Dentro de uma CREATE TABLE pedidos_historico
tabela particionada, se possui uma facilidade que a utilizao (
do operador SWITCH, no qual se permite fazer a transferncia de id_ped int not null,
id_cli int not null,
uma determinada partio para outra tabela de forma mais rpida dta_ped date not null
e prtica. Porm, antes de iniciar o processo de transferncia dos ) ON FG7
GO
dados, alguns pr-requisitos devem ser obedecidos:
A tabela de destino j deve existir no servidor; ALTER TABLE pedidos
A partio da tabela destino (independente de ser particionada SWITCH PARTITION 7 TO pedidos_historico
GO
ou no) dever estar vazia;
Aps o comando ser executado, todos os dados que faziam par- so to utilizados em consultas ou que so mais utilizados para
te da partio 7 estaro na tabela pedidos_historico e no mais relatrios gerenciais em um disco um pouco mais lento e deixar
presentes na tabela pedidos. A Figura 4 mostra o resultado dos os discos mais rpidos para as transaes OLTP do dia a dia e para
selects executados nas tabelas pedido e pedidos_historico. dados mais atuais, melhorando assim a performance.
Alm disso, podem aparecer necessidades de se fazer o ge-
renciamento das parties, onde ao final de um ano, devem-se
incluir os meses no intervalo das parties para que possam ser
armazenados em locais separados. Para isso, podemos utilizar
os operadores SPLIT, MERGE e SWITCH, que permitem, alm
de criar um intervalo, retirar um intervalo da partio ou at
mesmo transferir os dados de uma partio para outra na mesma
tabela ou transferir os dados para uma outra tabela, desde que
sejam seguidos alguns pr-requisitos, aos quais foram explica-
dos no artigo.
s
D
cursos do banco de dados, particionando os dados entre discos, A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e
dividindo assim o I/O de leitura e gravao dos dados. Atravs do voc, leitor, acha da revista!
s
ta
edio
A Resumo DevMan
origem do termo Cloud Computing ainda
desconhecida, e as informaes encontradas
na internet dificilmente convergem para um De que se trata o artigo:
ponto em comum. O fato que j utilizamos servios na O artigo mostra de forma simples, com exemplos e simulaes,
nuvem h muito tempo, seja ele um webmail, um drive que uma empresa pode colocar seus bancos de dados na nuvem
virtual, at datacenters terceirizados. com segurana, escalabilidade e alta disponibilidade a um custo
A computao em nuvem existia tambm dentro de relativamente baixo, pagando apenas pelo que usar.
muitas empresas. Solues Citrix e VMware j permi-
tiam a virtualizao de servidores e desktops h muito Em que situao o tema til:
tempo. O objetivo sempre foi o mesmo: otimizao na O artigo ajuda a esclarecer algumas dvidas relacionadas ao
utilizao dos recursos computacionais e reduo de servio de banco de dados Oracle da Amazon, detalhando a forma
custos. de clculo do valor do servio, licenciamento e aspectos tcnicos
Os avanos nas tecnologias de virtualizao permiti- importantes que devem ser levados em considerao na migrao
ram que empresas que j possuam grandes infraestrutu- de um banco de dados para a nuvem.
ras passassem a comercializar servios computacionais
e de armazenamento pela internet. Seu banco de dados na nuvem da Amazon:
Uma das pioneiras nesse ramo a Amazon, com o Neste artigo, o tema Computao em Nuvem entra em pauta
AWS (Amazon Web Services). Lanado em 2006, esse novamente, com foco no servio de banco de dados da Amazon,
servio j conta com vrios clientes de peso como Netflix, o RDS (Relational Database Services).
Samsung, Sega entre outros. Utilizando o Oracle como engine de banco de dados, sero de-
Neste contexto, este artigo mostra que uma empresa monstrados atravs de exemplos e simulaes o funcionamento,
pode colocar seus bancos de dados na nuvem com segu- mtricas e custos do servio. So abordados tambm servios
rana, escalabilidade e alta disponibilidade a um custo opcionais para as instncias RDS, como o Multi-AZ, que permite
relativamente baixo, pagando apenas pelo que usar. Para criar rplicas em outras instalaes fsicas para garantir a alta dis-
isso, o artigo esclarece algumas dvidas relacionadas ponibilidade em caso de falhas na instalao fsica primria.
ao servio de banco de dados Oracle da Amazon consi-
derando aspectos tcnicos importantes que devem ser
levados em considerao na migrao de um banco de
dados para a nuvem. sia-Pacfico (Tquio) e Amrica do Sul (So Paulo) so as mais
recentes e foram inauguradas em 2011.
A infraestrutura por trs da nuvem da Amazon Cada regio subdividida em Availability Zones (AZs), que so
Para atender as enormes demandas de recursos por instalaes fsicas distintas, isto , datacenters com suas prprias
parte dos clientes e usurios espalhados pelo mundo, a infraestruturas e gerenciamentos independentes, mas ligados
Amazon disponibiliza diversos datacenters localizados entre si por conexes de rede de baixa latncia.
em regies estratgicas do globo terrestre. As regies Cada regio possui pelo menos duas AZs:
Produto Named User Plus Software Update License & Support Processor License Software Update License & Support
Standard Edition One 180 39,60 5.800 1.276,00
Standard Edition 350 77,00 17.500 3.850,00
Enterprise Edition 950 209,00 47.500 10.450,00
Tabela 1. Lista de preos dos produtos da Oracle (Fonte: Oracle Global Pricing and Licensing)
O ElasticCache o servio de in-memory cache da Amazon, Para ambos os tipos, possvel usar uma licena includa (devido
utilizado para aumentar a velocidade de aplicaes, armazenando a um acordo com a Oracle e Microsoft), ou usar o modelo BYOL
informaes que so muito acessadas na memria RAM e, dessa (Bring Your Own Licence).
forma, evitando o acesso frequente a discos e bancos de dados. Para utilizar o BYOL, necessrio ter a licena e o suporte apro-
O DynamoDB banco de dados NoSQL desenvolvido pela priados para a classe selecionada e edio do Oracle.
Amazon. Resultado de anos de pesquisas em busca de alta esca- As edies disponveis com o RDS so:
labilidade e confiabilidade para os servios de ecommerce, esse BYOL: Standard Edition One (SE1), Standard Edition (SE) e
banco de dados no relacional baseado em chave-valor (key/value) Enterprise Edition (EE);
foi disponibilizado tambm como um web service. Licena includa: Standard Edition One (SE1).
Por ltimo, o RDS, que o servio de banco de dados relacional
da Amazon. Vamos conhecer com mais detalhes como ele fun- possvel trocar a forma de licenciamento, por exemplo, de BYOL
ciona, custo de utilizao, vantagens e limitaes. para licena includa, mas necessrio excluir a instncia atual de
banco de dados (criando um snapshot final) e depois criar uma nova
RDS Relational Database Service a partir do snapshot, definindo a nova opo de licenciamento.
Esse servio especfico para banco de dados relacionais permite
a utilizao de banco de dados Oracle, MySQL e SQL Server de Como tudo isso calculado?
forma simples e econmica. Devido variedade de mtricas e servios, a Amazon disponi-
O gerenciamento da instncia todo feito pela Amazon. biliza o Simple Monthly Calculator para facilitar o calculo final
O usurio no precisa preocupar-se, por exemplo, com aplicaes dos servios que esto sendo contratados.
de patches. A parametrizao tambm feita por eles de acordo Podemos fazer uma comparao entre os tipos On-demand e
com a classe de instncia selecionada. Reservada. A Tabela 2 mostra os parmetros e valores que sero
As classes determinam a quantidade de memria e CPUs dispo- utilizados para o clculo.
nveis para a instncia (dados extrados do site da Amazon): A Tabela 3 mostra o resultado da simulao pelo tipo do servio
Micro instncia de BD: 630 MB de memria, at 2 ECU (para e tempo de utilizao/contratao.
intermitncias peridicas curtas) - somente SQL Server. Observando os nmeros acima, notamos que, para uma utili-
Instncia de Banco de Dados pequena: memria de 1,7 GB, zao constante em longo prazo, a instncia reservada (mdia
1 ECU (1 virtual core com 1 ECU). utilizao) seria mais vantajosa que a On-demand. Portanto, o
Instncia de Banco de Dados grande: memria de 7,5 GB, 4 ECUs que pode ser determinante na escolha do tipo o tempo que a
(2 virtual cores com 2 ECUs cada). Instncia ficar no ar.
Instncia de Banco de Dados extragrande: 15 GB de memria, Alm das mtricas acima, existem outros servios que podem ser
8 ECUs (4 ncleos virtuais com 2 ECUs cada) - somente MySQL. adquiridos, como replicao, armazenamento de backup adicional
Instncia Extra Grande com memria elevada: 17,1 GB de e transferncia de dados da internet.
memria, 6,5 ECU (2 ncleos virtuais com 3,25 ECUs cada). A replicao (Implantao Multi-AZ) permite ter uma rplica
Instncia de Banco de Dados dupla extragrande com mais do banco de dados (em espera) em outra zona da regio (j expli-
memria: 34 GB de memria, 13 ECUs (4 ncleos virtuais com cado anteriormente), garantindo assim disponibilidade em caso
3,25 ECUs cada). de falhas na instncia ou na infraestrutura da zona primria.
Instncia de Banco de Dados Qudrupla extragrande com mais O failover automtico e transparente para o usurio.
memria: 68 GB de memria, 26 ECUs (8 ncleos virtuais com
3,25 ECUs cada).
Region So Paulo
Alm da escolha da classe, pode-se escolher o tipo do servio:
DB Engine and license Oracle (license included)
On-demand ou Instncia Reservada.
Class and deployment type Small Standard
O tipo On-demand a forma mais simples de contratao do
servio. Voc paga pela capacidade computacional por hora uti- Usage 24 * 30 = 720 (30 dias rodando 24h por dia)
lizada sem prazo definido. Provisioned Storage 20GB por ms
J para a Instncia Reservada, voc determina o tempo que voc vai I/O requests 1 milho
reservar a instncia. As diferenas para o tipo On-demand so: Offering and term (somente Medium 1 ano
Investimento inicial, para planos de 1 ou 3 anos; reservada) Medium 3 anos
Definio de leve, mdia e alta utilizao. Tabela 2. Parmetros para o clculo do valor/hora da instncia
Para esta opo, a Amazon concede descontos na taxa de uso por 1 ano 3 anos
hora em curso. Fazendo uma analogia com planos de telefonia On-demand $ 147,88 * 12 = $ 1774,56 $ 147,88 * 36 = $ 5323,68
mvel, seria a diferena do valor do minuto utilizado entre um Reservada $ 67,24 * 12 + $ 427 = $ 1233,88 $ 47,08 * 36 + $ 617 = $ 2311,88
plano ps-pago e um plano pr-pago.
Tabela 3. Simulao do valor/hora por tipo de instncia (Fonte: AWS Simple Monthly Calculator)
A Figura 3 mostra a terceira etapa, onde so definidos parme- S ecurity Groups: so grupos de controle de acesso via rede,
tros especficos do banco de dados, VPC, Zona de Disponibilidade como se fosse um firewall. Ao criar um grupo novo, necessrio
preferencial e Grupos. informar um IP ou faixa de IP que poder acessar a instncia.
A configurao de um grupo, ou criao de um novo, pode ser
feito antes ou depois da criao da instncia.
Na penltima etapa, definimos o perodo de reteno do
backup e as janelas de backup e manuteno.
Aplicaes de patches ocorrem na janela de manuteno.
Portanto, se a aplicao automtica for habilitada, aconselh-
vel determinar o perodo do dia que a instncia poder ficar
indisponvel.
Se no forem definidos horrios preferenciais, as janelas res-
peitaro os horrios de acordo com a regio onde a instncia
est rodando, conforme podemos observar na Tabela 4.
Backups e Snapshots
Como foi explicado anteriormente, o
backup gerenciado pela Amazon, mas
possvel tirar snapshots manuais em
qualquer momento. O procedimento bem
simples: basta clicar em Take Snapshot e
dar um nome para ele (sempre comeando
por uma letra), conforme o exemplo da
Figura 9.
O tempo que leva para concluir um
snapshot varia de acordo com o tamanho
da base. Quando concludo, o status muda
Figura 6. Conexo usando SQL*Plus e a criao de uma tablespace e de um usurio para available.
Concluso
A evoluo tecnolgica permitiu o
surgimento de uma srie de servios na
nuvem com foco em negcios e empresas.
Com apenas alguns cliques, temos uma
instncia de banco de dados disponvel
para acesso de qualquer lugar que tenha
uma conexo com a internet.
Empresas com pouco capital, e at
simples usurios, agora podem usufruir
de softwares, poder computacional e ar-
mazenamento que somente uma grande
empresa poderia ter antes do surgimento
desses servios na nuvem.
ta
edio
acha da revista!
D seu voto sobre este artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback
Particionamento no
Oracle - Parte 2
Mais estratgias
Este artigo faz parte de um curso Resumo DevMan
De que se trata o artigo:
O SGBD Oracle disponibiliza uma soluo completa de particionamento
de dados. So vrias as opes que podem ser utilizadas. Nesta segunda
E
ste artigo o segundo de uma srie que trata parte do artigo, daremos continuidade anlise das tcnicas de particio-
sobre particionamento de tabelas e ndices no namento atravs de uma abordagem terica e prtica.
banco de dados Oracle. Alm de facilidade no
gerenciamento de dados, o particionamento oferece um Em que situao o tema til:
grande ganho de desempenho em tabelas cujo volume Particionamento de dados um tema bastante til para facilitar o
de dados muito alto. gerenciamento de grandes bases de dados. Atravs dele possvel re-
Pensando justamente nesta necessidade a Oracle ofe- alizado o gerenciamento descentralizado das informaes. Alm disso,
rece j h bastante tempo uma soluo realmente muito seu uso tende a tornar o armazenamento dos dados mais eficiente e com
boa. Trata-se do particionamento de objetos. Atravs melhor desempenho.
desta funcionalidade o DBA poder prover aplica-
o uma soluo de baixssimo custo (trata-se de uma Particionamento no Oracle - Parte 2:
funcionalidade presente na verso Enterprise Edition A crescente quantidade de dados armazenados em SGBDs em organiza-
do banco de dados Oracle sem custo adicional), sem a es dispersas geograficamente tem levado necessidade cada vez maior
necessidade de alteraes de cdigo e que oferece um de um gerenciamento eficiente e performtico das bases de dados.
desempenho realmente impressionante. Neste artigo conheceremos mais algumas tcnicas de particionamento
A versatilidade oferecida pela soluo realmente im- em banco de dados. Abordaremos as tcnicas de particionamento por
pressiona, permitindo que parties sejam criadas com hash, intervalo, referncia, composto range-range, composto range-list,
base em um intervalo de dados (que podem ser valores composto range-hash e composto list-list. Todas as tcnicas sero apre-
numricos ou mesmo datas) ou uma lista de valores (es- sentadas considerando suas definies e exemplos de uso.
tados da federao, por exemplo) ou ainda atravs de um
algoritmo de particionamento e, como se no bastasse,
at mesmo baseado na combinao destas estratgias. importante no que diz respeito a desempenho em consultas a
O melhor de tudo que toda essa implementao to- tabelas com volumes de dados realmente grandes.
talmente transparente para a camada de aplicao. A crescente demanda pela necessidade de armazenamento de
Esta funcionalidade no est limitada apenas a situa- arquivos binrios tambm uma das caractersticas beneficiadas
es onde existam tabelas gigantescas (como ambientes pela tcnica de particionamento. Outra caracterstica bastante be-
de Data Warehouse, por exemplo), mas se adaptam per- neficiada pelo particionamento o gerenciamento do ciclo de vida
feitamente a situaes em que seja necessrio gerenciar o das informaes. Muitas vezes, por questes legais ou estratgicas,
ciclo de vida das informaes ou at mesmo organizar as informaes precisam ser mantidas no banco de dados por um
melhor a forma em que os dados estejam armazenados perodo definido de tempo e, aps esse perodo, estas informaes
nas tabelas. j podem ser retiradas do banco de dados. Mais uma vez podemos
Na primeira parte desta srie de artigos vimos os ver a grande facilidade de expurgar estas informaes atravs da
principais conceitos sobre particionamento no banco utilizao de particionamento.
de dados Oracle. Dentre os conceitos pudemos perceber Ainda no primeiro artigo apresentamos duas estratgias
que a estratgia de particionamento especialmente de particionamento: de nvel nico do tipo range (intervalo) e
Partio SYS_P33
PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
40 100530 30-NOV-98 9 33 1 44.99
118 133 06-JUN-01 2 999 1 17.12
36 4523 27-JAN-99 3 999 1 53.89
30 170 23-FEB-01 2 999 1 8.8
35 2606 17-FEB-00 3 999 1 54.94
Partio SYS_P34
PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
116 11393 05-JUN-99 2 999 1 12.18
133 9450 01-DEC-00 2 999 1 31.28
125 9417 04-FEB-98 3 999 1 16.86
24 11899 26-JUN-99 4 999 1 43.04
45 9491 28-AUG-98 4 350 1 47.45
Aps a carga de dados feita com base nas informaes apresenta- Listagem 2. Criao da tabela de vendas particionada por hash.
das na Tabela 1, a distribuio dos registros na tabela particionada
01. CREATE TABLE INTERVAL_SALES
se dar conforme apresentado na Tabela 2. 02. (PROD_ID NUMBER(6),
03. CUST_ID NUMBER,
Particionamento por Interva l (Intervalo) 04. TIME_ID DATE,
05. CHANNEL_ID CHAR(1),
O particionamento por interval , na verdade, uma subdiviso 06. PROMO_ID NUMBER(6),
do particionamento por range. Por isso no considerado como 07. QUANTITY_SOLD NUMBER(3),
sendo uma das estratgias de particionamento. Interval uma 08. AMOUNT_SOLD NUMBER(10,2))
09. PARTITION BY RANGE (TIME_ID)
clusula que pode ser utilizada quando feito o particionamento 10. INTERVAL(NUMTOYMINTERVAL(1, MONTH))
por range. 11. (PARTITION P0 VALUES LESS THAN (TO_DATE(1-1-2008, DD-MM-YYYY)),
12. PARTITION P1 VALUES LESS THAN (TO_DATE(1-1-2009, DD-MM-YYYY)),
A clusula de interval, da instruo CREATE TABLE, estabele-
13. PARTITION P2 VALUES LESS THAN (TO_DATE(1-7-2009, DD-MM-YYYY)),
ce um intervalo de particionamento para a tabela. necessrio 14. PARTITION P3 VALUES LESS THAN (TO_DATE(1-1-2010, DD-MM-YYYY)));
especificar pelo menos uma partio do tipo range na clusula
PARTITION. O valor de chave de particionamento determina o
valor do limite superior das parties, que chamado de ponto A linha 09 define que a tabela ser particionada atravs do
de transio, e o banco de dados cria automaticamente parties mtodo range e as linhas 11 a 14 definem quais so as par-
do tipo interval para os dados alm desse ponto de transio. O ties criadas inicialmente e o respectivo intervalo de cada
limite inferior do intervalo de cada partio a fronteira superior, partio.
no inclusiva, da partio anterior. A diferena aqui de uma tabela particionada pura e sim-
Por exemplo, ao criar uma tabela particionada do tipo interval plesmente por range est na linha 10, onde foi utilizada a
com intervalos de um ms e o ponto de transio 01 de janeiro clusula interval cujo intervalo foi definido como mensal
de 2010, ento o limite inferior para este intervalo 01 de janeiro (NUMTOYMINTERVAL(1, MONTH)). Na prtica, isto significa
de 2010. O limite inferior do intervalo julho de 2010 01 de julho que todos os registros cujo TIME_ID for menor que 01/01/2008
de 2010, independentemente se a partio junho de 2010 tenha sero armazenados na partio P0. Registros com TIME_ID
sido criada anteriormente. menores que 01/01/2009 sero armazenados na partio P1,
Para o particionamento do tipo interval, a chave de particiona- TIME_IDs menores que 01/07/2009 iro para a partio P2 e
mento pode ser apenas uma nica coluna da tabela e deve ser do registros cujo valor de TIME_ID seja menor que 01/01/2010
tipo NUMBER ou DATE. sero armazenados na partio P3.
A Listagem 2 apresenta a instruo SQL para a criao de uma OK, at aqui um particionamento por range puro e simples.
tabela particionada utilizando a clusula interval. Sim, mas a partir dos valores para a coluna TIME_ID maiores
Novamente, perceba que o incio da instruo SQL (linhas 01 a ou iguais a 01/01/2010 que a histria muda. O Oracle criar
08 da Listagem 2) exatamente igual a instruo de criao de parties automaticamente para cada ms a partir de 2010. Ou
qualquer tabela comum. seja, todos os registros cujo TIME_ID esteja entre 01/01/2010
01. CREATE TABLE QUARTERLY_REGIONAL_SALES 21. SUBPARTITION Q2_1999_SOUTHEAST VALUES (FL, GA),
02. (DEPTNO NUMBER, 22. SUBPARTITION Q2_1999_NORTHCENTRAL VALUES (SD, WI),
03. ITEM_NO VARCHAR2(20), 23. SUBPARTITION Q2_1999_SOUTHCENTRAL VALUES (OK, TX)
04. TXN_DATE DATE, 24. SUBPARTITION Q2_1999_OTHERS VALUES (DEFAULT) TABLESPACE TS5),
05. TXN_AMOUNT NUMBER, 25. PARTITION Q3_1999 VALUES LESS THAN
06. STATE VARCHAR2(2)) (TO_DATE(1-OCT-1999,DD-MON-YYYY)) TABLESPACE TS3
07. PARTITION BY RANGE (TXN_DATE) 26. (SUBPARTITION Q3_1999_NORTHWEST VALUES (OR, WA),
08. SUBPARTITION BY LIST (STATE) 27. SUBPARTITION Q3_1999_SOUTHWEST VALUES (AZ, UT, NM),
09. (PARTITION Q1_1999 VALUES LESS THAN 28. SUBPARTITION Q3_1999_NORTHEAST VALUES (NY, VM, NJ),
(TO_DATE(1-APR-1999,DD-MON-YYYY)) TABLESPACE TS1 29. SUBPARTITION Q3_1999_SOUTHEAST VALUES (FL, GA),
10. (SUBPARTITION Q1_1999_NORTHWEST VALUES (OR, WA), 30. SUBPARTITION Q3_1999_NORTHCENTRAL VALUES (SD, WI),
11. SUBPARTITION Q1_1999_SOUTHWEST VALUES (AZ, UT, NM), 31. SUBPARTITION Q3_1999_SOUTHCENTRAL VALUES (OK, TX)
12. SUBPARTITION Q1_1999_NORTHEAST VALUES (NY, VM, NJ), 32. SUBPARTITION Q3_1999_OTHERS VALUES (DEFAULT) TABLESPACE TS5),
13. SUBPARTITION Q1_1999_SOUTHEAST VALUES (FL, GA), 33. PARTITION Q4_1999 VALUES LESS THAN
14. SUBPARTITION Q1_1999_NORTHCENTRAL VALUES (SD, WI), ( TO_DATE(1-JAN-2000,DD-MON-YYYY)) TABLESPACE TS4
15. SUBPARTITION Q1_1999_SOUTHCENTRAL VALUES (OK, TX) 34. (SUBPARTITION Q4_1999_NORTHWEST VALUES (OR, WA),
16. SUBPARTITION Q1_1999_OTHERS VALUES (DEFAULT) TABLESPACE TS5), 35. SUBPARTITION Q4_1999_SOUTHWEST VALUES (AZ, UT, NM),
17. PARTITION Q2_1999 VALUES LESS THAN 36. SUBPARTITION Q4_1999_NORTHEAST VALUES (NY, VM, NJ),
( TO_DATE(1-JUL-1999,DD-MON-YYYY)) TABLESPACE TS2 37. SUBPARTITION Q4_1999_SOUTHEAST VALUES (FL, GA),
18. (SUBPARTITION Q2_1999_NORTHWEST VALUES (OR, WA), 38. SUBPARTITION Q4_1999_NORTHCENTRAL VALUES (SD, WI),
19. SUBPARTITION Q2_1999_SOUTHWEST VALUES (AZ, UT, NM), 39. SUBPARTITION Q4_1999_SOUTHCENTRAL VALUES (OK, TX)
20. SUBPARTITION Q2_1999_NORTHEAST VALUES (NY, VM, NJ), 40. SUBPARTITION Q4_1999_OTHERS VALUES (DEFAULT) TABLESPACE TS5));
especfico de partio. O registro ento mapeado para uma (40, 4532130, 5-Jan-2000, 897231.55, TX): no ser mapeado
subpartio dentro dessa partio identificando se o valor da para nenhuma partio e, consequentemente, para nenhuma
chave de subparticionamento cai dentro de uma lista especfica. subpartio, resultando em erro;
Como exemplo, considere a insero dos seguintes registros: (50, 5671621, 17-Dec-1999, 76.123.35, CA): ser mapeado para a
( 10, 4532130, 23-Jan-1999, 8934.10 ,WA): ser mapeado para a subpartio Q4_1999_OTHERS.
subpartio Q1_1999_NORTHWEST;
( 20, 5671621, 15-may1999, 49021.21, OR): ser mapeado para a Outra caracterstica encontrada no exemplo apresentado na
subpartio Q2_1999_NORTHWEST; Listagem 5 a definio da clusula TABLESPACE. possvel
(30, 9977612, 07-Sep-1999 , 30987.90, FL): ser mapeado para a definir esta clusula apenas uma vez na criao da tabela (entre as
subpartio Q3_1999_SOUTHEAST; linhas 06 e 07, por exemplo), no entanto, isso faria com que todas
(40, 9977612, 29-Nov-1999, 67891.45, TX): ser mapeado para a as parties e subparties herdassem esta caracterstica e todos
subpartio Q4_1999_SOUTHCENTRAL; os dados seriam armazenados na mesma tablespace.
Para oferecer um poder de gerenciamento ainda maior, a clu- Particionamento Composto list-list
sula TABLESPACE pode ser definida no nvel de cada partio A descrio da lista das parties de uma tabela com particiona-
e at mesmo de subpartio. mento composto do tipo list-list so semelhantes s listas de uma
Sendo assim, todos os dados contidos nas seis primeiras tabela com particionamento no-composto e podemos definir a
subparties (linhas 10 a 15) da partio Q1_1999 sero arma- tablepace para cada subpartio. A descrio da lista das subparti-
zenados na tablespace TS1, pois herdaro a tablespace definida es, nas clusulas SUBPARTITION, semelhante a parties de
para a partio (linha 09). J os dados contidos na subpartio tabela com particionamento no-composto, exceto o nico atributo
Q1_1999_OTHERS sero armazenados na tablespace TS5, pois fsico opcional que pode ser especificado, tablespace. Subparties
a clusula TABLESPACE foi explicitamente definida para esta herdam todos os outros atributos fsicos a partir da descrio de
subpartio (linha 16). partio. A Listagem 7 mostra a criao de uma tabela de contas
Perceba ainda que este mesmo tipo de definio foi feito para (ACCOUNTS) que do tipo list particionada por regio e subpar-
todas as parties, onde os dados contidos em cada partio (e ticionada usando a lista por status da conta.
as seis primeiras subparties) sero armazenados em tablespa-
ces especficas, mas as subparties *OTHERS tero seus dados Listagem 6. Criao da tabela particionada por range-hash.
armazenados na tablespace TS5. 01. CREATE TABLE SALES
02. (PROD_ID NUMBER(6),
Particionamento Composto range-hash 03. CUST_ID
04. TIME_ID
NUMBER,
DATE,
Os intervalos das parties de uma tabela com particionamento 05. CHANNEL_ID CHAR(1),
06. PROMO_ID NUMBER(6),
composto do tipo range-hash so semelhantes aos intervalos de 07. QUANTITY_SOLD NUMBER(3),
uma tabela com particionamento no-composto e, da mesma 08. AMOUNT_SOLD NUMBER(10,2))
09. PARTITION BY RANGE (TIME_ID)
forma que o particionamento composto range-range e range-list, 10. SUBPARTITION BY HASH (CUST_ID)
podemos definir a tablepace para cada subpartio. 11. SUBPARTITIONS 8 STORE IN (TS1, TS2, TS3, TS4)
12. (PARTITION SALES_Q1_2006 VALUES LESS THAN
A descrio da funo hash que ser usada para distribuir os da- (TO_DATE(01-APR-2006,DD-MON-YYYY)),
dos nas subparties est definida na clusula SUBPARTITION, 13. PARTITION SALES_Q2_2006 VALUES LESS THAN
(TO_DATE(01-JUL-2006,DD-MON-YYYY)),
e semelhante s parties de tabela com particionamento 14. PARTITION SALES_Q3_2006 VALUES LESS THAN
no-composto, exceto o nico atributo fsico opcional que (TO_DATE(01-OCT-2006,DD-MON-YYYY))
15. STORE IN (TS5, TS6, TS7, TS8),
pode ser especificado, tablespace. Subparties herdam todos 16. PARTITION SALES_Q4_2006 VALUES LESS THAN
os outros atributos fsicos a partir da descrio de partio. (TO_DATE(01-JAN-2007,DD-MON-YYYY))
17. STORE IN (TS5, TS6, TS7, TS8));
A Listagem 6 apresenta a criao de uma tabela com particio-
namento range-hash. Listagem 7. Criao da tabela particionada por list-list.
Observe, na Listagem 6, que a base da criao da tabela con- 01. CREATE TABLE ACCOUNTS
tinua sendo a mesma (linhas 01 a 08) e, na linha 09, definido 02. (ID NUMBER,
03. ACCOUNT_NUMBER NUMBER,
o tipo do particionamento (range) utilizando a coluna TIME_ID 04. CUSTOMER_ID NUMBER,
como chave de particionamento. 05. BALANCE NUMBER,
06. BRANCH_ID NUMBER,
A diferena comea na linha 10, em que definido o subpar- 07. REGION VARCHAR(2),
ticionamento, agora do tipo hash, utilizando a coluna CUST_ID 08. STATUS VARCHAR2(1))
09. PARTITION BY LIST (REGION)
como chave do particionamento e, na linha 11, definida a 10. SUBPARTITION BY LIST (STATUS)
quantidade de subparties que sero criadas para armazenar os 11. (PARTITION P_NORTHWEST VALUES (OR, WA)
12. (SUBPARTITION P_NW_BAD VALUES (B),
dados. Note tambm que foi especificada a clusula STORE IN, 13. SUBPARTITION P_NW_AVERAGE VALUES (A),
que define em quais tablespaces os dados sero armazenados. 14. SUBPARTITION P_NW_GOOD VALUES (G)),
15. PARTITION P_SOUTHWEST VALUES (AZ, UT, NM)
Logo aps (linhas 12 a 17) so definidas as parties. Mas 16. (SUBPARTITION P_SW_BAD VALUES (B),
note um detalhe: as subparties das parties SALES_ 17. SUBPARTITION P_SW_AVERAGE VALUES (A),
18. SUBPARTITION P_SW_GOOD VALUES (G)),
Q1_2006 e SALES_Q2_2006 tero seus dados armazenados nas 19. PARTITION P_NORTHEAST VALUES (NY, VM, NJ)
tablespaces presentes pela clusula STORE IN da definio da 20. (SUBPARTITION P_NE_BAD VALUES (B),
21. SUBPARTITION P_NE_AVERAGE VALUES (A),
subpartio (linha 11) porm, as subparties das parties 22. SUBPARTITION P_NE_GOOD VALUES (G)),
SALES_Q3_2006 e SALES_Q4_2006 tero os dados armazena- 23. PARTITION P_SOUTHEAST VALUES (FL, GA)
24. (SUBPARTITION P_SE_BAD VALUES (B),
dos em tablespaces prprias, pois houve uma definio explcita 25. SUBPARTITION P_SE_AVERAGE VALUES (A),
26. SUBPARTITION P_SE_GOOD VALUES (G)),
para isso (linhas 15 e 17). 27. PARTITION P_NORTHCENTRAL VALUES (SD, WI)
Cada registro ser mapeado para uma partio verificando se 28. (SUBPARTITION P_NC_BAD VALUES (B),
29. SUBPARTITION P_NC_AVERAGE VALUES (A),
o valor da chave de partio do registro cai dentro de um in- 30. SUBPARTITION P_NC_GOOD VALUES (G)),
tervalo especfico de partio. O registro ento mapeado para 31. PARTITION P_SOUTHCENTRAL VALUES (OK, TX)
32. (SUBPARTITION P_SC_BAD VALUES (B),
uma subpartio dentro dessa partio atravs da definio do 33. SUBPARTITION P_SC_AVERAGE VALUES (A),
valor hashing da chave de subparticionamento. 34. SUBPARTITION P_SC_GOOD VALUES (G)));
A Listagem 7 mostra que a base da criao da tabela continua mundo de possibilidades abertas no momento em que temos o
sendo a mesma (linhas 01 a 08) e, na linha 09, definido o tipo do poder de mesclar diferentes estratgias para prover o melhor
particionamento (list) utilizando a coluna REGION como chave gerenciamento e desempenho para o banco de dados.
de particionamento. E no se esquea de que tudo isso totalmente transparente
A definio da subpartio comea na linha 10, onde a clusula para a aplicao. O que ocorre por trs de uma consulta pro-
SUBPARTITION tambm usa o tipo list onde a coluna STATUS blema do Oracle. Ele apenas lhe garante que retornar os dados
a chave do particionamento. solicitados.
As listas para cada partio so definidas nas linhas 11, 15, 19, 23,
27 e 31 enquanto as subparties so definidas nas linhas 12 a 14,
16 a 18, 20 a 22, 24 a 26, 28 a 30 e 32 a 34 tambm do tipo list. Ricardo Rezende
Perceba que no exemplo as subparties so iguais para todas as DBA Oracle certificado pela Oracle University (DBA 9i track e DBA OCP
parties alterando apenas o nome delas, ou seja, a lista utilizada 10g). IBM Certified Database Associate DB2 9. DBA Oracle na IBM do
nas subparties so as mesmas para todas as parties. Brasil em projeto internacional administrando ambiente de produo
de alta criticidade. Consultor independente de Bancos de Dados. Editor
importante ressaltar tambm que as definies de tablespaces
tcnico da revista SQL Magazine. Mestrando em Cincia da Computao
apresentadas nas estratgias anteriores tambm se aplicam aqui,
pelo Instituto de Computao da Universidade Estadual de Campinas IC UNICAMP. Docente
ou seja, possvel definir uma nica vez qual a tablespace que todas no curso de Administrao de Banco de Dados na Dextra Systemas.
as parties e subparties utilizaro para armazenar os dados ou
pode-se ainda definir a tablespace no nvel de cada partio.
Oracle Database Documentation Library: 11g Release 2 (11.2)
Concluso http://www.oracle.com/pls/db112/homepage
Apresentamos nesta segunda parte desta srie mais algumas
estratgias de particionamento no banco de dados Oracle. Uma D seu feedback sobre esta edio! eu
Feedback
s
D
das coisas que a Oracle faz muito bem desenvolver novas e A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e
boas funcionalidades para seu banco de dados e, com certeza, o voc, leitor, acha da revista!
s
ta
edio
Oracle Scheduler
Parte 2
Primeiros exemplos prticos
O
Oracle Scheduler um utilitrio do banco agendamento de tarefas no banco de dados Oracle atravs da ferramenta
de dados Oracle disponvel tanto na verso Oracle Scheduler. O Oracle Scheduler permite que o gerenciamento de
Standard Edition One quanto na Standard tarefas seja feito de forma eficaz e inteligente. Neste artigo comearemos
Edition e, claro, na Enterprise Edition. Ele permite que a ver na prtica como trabalhar com esta facilidade.
o gerenciamento das mais variadas tarefas seja feito de
forma eficaz e inteligente. Em que situao o tema til:
No Oracle Scheduler o agrupamento de tarefas atravs O conhecimento sobre como utilizar o Oracle Scheduler extrema-
de classes, limitao de recursos para cada tipo de classe mente til quando desejamos realizar a automatizao de tarefas no
de tarefas, criao de janelas de execuo de tarefas e ou- banco de dados que muitas vezes so repetitivas e tornam a atividade
tras funcionalidades esto disponveis fazendo com que de administrao do SGBD repetitiva e propensa a erros. Alm disso,
ele no seja simplesmente um agendador de tarefas. fundamental quando precisamos iniciar tarefas em horrios adequados
Atravs dele possvel executar desde cdigos de que no interfiram nas atividades dirias da organizao.
banco de dados, como stored procedures ou packages,
at programas executveis no sistema operacional, Oracle Scheduler: Muito mais que um simples agendador de tarefas:
como shell scripts (no UNIX) ou arquivos de lote Este artigo apresentar inicialmente uma srie de definies importan-
(batch) e ainda arquivos executveis no Windows (os tes sobre o Oracle Scheduler. Sero discutidos assuntos como windows,
famosos .exe). sobreposio de windows, groups, destination groups e window group.
A sofisticao do Oracle Scheduler to impressionan- Na seguida, apresentaremos uma srie de exemplos prticos sobre o uso
te que, alm de permitir que as tarefas sejam executadas do agendador de tarefas do Oracle.
com base em um evento pr-determinado, este evento
pode ser pura e simplesmente a chegada de um arqui-
vo no sistema operacional, ou seja, o Oracle Scheduler
transcende os limites do banco de dados oferecendo Windows (Janelas)
uma poderosa ferramenta para os DBAs e tambm para As windows so criadas para iniciar jobs ou para alterar a aloca-
as aplicaes. o de recursos entre os jobs durante vrios perodos de tempo
Assim, sempre que se pretende automatizar tarefas do dia, semana, e assim por diante. A window representada por
no Banco de Dados necessrio que haja um bom um intervalo de tempo com incio e fim bem definidos, tal como
gerenciador para que estas tarefas sejam iniciadas em das 0:00 s 06:00.
momentos adequados e no interfiram na execuo de As janelas (windows) so criadas apenas pelo administrador do
outras tarefas. justamente para este tipo de situao Scheduler que, usualmente, o prprio DBA.
que o Oracle Scheduler se mostra muito til. As windows trabalham com job classes para controlar a alocao
Neste contexto, sero apresentados neste segundo ar- de recursos. Cada window define o plano de recursos (resource plan)
tigo desta srie os conceitos de mais alguns objetos do que ser usado quando a window se abre (fica ativa), e cada job class
Scheduler e j sero iniciados alguns exemplos em que define um grupo de consumidores de recursos (resource consumers
ser colocada efetivamente a mo na massa. group) ou define um servio de banco de dados que pode mapear
para um resource consumers group. Um job que executado dentro - Limitar a quantidade de tempo que uma sesso pode ficar
de uma window tem recursos alocados de acordo com o resource ociosa;
consumers group da job class e resource plan da window. - Permitir que o banco de dados utilize diferentes planos de
Apenas lembrando que resource consumers group e resource plan so recursos (resource plan), com base na mudana de requisitos de
objetos do Oracle database resource manager. O Oracle Database Resource carga de trabalho. possvel alterar dinamicamente o plano de
Manager (Gerenciador de Recursos do Banco de Dados) permite ge- recursos, por exemplo, de um plano de recursos do dia para um
renciar vrias cargas de trabalho dentro de um banco de dados que plano de recursos da noite, sem ter que reiniciar a instncia.
esto lutando por recursos do sistema e do banco de dados. Pode-se tambm agendar uma mudana no plano de recursos
Quando as decises de alocao de recursos de banco de dados com scheduler.
so deixadas para o sistema operacional, pode-se encontrar os se-
guintes problemas com o gerenciamento de carga de trabalho: Veja na Figura 1 um exemplo de como seria a configurao de
- Sobrecarga excessiva; windows num dia normal de trabalho do banco de dados.
- Programao ineficiente;
- Alocao inadequada de recursos;
- Incapacidade de gerenciar recursos especficos do banco de
dados, como execuo paralela e sesses ativas.
Groups (Grupos)
Um grupo define uma lista de objetos do
Scheduler. Em vez de passar uma lista de
objetos como argumentos para um procedure
Figura 3. Configurao de sobreposio de windows num manh normal de trabalho do pacote DBMS_SCHEDULER, possvel
criar um grupo que tem esses objetos Tarefa Procedure Privilgio Necessrio
como seus membros e, em seguida, pas- Criar um job CREATE_JOB ou CREATE_JOBS CREATE JOB ou CREATE ANY JOB
Alterar um job SET_ATTRIBUTE ou SET_JOB_ATTRIBUTES
sar o nome do grupo para o procedure.
Executar um job RUN_JOB
Existem trs tipos de grupos:
Copiar um job COPY_JOB
Grupos de bancos de dados de
Excluir um job DROP_JOB ALTER ou CREATE ANY JOB ou ser o proprietrio
destino: os membros destes grupos Parar um job STOP_JOB
so, na verdade, destinos de banco Desabilitar um job DISABLE
de dados para a execuo de jobs em Habilitar um job ENABLE
banco de dados remotos; Tabela 1. Procedures e privilgios necessrios para execuo de tarefas com jobs
Grupos de destinos externos: os
membros destes grupos so destinos externos, para a execuo Scheduler seguem as mesmas regras de nomeao que todos os
de jobs externos em bancos de dados remotos; outros objetos de banco.
Grupos de window: os membros destes grupos so windows do A regra de nomenclatura para nomear objetos do Scheduler no
Scheduler. pacote DBMS_SCHEDULER define que, por padro, os nomes de
objetos do Scheduler so em letras maisculas (uppercase), a menos
Todos os membros de um grupo devem ser do mesmo tipo e que eles estejam entre aspas.
cada membro deve ser exclusivo. Para cria um grupo usado o Por exemplo, ao criar um job, job_name=>meu_job o mesmo
procedure DBMS_SCHEDULER.CREATE_GROUP. que job_name=>Meu_Job e job_name=>MEU_JOB, mas dife-
rente de job_name=>my_job. Estas regras de nomenclatura
Destination Groups (Grupos de Destino) so seguidas tambm nos casos em que listas de nomes de objetos
Quando necessrio que um JOB seja executado em vrios desti- Scheduler delimitados por vrgula so usados dentro do pacote
nos, cria-se um grupo de destino de banco de dados (database desti- DBMS_SCHEDULER.
nation group) ou grupo de destino externo (external destination group)
e define-se o nome do grupo ao atributo DESTINATION_NAME
do job. Esta a nica forma vlida para especificar vrios destinos
para o job. Tutorial
Window Group
Os window group so criados apenas pelo administrador do Mo na Massa
Scheduler que , normalmente, o DBA. Agora que o leitor j conhece os principais conceitos do Oracle
Pode-se agrupar windows para facilitar o uso em agendamento Scheduler e seus objetos, iremos iniciar a parte prtica sobre como
de jobs. Se um job deve ser executado durante vrios perodos de lidar com esta ferramenta. A partir de agora e nos prximos arti-
tempo ao longo do dia, semana, e assim por diante, pode-se criar gos da srie sero apresentados, de maneira prtica (mas sem nos
uma window para cada perodo de tempo, e em seguida, adicione esquecermos dos conceitos) os seguintes tpicos:
as windows em um window group. Ento, defina o atributo SCHE- Criao, execuo e gerenciamento de jobs;
DULE_NAME do job com o nome deste window group e o job ser Criao e gerenciamento de programs para definir jobs;
executado durante todos os perodos de tempo especificados pelas Criao e gerenciamento de schedules para definir jobs;
windows no window group. Utilizao de eventos para iniciar jobs;
Por exemplo, caso haja uma window chamada FINAIS_DE_SE- Criao e gerenciamento de job chains;
MANA e uma window chamada NOITE_SEMANA, pode-se Priorizao de jobs;
adicionar estas duas windows para um window group chamado Monitoramento de jobs.
INTERRUPCAO. A equipe de data warehouse poderia, ento,
criar um job para executar consultas de acordo com este window Criao, execuo e gerenciamento de jobs
group durante a semana e finais de semana, quando as consultas Um job a combinao de uma agenda (schedule) e um progra-
poderiam ter um alto percentual de recursos disponveis. ma (program), juntamente com quaisquer argumentos adicio-
Se uma window de um window group j est aberta, e um novo job nais exigidos pelo program. Para executar as tarefas referentes
criado apontando para esse window gropu, o job no iniciado aos jobs necessrio utilizar os procedures presentes no pacote
at que a prxima window no window group se abra. DBMS_SCHEDULER, como mostra a Tabela 1.
Tabela 2. Procedures e privilgios necessrios para execuo de tarefas com destination e credentials
Listagem 7. Criao do database destination group VARIOS_BDS e adio de novo Scheduler. Entretanto, a utilizao de todos (ou a maioria deles)
membro. facilitar muito a tarefa de administrao do banco de dados e
01. BEGIN do Scheduler em si.
02. DBMS_SCHEDULER.CREATE_GROUP(
03. GROUP_NAME => VARIOS_BDS, Listagem 8. Criao de um job que ser executado em vrias instncias de banco
04. GROUP_TYPE => DB_DEST,
de dados.
05. MEMBER => OLTP_ADMIN@ORCL, ORCLDW1, LOCAL,
06. COMMENTS => VARIOS BANCOS DE DADOS GERENCIADOS POR MIM);
07. END; 01. SELECT OWNER, GROUP_NAME, GROUP_TYPE, NUMBER_OF_MEMBERS
08. / 02. FROM ALL_SCHEDULER_GROUPS
09. 03. WHERE GROUP_TYPE=DB_DEST
10. BEGIN 04. OR GROUP_TYPE = EXTERNAL_DEST;
11. DBMS_SCHEDULER.ADD_GROUP_MEMBER( 05.
12. GROUP_NAME => VARIOS_BDS, 06. OWNER GROUP_NAME GROUP_TYPE NUMBER_OF_MEMBERS
13. MEMBER => DW_ADMIN@ORCLDW2); 07. --------------- --------------------- ----------------------- -------------------------------
14. END; 08. DBA1 VARIOS_DBS DB_DEST 4
15. / 09. DBA1 VARIOS_HOSTS EXTERNAL_DEST 4
10.
11. BEGIN
12. DBMS_SCHEDULER.CREATE_CREDENTIAL(DBA_CREDENTIAL, DBA1,
Ainda no assunto sobre destionations, possvel criar um job SYS040533);
13. DBMS_SCHEDULER.CREATE_JOB (
que ser executado em vrios destinations, mas que gerenciado 14. JOB_NAME => JOB_MANUTENCAO,
a partir de um nico local. Uma razo comum de fazer isso 15. JOB_TYPE => STORED_PROCEDURE,
16. JOB_ACTION => PROCEDURE_MANUTENCAO,
executar um job de manuteno de banco de dados em todos os 17. START_DATE => 15-JUL-09 23:00:00,
bancos de dados administrados pelo DBA. Em vez de criar o job 18. REPEAT_INTERVAL => FREQ=DAILY,
19. CREDENTIAL_NAME => CREDENCIAL_DBA,
em cada banco de dados, cria-se o job uma vez e define-se vrios 20. DESTINATION_NAME => VARIOS_DBS);
destinations para o job. A partir do banco de dados onde o job foi 21. END;
22. /
criado (o banco de dados local), possvel monitorar o estado e os
resultados de todas as instncias do job em todos os locais.
Para criar um job que seja executado em vrios destinations ne- Neste artigo j comeamos a colocar a mo na massa atravs de
cessrio executar o procedure DBMS_SCHEDULER.CREATE_JOB e exemplos de utilizao do Scheduler. J ficou claro o grande poten-
definir como valor do atributo DESTINATION_NAME o nome de cial desta ferramenta e as inimaginveis opes de utilizao.
um database destination group ou o nome de um external destination Tenho certeza que o leitor j deve estar pensando nos seus bancos
group. de dados e analisando potenciais usos desta ferramenta.
Mas ateno, pois se nem todos os membros do destination group Apenas o fato de termos a possibilidade de executar no apenas
incluem o esquema na credential, uma credential padro ser usada cdigos do banco de dados (como stored procedures), mas tambm
para o job. Alm disso, tenha certeza que a palavra-chave LOCAL programas externos (scripts shell, arquivos de lote .bat e at mes-
esteja presente como membro do destination group para que o job mo executveis do MS Windows .exe) ampliam os horizontes do
seja executado tambm localmente (se esta for a inteno). banco de dados de maneira grandiosa.
A Listagem 8 apresenta a criao de um job que ser executado E mais ainda, a possibilidade de centralizar todos os seus jobs em
em vrias instncias de banco de dados. uma nica instncia de banco de dados e, a partir dela, executar
A consulta apresentada na primeira parte da Listagem 8 (linhas o job em diferentes instncias de banco de dados at mesmo em
01 a 04) foi feita para verificar quais os destinations disponveis, servidores diferentes amplia ainda mais os horizontes do DBA.
onde foram encontrados dois destinations (linhas 06 a 09) sendo
um deles um database destionation (linha 08) e o outro um external Ricardo Rezende
destionation (linha 09), ambos com quatro membros cada. DBA Oracle certificado pela Oracle University (DBA 9i track e DBA OCP
A segunda parte da Listagem 8 (linhas 11 a 22) a criao do job 10g). IBM Certified Database Associate DB2 9. DBA Oracle na IBM do
em si. Inicialmente criada uma credential (linha 12) e, na criao Brasil em projeto internacional administrando ambiente de produo
do job definida qual a credential que ser usada (linha 19) e qual de alta criticidade. Consultor independente de Bancos de Dados. Editor
o destionation. Perceba que o destionation usado no apenas um tcnico da revista SQL Magazine. Mestrando em Cincia da Computao
destination, mas sim um destination group e, portanto, o job ser pelo Instituto de Computao da Universidade Estadual de Campinas IC UNICAMP. Docente
no curso de Administrao de Banco de Dados na Dextra Systemas.
executado em todos os membros deste destination group.
Nesta segunda parte desta srie de artigos sobre o Oracle A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e
Scheduler vimos os conceitos de mais alguns objetos presentes voc, leitor, acha da revista!
s
ta
edio