Você está na página 1de 56

UNISUL - UNIVERSIDADE DO SUL DE SANTA CATARINA CURSO DE CINCIAS DA COMPUTAO

1- NOES FUNDAMENTAIS 1.1. Transaes Transao uma unidade atmica de trabalho que atua sobre um banco de dados. Uma transao pode ser constituda por uma ou mais operaes de acesso base de dados. Todas as operaes devem ser bem-sucedidas, caso contrrio os efeitos da transao devem ser revertidos. Uma transao bem-sucedida termina quando um comando COMMIT executado. O comando COMMIT finaliza e efetiva todas as alteraes feitas na base de dados durante a transao.

1.2. ROLLBACK Se uma transao aborta antes de o comando COMMIT ser executado, a transao deve ser desfeita, isto , todas as mudanas feitas durante a transao devem ser desconsideradas. O processo de recuperao automtica que permite desfazer as alteraes feitas contra a base chamado ROLLBACK. O ROLLBACK retorna a situao dos objetos da base alterados na transao mesma situao em que se encontravam no incio da transao. O ROLLBACK reverte os efeitos de uma transao como se ela nunca tivesse existido. 1.3. Locks Quando um dado acessado por uma transao, o perigo de interferncia de outras transaes acessarem o mesmo dado constante. O gerenciamento de LOCKS ajuda a prevenir isto. Locks so recursos de compartilhamento de dados, que permitem que o dado seja atualizado e pesquisados dentro de um ambiente multi-usurio de maneira segura e que lhes garante confiabilidade e integridade. Atravs dos locks possvel garantir que somente um usurio esteja atualizando o dado em um determinado momento, que vrios usurios possam pesquisar o mesmo dado ao mesmo tempo, etc. H, normalmente, independente da nomenclatura dada por fornecedores de SGBDs, dois nveis de locks importantes:

- locks exclusivos: ou XLOCKS, usados para garantir o uso de um determinado dado por um nico usurio. especialmente utilizado em casos de atualizaes. - locks compartilhados: ou SLOCKS, usados para permitir que mais de um usurio acesse o mesmo dado ao mesmo tempo. especialmente utilizado em casos de pesquisa em tela, por exemplo. Os SLOCKS garantem que um usurio possa consultar (e somente consultar) um dado se houver outros usurios acessando o mesmo dado para consulta. Quando um usurio adquire um nvel de lock sobre um dado, ele pode requisitar outro nvel ao SGBD. A este conceito damos o nome de promoo de nveis de LOCK. Imagine um usurio em nvel SLOCK sobre um registro presente na tela. Para alterar o registro, ser necessrio que adquira XLOCK, para depois poder alter-lo. Isto s ser possvel se mais nenhum usurio estiver atuando sobre o mesmo registro, seja em SLOCK ou XLOCK. Isto se explica de maneira muito simples: - se fosse possvel a qualquer usurio alterar valores de registros em uso por parte de outros usurios, a informao consultada nunca seria garantidamente segura, uma vez que a qualquer momento poderia ser alterada, inclusive no exato momento de um processamento, quando iniciaria com um valor e terminaria com outro valor, alterado por outro usurio. A tabela abaixo mostra as transies de nveis de LOCK possveis: Corrente Slock Xlock Slock OK OK Requisitado Xlock X X

A Tabela a seguir mostra a compatibilidade de Locks entre transaes : TX1 SLOCK XLOCK SLOCK OK OK X TX2 XLOCK OK X X

1.4 Promoo de Locks por Objeto A tabela abaixo mostra as transies de nveis de locks por objeto(tabela ou registro da base de dados) possveis:

Corrente Slock Registro OK OK Ok OK

Slock Registro Slock Tabela Xlock registro Xlock Tabela

Requisitado Slock Tabela X OK X OK

Xlock Registro X X OK OK

Xlock Tabela X X X OK

1.5 Gerenciadores de Banco de dados OLTP(On-line Transaction Processing) Os Gerenciadores de banco de dados OLTP ou transacionais permitem que os dados armazenados em um banco de dados permaneam disponveis 24 horas por dia. Estes Gerenciadores possuem arquitetura complexa e bastante sofisticada que garante a integridade transacional das operaes efetuadas contra a base de dados. Adotam a filosofia all-ornothing pela qual uma transao s efetivada contra a base ao se alcanar a instruo COMMIT. Este procedimento garante que processos longos de modificao do estado da base jamais sejam efetivados parcialmente. Da mesma forma, este gerenciadores permitem que seja feito bachup do seu contedo de maneira transparente para que est usando os dados armazenados, no sendo necessrio desativar o servidor de dados. 1.6 Log de Transaes O Log de transaes, embora possa ser encontrado tambm em SGBDs OLTP. Normalmente trata-se de um arquivo que registra todo o desenvolvimento de cada transao ocorrida ou em curso. Sua importncia est na capacitao de efetuao de rollcks e rollforwords, que possibilitam desfazer e refazer transaes. 1.7 Falhas Os bancos de dados esto sujeitos a diversas causas de falhas: - queda do fornecimento de energia; - falhas de hardware; - falhas ou sabotagem de operao; - etc. Os backups e sua administrao so os mecanismo determinante da reversibilidade dos efeitos e danos provocados por falhas. Da mesma forma, a capacitao para desfazer transaes incompletas, e refazer transaes completas de fundamental importncia neste sentido.

Aps ocorrida uma falha, j na reinicializao do banco de dados, o SGBD deve possuir ferramentas que possibilitem verificar que um encerramento anormal ocorreu e determinar as providncias a se tomar: - se o backup deve ser restaurado ou no; - se ser necessrio rolar log de transaes; - Quantas e quais transaes sero desfeitas 1.8 ROLLFORWORD Quando da reinicializao de um banco de dados aps uma falha, algumas transaes podem ter sido perdidas na memria, embora um comando Commit j tenha sido emitido. Isto quer dizer que no log de transaes a transao considerada completa. No entanto, os efeitos no foram registrados em definitivo na base de dados. Isto quer dizer que esta transao deve ser completada novamente. Usando o log de transaes o SGDB "sabe" que partes da transao ainda no foram gravados em definitivo. As etapas que ainda faltam ser gravadas so ento executadas at ser encontrado o comando COMMIT gravado no log de transaes. A este processo chamamos refazer a transao ou rollfoward. Diferente do rollback, que pode ser executado por uma aplicao ou no processo de reinicializao do banco de dados, o rollfoward pode ser apenas executado quando do processo de reinicializao do banco de dados. 1.9 SYNCPOINT Embora algumas SGDBs permitam que cada transao completada seja imediatamente gravada na base, este no sem dvida o melhor meio de se efetivar transaes, devido sobrecarga de gravao contra o banco, o que ocasiona uma queda de performance considervel. Cada operao que constitui uma transao pode ser mantida em memria (gerenciada por paginadores, cache managers, etc) e registrada contra o log de transaes, sendo gravada contra a base em intervalos de tempo pr-determinados. Quando terminado o intervalo, todos os efeitos da alteraes mantidos em memria so gravados efetivamente contra a base, sem prejuzo do gerenciamento de lock em curso. A este "alarme" que permite disparar a efetivaes contra a base chamamos syncpoint. Os syncpoints sincronizam log de transaes, base de dados e memria. 2. ARQUITETURAS DE DISTRIBUIO DE DADOS H, na teoria, 2 arquiteturas bsica de Bancos de Dados no que se refere distribuio dos dados: -Centralizados: os dados encontram-se sob um nico gerenciamento, possivelmente no mesmo equipamento, podendo ser acessados por equipamentos localizados distncia;

-Distribudos: Os dados encontram-se sob gerenciamento distribudo, possivelmente em equipamentos separados por qualquer distncia, ligados por meios de comunicao de dados. Cada unidade autnoma no que se refere a seus prprios dados, podendo acess-los independentemente de haver conexo ativa com as demais. Isto , por exemplo, o caso de uma agncia bancria que armazena os dados de seus clientes: para acess-los localmente ela no depende ( de fato, no pode depender) das demais agncias, ou se a comunicao com a matriz est no ar ou no. A distribuio dos dados deve ser efetiva: acessar os dados dos clientes locais no pode de forma alguma depender do acesso a outros equipamentos que no sejam o servidor de dados local. No entanto, dados de outras agncias tambm devem estar disponveis, sendo transparente para o usurio final onde efetivamente se encontra o dado requisitado. Esta questo abre uma discusso sobre alguns aspectos: -Se uma agncia precisa consultar, por exemplo, um dicionrio master de toda a rede, para descobrir que finalmente os dados que precisa so locais, este BD pode ser considerado distribudo, especialmente se este master se encontra em outro equipamento distncia? -Se o master vier a ter algum problema, todas as agncias deixam de ter inclusive acesso a seus prprios dados. Isto pode acontecer em um BD distribudo? Estes so pontos cruciais sobre os quais se focalizam as querelas entre fornecedores de BD centralizados e distribudos. O fato que, enquanto no h uma palavra final dos organismos internacionais de padronizao sobre o que totalmente distribudo e o que no , fornecedores diversos tm adotado uma filosofia alternativa que se no atende a todas as necessidades da distribuio completa dos dados, auxilia na obteno de algumas vantagens que antes s eram alcanadas atravs desta distribuio: o processamento distribudo sobre dados centralizados, mais presente hoje na forma client-server ou cliente servidor. Na forma tradicional de processamento distncia sobre dados distribudos, todos os equipamentos eram considerados terminais da mquina principal ou host. Isto, na maioria das vezes queria dizer que remotamente, atravs de modem, linha privada ou discada, redes de pacotes, etc., obtinha-se um terminal a mais, ainda que funcionando a uma velocidade de comunicao inferior aos terminais locais. Tecnologicamente, as formas de comunicao de dados sofreram um avano considervel pelo uso de protocolos mais rpidos e confiveis, bem como pela melhoria de equipamentos de comunicao e meios de transmisso, especialmente a fibra ptica. Isto resolveu o problema da velocidade de comunicao host-terminal. Subsistia o problema da sobrecarga de processamento, cada terminal a mais conectado ao host tendia a degradar a performance global do equipamento. A filosofia cliente-servidor foi a alternativa encontrada para este problema. Passou-se a adotar uma forma de processamento realmente distribudo, no qual ao invs de se ligar terminais diretamente sobre o host, ligam-se a servidores de processamento, que conectados ao host, agora chamado servidor de dados, tornam-se clientes de dados armazenados no servidor. Assim, cada servidor de processamento d aos usurios dos terminais ligados a ele a impresso de que os dados esto efetivamente armazenados nele. De fato, esta a impresso que a mquina servidora de processamento tem de si prpria, embora ela seja um cliente dos dados do servidor de dados. Como resultado, todo o processamento dos terminais feito pelo cliente, que requisita ao servidor somente os dados necessrios ao processamento.

