SlideShare a Scribd company logo
1 of 23
Trabalho de Sistemas de Bancos de Dados
     Centro Universitário UNIVATES




DB2 Express-C 9.5




         Bruno Dadalt Zambiazi

      Lajeado, 10 de julho de 2010.
Sumário

Sumário............................................................................................................................. 2
Introdução......................................................................................................................... 3
DB2................................................................................................................................... 4
   DB2 Express-C 9.5 ....................................................................................................... 4
Controle e Recuperação de Transações ............................................................................ 5
   Teste 1 .......................................................................................................................... 5
   Teste 2 .......................................................................................................................... 5
   Teste 3 .......................................................................................................................... 6
Controle de Concorrência................................................................................................. 6
   Níveis de Isolamento .................................................................................................... 6
     → Uncommited Read ............................................................................................ 6
     → Cursor Stability................................................................................................. 7
     → Read Stability ................................................................................................... 7
     → Repeatable Read ............................................................................................... 7
   Bloqueio ....................................................................................................................... 8
     → Shared Locks .................................................................................................... 9
     → Exclusive Locks................................................................................................ 9
   Testes ............................................................................................................................ 9
     Caso 1 ....................................................................................................................... 9
     Caso 2 ....................................................................................................................... 9
Processamento e Otimização de Consultas .................................................................... 10
   Consulta 1 ................................................................................................................... 10
   Consulta 2 ................................................................................................................... 12
   Consulta 3 ................................................................................................................... 14
   Consulta 4 ................................................................................................................... 14
   Consulta 5 ................................................................................................................... 15
   Consulta 6 ................................................................................................................... 16
Replicação de Dados ...................................................................................................... 17
   Bidirecional com um Mestre ...................................................................................... 18
   Bidirecional sem um Mestre....................................................................................... 18
Suporte e Recursos a XML............................................................................................. 19
   XML – Enabled .......................................................................................................... 19
     → Modelo Clob/Varchar ..................................................................................... 20
     → Modelo Shredding .......................................................................................... 20
   PureXML.................................................................................................................... 20
   Exemplos .................................................................................................................... 21
Conclusões...................................................................................................................... 23




                                                                                                                                      2
Introdução

        O presente documento visa apresentar uma visão geral acerca do Sistema
Gerenciador de Bancos de Dados DB2, além dos resultados obtidos em todas as etapas
de testes propostas pelo trabalho solicitado. Os testes envolvem os seguintes conceitos:
controle de transações, controle de concorrência, otimização e processamento de
consultas, replicação de dados e suporte a XML.
        Para o desenvolvimento do trabalho, foi utilizada a versão gratuita mais recente
do DB2, a Express-C 9.5. Todos os testes que envolviam operações de
inserção/alteração/exclusão de registros, foram feitos através de programas Java que se
conectavam ao banco de dados através de uma conexão JDBC.

        Todos os relatórios e arquivos de log contêm o prefixo [Anexo] e foram
anexados ao documento PDF através da ferramenta Foxit Reader. Caso o leitor de PDF
com o qual esteja visualizando este documento não permita tal funcionalidade, o
software       pode        ser      baixado      no       seguinte        endereço:
http://www.foxitsoftware.com/downloads/.




                                                                                      3
DB2

        Em 1983, a IBM, International Business Machine, anunciou o lançamento do
Sistema Gerenciador de Bancos de Dados DB2. Inicialmente projetado para rodar
apenas nos mainframes da própria IBM, o projeto começou no ano de 1978 e foi
nomeado de System R, nome que permaneceu até a data do lançamento oficial.
        No início da década de 1990, a IBM anunciou o lançamento de versões do DB2
para outras plataformas de servidores, como UNIX e Windows. Atualmente, o DB2
suporta a instalação, também, em ambientes Linux e em PDA’s. É considerado um dos
SGBD’s mais poderosos do mercado, sendo recomendado para aplicações que
necessitam de grande quantidade de armazenamento de dados e alto desempenho em
consultas.
        Duas características interessantes do DB2 são o suporte nativo a XML e a
possibilidade de criação de stored procedures em diversas linguagens de programação,
tais quais SQL PL, C/C++, Java, COBOL, entre outras.
        A IBM oferece quatro diferentes edições para o DB2: Express-C, Express
Edition, Workgroup Edition e Enterprise Edition. Enquanto as três últimas são pagas, a
primeira é livre e foi utilizada para o desenvolvimento deste trabalho. A imagem a
seguir dá uma ideia da diferença de funcionalidades encontradas nas diferentes edições
do DB2:




DB2 Express-C 9.5

       Em 2006, após o anúncio do lançamento das edições gratuitas dos SGBD’s da
Oracle e da Microsoft, seus maiores concorrentes, a IBM resolveu adotar a mesma


                                                                                    4
estratégia e lançar uma edição gratuita do seu banco de dados, o qual ganhou o nome de
DB2 Express-C.
        Utilizando a mesma funcionalidade principal e o mesmo código-fonte das
edições pagas, o DB2 Express-C pode ser utilizado em sistemas de 32 ou 64 bits e em
sistemas operacionais Linux, Solaris e Windows. Pode ser utilizado em servidores que
contenham, no máximo, 2 processadores e 2GB de memória RAM . Não possui limites
quanto à utilização em relação ao tamanho da base de dados, número de bancos de
dados ou número de usuários/conexões.




Controle e Recuperação de Transações

       Neste capítulo, não será explicada nenhuma teoria. Haverá apenas a
apresentação dos testes realizados conforme solicitado.

Teste 1
Descrição: Executar uma rotina e, durante a mesma, parar o servidor. Iniciar
novamente o servidor, verificando se a transação funcionou corretamente;
Método: execução de uma rotina responsável pela inserção de 425 registros na tabela
retiradas;
Mensagem: Erro fatal: [jcc][t4][2055][11259][4.8.87] O gerenciador de banco de
dados não está apto a aceitar novos pedidos, todos os pedidos em progresso foram
terminados, ou este pedido específico foi terminado devido a condições de erro
inesperadas     detectadas    no    sistema    de    destino.   ERRORCODE=-4499,
SQLSTATE=58009;
Log: [Anexo] 1 – 7.1;
Número de registros na tabela antes de parar o servidor: 0 (zero);
Número de registros na tabela após parar o servidor: 0 (zero);
Conclusão: passou no teste, pois nenhum registro foi inserido ao ocorrer um erro
durante a transação.

Teste 2
Descrição: Executar duas rotinas de forma simultânea e, quando uma delas indicar que
terminou, parar o servidor. Iniciar novamente o servidor e verificar se a transação que
terminou teve os dados efetivados e se a outra teve as atualizações desfeitas;
Método: execução de uma rotina responsável pela inserção de 25 registros na tabela
exemplares, e outra pela inserção de 440 registros na tabela retiradas;
Mensagem: Erro fatal: [jcc][t4][2055][11259][4.8.87] O gerenciador de banco de
dados não está apto a aceitar novos pedidos, todos os pedidos em progresso foram



                                                                                     5
terminados, ou este pedido específico foi terminado devido a condições de erro
inesperadas     detectadas     no    sistema  de    destino.   ERRORCODE=-4499,
SQLSTATE=58009;
Log: [Anexo] 1 – 7.2;
Número de registros na tabela exemplares antes de parar o servidor: 500;
Número de registros na tabela retiradas antes de parar o servidor: 0 (zero);
Número de registros na tabela exemplares após de parar o servidor: 525;
Número de registros na tabela retiradas após de parar o servidor: 0 (zero);
Conclusão: passou no teste, pois a transação que estava aberta no momento em que o
servidor parou, não teve seus dados salvos.

