DB2 Express-C 9.5 Sistemas de Bancos de Dados - Univates Bruno Dadalt Zambiazi
DB2 <ul><li>Gerenciador de bancos relacionais com suporte a XML; </li></ul><ul><li>Lançado em 1983 pela  IBM ; </li></ul><...
DB2 - Versões
Controle de Transações
Transações <ul><li>“ Executar uma rotina e, durante a mesma, parar o servidor. Iniciar novamente o servidor, verificando s...
Transações <ul><li>“ Executar duas rotinas de forma simultânea e, quando uma delas indicar que terminou, parar o servidor....
Controle de Concorrência
Concorrência – Níveis de Isolamento <ul><li>Uncommited Read  (Leitura de dados não finalizados) </li></ul><ul><ul><li>Meno...
Concorrência – Níveis de Isolamento <ul><li>Read Stability   (Estabilidade da leitura) </li></ul><ul><ul><li>Todas as linh...
Concorrência – Bloqueio <ul><li>Podem ocorrer à nível de tabela ou de linhas; </li></ul><ul><li>Existem dois tipos: </li><...
Concorrência – Níveis de Isolamento
Concorrência <ul><li>“ Executar duas rotinas simultâneas que alteram dados na tabela  retiradas , para verificar se uma tr...
Otimização de Consultas
Otimização de Consultas <ul><li>select  reti.id_retirada </li></ul><ul><li>,  usua.nm_usuario </li></ul><ul><li>,  aten.nm...
Plano – Sem Índices
Plano – Com Índices
Otimização de Consultas <ul><li>select  aten.id_atendente </li></ul><ul><li>,  aten.nm_atendente </li></ul><ul><li>,  coun...
Replicação de Dados
Replicação <ul><li>Bidirecional com um mestre </li></ul><ul><ul><li>Igual ao modelo Master-Slave; </li></ul></ul><ul><ul><...
Replicação – Master-Slave
Replicação <ul><li>Bidirecional sem um mestre </li></ul><ul><ul><li>Igual ao modelo Multi-Master; </li></ul></ul><ul><ul><...
Replicação – Multi-Master
Suporte/recursos XML
XML - Armazenamento <ul><li>XML – Enabled </li></ul><ul><ul><li>Possui como núcleo o modelo relacional; </li></ul></ul><ul...
XML - Armazenamento <ul><li>XML - Enabled </li></ul>
XML - Armazenamento <ul><li>XML Nativo (pureXML) </li></ul><ul><ul><li>Possui como núcleo o modelo de dados hierárquico; <...
XML - Exemplos <ul><li>CREATE TABLE clientes(  </li></ul><ul><li>id_cliente INT PRIMARY KEY NOT NULL </li></ul><ul><li>, n...
XML – Funções e Exemplos SELECT nm_livro FROM livros WHERE XMLEXISTS( ‘$autores/autor[nome=“Bruno”]’ ); SELECT XMLQUERY( ‘...
Upcoming SlideShare
Loading in...5
×

DB2 Express-C

1,691

Published on

Apresentação do trabalho da cadeira Sistemas de Bancos de Dados, do semestre 2010/A, da UNIVATES.

http://blog.brunozambiazi.com

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,691
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "DB2 Express-C"

  1. 1. DB2 Express-C 9.5 Sistemas de Bancos de Dados - Univates Bruno Dadalt Zambiazi
  2. 2. DB2 <ul><li>Gerenciador de bancos relacionais com suporte a XML; </li></ul><ul><li>Lançado em 1983 pela IBM ; </li></ul><ul><li>SGBD de grande porte e alto desempenho; </li></ul><ul><li>Stored Procedures podem ser escritas em diversas linguagens; </li></ul><ul><li>Versões para servidores Windows, Linux, Unix, Mainframes e PDA’s; </li></ul><ul><li>Versão gratuita: Express-C (2006). </li></ul>
  3. 3. DB2 - Versões
  4. 4. Controle de Transações
  5. 5. Transações <ul><li>“ Executar uma rotina e, durante a mesma, parar o servidor. Iniciar novamente o servidor, verificando se a transação funcionou corretamente.” </li></ul><ul><ul><li>Método : execução de um rotina responsável pela inserção de 425 registros na tabela retiradas ; </li></ul></ul><ul><ul><li>Mensagem : &quot;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&quot;; </li></ul></ul><ul><ul><li>Nº de registros na tabela antes de parar o servidor : 0 ; </li></ul></ul><ul><ul><li>Nº de registros na tabela após parar o servidor : 0 ; </li></ul></ul><ul><ul><li>Conclusão : passou no teste, pois nenhum registro foi inserido ao ocorrer algum problema durante a transação. </li></ul></ul>
  6. 6. Transações <ul><li>“ 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.” </li></ul><ul><ul><li>Método : execução de um rotina para inserção de 25 registros na tabela exemplares e outra pela pela inserção de 440 registros na tabela retiradas ; </li></ul></ul><ul><ul><li>Mensagem : &quot;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&quot;; </li></ul></ul><ul><ul><li>Nº de registros na tabela exemplares antes de parar o servidor : 500 ; </li></ul></ul><ul><ul><li>Nº de registros na tabela retiradas antes de parar o servidor : 0 ; </li></ul></ul><ul><ul><li>Nº de registros na tabela exemplares após parar o servidor : 525 ; </li></ul></ul><ul><ul><li>Nº de registros na tabela retiradas após parar o servidor : 0 ; </li></ul></ul><ul><ul><li>Conclusão : passou no teste, pois a transação que estava aberta no momento da interrupção do servidor não teve as suas atualizações efetivadas. </li></ul></ul>
  7. 7. Controle de Concorrência
  8. 8. Concorrência – Níveis de Isolamento <ul><li>Uncommited Read (Leitura de dados não finalizados) </li></ul><ul><ul><li>Menor nível de isolamento, maior nível de concorrência; </li></ul></ul><ul><ul><li>Não há bloqueios em operações de consultas; </li></ul></ul><ul><ul><li>Operações de atualizações ocorrem da mesma forma que o Cursor Stability; </li></ul></ul><ul><ul><li>Também conhecido como Dirty Read (Leitura Suja). </li></ul></ul><ul><li>Cursor Stability (Estabilidade do cursor) </li></ul><ul><ul><li>É o nível de isolamento padrão do DB2; </li></ul></ul><ul><ul><li>Oferece o menor nível de bloqueio; </li></ul></ul><ul><ul><li>Operações de consulta bloqueiam a linha até a captura; </li></ul></ul><ul><ul><li>Operações de atualização bloqueiam até o fim da transação. </li></ul></ul>
  9. 9. Concorrência – Níveis de Isolamento <ul><li>Read Stability (Estabilidade da leitura) </li></ul><ul><ul><li>Todas as linhas que fazem parte da operação são bloqueadas até o fim da transação; </li></ul></ul><ul><ul><li>Usa um grau moderado de bloqueio. </li></ul></ul><ul><li>Repeatable Read (Leitura repetida) </li></ul><ul><ul><li>Maior nível de isolamento, menor nível de concorrência; </li></ul></ul><ul><ul><li>O bloqueio é feito em qualquer linha, mesmo que esta não faça parte do resultado final; </li></ul></ul><ul><ul><li>Nada pode ser feito antes do término da primeira operação em processamento. </li></ul></ul>
  10. 10. Concorrência – Bloqueio <ul><li>Podem ocorrer à nível de tabela ou de linhas; </li></ul><ul><li>Existem dois tipos: </li></ul><ul><ul><li>Bloqueios Divididos (Share Locks) </li></ul></ul><ul><ul><ul><li>Acontecem quando uma aplicação/transação realiza a leitura de dados e impede que os mesmos sofram alterações por outras aplicações/transações. </li></ul></ul></ul><ul><ul><li>Bloqueios Exclusivos (Exclusive Locks) </li></ul></ul><ul><ul><ul><li>Acontecem quando uma aplicação/transação quer atualizar, inserir ou remover alguma linha. </li></ul></ul></ul>
  11. 11. Concorrência – Níveis de Isolamento
  12. 12. Concorrência <ul><li>“ Executar duas rotinas simultâneas que alteram dados na tabela retiradas , para verificar se uma transação interfere em outra.” </li></ul><ul><ul><li>Método : a primeira rotina consultou 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 consultou as retiradas de 20 usuários sorteados, subtraindo um dia à data da retirada; </li></ul></ul><ul><ul><li>Registro : retirada 29780 ; </li></ul></ul><ul><ul><li>Datas (antiga e nova) da retirada na primeira rotina : 01/03 e 02/03; </li></ul></ul><ul><ul><li>Horário da atualização : 09:48: 32:609 ; </li></ul></ul><ul><ul><li>Datas (antiga e nova) da retirada na segunda rotina : 02/03 e 01/03; </li></ul></ul><ul><ul><li>Horário da atualização : 09:48: 33:484 ; </li></ul></ul><ul><ul><li>Conclusão : passou no teste, visto que cada processo de consulta e atualização era uma nova transação. </li></ul></ul>
  13. 13. Otimização de Consultas
  14. 14. Otimização de Consultas <ul><li>select reti.id_retirada </li></ul><ul><li>, usua.nm_usuario </li></ul><ul><li>, aten.nm_atendente </li></ul><ul><li>, reti.id_livro </li></ul><ul><li>, cida.nm_cidade </li></ul><ul><li>from user.retiradas reti </li></ul><ul><li>, user.usuarios usua </li></ul><ul><li>, user.atendentes aten </li></ul><ul><li>, user.cidades cida </li></ul><ul><li>where ( reti.id_usuario = usua.id_usuario </li></ul><ul><li>and reti.id_atendente = aten.id_atendente </li></ul><ul><li>and usua.id_cidade = cida.id_cidade ) </li></ul><ul><li>and ( usua.id_cidade = aten.id_cidade </li></ul><ul><li>or usua.id_cidade = 1416 ) </li></ul><ul><li>Tempo decorrido : </li></ul><ul><ul><li>Sem índices: 0:00: 05:81 </li></ul></ul><ul><ul><li>Com índices: 0:00: 01:12 </li></ul></ul><ul><ul><li>Índices criados: </li></ul></ul><ul><ul><ul><li>reti.id_usuario </li></ul></ul></ul><ul><ul><ul><li>reti.id_atendente </li></ul></ul></ul><ul><ul><ul><li>usua.id_cidade </li></ul></ul></ul><ul><ul><ul><li>aten.id_cidade </li></ul></ul></ul>
  15. 15. Plano – Sem Índices
  16. 16. Plano – Com Índices
  17. 17. Otimização de Consultas <ul><li>select aten.id_atendente </li></ul><ul><li>, aten.nm_atendente </li></ul><ul><li>, count( reti.id_retirada ) </li></ul><ul><li>from user.atendentes aten </li></ul><ul><li>, user.retiradas reti </li></ul><ul><li>Where aten.id_atendente = reti.id_atendente </li></ul><ul><li>group by aten.id_atendente </li></ul><ul><li>, aten.nm_atendente </li></ul><ul><li>having count( reti.id_retirada ) </li></ul><ul><li>>= all( select count( reti2.id_retirada ) </li></ul><ul><li>from user.retiradas reti2 </li></ul><ul><li>group by reti2.id_atendente ) </li></ul><ul><li>Tempo decorrido : </li></ul><ul><ul><li>Original: 0:00: 10:39 </li></ul></ul><ul><ul><li>Alterada: 0:00: 06:57 </li></ul></ul>select aten.id_atendente , aten.nm_atendente , count( reti.id_retirada ) from user.atendentes aten , user.retiradas reti where aten.id_atendente = reti.id_atendente group by aten.id_atendente , aten.nm_atendente order by qt_atendimentos desc fetch first 1 rows only
  18. 18. Replicação de Dados
  19. 19. Replicação <ul><li>Bidirecional com um mestre </li></ul><ul><ul><li>Igual ao modelo Master-Slave; </li></ul></ul><ul><ul><li>Nomenclatura: Source e Target; </li></ul></ul><ul><ul><li>O source (mestre) precisa ter um Capture rodando para capturar as alterações; </li></ul></ul><ul><ul><li>Todos os targets (escravos) precisam de um Apply para aplicar as alterações; </li></ul></ul>
  20. 20. Replicação – Master-Slave
  21. 21. Replicação <ul><li>Bidirecional sem um mestre </li></ul><ul><ul><li>Igual ao modelo Multi-Master; </li></ul></ul><ul><ul><li>Nomenclatura: Source e Target; </li></ul></ul><ul><ul><li>Ambas as partes precisam ter um Capture rodando para capturar as alterações; </li></ul></ul><ul><ul><li>Ambas as partes precisam ter um Apply para aplicar as alterações nos outros servidores; </li></ul></ul><ul><ul><li>Ocorre de forma assíncrona. </li></ul></ul>
  22. 22. Replicação – Multi-Master
  23. 23. Suporte/recursos XML
  24. 24. XML - Armazenamento <ul><li>XML – Enabled </li></ul><ul><ul><li>Possui como núcleo o modelo relacional; </li></ul></ul><ul><ul><li>Modelo CLOB/Varchar : </li></ul></ul><ul><ul><ul><li>Armazena uma String não analisada sintaticamente; </li></ul></ul></ul><ul><ul><ul><li>Na consulta, é necessário analisar a String para trabalhar com os dados; </li></ul></ul></ul><ul><ul><li>Modelo Shredding (Fragmentação) : </li></ul></ul><ul><ul><ul><li>Documento é dividido em pequenas partes que serão armazenadas em tabelas; </li></ul></ul></ul><ul><ul><ul><li>Mudanças no XML não são aplicadas facilmente. </li></ul></ul></ul>
  25. 25. XML - Armazenamento <ul><li>XML - Enabled </li></ul>
  26. 26. XML - Armazenamento <ul><li>XML Nativo (pureXML) </li></ul><ul><ul><li>Possui como núcleo o modelo de dados hierárquico; </li></ul></ul><ul><ul><li>Acesso aos dados: SQL , SQL/X , XQuery , XPath ; </li></ul></ul><ul><ul><li>Instruções são processadas nativamente, ao invés de serem convertidas para SQL; </li></ul></ul><ul><ul><li>DB2 é o único SGBD que dá suporte ao XML Nativo. </li></ul></ul>
  27. 27. XML - Exemplos <ul><li>CREATE TABLE clientes( </li></ul><ul><li>id_cliente INT PRIMARY KEY NOT NULL </li></ul><ul><li>, nm_cliente VARCHAR( 100 ) NOT NULL </li></ul><ul><li>, xml_contatos XML </li></ul><ul><li>); </li></ul>INSERT INTO clientes( id_cliente, nm_cliente, xml_contatos ) VALUES( 1, ‘Bruno’, ‘<endereco>Rua Sem fim, nº 666</endereco>’ );
  28. 28. XML – Funções e Exemplos SELECT nm_livro FROM livros WHERE XMLEXISTS( ‘$autores/autor[nome=“Bruno”]’ ); SELECT XMLQUERY( ‘$autores/autor’ ) FROM livros WHERE nm_livro = ‘Sistemas de Bancos de Dados’; SELECT nm_usuario, XMLQUERY( ‘for $x in $contatos/emails return <p>{$x}</p>’ ) AS emails FROM usuarios WHERE nm_usuario LIKE ‘Bruno%’; SELECT XMLELEMENT( NAME “id_usuario”, id ), XMLELEMENT( NAME “nm_usuario”, nome ) FROM usuarios;

×