Reduz-se assim, a quantidade de canais de comunicao necessrios entre o antigo host e os terminais, passando a existir canais entre o host, agora chamado servidor, e as mquinas clientes. Numa palavra final, permanecem centralizados os dados, mas distribui-se o processamento. 2.1 TWO-PHASE COMMIT Uma das principais caractersticas, e tambm das que apresentam maior dificuldade de implementao plena, para BD distribudos o COMMIT de duas fases ou two-phase commit (TPC). Imagine uma transao sobre um banco de dados distribudo que atualize tabelas de 3 ou 4 mquinas. O que aconteceria transao se uma das mquinas que teve alguma tabela j atualizada sasse do ar enquanto a transao prosseguia at certo ponto quando ento um rollfoward fosse solicitado por qualquer razo? Ao tentar desfazer a parte da transao ocorrida sobre o equipamento em falha poderia acontecer de no serem revertidos os efeitos da transao sobre os dados daquele equipamento, mas dos demais sim. Isto colocaria o banco numa situao de exceo, ou erro transacional, ou ainda de falha da integridade transacional. Para evitar este problema, e da mesma forma garantir que quando uma transao emita um COMMIT, todos os gerenciadores envolvidos efetuem as partes da transao com que esto envolvidos, faz-se necessrio emitir um COMMIT para cada gerenciador. A transao s ser efetivamente "commitada" no caso de todos os gerenciadores envolvidos responderem OK solicitao.

3 . SISTEMA GERENCIADOR DE BANCO DE DADOS 3.1 CONCEITO (Sistema Gerenciador de Banco de Dados) - um programa que gerencia e mantm listas de informaes. Os dados armazenados em um banco de dados podem ser imaginados como uma populao de informao. Nesse caso, a populao no representa apenas um grupo de pessoas que vive na mesma rea geogrfica, mas qualquer grupo ou classe de itens ou objetos que podemos definir. Ao criarmos um banco, a populao na qual estamos interessados aquela que precisamos rastear, e que se torna a base dos dados. Para armazenar os dados em disco, o DBMS tem de fornecer algum tipo de servio de definio de dados, a fim de definir os registros e os campos. Precisa, ainda, de um mecanismo interno para manter os dados no disco e para saber onde est cada elemento em particular. 3.2 Aplicativo de Banco de Dados

So programas que permite restaurar, visualizar e atualizar as informaes armazenadas pelo DBMS. Domnio a categoria e o tipo dos elementos permitidos em um campo particular. Ex: nome : A..Z, a..z Modelos de DBMS - Sistema de Gerenciamento de arquivos; - Sistema de Banco e Dados Hierrquico - Sistema de Banco de Dados de Rede; - Banco de Dados Relacional;

3.3 ARQUITETURAS DO SISTEMA DBMS O tipo de sistema computador no qual rodam os banco de dados, pode ser dividido em quatro categorias ou plataformas: Centralizada, PC, Cliente/Servidor e Distribudo. Os quatro diferem , principalmente no local onde realmente ocorre o processamento dos dados. A arquitetura do prprio DBMS no determina, necessariamente, o tipo de sistema computador no qual o banco de dados precisa rodar; contudo, certas arquiteturas so mais convenientes(ou mais comuns) para algumas plataformas do que para outras. Plataformas Centralizadas Em um sistema centralizado, todos os programas rodam em um computador "hospedeiro" principal, incluindo o DBMS, os aplicativos que fazem acesso ao banco de dados e as facilidades de comunicao que enviam e recebem dados dos terminais dos usurios. Os usurios tm acesso ao banco de dados atravs de terminais conectados localmente ou discados(remotos), conforme aparece na figura 1.

Minicomputador ou Mainframe Terminais Locais

Modem Modem Terminal Remoto

Geralmente os terminais so "mudos", tendo pouco ou nenhum poder de processamento e consistem somente de uma tela, um teclado e do hardware para se comunicar com o hospedeiro. O advento dos microprocessadores levou ao desenvolvimento de terminais mais inteligentes, onde o terminal compartilham um pouco da responsabilidade de manipular o desenho da tela e a entrada do usurio. Embora os sistemas de mainframe e de minicomputador sejam as plataformas principais para sistemas de banco de dados de grandes empresas, os baseados em PC tambm se podem se comunicar com sistemas centralizados atravs de combinaes de hardware/software que emulam(imitam) os tipos de terminais utilizados com um hospedeiro em particular. Todo o processamento de dados de um sistema centralizado acontece no computador hospedeiro e o DBMS deve estar rodando antes que qualquer aplicativo possa ter acesso ao banco de dados. Quando um usurio liga um terminal, normalmente v uma tela de log-in; o usurio introduz um ID de conexo e uma password, a fim de ter acesso aos aplicativos do hospedeiro. Quando o aplicativo de banco de dados inicializado, ele envia a informao de tela apropriada para o terminal e responde com aes diferentes, baseadas nos toques de tecla dados pelo usurio. O aplicativo e DBMS, ambos rodando no mesmo hospedeiro, se comunicam pela rea de memria compartilhada ou de tarefa do aplicativo, que so gerenciadas pelo sistema operacional do hospedeiro. O DBMS responsvel pela movimentao dos dados nos sistemas de armazenamento de disco, usando os servios fornecidos pelo sistema operacional. A figura 2 apresenta um modo possvel de interao desses aplicativos: os aplicativos se comunicam com os usurios pelos terminais e com o DBMS; o DBMS se comunica com os dispositivos de armazenamento (que podem ser discos rgidos, mas no esto limitados a isso) e com os aplicativos.

Para/de terminais

Sistema operacional (I.e., UNIX) Aplicativo de banco de dados


DBMS

Disk

Para armazenamento em disco

Aplicativo de banco da dados

Memri a do computa dor

Disk

Outros aplicativos . .

Disk
Para/de terminais

Fluxo de dados

Comunicao entre os aplicativos

O DBMS que roda no sistema hospedeiro pode ser baseado em qualquer um dos quatro modelos. Contudo, os modelos hierrquico e relacional so os mais comuns. Nos mainframes, o DBMS normalmente baseado no IMS da IBM, que um banco de dados hierrquico. Recentemente , entretanto, mais e mais mainframes esto rodando DBMSs baseados no modelo relacional, principalmente o DB2 da IBM. As principais vantagens de um sistema centralizado so a segurana centralizada e a capacidade de manipular enormes quantidades de dados em dispositivos de armazenamento. Os sistemas centralizados tambm podem suportar vrios usurios simultaneamente; comum, para um banco de dados em um mainframe IBM, suportar at 1000 usurios de uma