Teste 3
Descrição: Executar uma rotina e, antes do término, finalizá-la. Verificar se as
atualizações aparecem na base de dados. Finalizar o servidor ou matar o processo da
conexão para verificar se os dados inseridos aparecem no banco;
Método: execução de um rotina responsável pela inserção de 400 registros na tabela
retiradas, realizando o seu cancelamento através da linha de comando;
Mensagem: nenhuma, pois a rotina foi cancelada pela linha de comando;
Log: [Anexo] 1 – 7.3 (o arquivo ficou vazio pois a rotina foi cancelada antes de gravar
os dados, que é a última parte do código da rotina);
Número de registros na tabela antes de parar o servidor: 0 (zero);
Número de registros na tabela após parar o servidor: 0 (zero);
Conclusão: passou no teste, pois nenhum registro foi inserido ao ocorrer um erro
durante a transação.




Controle de Concorrência

        Pode-se definir a concorrência como o fato de diversas aplicações acessarem o
mesmo dado simultaneamente. Este acesso, no entanto, deve ser coordenado de forma
correta para que seja a atualização das informações seja transparente aos usuários.
        No SGBD DB2, há quatro níveis de isolamento e dois níveis de bloqueio
permitidos para que o controle de concorrência ocorra de forma adequada.

Níveis de Isolamento

   → Uncommited Read
    Uncommited Read, Leitura de Dados não Finalizado, é o menor nível de isolamento
e, consequentemente, oferece o maior nível de concorrência. Não ocorrem bloqueios de
linha quando são executadas operações de leitura, exceto quando existem operações de


                                                                                     6
DROP ou ALTER TABLE. As operações de UPDATE bloqueiam a linha até que a
transação termine.
    Problemas que podem ocorrer:
               Leitura de dados não finalizados;
               Leitura de dados não repetidos;
               Leitura fantasma.
    Problemas que são evitados:
               Perda na atualização.

   → Cursor Stability
    Cursor Stability, Estabilidade do Cursor, é o nível de isolamento padrão do DB2 e
fornece o menor nível de bloqueio. Em operações de leitura, bloqueia a linha corrente
do cursor até que a mesma seja capturada (fetched); se for para atualiações, o bloqueio
das linhas é feito até o término da transação.
    Problemas que podem ocorrer:
                Leitura de dados não repetidos;
                Leitura fantasma.
    Problemas que são evitados:
                Perda na atualização;
                Leitura de dados não finalizados.

   → Read Stability
   Read Stability, Estabilidade de Leitura, bloqueia todas as linhas que fazem parte da
operação solicitada, por qualquer cursor, até que a transação termine. Exemplo: numa
consulta que retorna 100 linhas de determinada tabela, sendo que a mesma possui 1000,
todas as 100 ficam bloqueadas até o término da operação.
   Problemas que podem ocorrer:
               Leitura fantasma.
   Problemas que são evitados:
               Perda na atualização;
               Leitura de dados não finalizados;
               Leitura de dados não repetidos.

   → Repeatable Read
    Repeatable Read, Leitura Repetida, é o maior nível de isolamento pois provê o
maior grau de bloqueio e o menor nível de concorrência. O bloqueio é realizado em
todas as linhas processadas, ou seja, mesmo as linhas que não fazem parte do resultado
final são bloqueadas. Dessa forma, nenhuma transação poderá fazer algo com os dados
até que a requisição anterior termine.
    Problemas que podem ocorrer:
               Nenhum.


                                                                                     7
Problemas que são evitados:
             Perda na atualização;
             Leitura de dados não finalizados;
             Leitura de dados não repetidos;
             Leitura fantasma.

       O nível de isolamento configurado como padrão no DB2 é o Cursor Stability.
Para modificá-lo, há três possibilidades: sessão, conexão ou instrução. A configuração à
nível de instrução é bastante simples, bastando adicionar a cláusula WITH XX, onde XX
pode ser UR, CS, RS, RR (as iniciais dos nomes), ao final de uma instrução SQL
normal.
       Abaixo, uma imagem que exemplifica a diferença entre os quatro níveis de
bloqueio do DB2:




Bloqueio

        O conceito de bloqueio é relacionado com o de concorrência, pois o objetivo
dele – o bloqueio – é parar temporariamente outras operações até que a primeira
operação termine. Quanto mais bloqueios houver, menor será a concorrência, enquanto
que com menos bloqueios a concorrência será maior.
        Os bloqueios ocorrem de forma automática, de acordo com a necessidade de
garantir a segurança da transação e sempre há o desbloqueio ao término da mesma.
Podem acontecer à nível de tabela ou apenas de linhas de tabelas. Existem dois tipos de
bloqueio:




                                                                                      8
→ Shared Locks
    Os Shared Locks, ou Bloqueios Divididos, acontecem quando uma transação está
lendo os dados de uma tabela e impede que outras transações realizem operações de
alteração nas mesmas linhas.

   → Exclusive Locks
    Os Exclusive Locks, ou Bloqueios Exclusivos, acontecem quando uma transação
quer realizar alterações (inserção, exclusão, alteração) em uma linha e impede que
outras transações façam a leitura destes dados.

Testes

      Não foram executados testes com diferentes níveis de isolamento e/ou bloqueio.
Todos os testes realizados levaram em conta apenas as configurações default do SGBD
DB2.

Caso 1
Descrição: Executar duas rotinas simultâneas que alteram dados na tabela retiradas. A
primeira rotina deve efetuar consultas por períodos, ou seja, de 01 a 02 de março,
depois de 03 a 04 do mesmo mês e assim por diante. Após a consulta, os dados dos
registros devem ter a data alterada, adicionando um dia a ela. Devem ser executadas
diversas consultas em sequência durante um certo tempo. Já a segunda rotina deve
efetuar consultas por período, primeiro para o usuário 1, depois para o 2 e assim por
diante. Após a consulta, os dados dos registros devem ter a data alterada, subtraindo
um dia a ela. Em ambas as rotinas, cada consulta e alteração deve ser considerada
uma transação;
Método: a primeira rotina buscou as retiradas do mês 03/2010, de dois em dois dias,
adicionando um dia à data de retirada e atualizando o registro; a segunda rotina buscou
as retiradas de 20 usuários sorteados, subtraindo um dia à data de cada retirada;
Log: [Anexo] 2 – 2.1.1 - Período e [Anexo] 2 – 2.1.2 - Usuário;
Conclusão: baseando-se na retirada 29780, registro encontrado nos dois arquivos de
log, é possível concluir que não houve problemas de concorrência. No primeiro log (de
consultas por período), as datas antiga e nova dessa retirada são 01/03 e 02/03,
respectivamente, havendo o update no horário 09:48:32:609. Já no segundo log (de
consultas por usuário), a mesma retirada apareceu com as datas antiga e nova,
respectivamente, como 02/03 e 01/03, com a atualização no horário 09:48:33:484.

Caso 2
Descrição: três rotinas, uma lendo os exemplares de livros, uma alterando a data de
compra dos exemplares e outra inserindo novos exemplares. A rotina que lê os valores
deve executar repetidamente uma instrução SQL que conta os exemplares por livro;


                                                                                     9
Método: a primeira rotina realizou a contagem do número de exemplares para cada
produto por 500 vezes seguidas; a segunda rotina adicionou um dia à data de aquisição
de cada exemplar dos livros; a terceira rotina inseriu um exemplar para cada livro,
colocando como data 30 dias após a maior data de aquisição de um exemplar daquele
mesmo livro. Obs.: os produtos utilizados para as três rotinas foram: 10507, 11136,
9352, 9566, 11132, 8553, 8739, 9527, 10956, 10076, 9063, 9013, 8994, 10637, 9464,
8578, 10089, 10217, 11017, 10032, 8887, 11030, 9707, 9005, 10195, 10134, 9645,
8620, 8579, 9197, 9309, 10371, 9745, 9241, 10388, 10392, 8747, 9830, 9732, 10855,
8919, 8569, 10620, 9288, 11125, 11027, 9690, 10397, 9365, 9218, 9706, 11087, 9929,
9373, 9943, 10490, 11062, 10506, 9378, 9305, 9842, 8615, 9554, 9718, 9825, 9215,
10839, 10052, 8713, 9737, 9162, 8907, 9787, 9861, 11081, 10500, 9631, 9844, 9219,
9030, 10753, 9656, 9642, 9573, 9441, 9673, 8688, 10309, 9096, 9069, 9754, 9488,
10373, 10636, 9607, 9439, 9826, 9945, 9996, 8824, 11094, 9927, 10591, 11012, 9523,
9592, 9308, 8980, 10306, 10060, 10919, 10805, 8780, 9363, 10549, 11121, 10631,
9797, 10078, 9126, 9178, 9188, 10285, 9449, 8716;
Log: [Anexo] 2 – 2.2.1 – Contagem, [Anexo] 2 – 2.2.2 – Atualização e [Anexo] 2 –
2.2.3 - Inclusão;
Conclusão: baseando-se na contagem de exemplares do livro 8553, pode-se concluir
que não houve problema de concorrência. Segundo o primeiro arquivo de log (contagem
de exemplares), havia 5 exemplares desse livro até o horário 15:04:40:375, mas, a partir
do horário 15.04.40.390, passou a haver 6 exemplares pois, alguns milissegundos antes,
de acordo com o terceiro arquivo de log (inclusões de exemplares), houve a inserção de
um novo exemplar para o livro.




Processamento e Otimização de Consultas

       Neste capítulo, não será explicada nenhuma teoria. Haverá apenas a
apresentação dos testes realizados conforme solicitado.
       Todos os tempos de execução apresentados foram “capturados” pelo programa
Centro de Controle, no qual foram executadas as consultas. Todos os tempos são a
média de execução das consultas, todas realizadas três vezes.

Consulta 1




                                                                                     10
[Figura 1] Consulta 1 - consulta original


Tempos de execução:
   Consulta original: 0:00:16:98
   Consulta sem a cláusula ORDER BY: 0:00:07:22
   Consulta original com índices: 0:00:14:19

Índices criados:
    reti.id_livro
    reti.nr_sequencia
    reti.dt_retirada

Planos de execução:




         [Figura 2] Consulta 1 - plano de execução da consulta original




                                                                          11
[Figura 3] Consulta 1 - plano de execução da consulta sem a clásula ORDER BY




      [Figura 4] Consulta 1 - plano de execução da consulta original com os índices

Consulta 2




                            [Figura 5] Consulta 2 - consulta


    Tempos de execução:


                                                                                      12
Consulta: 0:00:05:81
   Consulta com índices: 0:00:01:23

Índices criados:
    reti.id_usuario
    reti.id_atendente
    usua.id_cidade
    aten.id_cidade

Planos de execução:




         [Figura 6] Consulta 2 – plano de execução da consulta original




       [Figura 7] Consulta 2 - plano de execução da consulta com índices




                                                                           13
Consulta 3




      [Figura 8] Consulta 3 - consulta original (à esquerda) e alternativa (à direita)


    Tempos de execução:
       Consulta original: 0:00:48:06
       Consulta alternativa: 0:00:21:88
       Consulta original com índices: 0:00:11:91

    Índices criados:
        livr.nm_livro

    Planos de execução:




             [Figura 9] Consulta 3 – plano de execução da consulta original

Consulta 4




                            [Figura 10] Consulta 4 - consulta



                                                                                         14
Tempos de execução:
        Consulta original: 0:00:12:32
        Consulta sem a condição sobre a data: 0:00:11:94

     Planos de execução:




               [Figura 11] Consulta 4 - plano de execução da consulta original

Consulta 5




    [Figura 12] Consulta 5 - consulta original (à esquerda) e utilizando junções (à direita)


     Tempos de execução:
        Consulta original: 0:00:10:78
        Consulta utilizando junções: 0:00:09:36

     Planos de execução (os planos das duas consultas ficaram iguais):




                                                                                               15
[Figura 13] Consulta 5 - plano de execução das consultas

Consulta 6




      [Figura 14] Consulta 6 - consulta original (à esquerda) e alternativa (à direita)


    Tempos de execução:
       Consulta original: 0:00:10:39
       Consulta utilizando junções: 0:00:06:57

    Planos de execução:




                                                                                          16
[Figura 15] Consulta 6 - plano de execução da consulta original




Replicação de Dados

        Este tópico foi o que gerou a maior dificuldade durante o trabalho, em virtude do
DB2 não dispor de nenhuma ferramenta gratuita para replicação de dados na edição
Express C.
        No entanto, nas outras edições, a replicação de dados é sempre feita através da
captura das informações em determinado servidor e posterior aplicação das alterações
nos outros servidores de bancos de dados. Toda a estrutura de replicação do DB2
baseia-se em dois softwares: Capture e Apply.
        O primeiro software, Capture, deve estar presente nos servidores que sofrerão
operações de alteração/exclusão/inserção de dados, por ser o responsável pela captura
das informações que estarão sendo manipuladas nele - servidor. Já o segundo, Apply,
deve estar presente nos servidores que sofrerão as atualizações pelo processo de
replicação, pois é o responsável por aplicar as alterações.
        Além disso, o DB2 trabalha com as nomenclaturas Source e Target para designar
os servidores considerados mestre – Source – e escravos – Target.
        Existem dois modelos de replicação: com um mestre e sem um mestre.




                                                                                      17
Bidirecional com um Mestre

        É equivalente ao modelo tradicionalmente conhecido como Master-Slave, no
qual o servidor Mestre é o único a receber as alterações e fica responsável por repassá-
las aos servidores escravos.
        No modelo do DB2, o servidor Source – Mestre – precisa conter o software
Capture rodando para capturar as alterações sofridas. A partir daí, a replicação é
aplicada nos servidores Target – Escravo – através do software Apply que precisa haver
nestes. A figura abaixo exemplifica o modelo:




Bidirecional sem um Mestre

       É equivalente ao modelo tradicionalmente conhecido como Multi-Master, no
qual qualquer um dos servidores pode receber atualizações e fica responsável por
repassar as atualizações aos outros servidores. Dessa forma, todos passam a ser mestres
e escravos ao mesmo tempo.
       No modelo do DB2, todos os servidores precisam conter tanto o software
Capture quando o Apply rodando para que consigam capturar as alterações e aplicá-las
em si quando necessário. O modelo Biderecional sem um Mestre do DB2 funciona
apenas de forma assíncrona.
       A figura abaixo exemplifica o modelo:




                                                                                     18
Suporte e Recursos a XML

      O DB2 é, notadamente, um dos SGBD’s que oferece melhor suporte e maior
nível de recursos a XML. Algumas características extraídas diretamente da
documentação oficial:
         Técnicas exclusivas para armazenamento e gerenciamento eficiente de
         estruturas hierárquicas de documentos XML;
         Técnicas exclusivas de indexação para acelerar pesquisas em documentos
         XML;
         Suporte total às linguagens XQuery e XPath;
         Suporte à validação de dados baseados em esquemas fornecidos por
         usuários.
      No DB2, existem dois tipos de bases de dados capazes de armazenar XML:
XML-Enabled e XML Nativo.

XML – Enabled

      Utiliza o modelo relacional como núcleo do modelo de armazenamento, o que
torna necessário o armazenamento do XML em um campo grande (Modelo
Clob/Varchar) ou requer uma espécie de mapeamento entre o modelo hierárquico do
XML com o modelo de dados relacional tradicional (Modelo Shredding).



                                                                            19
→ Modelo Clob/Varchar
    O documento XML é armazenado inteiramente dentro de um único campo de uma