vez. As desvantagens geralmente esto relacionadas aos custos de aquisio e manipulao desses sistemas. Os grandes sistemas de mainframe e de minicomputadores exigem facilidades de suporte especficas, como o habitual centro de dados com pisos elevados, sistemas de refrigerao e grandes sistemas de controle climtico. Normalmente necessrio um staff de operadores e programadores altamente treinados para manter o sistema ativo e funcionando, com considervel custos adicionais de pessoal. Finalmente , o preo de aquisio de hardware de grandes sistemas centralizados freqentemente atinge milhes de dlares e a manuteno tambm onerosa. Atualmente , as empresas tm optado cada vez mais por minicomputadores dimensionados para departamento, como o Micro Vax da DEC e o AS/400 da IBM, pois no custam tanto e so bem suportados como sistemas centralizados, e , geralmente, no exigem um ambiente especial. Esses sistemas so mais convenientes para pequenas empresas com poucos usurios(no mais do que 200) ou para aplicativos de banco de dados que s interessam a um nico departamento de uma grande empresa (isto um minicomputador que roda aplicativos de engenharia s pode interessar ao departamento de projetos). Os computadores menores tambm pode ser colocado em rede com outros minicomputadores e mainframes, para que todos os computadores possam compartilhar dados. Sistemas de Computador Pessoal Os computadores pessoais (PCs) apareceram no final dos anos 70 e revolucionaram a maneira de ver e utilizar computadores. Um dos primeiros sistemas operacionais de sucesso para PCs foi c CP/M(Control Program for Microcomputers), da Digital. O primeiro DBMS baseado em PC de sucesso , dBase II, da Ashtan-Tate, rodava sob CP/M. Quando a IBM lanou o primeiro PC baseado no MS-DOS, em 1981, a Ashton-Tate portou o dBASE para o novo sistema operacional. Desde ento, o dBASE gerou verses mais novas, compatveis e parecidas e DBMSs competitivos que tm provado, comunidade de processamento de dados, que os PCs podem executar muitas das tarefas dos grandes sistemas. Quando um DBMS roda em um PC, este atua como computador hospedeiro e terminal. Ao contrrio dos sistemas maiores, as funes do DBMS e do aplicativo de banco de dados so combinadas em um nico aplicativo. Os aplicativos de banco de dados em um PC, manipulam a entrada do usurio, a sada da tela e o acesso aos dados do disco. Combinar essas diferentes funes em uma unidade, d ao DBMS muito poder, flexibilidade e velocidade; contudo, normalmente ao custo da diminuio da segurana e da integridade dos dados. Os PCs originaram-se como sistemas stand-alone, mas, recentemente, muitos tm sido conectados em redes locais (LANs). Em uma LAN, os dados, e normalmente os aplicativos do usurio, residem no servidor de arquivo um PC que roda um sistema operacional de rede (NOS) especial, como o NetWare da Novell ou o LAN Manager da Microsoft. O servidor de arquivo gerencia o acesso aos dados compartilhados pelos usurios da rede em seus discos rgidos e, freqentemente, da acesso a outros recursos compartilhados, como impressoras . Embora uma LAN permita aos usurios de bancos de dados baseados em PC, compartilhar arquivos de dados comuns, ela no muda o funcionamento do DBMS significativamente. Todo o processamento de dados real ainda executado no PC que roda o aplicativo de banco de dados. O servidor de arquivo somente procura em seus discos os dados necessrios para o usurio e envia esses dados para o PC, atravs do cabo da rede. Os dados so, ento, processados pelo DBMS que est rodando no PC e quaisquer mudanas no banco de dados exige, do PC, o envio de todo o arquivo de dados de volta ao servidor de arquivo, para ser novamente armazenado no disco. Essa troca esta mostrada na figura 3. Embora o

10

acesso de vrios usurios a dados compartilhados seja uma vantagem, existe uma desvantagem significativa, de um DBMS baseado em LAN, relativa rapidez ou ao poder do servidor de arquivo, terem seu desempenho limitado pelo poder do PC que est rodando o DBMS real. Quando vrios usurios esto tendo acesso ao banco de dados, os mesmos arquivos precisam ser enviados do servidor para cada PC que est tendo acesso a eles. Esse trfego ampliado pode diminuir a velocidade da rede.
pc pc

cabo de Rede
Arquivo de dados alterado enviado ao Servidor Arquivo de dados enviado ao PC

pc Servidor de Arquivos

A nica melhoria necessria para um DBMS multiusurio, em relao a um monousurio, a capacidade de manipular, simultaneamente, as alteraes dos dados realizados por vrios usurios. Normalmente isso feito por algum tipo de esquema de bloqueio, no qual o registro ou o arquivo de dados que um usurio est atualizando ou alterando, bloqueado para evitar que os outros usurios tambm o alterem. A maioria dos DBMSs, baseada em LAN, disponvel hoje em dia, so simplesmente verses multiusurios de sistemas de banco de dados stand-alone comuns, contudo, os tipos de esquemas de bloqueio variam bastante e podem afetar significativamente o desempenho de um banco de dados multiusurio. A maioria dos DBMSs baseada em PC projetada no modelo relacional, mas o fato de o DBMS no estar separado do aplicativo de banco de dados significa que muitos (seno a maioria) dos princpios relacionais no esto implementados. Os componentes ausentes mais notveis so os que tratam da integridade dos dados. A maior parte dos bancos de PC permite acesso direto aos arquivos de dados, fora do DBMS que os criou. Isso cria uma situao, na qual podem ser feitas alteraes nos arquivos, violadores Das regras pelas quais o aplicativo assegura a integridade dos dados. Tal violao pode at tornar ilegvel o arquivo de dados para o DBMS. Por essa razo os bancos de dados de PC baseados num modelo relacional, so descritos mais precisamente, como semi-relacionais. Alguns dos bancos de dados de PC semirelacionais mais comuns, disponveis hoje em dia, incluem o R:Base da Microrim, o dBASE IV da Borland (a Borland adquiriu a Ashton-Tate no final de 1991) e seus muitos "clones", como o FoxPro da Microsoft, o Paradox da Borland, o DataEase da DataEase International e o Advanced Revelation, da Revelation Technologies. Conforme mencionado anteriormente, os bancos de dados de PC mais limitados, normalmente so baseados no modelo do sistema de gerenciamento de arquivo. Tambm

11

existem DBMSs, baseados em PC, derivados do modelo em rede como o DataFlex, da Data Access Corporation e o db- Vista III, da Raima Corporation. A maioria dos sistemas de banco de dados multiusurio baseado em PC, manipula o mesmo nmero de usurios dos sistemas centralizados menores. Entretanto, os problemas decorrentes da manipulao de vrias transaes simultneas, do aumento no trfego da rede e do limite do poder de processamento dos PCs que rodam o DBMS, provocam o aumento da complexibilidade e a degradao no desempenho, medida que o nmero de usurios se multiplica. A soluo desenvolvida para essas limitaes o sistema de banco de dados Cliente/Servidor. BANCOS DE DADOS CLIENTE/SERVIDOR Na sua forma mais simples, um banco de dados Cliente/Servidor (C/S) divide o processamento de dados em dois sistemas: o PC cliente, que roda o aplicativo de banco de dados, e o servidor, que roda totalmente ou parte do DBMS real. O servidor de arquivo da rede local continua a oferecer recursos compartilhados, como espao em disco para os aplicativos e impressoras. O servidor de banco de dados pode rodar no mesmo PC do servidor de arquivo ou (como mais comum) em seu prprio PC. O aplicativo de banco de dados do PC cliente, chamado sistema front-end, manipula toda a tela e o processamento de entrada/sada do usurio. O sistema back-end do servidor de banco de dados manipula o processamento dos dados e o acesso ao disco. Por exemplo, um usurio do front-end gera um pedido (consulta) de dados do servidor de banco de dados, e o aplicativo front-end envia, para o servidor, o pedido pela rede. O servidor de banco de dados executa a pesquisa real e retorna somente os dados que respondem a pergunta do usurio, conforme aparece na figura 4.

Consulta

Servidor de Banco de Dados

Resultado da consulta

pc

pc

cabo de Rede

pc

12

A vantagem imediata de um sistema C/S bvia: dividir o processamento entre dois sistemas reduz a quantidade do trfego de dados no cabo da rede. Em um dos casos tipicamente confusos sobre o significado de um mesmo termo que s vezes encontramos no campo da computao, a definio de Cliente/Servidor aparentemente o contrrio dos sistemas baseados em UNIX, rodando a interface grfica X-Windows. A diviso no processamento a mesma do sistema C/S baseado em PC, mas o front-end chamado servidor no X-Windows, pois fornece os servios de apresentao e de interface do usurio. O sistema back-end, no qual roda o DBMS, referido como cliente dos servios fornecidos pelo sistema front-end. O nmero de sistemas C/S est aumentando rapidamente-novos sistemas esto sendo projetados e divulgados quase mensalmente. Embora os sistemas clientes normalmente rodem em PC, o sevidor do banco de dados pode rodar de um PC a um mainframe. Mais e mais aplicativos de front-end esto aparecendo, incluindo desde os que ampliam o escopo dos DBMSs baseados em PC tradicionais, at os servidores de banco de dados. A maior desvantagens dos sistemas de bancos de dados descritos at aqui que eles exigem o armazenamento dos dados em um nico sistema. Isso pode ser um problema para empresas grandes que precisam suportar usurios do banco de dados espalhados em uma rea geogrfica extensa ou que precisem compartilhar parte de seus dados departamentais com outros departamentos ou com um hospedeiro central. necessrio um modo de distribuir os dados entre os vrios hospedeiros ou localidades, o que levou ao desenvolvimento dos sistemas de processamento distribudo.

Como Selecionar APIS API significa Aplication Program Interface. um protocolo de comunicao entre o front-end ou a lgica de negcio e o banco de dados. Os fornecedores de Servidores de Banco de Dados costumam prover uma interface de mais alto nvel para comunicao com seus servidores. Estas APIs so especficas para cada produto. Exemplos : SQL Net da Oracle DB/Library da Microsoft/Sybase. Como cada servidor, geralmente, possui sua prpria API, quando uma aplicao cliente quer acessar servidores diferentes preciso escolher entre as seguintes alternativas: APIs especficas para cada SGBD.; Interface comum; Gateway.

13