tabela relacional, sendo o campo geralmente do tipo Clob ou Varchar. Neste modelo, o
documento acaba sendo inserido sem que seja feita uma análise sintática do seu
conteúdo, o que torna esta opção não muito flexível no momento da recuperação e
manipulação dos dados.

   → Modelo Shredding
    Também conhecido como Fragmentação, este modelo faz a análise do documento
XML e fragmenta-o em pequenas partes que serão inseridas em diversas tabelas do
banco de dados, sendo o documento “forçado” a se tornar um modelo relacional.
    Esse método também não possui muita flexibilidade devido à complexidade de
serem realizadas alterações na estrutura hierárquica do documento XML, além das
consultas se tornarem pesadas pela necessidade de utilizar diversas tabelas e junções
para formar o resultado final.

       Abaixo, uma figura ilustrando o funcionamento dos dois modelos:




PureXML

       As bases de dados que armazenam XML nativo, no DB2 conhecido como
pureXML, utilizam o modelo de dados hierárquico para armazenar e processar XML
internamente. A forma como o documento é armazenado é a mesma com que é
processado, sem necessitar de uma conversão para o modelo relacional e nem exigindo
que seja feita uma imagem do XML. Quando instruções XQuery e XPath são
executadas, estas não precisam ser convertidas para SQL pois são processadas de forma
nativa, diretamente no documento. Segundo a documentação oficial, o DB2 foi o


                                                                                  20
primeiro banco de dados a incorporar o XML nativo a sua implementação, o que
ocorreu na versão 9.
       A figura abaixo ilustra a diferença no armazenamento de um dado relacional e
de um documento XML na mesma tabela de uma base de dados:




       O DB2 permite que o acesso aos dados para tabelas que possuem tanto dados
relacionais quanto XML pode ser feito de quatro formas:
            Utilização de SQL para buscar dados relacionais;
            Utilização de SQL com extensões XML para acessar dados XML;
            Uso de XQuery para buscar dados XML;
            Uso de XQuery para acessar dados relacionais.
        Em virtude de tanta flexibilidade, o DB2 pode ser considerado tanto um banco
de dados relacional de alto desempenho, quanto um repositório de documentos XML
bastante poderoso.

Exemplos

      A tabela abaixo ilustra as principais funções que podem ser utilizadas para a
manipulação de dados XML através de SQL/X, a extensão XML para SQL:




                                                                                 21
Alguns exemplos de utilização de SQL/X:




                                          22
Conclusões

        Mesmo o pouco tempo de trabalho com o banco de dados DB2 deixa claro que o
ele é extremamente poderoso e caracterizado pelo alto desempenho na execução de
consultas, mesmo as mais complexas. Fora isso, a enorme gama de ferramentas que o
banco possui para administração dá a entender que ele não foi feito para aplicações de
pequeno porte.
        Para utilizar o DB2 como SGBD, é necessário que a empresa possua um DBA
específico para conseguir retirar o máximo do poder deste banco. É fácil perceber que
ele se encaixa perfeitamente em ambientes de alta disponibilidade e que necessitam de
uma ferramenta de armazenamento rápida, confiável, robusta e flexível.




                                                                                   23

More Related Content

What's hot

TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...Fabrício Catae
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataRodrigo Almeida
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoFabrício Catae
 
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVOMANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVOLuciano Moreira
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesFernando Ike
 
Estratégia de backup - RMAN
Estratégia de backup - RMANEstratégia de backup - RMAN
Estratégia de backup - RMANEduardo Legatti
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIMatheus Espanhol
 
Workshop SQL Server 2012
Workshop SQL Server 2012Workshop SQL Server 2012
Workshop SQL Server 2012Viviane_ribeiro
 
Alta Disponibilidade TechEd
Alta Disponibilidade TechEdAlta Disponibilidade TechEd
Alta Disponibilidade TechEdViviane_ribeiro
 
Estrategias de backup e recovery
Estrategias de backup e recoveryEstrategias de backup e recovery
Estrategias de backup e recoveryRodrigo Crespi
 
Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisElton Minetto
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cactiIsraelCunha
 
Banco de Dados Distribuídos
Banco de Dados DistribuídosBanco de Dados Distribuídos
Banco de Dados DistribuídosAdail Viana Neto
 
Unidade 2.3 Instalação do Windows Server 2008
Unidade 2.3 Instalação do Windows Server 2008Unidade 2.3 Instalação do Windows Server 2008
Unidade 2.3 Instalação do Windows Server 2008Juan Carlos Lamarão
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005Andre Nascimento
 
MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL Brasil
 

What's hot (20)

Apostila sql
Apostila sqlApostila sql
Apostila sql
 
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para Exadata
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
 
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVOMANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
 
Estratégia de backup - RMAN
Estratégia de backup - RMANEstratégia de backup - RMAN
Estratégia de backup - RMAN
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool II
 
Workshop SQL Server 2012
Workshop SQL Server 2012Workshop SQL Server 2012
Workshop SQL Server 2012
 
Alta Disponibilidade TechEd
Alta Disponibilidade TechEdAlta Disponibilidade TechEd
Alta Disponibilidade TechEd
 
Estrategias de backup e recovery
Estrategias de backup e recoveryEstrategias de backup e recovery
Estrategias de backup e recovery
 
Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveis
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cacti
 
Banco de Dados Distribuídos
Banco de Dados DistribuídosBanco de Dados Distribuídos
Banco de Dados Distribuídos
 
Unidade 2.3 Instalação do Windows Server 2008
Unidade 2.3 Instalação do Windows Server 2008Unidade 2.3 Instalação do Windows Server 2008
Unidade 2.3 Instalação do Windows Server 2008
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
Academia ABAP
Academia  ABAPAcademia  ABAP
Academia ABAP
 
Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005
 
MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?
 

Viewers also liked

síntesis curricular personalizada y con sus respectivos soportes
síntesis curricular personalizada y con sus respectivos soportessíntesis curricular personalizada y con sus respectivos soportes
síntesis curricular personalizada y con sus respectivos soportesJpolanco1712
 
Correlation of mandibular symphysis morphology and dimensions with
Correlation of mandibular symphysis morphology and dimensions withCorrelation of mandibular symphysis morphology and dimensions with
Correlation of mandibular symphysis morphology and dimensions withsugandha bassi
 
Healthcare Best Practices in Data Warehousing & Analytics
Healthcare Best Practices in Data Warehousing & AnalyticsHealthcare Best Practices in Data Warehousing & Analytics
Healthcare Best Practices in Data Warehousing & AnalyticsDale Sanders
 
FD-20151119-00028001 (1)
FD-20151119-00028001 (1)FD-20151119-00028001 (1)
FD-20151119-00028001 (1)Jeroen de Bruin
 
Fisiología del aparato digestivo diapo
Fisiología del aparato digestivo diapoFisiología del aparato digestivo diapo
Fisiología del aparato digestivo diaposandra velasco
 
99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)
99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)
99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)Đức Phí
 

Viewers also liked (8)

síntesis curricular personalizada y con sus respectivos soportes
síntesis curricular personalizada y con sus respectivos soportessíntesis curricular personalizada y con sus respectivos soportes
síntesis curricular personalizada y con sus respectivos soportes
 
Thomas CV
Thomas CVThomas CV
Thomas CV
 
Correlation of mandibular symphysis morphology and dimensions with
Correlation of mandibular symphysis morphology and dimensions withCorrelation of mandibular symphysis morphology and dimensions with
Correlation of mandibular symphysis morphology and dimensions with
 
Os porquês do português
Os porquês do portuguêsOs porquês do português
Os porquês do português
 
Healthcare Best Practices in Data Warehousing & Analytics
Healthcare Best Practices in Data Warehousing & AnalyticsHealthcare Best Practices in Data Warehousing & Analytics
Healthcare Best Practices in Data Warehousing & Analytics
 
FD-20151119-00028001 (1)
FD-20151119-00028001 (1)FD-20151119-00028001 (1)
FD-20151119-00028001 (1)
 