Acessando servidores diferentes com APIS especficas para cada SGBD uma alternativa que prev que a utilizao de uma API especfica para cada servidor diferente que vier a ser acessado pela aplicao cliente. Se precisar acessar banco de dados diferentes, necessitar carregar na memria APIs diferentes. Vantagens: Performance Tuning individual

Desvantagens Incompatibilidade de transaes Necessidade de mais de uma API cliente

Acessando servidores diferentes com interface comum uma alternativa onde uma API, situada no lado cliente, prov um protocolo nico para acesso aos diferentes servidores. Esta API ir carregar os drives especficos de cada servidor para estabelecer a comunicao. Exemplo : ODBC(Open DataBase Comunication) da Microsoft.

Vantagens: cliente Desvantagens: Tuning individual impossvel; Desempenho. A Microsoft admite uma perda de 30% utilizando ODBC O cliente s fala a lingua, ODBC, que traduz os comandos para cada API

14

Acessando servidores diferentes com gateways Os gateways so produtos que possibilitam a comunicao entre uma aplicao cliente, desenvolvida para um certo servidor, com outro servidor especfico, sem que a aplicao cliente seja modificada.. Exemplos : MicroDecision Ware, Gupta SQLHost, Oracle Gateway. Vantagens: S uma API cliente Desempenho bom

Desvantagens: Tuning para apenas um servidor Gateways custam caro

ODBC (Open DataBase Comunication) Conectividade de Banco de Dados Aberto ODBC uma API da Microsoft que facilita a interoperabilidade entre o Windons e outros bancos de dados. Para usar o ODBC as ferramentas de aplicao devem ser habilitadas para aceitar este padro. Os servidores de banco de dados por outro lado deve aceitar chamadas no pado ODBC. Para que um aplicativo possa acessar vrios servidores de bancos de dados, vrios esforos foram feitos. Um dos mais bem sucedidos resultou na criao, pela Microsoft, do ODBC -Open Data Base Connectivity. Usando um drive ODBC, um programa escrito em qualquer linguagem de programao pode acessar uma enorme variedade de servidores de banco de dados. Alm disso, o programador no precisa se preocupar com os comandos especficos de consulta

15

base de dados. Ele deselvolve seu aplicativo e o ODBC se encarrega de encaminhar as consultas. Devido a facilidade do padro ODBC, a maioria dos produtores de software oferece conectividade por meio dele. O ODBC foi baseado nas especificaes do SQL Access Group e do X Open, duas organizaes que estabelecem padres tcnicos de conectividade. Desenvolvido inicialmente para Windows, ele foi lanado em 1992 e, hoje, se encontra na terceira gerao. A arquitetura ODBC tem quatro componentes bsicos. O primeiro o prprio aplicativo, que executa o processamento no cliente e emite as chamadas de consulta aos dados. O gerenciador de drives, um arquivo do tipo DLL que a Microsoft fornece com seus sistemas operacionais, carrega os controladores de acordo com a solicitao da aplicao. O terceiro elemento o drive ODBC, que processa as chamadas de funo, submete requisies SQL a fonte de dados e remete o resultado ao aplicativo. A estrutura se completa com fonte de dados, a origem das informaes que o usurio quer acessar, normalmente um banco de dados relacional. Existem dois tipos de drives ODBC - monocamada e multicamadas. O drive do tipo monocamada processa as chamadas do ODBC e os comandos SQL. Ele assume, assim, parte da funcionalidade que caberia, em princpio, fonte de dados. Esse tipo de driver normalmente utilizado para acessar bases de dados que no sejam compatveis com o padro SQL, como as do tipo xBase. Os comandos SQL so processados pelos prprios drives, que transmitem a consulta ao gerenciador de banco de dados na forma de uma operao bsica de arquivo. Um driver do tipo multicamadas envia as requisies diretamente ao servidor, que se encarrega de process-las: Esse driver permite que a aplicao, o gerenciador de drives e o prprio controlador ODBC fiquem em uma mquina cliente, enquanto o gerenciador de banco de dados roda em outra mquina - o servidor. Quando o banco de dados compatvel com SQL, o driver apenas repassa, a ele, comandos nessa linguagem. No caso de sistemas no compatveis, o gerenciador de banco de

16

dados ter fazer um trabalho extra de traduo dos comandos. Alm dos fabricantes de banco de dados, surgiram diversas empresas especializadas em driveers ODBC. Embora os produtos de todas essas companhias atendem s mesmas especificaes, cada um deles pode apresentar melhor ou pior desempenho que os demais. Observa-se, tambm que h outros fatores, alm do driver ODBC, que tm grande influncia no desempenho do sistema. Entre esses fatores esto o protocolo de rede, o gerenciador de banco de dados e o hardware. Apesar da sua ampla aceitao, o ODBC ganhou a fama de ser um mtodo muito lento de acesso aos dados. Por isso, muitas empresas preferem construir aplicativos usando os comandos nativos do gerenciador de banco de dados para comunicao entre o cliente e o servidor. Recentes testes foram realizados por uma empresa americana Resource Group, sob a liderana de Ken Norht, autor do livro Windows Multi-DBMS Programing. Nessa avaliao, foram usados os mesmos micros clientes, servidores, rede, tabelas e declaraes SQL para avaliar o desempenho do ODBC e compar-los com o acesso em modo nativo. Comparaes - Um exame dos resultados dos 27 testes revela que, em 11 deles, o drive nativo se saiu melhor. Nas outras 16 operaes, a vitria foi do ODBC. Desses 16 testes em que o ODBC foi melhor do que o acesso nativo, a diferena foi maior que 10% em 7 Dos 11 testes em que o acesso foi mais rpido, em apenas 2 a diferena foi maior que 10%. No Oracle 7 o tempo de acesso via ODBC foi 2% mais rpido que o acesso nativo.. No Informix, o ODBC foi 1% mais rpido em mdia. No Sybase a diferena foi de 13% a fovor do ODBC. Com estes nmeros acaba o mito do mau desempenho do ODBC. O uso do driver ODBC pode economizar muito tempo e dinheiro no desenvolvimento de aplicativos multiplataformas. O sucesso dessa implementao vai depender no s do uso do driver correto, mas de um conjunto de escolhas acertadas de hardware e software.

Interfaces Grficas (GUIs) As interfaces grficas(GUIs) contriburam para os sistemas cliente/servidor porque os tornaram mais fceis de serem usados e aumentaram a produtividade. Os recursos de GUI,

17

como multitarefa, cumutao de tarefas e intercmbio de dados entre aplicativos, tambm contriburam para que esses sistemas ficassem mais atraentes. Um sistema no precisa ter GUI para ser classificado como um sistema cliente/servidor - no qual um mdulo cliente conectado por rede a um mdolo servidor constitui os componentes essenciais. No entanto, as GUIs so usadas com freqncia em sistemas cliente/servidor, devido os seus benefcios. Os gastos associados s GUIs incluem treinamento de usurios finais e custos da construo de uma GUI. Se uma empresa quiser uma GUI personalizada para uma aplicativo interno, seus analistas de desenvolvimento e programadores devem constru-la. O desenvolvimento de uma GUI consiste em programao direcionada por eventos, na qual os programas reagem s aes de usurios finais. Isso diferente do cdigo gerado por programao sequencial tradicional. H vrias abordagens diferentes para desenvolvimento de interfaces grficas internas. Dez Consideraes Importantes sobre GUIs A) As GUIs podem aumentar a produtividade tornando os sistemas mais fceis de usar o oferecendo recursos como multitarefa e intercmbio de dados entre os aplicativos. B) A facilidade de uso no automtica; alguns treinamentos preparatrios para os usurios sero necessrios. C) As GUIs podem levar bastante tempo para serem construdas - usar ferramentas de contruo de GUIs acelera o processo. D) Falta de consistncia nas GUIs pode confundir, irritar e frustar os usurios finais. E) Um guia de estilos confere a uma GUI sua aparencia visual. F) Padres internos devem ser adotados para garantir que um guia de estilo escolhido ou um estilo desenvolvido pela empresa esteja obedecido. G) Transformar um sistema existente em front-end com uma GUI - embora seja uma tcnica que gera controvsias - pode ser til em sistemas de utilizao complexa.

18

H) O software GUI do Windows da Microsoft e do Presentation Maneger da IBM reside em um plataforma de cliente; mas, no sistema X Windows para UNIX, um servidor oferece gerenciamento de vdeo para a GUI. I) H ferramentas disponveis para construir interfaces portveis para uma ampla variedade de estruturas. J) Os usurios finais podem ter diferentes GUIs, como X Windows e Windows da Microsoft, operando simultaneamente em seus micros. genricas que so

SISTEMAS DE PROCESSAMENTO DISTRIBUDO Uma forma simples de processamento distribudo j existe a alguns anos. Nessa forma limitada, os dados so compartilhados entre vrios sistemas hospedeiros, atravs de atualizaes enviadas pelas conexes diretas (na mesma rede) ou por conexes remotas, via telefone ou via linhas de dados dedicadas. Um aplicativo rodando em um ou mais dos hospedeiros, extras a parte dos dados alterados durante um perodo de tempo definido pelo programador e, ento, transmite os dados para um hospedeiro centralizado ou para outros hospedeiros do circuito distribudo. Os outros bancos de dados so, ento, atualizados para que todos os sistemas estejam sincronizados. Esse tipo de processamento de dados distribudo normalmente ocorre entre computadores departamentais ou entre LANs e sistemas hospedeiros. Aps o dia de trabalho, os dados vo para um grande microcomputador central ou para um hospedeiro mainframe. Embora esse sistema seja ideal para compartilhar parte dos dados entre diferentes hospedeiros, ele no responde ao problema do acesso, pelo usurio, aos dados no armazenados em seus hospedeiros locais. Os usurios devem mudar suas conexes para os diferentes hospedeiros, a fim de ter acesso aos vrios bancos de dados, lembrando-se, entretanto, de onde est cada banco. Combinar os dados dos bancos de dados existentes em hospedeiros, tambm apresenta alguns srios desafios para os usurios e para os programadores. H ainda, o problema dos dados duplicados; embora os sistemas de armazenamento em disco tenham diminudo de preo atravs dos anos, fornecer vrios sistemas de disco para armazenar os mesmos dados pode ficar caro. Manter todos os conjuntos de dados duplicados em sincronismo, aumenta a complexidade do sistema. A soluo para esses problemas est emergindo da tecnologia do acesso "sem costura" a dados, denominada processamento distribudo. No sistema de processamento distribudo o usurio pede dados do hospedeiro local; se este informar que no possui os dados, sai pela rede procurando o sistema que os tenha. Em seguida, retorna os dados ao usurio, sem que este saiba que foram trazidos de um sistema desconhecido exceto, talvez, por um ligeiro atraso na obteno dos dados. A figura 5 ilustra uma forma de sistema de processamento distribudo. Primeiramente, o usurio cria e envia uma busca de dados para o servidor do banco de dados local. O servidor, ento, envia, para o mainframe (possivelmente atravs de um gateway ou de um sistema de ponte que une as duas redes), o pedido dos dados que no

19

possui. Ele responde consulta. Finalmente, o servidor do banco de dados local combina esse resultado com os dados encontrados em seu prprio disco e retorna a informao ao usurio.

O ideal que esse sistema distribudo tambm possa funcionar de outro modo: os usurios de terminal conectado diretamente ao mainframe podem ter acesso aos dados existentes nos servidores de arquivos remotos. O projeto e a implementao dos sistemas de processamento distribudo um campo muito novo. Muitas partes ainda no esto no lugar e as solues existentes nem sempre so compatveis uma com as outras.

4. SQL 4.1 Histrico Entre 1974 e 1979, o San Jos Research Laboratory da IBM desenvolveu um SGDB relacional que ficou conhecido como Sistema R. Para a criao e acesso aos dados foi adotada uma linguagem chamada SEQUEL, mais tarde rebatizada SQL (Structured Query Language). Embora a query em sua definio, a SQL foi projetada de forma a permitir que alm de consultas (queries), inseres, alteraes e delees fossem feitas, alm da prpria criao das tabelas e campos.

20

Dividiu-se a SQL ento em duas partes: -DDL: Data Description Language (Linguagem de Descrio de Dados); -DML: Data Manipulation Language (Linguagem de Manipulao de Dados). DDL A DDL, uma parte muito pequena da SQL, permite a criao e manuteno do dicionrio de dados. O dicionrio de dados contm a definio de cada tabela, de cada campo, enfim, contm a definio da base de dados propriamente dita. Em outras palavras, o dicionrio de dados guarda dados sobre os dados. Embora existam algumas outras construes, a mais importante das construes da DDL a destinada a criao de tabelas. Por exemplo, a sentena para a criao das tabelas funcionrio, cidade, e setor, poderia ser como segue: Adotada como padro mundial pela ISSO em 1987, uma linguagem exclusiva de banco de dados Cliente/Servidor; No dispe dos seguinte recursos: - Repetio e desvio; - Comandos para manipulao de telas e impresso de relatrios; Os Fabricantes de SGBD podem expandir a linguagem SQL padro ANSI, desde que os comandos bsicos sejam aceitos. CREATE TABLE funcionrio (matrfunc NUMBER(5) NOT NULL, nomefunc CHAR(40), cdsetfunc NUMBER(3), ruanofunc CHAR (40), bairrofunc CHAR(15), cdcidfunc NUMBER(5), salrfunc NUMBER (11,2); DML a parte mais ampla da SQL. Permite pesquisar, alterar, incluir e deletar dados da base de dados. So quatro as sentenas mais importantes da DML: -SELECT: permite a pesquisa de dados; -UPDATE: permite a atualizao de dados; - DELETE: permite a deleo de dados; - INSERT: permite a incluso de dados. 4.2 Comandos Bsicos SELECT

21

- Lista os atributos desejados como resultados de uma consulta; - Corresponde a operao de projeo da lgebra relacional; - Lista de atributos pode ser substitudo por *; From - Lista de relao a serem usados na execuo da expresso; Where - So definidos critrios de pesquisa envolvendo atributos das relaes definidas na clusula from ; comando opcional; Order By - Especifica a seqncia de ordenao da tabela criada pela consulta; - Comando opcional; - Qualificador opcional : asc / desc. Select A1, A2,...,An From r1,r2,...rm Where P Onde A so os campos a serem selecionados, R so as tabelas, e P uma condio.

Exemplos: 1- Selecionar todos os atributos de cada funcionrio: SELECT * FROM funcionrio; 2- Selecionar todos os atributos dos funcionrios da cidade de Tubaro: SELECT * FROM funcionrio WHERE cidafunc = Tubaro;

3- Selecionar os nomes de todos os funcionrios da cidade de Tubaro e salrios maior que R$ 500,00 SELECT nomefunc FROM funcionrio Where cidafunc = Tubaro and salafunc > 500;

22

4- Selecionar o nome e rua onde moram os funcionrios com matrcula maior que 100 e cidade igual a 25: SELECT nomefunc, ruanofunc FROM funcionrio WHERE cdcidfunc=25 AND matrfunc>100;

5- Selecionar o nome rua onde moram os funcionrios com matrcula maior do que 100 e cidade igual a 25, ordenados por nome em ordem decrescente: SELECT nomefunc,ruanofunc FROM funcionrio WHERE cdcidfunc=25 AND matrfunc>100 ORDER BY nomefunc DESC; 6- Selecionar para cada funcionrio o seu nome e o de sua cidade: SELECT UNIQUE nomefunc, nomecid FROM funcionrio, cidade WHERE cdcidfunc=cdcidade;

Comandos de Comparao de Valores Between Faz uma pesquisa entre uma faixa de valores para um campo da tabela. Not Between Faz uma pesquisa descartando uma faixa de valores. Exemplo Select * from funcionario where idadefunc between 18 and 30; Select * from funcionario where idadefunc not between 18 and 30;

IN

23

Consulta a presena de um campo em um conjunto de valores NOT IN Consulta a no presena de um campo em um conjunto de valores Exemplo: Select * from funcionario where cdcidfunc in ( 10, 20, 30 ,35); Like Compara a existncia de uma caracter em uma determinada posio em uma string. _ Testa a existncia de um caracter no nulo na posio; % representa qualquer seqncia de n caracteres. Not Like Compara a no existncia de um caracter em uma determinada posio em uma string. Exemplo Select * From funcionario where nomefunc like Rudiney% Esta consulta traz todos os funcionrios com primeiro nome Rudiney no importa o resto do nome. Select * From funcionario where nomefunc like%da Silva Neste caso localiza todos os funcionrios com sobrenome da Silva . Null Verifica se o valor do campo comparado zero ou vazio; Not Null Verifica se o valor do campo comparado no zero ou vazio;

24

Exist Verifica se o resultado do clculo da subconsulta representada por select * from No vazia.

Select x from A Where exists (select * from B where y=x) O campo X da relao A ser selecionado, se existir um elemento y=x na relao B. Exemplo

Not Exists Verifica se o resultado do calculo da subconsulta representada por Select * from vazia. FUNES Count - Nmero de valores da coluna Sum - Soma dos valores da Coluna AVG - Mdia dos valores da Coluna Max - Maior valor da coluna Min - Menor valor da coluna Exemplo Select max(idade), nim(idade) from alunos;

GRUPO BY Forma grupos com as tuplas da tabela especificada na clusula from, que possuem o mesmo valor no atributo especificado na clusula grupo by; Para ter resultado em ordem, deve ser especificado tambm a clausula order by(aps a clausula grupo by).

25

Exemplo Select curso_alu, count(curso_alu) from alunos group by curso_alu;

HAVING Having para os grupos o que where para as linhas. Em outras palavras, utilizado para eliminar grupos, onde where utilizado para eliminar linhas. Exemplo: Select curso_alu, avg(idade) from alunos group by curso_alu having AVG(idade) > 18;

26

4.3 BANCO DE DADOS ORACLE - Conceitos Bsicos LIMITES DO ORACLE RDBMS ITEM LIMITE Tabela na Base de dados No h limites. Linhas por Tabelas No h limites Colunas por tabelas 254 Indices por tabelas No h limites Tabelas ou views joined em uma No h limites query Niveis de ninho de subqueries 30 Caracteres em um nome 255 Colunas por ndices 16

CRIANDO TABELAS Tipos de Dados(Datatypes) Char(n) Varchar2(n) Long Number(p,s) Raw Long Raw Date Tamanho Fixo, pode conter uma seqncia de 1 a 255 bytes alfanumricos; Tamanho Varivel, pode conter uma seqncia de 1 a 2000 bytes - alfanumricos. Tamanho Varivel at 2 Gigabytes alfanumricos nota : s pode existir uma coluna long em cada tabela Numrico com sinal e ponto decimal, sendo preciso de 1 a 38 dgitos Binrio - Varivel at 255 bytes Binrio - Varivel at 2 gigabytes - imagem Data c/ hora, minuto e segundo

COMANDO CREATE TABLE CREATE TABLE DEPT (DEPTNO NUMBER(2) NOT NULL,

27

DNAME VARCHAR2(14), LOC VARCHAR2(13)); CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB CHAR(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) NOT NULL); INSERINDO DADOS EM TABELAS DESC DEPT; - lista os campos da tabela dept