Fisiología del aparato digestivo diapo
Fisiología del aparato digestivo diapoFisiología del aparato digestivo diapo
Fisiología del aparato digestivo diapo
 
99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)
99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)
99981143 bai-tap-lon-co-hoc-ket-cau-9848 (1)
 

Similar to DB2 Sistemas Bancos Dados

ibmdb2-170817005317.pdf
ibmdb2-170817005317.pdfibmdb2-170817005317.pdf
ibmdb2-170817005317.pdfNatliaGomes72
 
Sistemas Operativos Servidores
Sistemas Operativos ServidoresSistemas Operativos Servidores
Sistemas Operativos ServidoresAlexandre Maia
 
Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015
Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015
Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015Armando Alaminos Bouza
 
Windowsserver2008r2 140928162051-phpapp02
Windowsserver2008r2 140928162051-phpapp02Windowsserver2008r2 140928162051-phpapp02
Windowsserver2008r2 140928162051-phpapp02Juliana Borges
 
Apresentação IDMS DC / DB COMPONENTS RESOURCES
Apresentação IDMS DC / DB COMPONENTS RESOURCESApresentação IDMS DC / DB COMPONENTS RESOURCES
Apresentação IDMS DC / DB COMPONENTS RESOURCESSergioBernardes11
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Renato Groff
 
Documentação CakePHP - Português Br
Documentação CakePHP -  Português BrDocumentação CakePHP -  Português Br
Documentação CakePHP - Português BrLuiz Ladeira
 
Enterprise services com .net
Enterprise services com .netEnterprise services com .net
Enterprise services com .netFernando Palma
 
Guia de introdução do MAXQDA na pesquisa qualitativa
Guia de introdução do MAXQDA na pesquisa qualitativaGuia de introdução do MAXQDA na pesquisa qualitativa
Guia de introdução do MAXQDA na pesquisa qualitativalucmelo
 
Curso completo-de-fix-32
Curso completo-de-fix-32Curso completo-de-fix-32
Curso completo-de-fix-32Mário Bassoli
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Configurando uma rede local com acesso internet
Configurando uma rede local com acesso  internetConfigurando uma rede local com acesso  internet
Configurando uma rede local com acesso internetTiago
 
Configurando rede local
Configurando rede localConfigurando rede local
Configurando rede localFelipe Pereira
 
Sistema Operativo Windows 95 vs Edubuntu
Sistema Operativo Windows 95 vs EdubuntuSistema Operativo Windows 95 vs Edubuntu
Sistema Operativo Windows 95 vs Edubuntumateus antonio
 

Similar to DB2 Sistemas Bancos Dados (20)

ibmdb2-170817005317.pdf
ibmdb2-170817005317.pdfibmdb2-170817005317.pdf
ibmdb2-170817005317.pdf
 
IBM DB2
IBM DB2IBM DB2
IBM DB2
 
Apostila oracle
Apostila oracleApostila oracle
Apostila oracle
 
Sistemas Operativos Servidores
Sistemas Operativos ServidoresSistemas Operativos Servidores
Sistemas Operativos Servidores
 
4081 my sql
4081 my sql4081 my sql
4081 my sql
 
Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015
Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015
Curso CAT3D 2015 - Resumo das noviades entre 2014 e 2015
 
TechEd_OFC302
TechEd_OFC302TechEd_OFC302
TechEd_OFC302
 
Windowsserver2008r2 140928162051-phpapp02
Windowsserver2008r2 140928162051-phpapp02Windowsserver2008r2 140928162051-phpapp02
Windowsserver2008r2 140928162051-phpapp02
 
Apresentação IDMS DC / DB COMPONENTS RESOURCES
Apresentação IDMS DC / DB COMPONENTS RESOURCESApresentação IDMS DC / DB COMPONENTS RESOURCES
Apresentação IDMS DC / DB COMPONENTS RESOURCES
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
Documentação CakePHP - Português Br
Documentação CakePHP -  Português BrDocumentação CakePHP -  Português Br
Documentação CakePHP - Português Br
 
Enterprise services com .net
Enterprise services com .netEnterprise services com .net
Enterprise services com .net
 
Guia de introdução do MAXQDA na pesquisa qualitativa
Guia de introdução do MAXQDA na pesquisa qualitativaGuia de introdução do MAXQDA na pesquisa qualitativa
Guia de introdução do MAXQDA na pesquisa qualitativa
 
Curso completo-de-fix-32
Curso completo-de-fix-32Curso completo-de-fix-32
Curso completo-de-fix-32
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Configurando uma rede local com acesso internet
Configurando uma rede local com acesso  internetConfigurando uma rede local com acesso  internet
Configurando uma rede local com acesso internet
 
Configurando rede local
Configurando rede localConfigurando rede local
Configurando rede local
 
Guia Matlab
Guia MatlabGuia Matlab
Guia Matlab
 
Sistema Operativo Windows 95 vs Edubuntu
Sistema Operativo Windows 95 vs EdubuntuSistema Operativo Windows 95 vs Edubuntu
Sistema Operativo Windows 95 vs Edubuntu
 
Oracleplsql
OracleplsqlOracleplsql
Oracleplsql
 

More from Bruno Dadalt Zambiazi

Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...Bruno Dadalt Zambiazi
 
Avalição Heurística de aplicativos Desktop e Web
Avalição Heurística de aplicativos Desktop e WebAvalição Heurística de aplicativos Desktop e Web
Avalição Heurística de aplicativos Desktop e WebBruno Dadalt Zambiazi
 
[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.comBruno Dadalt Zambiazi
 
[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.comBruno Dadalt Zambiazi
 

More from Bruno Dadalt Zambiazi (6)

Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
Análise de ferramentas para gestão de regras de negócio em sistemas de inform...
 
Hadoop
HadoopHadoop
Hadoop
 
Hibernate
HibernateHibernate
Hibernate
 
Avalição Heurística de aplicativos Desktop e Web
Avalição Heurística de aplicativos Desktop e WebAvalição Heurística de aplicativos Desktop e Web
Avalição Heurística de aplicativos Desktop e Web
 
[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com
 
[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com[Engenharia de Software] Marquivos.com
[Engenharia de Software] Marquivos.com
 

DB2 Sistemas Bancos Dados

  • 1. Trabalho de Sistemas de Bancos de Dados Centro Universitário UNIVATES DB2 Express-C 9.5 Bruno Dadalt Zambiazi Lajeado, 10 de julho de 2010.
  • 2. Sumário Sumário............................................................................................................................. 2 Introdução......................................................................................................................... 3 DB2................................................................................................................................... 4 DB2 Express-C 9.5 ....................................................................................................... 4 Controle e Recuperação de Transações ............................................................................ 5 Teste 1 .......................................................................................................................... 5 Teste 2 .......................................................................................................................... 5 Teste 3 .......................................................................................................................... 6 Controle de Concorrência................................................................................................. 6 Níveis de Isolamento .................................................................................................... 6 → Uncommited Read ............................................................................................ 6 → Cursor Stability................................................................................................. 7 → Read Stability ................................................................................................... 7 → Repeatable Read ............................................................................................... 7 Bloqueio ....................................................................................................................... 8 → Shared Locks .................................................................................................... 9 → Exclusive Locks................................................................................................ 9 Testes ............................................................................................................................ 9 Caso 1 ....................................................................................................................... 9 Caso 2 ....................................................................................................................... 9 Processamento e Otimização de Consultas .................................................................... 10 Consulta 1 ................................................................................................................... 10 Consulta 2 ................................................................................................................... 12 Consulta 3 ................................................................................................................... 14 Consulta 4 ................................................................................................................... 14 Consulta 5 ................................................................................................................... 15 Consulta 6 ................................................................................................................... 16 Replicação de Dados ...................................................................................................... 17 Bidirecional com um Mestre ...................................................................................... 18 Bidirecional sem um Mestre....................................................................................... 18 Suporte e Recursos a XML............................................................................................. 19 XML – Enabled .......................................................................................................... 19 → Modelo Clob/Varchar ..................................................................................... 20 → Modelo Shredding .......................................................................................... 20 PureXML.................................................................................................................... 20 Exemplos .................................................................................................................... 21 Conclusões...................................................................................................................... 23 2
  • 3. Introdução O presente documento visa apresentar uma visão geral acerca do Sistema Gerenciador de Bancos de Dados DB2, além dos resultados obtidos em todas as etapas de testes propostas pelo trabalho solicitado. Os testes envolvem os seguintes conceitos: controle de transações, controle de concorrência, otimização e processamento de consultas, replicação de dados e suporte a XML. Para o desenvolvimento do trabalho, foi utilizada a versão gratuita mais recente do DB2, a Express-C 9.5. Todos os testes que envolviam operações de inserção/alteração/exclusão de registros, foram feitos através de programas Java que se conectavam ao banco de dados através de uma conexão JDBC. Todos os relatórios e arquivos de log contêm o prefixo [Anexo] e foram anexados ao documento PDF através da ferramenta Foxit Reader. Caso o leitor de PDF com o qual esteja visualizando este documento não permita tal funcionalidade, o software pode ser baixado no seguinte endereço: http://www.foxitsoftware.com/downloads/. 3
  • 4. DB2 Em 1983, a IBM, International Business Machine, anunciou o lançamento do Sistema Gerenciador de Bancos de Dados DB2. Inicialmente projetado para rodar apenas nos mainframes da própria IBM, o projeto começou no ano de 1978 e foi nomeado de System R, nome que permaneceu até a data do lançamento oficial. No início da década de 1990, a IBM anunciou o lançamento de versões do DB2 para outras plataformas de servidores, como UNIX e Windows. Atualmente, o DB2 suporta a instalação, também, em ambientes Linux e em PDA’s. É considerado um dos SGBD’s mais poderosos do mercado, sendo recomendado para aplicações que necessitam de grande quantidade de armazenamento de dados e alto desempenho em consultas. Duas características interessantes do DB2 são o suporte nativo a XML e a possibilidade de criação de stored procedures em diversas linguagens de programação, tais quais SQL PL, C/C++, Java, COBOL, entre outras. A IBM oferece quatro diferentes edições para o DB2: Express-C, Express Edition, Workgroup Edition e Enterprise Edition. Enquanto as três últimas são pagas, a primeira é livre e foi utilizada para o desenvolvimento deste trabalho. A imagem a seguir dá uma ideia da diferença de funcionalidades encontradas nas diferentes edições do DB2: DB2 Express-C 9.5 Em 2006, após o anúncio do lançamento das edições gratuitas dos SGBD’s da Oracle e da Microsoft, seus maiores concorrentes, a IBM resolveu adotar a mesma 4
  • 5. estratégia e lançar uma edição gratuita do seu banco de dados, o qual ganhou o nome de DB2 Express-C. Utilizando a mesma funcionalidade principal e o mesmo código-fonte das edições pagas, o DB2 Express-C pode ser utilizado em sistemas de 32 ou 64 bits e em sistemas operacionais Linux, Solaris e Windows. Pode ser utilizado em servidores que contenham, no máximo, 2 processadores e 2GB de memória RAM . Não possui limites quanto à utilização em relação ao tamanho da base de dados, número de bancos de dados ou número de usuários/conexões. Controle e Recuperação de Transações Neste capítulo, não será explicada nenhuma teoria. Haverá apenas a apresentação dos testes realizados conforme solicitado. Teste 1 Descrição: Executar uma rotina e, durante a mesma, parar o servidor. Iniciar novamente o servidor, verificando se a transação funcionou corretamente; Método: execução de uma rotina responsável pela inserção de 425 registros na tabela retiradas; Mensagem: Erro fatal: [jcc][t4][2055][11259][4.8.87] O gerenciador de banco de dados não está apto a aceitar novos pedidos, todos os pedidos em progresso foram terminados, ou este pedido específico foi terminado devido a condições de erro inesperadas detectadas no sistema de destino. ERRORCODE=-4499, SQLSTATE=58009; Log: [Anexo] 1 – 7.1; Número de registros na tabela antes de parar o servidor: 0 (zero); Número de registros na tabela após parar o servidor: 0 (zero); Conclusão: passou no teste, pois nenhum registro foi inserido ao ocorrer um erro durante a transação. Teste 2 Descrição: Executar duas rotinas de forma simultânea e, quando uma delas indicar que terminou, parar o servidor. Iniciar novamente o servidor e verificar se a transação que terminou teve os dados efetivados e se a outra teve as atualizações desfeitas; Método: execução de uma rotina responsável pela inserção de 25 registros na tabela exemplares, e outra pela inserção de 440 registros na tabela retiradas; Mensagem: Erro fatal: [jcc][t4][2055][11259][4.8.87] O gerenciador de banco de dados não está apto a aceitar novos pedidos, todos os pedidos em progresso foram 5
  • 6. terminados, ou este pedido específico foi terminado devido a condições de erro inesperadas detectadas no sistema de destino. ERRORCODE=-4499, SQLSTATE=58009; Log: [Anexo] 1 – 7.2; Número de registros na tabela exemplares antes de parar o servidor: 500; Número de registros na tabela retiradas antes de parar o servidor: 0 (zero); Número de registros na tabela exemplares após de parar o servidor: 525; Número de registros na tabela retiradas após de parar o servidor: 0 (zero); Conclusão: passou no teste, pois a transação que estava aberta no momento em que o servidor parou, não teve seus dados salvos. Teste 3 Descrição: Executar uma rotina e, antes do término, finalizá-la. Verificar se as atualizações aparecem na base de dados. Finalizar o servidor ou matar o processo da conexão para verificar se os dados inseridos aparecem no banco; Método: execução de um rotina responsável pela inserção de 400 registros na tabela retiradas, realizando o seu cancelamento através da linha de comando; Mensagem: nenhuma, pois a rotina foi cancelada pela linha de comando; Log: [Anexo] 1 – 7.3 (o arquivo ficou vazio pois a rotina foi cancelada antes de gravar os dados, que é a última parte do código da rotina); Número de registros na tabela antes de parar o servidor: 0 (zero); Número de registros na tabela após parar o servidor: 0 (zero); Conclusão: passou no teste, pois nenhum registro foi inserido ao ocorrer um erro durante a transação. Controle de Concorrência Pode-se definir a concorrência como o fato de diversas aplicações acessarem o mesmo dado simultaneamente. Este acesso, no entanto, deve ser coordenado de forma correta para que seja a atualização das informações seja transparente aos usuários. No SGBD DB2, há quatro níveis de isolamento e dois níveis de bloqueio permitidos para que o controle de concorrência ocorra de forma adequada. Níveis de Isolamento → Uncommited Read Uncommited Read, Leitura de Dados não Finalizado, é o menor nível de isolamento e, consequentemente, oferece o maior nível de concorrência. Não ocorrem bloqueios de linha quando são executadas operações de leitura, exceto quando existem operações de 6
  • 7. DROP ou ALTER TABLE. As operações de UPDATE bloqueiam a linha até que a transação termine. Problemas que podem ocorrer: Leitura de dados não finalizados; Leitura de dados não repetidos; Leitura fantasma. Problemas que são evitados: Perda na atualização. → Cursor Stability Cursor Stability, Estabilidade do Cursor, é o nível de isolamento padrão do DB2 e fornece o menor nível de bloqueio. Em operações de leitura, bloqueia a linha corrente do cursor até que a mesma seja capturada (fetched); se for para atualiações, o bloqueio das linhas é feito até o término da transação. Problemas que podem ocorrer: Leitura de dados não repetidos; Leitura fantasma. Problemas que são evitados: Perda na atualização; Leitura de dados não finalizados. → Read Stability Read Stability, Estabilidade de Leitura, bloqueia todas as linhas que fazem parte da operação solicitada, por qualquer cursor, até que a transação termine. Exemplo: numa consulta que retorna 100 linhas de determinada tabela, sendo que a mesma possui 1000, todas as 100 ficam bloqueadas até o término da operação. Problemas que podem ocorrer: Leitura fantasma. Problemas que são evitados: Perda na atualização; Leitura de dados não finalizados; Leitura de dados não repetidos. → Repeatable Read Repeatable Read, Leitura Repetida, é o maior nível de isolamento pois provê o maior grau de bloqueio e o menor nível de concorrência. O bloqueio é realizado em todas as linhas processadas, ou seja, mesmo as linhas que não fazem parte do resultado final são bloqueadas. Dessa forma, nenhuma transação poderá fazer algo com os dados até que a requisição anterior termine. Problemas que podem ocorrer: Nenhum. 7
  • 8. Problemas que são evitados: Perda na atualização; Leitura de dados não finalizados; Leitura de dados não repetidos; Leitura fantasma. O nível de isolamento configurado como padrão no DB2 é o Cursor Stability. Para modificá-lo, há três possibilidades: sessão, conexão ou instrução. A configuração à nível de instrução é bastante simples, bastando adicionar a cláusula WITH XX, onde XX pode ser UR, CS, RS, RR (as iniciais dos nomes), ao final de uma instrução SQL normal. Abaixo, uma imagem que exemplifica a diferença entre os quatro níveis de bloqueio do DB2: Bloqueio O conceito de bloqueio é relacionado com o de concorrência, pois o objetivo dele – o bloqueio – é parar temporariamente outras operações até que a primeira operação termine. Quanto mais bloqueios houver, menor será a concorrência, enquanto que com menos bloqueios a concorrência será maior. Os bloqueios ocorrem de forma automática, de acordo com a necessidade de garantir a segurança da transação e sempre há o desbloqueio ao término da mesma. Podem acontecer à nível de tabela ou apenas de linhas de tabelas. Existem dois tipos de bloqueio: 8
  • 9. → Shared Locks Os Shared Locks, ou Bloqueios Divididos, acontecem quando uma transação está lendo os dados de uma tabela e impede que outras transações realizem operações de alteração nas mesmas linhas. → Exclusive Locks Os Exclusive Locks, ou Bloqueios Exclusivos, acontecem quando uma transação quer realizar alterações (inserção, exclusão, alteração) em uma linha e impede que outras transações façam a leitura destes dados. Testes Não foram executados testes com diferentes níveis de isolamento e/ou bloqueio. Todos os testes realizados levaram em conta apenas as configurações default do SGBD DB2. Caso 1 Descrição: Executar duas rotinas simultâneas que alteram dados na tabela retiradas. A primeira rotina deve efetuar consultas por períodos, ou seja, de 01 a 02 de março, depois de 03 a 04 do mesmo mês e assim por diante. Após a consulta, os dados dos registros devem ter a data alterada, adicionando um dia a ela. Devem ser executadas diversas consultas em sequência durante um certo tempo. Já a segunda rotina deve efetuar consultas por período, primeiro para o usuário 1, depois para o 2 e assim por diante. Após a consulta, os dados dos registros devem ter a data alterada, subtraindo um dia a ela. Em ambas as rotinas, cada consulta e alteração deve ser considerada uma transação; Método: a primeira rotina buscou as retiradas do mês 03/2010, de dois em dois dias, adicionando um dia à data de retirada e atualizando o registro; a segunda rotina buscou as retiradas de 20 usuários sorteados, subtraindo um dia à data de cada retirada; Log: [Anexo] 2 – 2.1.1 - Período e [Anexo] 2 – 2.1.2 - Usuário; Conclusão: baseando-se na retirada 29780, registro encontrado nos dois arquivos de log, é possível concluir que não houve problemas de concorrência. No primeiro log (de consultas por período), as datas antiga e nova dessa retirada são 01/03 e 02/03, respectivamente, havendo o update no horário 09:48:32:609. Já no segundo log (de consultas por usuário), a mesma retirada apareceu com as datas antiga e nova, respectivamente, como 02/03 e 01/03, com a atualização no horário 09:48:33:484. Caso 2 Descrição: três rotinas, uma lendo os exemplares de livros, uma alterando a data de compra dos exemplares e outra inserindo novos exemplares. A rotina que lê os valores deve executar repetidamente uma instrução SQL que conta os exemplares por livro; 9
  • 10. Método: a primeira rotina realizou a contagem do número de exemplares para cada produto por 500 vezes seguidas; a segunda rotina adicionou um dia à data de aquisição de cada exemplar dos livros; a terceira rotina inseriu um exemplar para cada livro, colocando como data 30 dias após a maior data de aquisição de um exemplar daquele mesmo livro. Obs.: os produtos utilizados para as três rotinas foram: 10507, 11136, 9352, 9566, 11132, 8553, 8739, 9527, 10956, 10076, 9063, 9013, 8994, 10637, 9464, 8578, 10089, 10217, 11017, 10032, 8887, 11030, 9707, 9005, 10195, 10134, 9645, 8620, 8579, 9197, 9309, 10371, 9745, 9241, 10388, 10392, 8747, 9830, 9732, 10855, 8919, 8569, 10620, 9288, 11125, 11027, 9690, 10397, 9365, 9218, 9706, 11087, 9929, 9373, 9943, 10490, 11062, 10506, 9378, 9305, 9842, 8615, 9554, 9718, 9825, 9215, 10839, 10052, 8713, 9737, 9162, 8907, 9787, 9861, 11081, 10500, 9631, 9844, 9219, 9030, 10753, 9656, 9642, 9573, 9441, 9673, 8688, 10309, 9096, 9069, 9754, 9488, 10373, 10636, 9607, 9439, 9826, 9945, 9996, 8824, 11094, 9927, 10591, 11012, 9523, 9592, 9308, 8980, 10306, 10060, 10919, 10805, 8780, 9363, 10549, 11121, 10631, 9797, 10078, 9126, 9178, 9188, 10285, 9449, 8716; Log: [Anexo] 2 – 2.2.1 – Contagem, [Anexo] 2 – 2.2.2 – Atualização e [Anexo] 2 – 2.2.3 - Inclusão; Conclusão: baseando-se na contagem de exemplares do livro 8553, pode-se concluir que não houve problema de concorrência. Segundo o primeiro arquivo de log (contagem de exemplares), havia 5 exemplares desse livro até o horário 15:04:40:375, mas, a partir do horário 15.04.40.390, passou a haver 6 exemplares pois, alguns milissegundos antes, de acordo com o terceiro arquivo de log (inclusões de exemplares), houve a inserção de um novo exemplar para o livro. Processamento e Otimização de Consultas Neste capítulo, não será explicada nenhuma teoria. Haverá apenas a apresentação dos testes realizados conforme solicitado. Todos os tempos de execução apresentados foram “capturados” pelo programa Centro de Controle, no qual foram executadas as consultas. Todos os tempos são a média de execução das consultas, todas realizadas três vezes. Consulta 1 10
  • 11. [Figura 1] Consulta 1 - consulta original Tempos de execução: Consulta original: 0:00:16:98 Consulta sem a cláusula ORDER BY: 0:00:07:22 Consulta original com índices: 0:00:14:19 Índices criados: reti.id_livro reti.nr_sequencia reti.dt_retirada Planos de execução: [Figura 2] Consulta 1 - plano de execução da consulta original 11
  • 12. [Figura 3] Consulta 1 - plano de execução da consulta sem a clásula ORDER BY [Figura 4] Consulta 1 - plano de execução da consulta original com os índices Consulta 2 [Figura 5] Consulta 2 - consulta Tempos de execução: 12
  • 13. Consulta: 0:00:05:81 Consulta com índices: 0:00:01:23 Índices criados: reti.id_usuario reti.id_atendente usua.id_cidade aten.id_cidade Planos de execução: [Figura 6] Consulta 2 – plano de execução da consulta original [Figura 7] Consulta 2 - plano de execução da consulta com índices 13
  • 14. Consulta 3 [Figura 8] Consulta 3 - consulta original (à esquerda) e alternativa (à direita) Tempos de execução: Consulta original: 0:00:48:06 Consulta alternativa: 0:00:21:88 Consulta original com índices: 0:00:11:91 Índices criados: livr.nm_livro Planos de execução: [Figura 9] Consulta 3 – plano de execução da consulta original Consulta 4 [Figura 10] Consulta 4 - consulta 14
  • 15. Tempos de execução: Consulta original: 0:00:12:32 Consulta sem a condição sobre a data: 0:00:11:94 Planos de execução: [Figura 11] Consulta 4 - plano de execução da consulta original Consulta 5 [Figura 12] Consulta 5 - consulta original (à esquerda) e utilizando junções (à direita) Tempos de execução: Consulta original: 0:00:10:78 Consulta utilizando junções: 0:00:09:36 Planos de execução (os planos das duas consultas ficaram iguais): 15
  • 16. [Figura 13] Consulta 5 - plano de execução das consultas Consulta 6 [Figura 14] Consulta 6 - consulta original (à esquerda) e alternativa (à direita) Tempos de execução: Consulta original: 0:00:10:39 Consulta utilizando junções: 0:00:06:57 Planos de execução: 16
  • 17. [Figura 15] Consulta 6 - plano de execução da consulta original Replicação de Dados Este tópico foi o que gerou a maior dificuldade durante o trabalho, em virtude do DB2 não dispor de nenhuma ferramenta gratuita para replicação de dados na edição Express C. No entanto, nas outras edições, a replicação de dados é sempre feita através da captura das informações em determinado servidor e posterior aplicação das alterações nos outros servidores de bancos de dados. Toda a estrutura de replicação do DB2 baseia-se em dois softwares: Capture e Apply. O primeiro software, Capture, deve estar presente nos servidores que sofrerão operações de alteração/exclusão/inserção de dados, por ser o responsável pela captura das informações que estarão sendo manipuladas nele - servidor. Já o segundo, Apply, deve estar presente nos servidores que sofrerão as atualizações pelo processo de replicação, pois é o responsável por aplicar as alterações. Além disso, o DB2 trabalha com as nomenclaturas Source e Target para designar os servidores considerados mestre – Source – e escravos – Target. Existem dois modelos de replicação: com um mestre e sem um mestre. 17
  • 18. Bidirecional com um Mestre É equivalente ao modelo tradicionalmente conhecido como Master-Slave, no qual o servidor Mestre é o único a receber as alterações e fica responsável por repassá- las aos servidores escravos. No modelo do DB2, o servidor Source – Mestre – precisa conter o software Capture rodando para capturar as alterações sofridas. A partir daí, a replicação é aplicada nos servidores Target – Escravo – através do software Apply que precisa haver nestes. A figura abaixo exemplifica o modelo: Bidirecional sem um Mestre É equivalente ao modelo tradicionalmente conhecido como Multi-Master, no qual qualquer um dos servidores pode receber atualizações e fica responsável por repassar as atualizações aos outros servidores. Dessa forma, todos passam a ser mestres e escravos ao mesmo tempo. No modelo do DB2, todos os servidores precisam conter tanto o software Capture quando o Apply rodando para que consigam capturar as alterações e aplicá-las em si quando necessário. O modelo Biderecional sem um Mestre do DB2 funciona apenas de forma assíncrona. A figura abaixo exemplifica o modelo: 18
  • 19. Suporte e Recursos a XML O DB2 é, notadamente, um dos SGBD’s que oferece melhor suporte e maior nível de recursos a XML. Algumas características extraídas diretamente da documentação oficial: Técnicas exclusivas para armazenamento e gerenciamento eficiente de estruturas hierárquicas de documentos XML; Técnicas exclusivas de indexação para acelerar pesquisas em documentos XML; Suporte total às linguagens XQuery e XPath; Suporte à validação de dados baseados em esquemas fornecidos por usuários. No DB2, existem dois tipos de bases de dados capazes de armazenar XML: XML-Enabled e XML Nativo. XML – Enabled Utiliza o modelo relacional como núcleo do modelo de armazenamento, o que torna necessário o armazenamento do XML em um campo grande (Modelo Clob/Varchar) ou requer uma espécie de mapeamento entre o modelo hierárquico do XML com o modelo de dados relacional tradicional (Modelo Shredding). 19
  • 20. → Modelo Clob/Varchar O documento XML é armazenado inteiramente dentro de um único campo de uma tabela relacional, sendo o campo geralmente do tipo Clob ou Varchar. Neste modelo, o documento acaba sendo inserido sem que seja feita uma análise sintática do seu conteúdo, o que torna esta opção não muito flexível no momento da recuperação e manipulação dos dados. → Modelo Shredding Também conhecido como Fragmentação, este modelo faz a análise do documento XML e fragmenta-o em pequenas partes que serão inseridas em diversas tabelas do banco de dados, sendo o documento “forçado” a se tornar um modelo relacional. Esse método também não possui muita flexibilidade devido à complexidade de serem realizadas alterações na estrutura hierárquica do documento XML, além das consultas se tornarem pesadas pela necessidade de utilizar diversas tabelas e junções para formar o resultado final. Abaixo, uma figura ilustrando o funcionamento dos dois modelos: PureXML As bases de dados que armazenam XML nativo, no DB2 conhecido como pureXML, utilizam o modelo de dados hierárquico para armazenar e processar XML internamente. A forma como o documento é armazenado é a mesma com que é processado, sem necessitar de uma conversão para o modelo relacional e nem exigindo que seja feita uma imagem do XML. Quando instruções XQuery e XPath são executadas, estas não precisam ser convertidas para SQL pois são processadas de forma nativa, diretamente no documento. Segundo a documentação oficial, o DB2 foi o 20
  • 21. primeiro banco de dados a incorporar o XML nativo a sua implementação, o que ocorreu na versão 9. A figura abaixo ilustra a diferença no armazenamento de um dado relacional e de um documento XML na mesma tabela de uma base de dados: O DB2 permite que o acesso aos dados para tabelas que possuem tanto dados relacionais quanto XML pode ser feito de quatro formas: Utilização de SQL para buscar dados relacionais; Utilização de SQL com extensões XML para acessar dados XML; Uso de XQuery para buscar dados XML; Uso de XQuery para acessar dados relacionais. Em virtude de tanta flexibilidade, o DB2 pode ser considerado tanto um banco de dados relacional de alto desempenho, quanto um repositório de documentos XML bastante poderoso. Exemplos A tabela abaixo ilustra as principais funções que podem ser utilizadas para a manipulação de dados XML através de SQL/X, a extensão XML para SQL: 21
  • 22. Alguns exemplos de utilização de SQL/X: 22
  • 23. Conclusões Mesmo o pouco tempo de trabalho com o banco de dados DB2 deixa claro que o ele é extremamente poderoso e caracterizado pelo alto desempenho na execução de consultas, mesmo as mais complexas. Fora isso, a enorme gama de ferramentas que o banco possui para administração dá a entender que ele não foi feito para aplicações de pequeno porte. Para utilizar o DB2 como SGBD, é necessário que a empresa possua um DBA específico para conseguir retirar o máximo do poder deste banco. É fácil perceber que ele se encaixa perfeitamente em ambientes de alta disponibilidade e que necessitam de uma ferramenta de armazenamento rápida, confiável, robusta e flexível. 23