INSERT INTO DEPT VALUES (50, TESOURARIA', 'TUBARAO',1000); INSERT INTO DEPT(DNAME,DEPTNO) VALUES(CAIXA',60);

28

FUNES ARITMTICAS Funes Round Trunc Mod Power Sign ROUND(SAL,2) TRUNC(SAL,2) Mod(sal,comm) Power(sal,2) Sign(sal) sal arredondado para 2 casas apos o ponto decimal Sal truncado para 2 dgitos aps o ponto decimal. Retorna o resto da diviso de sal/comm Retorna o sal elevado ao quadrado. Se SAL maior que O retorna +1 Se SAL menor que 0 retorna -1 Se SaL igual a 0 retorna 0. retorna a raiz quadrada de 25

SQRT

SQRT(25)

OPERADORES ARITMTICOS +, -, *, /

Select ename, sal, comm, sal+comm from emp where job = 'salesman'; Select ename, sal, comm from emp Where comm > 0.25 * sal Select ename, comm/sal, comm,sal from emp where job = 'Salesman' order by comm/sal asc; Select ename, sal, comm,12*(sal+comm) from emp where job = 'Salesman';

29

Select ename, sal, sal/22, round(sal/22,0), round(sal/22,2) from emp where emp where deptno = 30; select ename, sal, sal/22, trunc(sal/22,0=, trunc(sal/22,2) from emp where deptno = 30;

INCLUINDO NOVA COLUNA NA TABELA ALTER TABLE DEPT ADD (CCUSTO NUMBER(6)); ALTERANDO O TAMANHO DE UMA COLUNA ALTER TABLE DEPT MODIFY DNAME CHAR(20);

CRIANDO VIEWS CREATE VIEWS MANEGERS AS SELECT ENAME, JOB, SAL FROM EMP WHERE JOB = 'MANAGER';

DELETANDO VIEWS DROP VIEWS MANAGERS;

30

ATUALIZANDO REGISTROS UPDATE EMP SET JOB='MANAGER' WHERE ENAME='MARTIN';

ATUALIZANDO VRIOS REGISTROS UPDATE EMP SET JOB='VENDEDOR' WHERE JOB='SALESMAN'; UPDATE EMP SET DEPTNO=40, JOB='SALESMAN' WHERE JOB='VENDEDOR'; DELETANDO LINHAS DAS TABELAS DELETE FROM EMP WHERE ENAME='MARTINS'; DELETE FROM DEPT WHERE DEPTNO=60;

FUNES DE GRUPO AVG, COUNT, WHERE, MAX, MIN, SUM, STDDEV,VARIANCE Funes AVG COUNT WHERE MAX MIN SUN STDDEV VARIANCE Exemplo AVG(SAL) COUNT(COMM) COUNT(*) COUNT(*) MAX(SAL) MIN(SAL) SUM(SAL) STDDEV(SAL) VARIANCE(SAL) Resultado MADIA DO VALOR DE SAL CONTA NUMERO DE LINHAS COM COMM CONTA O NUMERO DE LINHAS CFE. MAIOR VALOR DE SAL. MNIMO VALOR DE SAL. SOMOTRIA DOS VALORES DE COMM CLCULO DESVIO PADRO DA SAL. CALCULA DA VARIANA DE SAL.

UTILIZANDO FUNES DE GRUPO


31

1) SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO;

2) SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO;

32

FUNES DE DATA FUNES ADD_MONTHS MONTHS_BETWEEN NEXT_DAY LAST_DAY TRUNC EXEMPLO ADD_MONTHS(HIREDA TE,5) MONTHS_BETWEEN(HI REDATE,SYSDATE) NEXT_DAY(HIREDATE,' FRIDAY') LAST_DAY(SYSDATE) TRUNC(SYSDATE,FMT) RESULTADO ADICIONA 5 MESES NA DATA HIREDATE CALCULA O NMERO DE MESES BETWEEN ENTRE AS DATAS PROCURA UMA SEXTAFEIRA APS HIREDATE RETORNA A DATA TOMANDO COMO PARAMETRO O 'FMT' TRUNCA A DATA PARA A PRIMEIRA DATA DO 'FMT'

Funes de converso Funes TO_CHAR TO_DATE TO_NUMBER Exemplo TO_CHAR(SYSDADE,YY) TO_DATE(15/05/90,DD/MM/YY) TO_NUMBER(SUBSTR($150,2,3)) Resultado CONVERTE COLUNAS DO TIPO NUMBER E DATA PARA CHAR. CONVERTE COLUNAS DO TIPO CHAR PARA O FORMATO DE DATA. CONVERTE AS 3 ULTIMAS (EM FORMATO CHAR) PARA MUMBER.

Usando && para substituir variavel


Usando o duplo &, voc pode reusar uma varivel sem colocar no prompt a cada vez. EX: Select empno, ename, job, &&_nome_da_coluna From emp Order by &column_name

Resultado:

33

Enter value for nome_da_coluna: deptno EMPNO ----------7839 7782 ENAME JOB ------------------ ------------------------King President Clark Manager DEPTONO -------------------10 10

5. INTEGRIDADE REFERENCIAL

PRIMARY KEY CREATE TABLE FILIAL ( CD_EMPRESA NUMBER(6,0), CD_FILIAL NUMBER(4,0), CD_TIPO VARCHAR2(20), DT_CADASTRO DATE, CONSTRAINT PK_FILIAL PRIMARY KEY(CD_EMPRESA,CD_FILIAL)); INTREGRIDADE REFERENCIAL INTEGRIDADE No ORACLE 7 todas as regras de integridade de dados e entidade so definidos por objetos chamados CONSTRAINT. Que podem ser definidos quando da criao da tabela ou posteriori via camando ALTER TABLE. Os constraints suportados so : * NOT NULL * UNIQUE KEY * PRIMARY KEY * FOREIGN KEY * CHECK CONSTRAINTS IN-LINE Exemplo: CREATE TABLE EMPREGADO ( CD_EMPREGADO NUMBER (6,0) PRIMARY KEY, ............................................................................... ............................................................................... );

34

CONSTRAINTS OUT-OF-LINE Exemplo: CREATE TABBLE EMPREGADO ( CD_EMPREGADO NUMBER (6,0) NOT NULL, ..................................................................... ..................................................................... CONSTRAINT PK_EMPREGADO PRIMARY KEY (CD_EMPREGADO) );

Nota : Quando o constraint for definido sem nome, o oracle define um nome para o mesmo sys_c00n - onde n um nmero seqencial crescente.

PRIMARY KEY CONSTRAINT Valor nico que identifica cada linha da tabela. Exemplo: CREATE TABLE EMPRESA ( .......................................................................................................... CONSTRAINT PK_EMPRESA PRIMARY KEY (CD_EMPRESA);

CHECK CONSTRAINT As validaes de colunas so feitas utilizando o CHECK CONSTRAINT. Exemplo: CREATE TABLE FILIAL ( CD_EMPRESA NUMBER (6,0) CONSTRAINT FK1_FILIAL REFERENCE EMPRESA (CD_EMPRESA),
35

CD_FILIAL NUMBER (4,0) CONSTRAINT CK_FILIAL CHECK (CD_FILIAL BETWEEN 1 AND 9999) DISABLE, CD_TIPO VARCHAR2 (20) CONSTRAINT CK_TIPO_FILIAL CHECK (CD_TIPO IN ('MATRIZ', 'FILIAL', 'FABRICA')), DT_CADASTRO DATE, CONSTRAINT PK_FILIAL PRIMARY KEY (CD_EMPRESA, CD_FILIAL));

FOREIGN KEY CONSTRAINT * Deve estar associada a uma primary key ou unique key definida anteriormente. * Pode assumir valor nulo ou igual ao da chave referenciada. * No existe limite para um nmero de foreign keys. * Garante a consistncia com a primary key referenciada. * Pode fazer referncia a prpria tabela. * No pode ser criada para views, synonyns e remote table

Exemplo: CONSTRAINT FK1_FILIAL FOREIGN KEY (CD_EMPRESA) REFERENCES EMPRESA (CD_EMPRESA) OU CONSTRAINT FK1_FILIAL FOREIGN KEY (CD_EMPRESA) REFERENCES EMPRESA

CHECK CONSTRAINT

36

As validaes de colunas so feitas utilizando o CHECK CONSTAINT. Exemplo: Create table filial ( cd_empresa number(6,0) constraint fk1_filial references empresa (cd_empresa), cd_filial number(4,0) constraint ck_filial check (cd_filial between 1 and 9999) disable, cd_tipo varchar2(20) constraint ck_tipo_filial check (cd_tipo in (matriz, filial,fabrica, )), dt_cadastro date, constraint pk_filial primary key (cd_empresa, cd_filial));

DEFAULT SPECIFICATION Podemos atribuir valores default para colunas, visando facilitar a insero de dados Create table filial ( cd_empresa number(6,0) constraint fk1_filial references empresa (cd_empresa), cd_filial number(4,0) constraint ck_filial check (cd_filial between 1 and 9999) disable, cd_tipo varchar2(20) constraint ck_tipo_filial check (cd_tipo in (matriz, filial,fabrica, )), dt_cadastro date default sysdate, constraint pk_filial primary key (cd_empresa, cd_filial));

OBS: para ativar a constraint : alter table filial enable constraint fk_filial;

DELETE CASCADE ACTION

37

Opo a ser utilizada quando da definio do constraint foreing key, para que quando deletamos registros da tabela pai os registros da tabela filho sejam automaticamente deletados. Exemplo create table empregado (................................ cd_depto number(2) constraint fk1_emp_dept references departamento on delete cascade ..........................);

DELETANDO CONSTRAINT alter table filial drop constraint fk_filial;

6 PL/SQL 6.1. PORTABILIDADE Aplicaes escritas em PL/SQL so portveis para qualquer Mquina que rode ORACLE RDBMS com PL/SQL. 6.2. INTEGRAO COM RDBMS - Variveis PL/SQL podem ser definidas a partir de definies das colunas das tabelas. - Reduo de manuteno das aplicaes, pois estas adaptam-se as mudanas da Base de Dados. 6.3. CAPACIDADE PROCEDURAL - Comandos de controle de fluxo, comandos de repeties e tratamentos de erros; 6.4. PRODUTIVIDADE - Desenvolvimento de Procedures e Triggers no Oracle Forms e Oracle Reports. - Desenvolvimento de Database Triggers, Procedures e Functions a nvel do Banco de Dados

38

6.5 PRINCIPAIS CARACTERSTICAS- PL/SQL

ESTRUTURA DE BLOCO DECLARE - Opcional Variaveis, cursores, exceptions definidas pelo usurio BEGIN - Obrigatrio - SQL - PL/SQL EXCEPTION Opcional Aes que so executadas quando ocorem os erros END obrigatrio

BLOCO PL/SQL COM SUB-BLOCO DECLARE DEFINIO DE VARIVEIS BEGIN COMANDOS DECLARE DEFINIO DE VARIVEIS BEGIN COMANDOS EXCEPTION TRATAMENTO DE ERROS END;

Exemplo: Declare V_variavel varchar2(5);

39

Begin Select nome_coluna Into v_varivel From table_name; Exeption When exception_name Then ..... End; Obs: Sempre coloque um (;) no fim de SQL ou um PL/SQL.

Tipos de Blocos Anonymous Declare Begin ....... Execption

Procedure Procedure name is Begin ....... Execption End;

Function Function name return datatype is Begin ....... Return value; Execption End;

UTILIZA COMANDOS SQL SELECT, INSERT, UPDADE, DELETE, ROLLBACK, COMMIT, SAVAPOINT

DECLARAO DE VARIVEIS E CONSTANTES DATATYPES MAIS UTILIZADOS CHAR VARCHAR2 INTERGER NUMBER DATE BOOLEAN

Declare
V_data date; V_deptno number(2) := 10; V_location varchar2(13) := Atlanta; V_comm contant number :=1400;

40

EXEMPLO DECLARE NOME CHAR(30); SALARIO NUMBER(11,2); DEPART NUNBER(4); DTNASC DATE; SIM BOOLEAN; CONT NUMBER(6) :=0; PERC CONSTANT NUMBER(4,2):= 36.00;

O atributo %TYPE Declara a varivel de acordo com uma coluna definida no Banco de Dados; Exemplo V_ename emp.ename%Type; V_balance number(7,2); V_min_balance v_balance%Type :=10;

CONCEITO DE TRANSAO UMA SEQUENCIA DE COMANDOS SQL DELIMITADOS POR COMANDOS CONNECT, DISCONECT OU AINDA POR COMANDOS COMMIT. COMANDOS A SEREM UTILIZADOS EM PL/SQL 1. COMMIT 2. ROLLBACK 3. SAVEPOINT nome-do-ponto 4.ROLLBACK TO SAVEPOINT nome-do-ponto

41

EXEMPLO DE CONTROLE DE TRANSAO DECLARE <definies de variveis> BEGIN INSERT INTO TEMP VALUE (null,1,linha 1); SAVEPOINT PONTOUM; INSERT INTO TEMP VALUE (null,2,linha 2); SAVEPOINT PONTODOIS; INSERT INTO TEMP VALUE (null,3,linha 3); SAVEPOINT PONTOTRES; <COMANDOS> ROLLBACK SAVEPOINT PONTODOIS; <COMANDOS> COMMIT; END;

FUNES UTILIZADAS EM PL/SQL Podemos contar com o uso de funes de Caracteres, Numricas, Data, Converso, dentre outras. Exemplo:

Declare Cargo_atual char(10); Begin Select upper(substr(cargo,1,10)) into cargo_atual from funcionario where cd_func = 2150; End;

EM COMANDOS PL/SQL PODEMOS UTILIZAR AS SEGUINTES FUNES: FUNES DE ERRO sqlerrm, sqlcode FUNES DE CARACTERES ascii, chr, initcap, length, lower, lpad, rpad, ltrim, rtrim, substr, upper.

42

FUNES NUMRICAS abs, ceil, floor,mod, power, round, sign, trunc, sqrt........ FUNES DE DATA Add_months, lat_day, months_between, new_time, next_day, round...... CONTROLE DE FLUXO COMANDO IF 1. IF <condio> THEN <comandos> END IF; 2. IF <condio> THEN <comandos> ELSE <comandos> END IF; 3. IF <condio> THEN <comandos> ELSIF <condio> THEN <comandos> END IF; 4. IF <condio> THEN <comandos> ELSIF <condio> THEN <comandos> ELSE <comandos> END IF; 5. IF <condio> THEN IF <condio> THEN <comandos> END IF; END IF;

43

EXEMPLO DECLARE QUANT NUMBER(3); BEGIN SELECT ES.NR_QTD INTO QUANT FROM ESTOQUE ES WHERE CD_PROD = 30; IF QUANT > 0 AND QUANT < 3000 THEN UPDATE ESTOQUE SET NR_QTD = QUANT + 1 WHERE CD_PROD = 30; ELSIF QUANT >= 3000 THEN INSERT INTO ALERTA(PROD,ERRO) VALUES(30,MXIMO); ELSE INSERT INTO ALERTA(PROD,ERRO) VALUES(30,MNIMO); END IF; END;

COMANDOS DE REPETIO SO UTILIZADOS PARA EXECUTAR REPETIDAMENTE O CDIGO ESCRITO DENTRO DELES. LOOP FOR LOOPs WHILE LOOP CURSOR FOR LOOPs

EXEMPLO COMANDO LOOP DECLARE X NUMBER := 0; COUNTER NUMBER := 0;

44

BEGIN LOOP X := X + 1000; COUNTER := COUNTER + 1; IF COUNTER > 4 THEN EXIT; END IF; DBMS_OUPUT.PUT_LINE (X || || COUNTER || LOOP); END LOOP; END; / EXEMPLO COMANDO FOR .. LOOP DECLARE A,B NUMBER(3):= 0; BEGIN FOR A IN 1..25 LOOP B:= B + 1; DBMS_OUTPUT.PUT_LINE(LOOP1 - ||B); END LOOP; END; EXEMPLO COMANDO WHILE .. LOOP DECLARE X NUMBER(3); Y VARCHAR2(30); K DATE; J NUMBER(3); BEGIN X:= 0; WHILE X<= 100 LOOP K:= SYSDATE-X; Y := 30; INSERT INTO TESTE VALUES (X,Y,K); X := X + 1; END LOOP; COMMIT; END; CURSOR CURSOR < nome-cursor > [parmetro tipo,...] IS < comando select >

45

EXEMPLO: CURSOR MEU_CURSOR IS SELECT ENAME, EMPNO, SAL FROM EMP ORDER BY SAL DESC; EXEMPLO DE PL/SQL UTILIZANDO CURSOR DECLARE CURSOR C1 IS SELECT ENAME, EMPNO, SAL FROM EMP ORDER BY SAL DESC; MY_ENAME CHAR(10); MY_EMPNO NUMBER (4); MY_SAL NUMBER (7,2); BEGIN OPEN C1; FOR I IN 1..100 LOOP FETCH C1 INTO MY_ENAME, MY_EMPNO, MY_SAL; EXIT WHEN C1%NOTFOUND; DBMS_OUPUT.PUT_LINE (MY_SAL || || MY_EMPNO || || MY_ENAME); END LOOP; CLOSE C1; END;

EXCEES SO USADAS NO PL/SQL PARA LIDAR COM QUAISQUER ERROS QUE OCORRAM DURANTE A EXECUO DE UM BLOCO. H DOIS TIPOS DE EXECEES, AS DEFINIDAS INTERNAMENTE PELA PL/SQL E AS DEFINIDAS PELO USURIO. NESTA PARTE VEREMOS APENAS ALGUMAS DELAS

SINTAXE: EXCEPTION

46

WHEN <nome-exeception> THEN <comandos>; WHEN <nome-execetion> THEN <comandos>; EXEMPLO EXCEPTION NO_DATA_FOUND Quando um select no retorna nenhuma linha

TOO_MANY_ROWS - Quando um select retorna mais de uma linha OTHERS - Qualquer tipo de erro DECLARE NOMECHAR(15); CARGO CHAR(10); BEGIN SELECT ENAME, JOB INTO NOME, CARGO FROM EMP WHERE EMPNO = 1111; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO PROBLEMA (ERRO,DTERRO) VALUES (REGISTRO INEXISTENTE,SYSDATE); WHEN TOO_MANY_ROWS THEN INSERT INTO PROBLEMA (ERRO,DTERRO) VALUES (MUITOS REGISTROS,SYSDATE); WHEN OTHERS THEN INSERT INTO PROBLEMA (ERRO,DTERRO) VALUES (OUTRO ERRO QUALQUER,SYSDATE); END;

47

OUTRO EXEMPLO DECLARE NM VARCHAR2(30); BEGIN SELECT NOME INTO NM FROM TESTE WHERE IDADE=30; DBMS_OUTPUT.PUT_LINE(NM); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('IDADE INEXISTENTE'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('MULTIPLAS LINHAS'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('OUTRA SAIDA'); END;

RETORNANDO ERROS SQLERR - Retorna o nmero do erro SQLERRM Retorna o nmero e a descrio do erro Exemplo BEGIN INSERT INTO TESTE VALUES (50,45,SYSDATE); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.PUT_LINE('ERRO - '||SQLERRM); END;

EXCEPTION

s s s

DUP_VAL_ON_INDEX s Chave Duplicada INVALID_CURSOR s Operao Ilegal com Cursor INVALID_NUMBER s Converso invlida p/numrico

48

LOGIN_DENIED s Usurio/Senha Invlida s NO_DATA_FOUND s Nenhuma linha retornada s NOT_LOGGED_ON s Usurio no conectado s OTHERS Erro no declarado em exceptions

PROGRAM_ERROR s Problema Interno s STORAGE_ERROR s Falta de Memria s TIMEOUT_ON_RESOURCE s Tempo de espera s TOO_MANY_ROWS s Retorna Muitas Linhas s TRANSACTION_BACKED_OUT s Volta Atrs uma transao s VALUE_ERROR s Erro Converso,Expresso s ZERO_DIVIDE Diviso por zero

Exerccio Escreva um bloco PL/SQL para selecionar o nome do cliente tratando os erros de nenhum valor encontrado e muitos valores enontrados. Adicione tambm uma exceo geral para cobrir outro erro que venha a ocorrer. Exceptions Definidas Pelo Usurio Exemplo: DECLARE X NUMBER := 0; Y NUMBER := 0; ESTOURO EXCEPTION; BEGIN FOR X IN 1..1000 LOOP Y:= X + (X/2); IF Y > 1000 THEN RAISE ESTOURO; END IF;

49

END LOOP; EXCEPTION WHEN ESTOURO THEN DBMS_OUTPUT.PUT_LINE('ESTOURO DE CAPACIDADE'); END;

PROCEDURE SINTAXE: PROCEDURE nome_procedure IS variable1 datatype; ... BEGIN comandos; ... EXCEPTION when ... END nome_procedure;

EXEMPLO PROCEDURE CREATE OR REPLACE PROCEDURE CHECK_SALARY (EMP_ID INTEGER, INCREASE REAL) IS CURRENT_SALARY REAL; SALARY_MISSING EXCEPTION; BEGIN SELECT SAL INTO CURRENT_SALARY FROM EMP WHERE EMPNO = EMP_ID; IF CURRENT_SALARY IS NULL THEN RAISE SALARY_MISSING; ELSE UPDATE EMP SET SAL = SAL + INCREASE WHERE EMPNO = EMP_ID; EXCEPTION WHERE NO_DATA_FOUND THEN INSERT INTO EMP_AUDIT VALUES (EMP_ID, NO SUCH NUMBER); WHEN SALARY_MISSING THEN (EMP_ID, SALARY IS NULL); END CHECK-SALARY; /

50

FORMA DE CHAMADA CHECK_SALARY(EMP_NUM,AMOUNT); PACKAGE UM OBJETO DO DATABASE QUE CONTM UM GRUPO DE FUNES RELACIONADAS. UM PACKAGE PODE CONTER: PROCEDURES FUNCTIONS CURSOR DEFINITIONS VARIABLES AND CONTANTS EXCEPTION DEFINITIONS

EXEMPLO PACKAGE CREATE REPLACE PACKAGE EMP_ACTION IS PROCEDURE HIRE_EMPLOYEE (EMPNO NUMBER, ENAME CHAR, .....); PROCEDURE FIRE_EMPLOYEE (EMP_ID NUMBER); END EMP_ACTIONS; / CREATE OR REPLACE PACKAGE BODY EMP_ACTIONS IS PROCEDURE HIRE_EMPLOYEE (EMPNO NUMBER, ENAME CHAR, .....); IS BEGIN INSERT INTO EMP VALUES (EMPNO, ENAME, .....); END HIRE_EMPLOYEE; PROCEDURE FIRE_EMPLOYEE(EMP_ID NUMBER) IS BEGIN DELETE FROM EMP WHERE EMPNO = EMP_ID; END FIRE_EMPLOYEE; END EMP_ACTIONS; / DATABASE TRIGGER
51

So programas PL/SQL, utilizados para completar a integridade, segurana e regras de negcios retirando estas tarefas dos programas. Eles esto ligados a uma tabela e associado a um Evento.

CARACTERSTICA . Disparado automaticamente quando a ocorrncia do Evento

PARTES DE UM DATABASE TRIGGER PARTE TRIGGER TYPE TRIGGERING EVENT TRIGGER RESTRICTION TRIGGER ACTION UTILIZAO DATABASE TRIGGERS TRIGGER TYPE BEFORE STATEMENT BEFORE ROW AFTER ROW AFTER STATEMENT EXEMPLO DE UTILIZAO Garantir segurana e integridade Calcular campos derivados para nova linha Auditoria a nvel de valor ou linha Auditoria em geral DESCRIO BEFORE / AFTER (comando, linha) INSERT / UPDATE / DELETE WHEN (clause opcional) PL/SQL BLOCK

PREDICADOS CONDICIONAIS EM DATABASE TRIGGERS INSERTING UPDATING

52

DELETING

53

EXEMPLO DATABASE TRIGGER COM PREDICADO CONDICIONAL

CREATE TRIGGER TOTAL_SALARY AFTER DELETE OR INSERT OR UPDATE OF DEPTNO,SAL ON EMP FOR EACH ROW BEGIN IF DELETING THEN UPDATE DEPT_BUDGET SET TOTAL_SAL = TOTAL_SAL - : OLD.SAL WHERE DEPTNO =:OLD.DEPTNO; END IF; IF INSERTING THEN UPDATE DEPT_BUDGET SET TOTAL_SAL = TOTAL_SAL + :NEW.SAL WHERE DEPTNO =:NEW.DEPTNO; END IF; IF UPDATING THEN UPDATE DEPT_BUDGET SET TOTAL_SAL = TOTAL_SAL + (:NEW.SAL -:OLD.SAL); WHERE DEPTNO =:OLD.DEPTNO; END IF; END; ATIVANDO E DESATIVANDO DATABASE TRIGGER Quando criamos um database trigger ele fica automaticamente ativado. As vezes temos necessidade de desativ-los como por exemplo: . Os objetos referenciados pelo database trigger no esto disponveis; . Vamos recuperar dados da Tabela Podemos desativar/ativar um database trigger isoladamente ou todos relacionados a uma tabela especfica.

ALTER TRIGGER [schema.] trigger_name {ENABLE | DISABLE } EXEMPLO: ALTER TRIGGER TRG_EMPRESA DISABLE;

54

ALTER TRIGGER TRG_EMPRESA ENABLE; ALTER TABLE [schema.] table_name { ENABLE | DISABLE } ALL TRIGGERS EXEMPLO: ALTER TABLE EMPRESA DISABLE ALL TRIGGERS; ALTER TABLE EMPRESA ENABLE ALL TRIGGERS; ELIMINANDO UM DATABASE TRIGGER DROP TRIGGER [ schema.] trigger_name EXEMPLO: DROP TRIGGER TRG_EMPRESA; VIEW DO DIOCIONRIOS COM INFORMAES DE DATABASE TRIGGERS . USER_TRIGGERS . DBA_TRIGGERS

55

DATABASE TRIGGER REPLICAO DE TABELA

CREATE TRIGGER REP_EMPRESA BEFORE INSERT OR UPDATE OR DELETE ON EMPRESA FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO EMPRESA@SPAULO VALUES (:NEW.CD_EMPRESA,:NEW.NM_RAZAO_SOCIAL); ELSIF UPDATING THEN UPDATE EMPRESA@SPAULO SET NM_RAZAO_SOCIAL =:NEW.NM_RAZAO_SOCIAL; WHERE CD_EMPRESA =:OLD.CD_EMPRESA ELSE DELETE FROM EMPRESA@SPAULO WHERE CD_EMPRESA =:OLD.CD_EMPRESA; END IF; END;

56