Administração de Banco de Dados – Aula 1 Conceitos Fundamentais em Sistemas de Bancos de Dados e suas Aplicações A importância da informação para a tomada de decisões nas organizações tem impulsionado o desenvolvimento dos sistemas de processamento de informações. Sistema de Gerenciamento de Bancos de Dados(SGBD): é um software com recursos específicos para facilitar a manipulação das informações dos bancos de dados e o desenvolvimento de programas aplicativos. Exemplos: Oracle, Ingres, Paradox*, Access*, SQL. MYSQL, PostGree, Firebird. Objetivos de um Sistema de Bancos de Dados – Isolar os usuários dos detalhes mais internos do banco de dados (abstração de dados). – Prover independência de dados às aplicações (estrutura física de armazenamento e à estratégia de acesso). Vantagens: – rapidez na manipulação e no acesso à informação, – redução do esforço humano (desenvolvimento e utilização), – disponibilização da informação no tempo necessário, – controle integrado de informações distribuídas fisicamente, – redução de redundância e de inconsistência de informações, – compartilhamento de dados, – aplicação automática de restrições de segurança – redução de problemas de integridade. Níveis de Abstração Nível físico: nível mais baixo de abstração. Descreve como os dados estão realmente armazenados, englobando estruturas complexas de baixo nível. Nível conceitual: descreve quais dados estão armazenados e seus relacionamentos. Neste nível, o banco de dados é descrito através de estruturas relativamente simples, que podem envolver estruturas complexas no nível físico. Nível de visões do usuário: descreve partes do banco de dados, de acordo com as necessidades de cada usuário, individualmente. Linguagens de Definição e Manipulação de Dados A SQL divide-se em três grupos: - Linguagem de Definição de Dados (DDL) - Linguagem de Controle de Dados (DCL) - Linguagem de Manipulação de Dados (DML) Linguagem de Definição de Dados (DDL) Tem como objetivo definir, alterar e eliminar as tabelas usadas para armazenar os dados. CREATE TABLE, CREATE VIEW, são comandos de definição de dados, dentre outros. Exemplo: Criação de Tabelas Em SQL as tabelas possuem a função de armazenar os dados do Banco de Dados. O comando para criação de tabelas no SQL é o CREATE TABLE. Exemplo de CREATE TABLE: CREATE TABLE T_Funcionario (cod_funcionario VARCHAR(2), nome_funcionario VARCHAR(30), end_funcionario VARCHAR(40), CONSTRAINT pk_funcionario PRIMARY KEY (cond_funcionario), TABLESPACE ST_funcionario; Linguagem de Controle de Dados (DCL) A DCL contém elementos que serão úteis num sistema multiusuário, onde a privacidade das informações é importante, bem como a segurança das tabelas e o estabelecimento de fronteiras entre as transações. Os comandos GRANT e REVOKE são alguns dos comandos utilizados para o controle de dados. Linguagem de Manipulação de Dados (DML) Esta linguagem contém os componentes da linguagem e conceitos para a manipulação das informações armazenadas nas tabelas. Os comandos SELECT, UPDATE, INSERT, bem como outros, são comandos de manipulação. O Comando mais utilizado na linguagem SQL para manipulação dos dados é o SELECT. Com ele é que produzimos as “Queries”, ou seja, as pesquisas no Banco de Dados. Exemplos: Selecionando Dados a) SELECT * FROM ALUNO; Retorna todas as linhas e todas as colunas da tabela ALUNO. b) SELECT MATRICULA, NOME_ALUNO FROM ALUNO; Retorna todas as linhas das colunas matrícula e o nome do aluno da tabela ALUNO. c) SELECT MATRICULA, NOME_ALUNO FROM ALUNO WHERE NOME_ALUNO = ‘JOAO DA SILVA’; Retorna a matrícula e o nome do aluno que tenham nome igual a JOAO DA SILVA. d) SELECT MATRICULA FROM CURSA WHERE ((NOTA1+NOTA2+NOTA3)/3) > 7 AND CD_DISCIPLINA = ‘PORT’; Retorna a matrícula de todos os alunos que obtiveram média acima de sete na disciplina PORT. e) SELECT AVG(SALARIO) FROM EMPREGADO; Retorna a média dos salários dos funcionários da tabela. Tarefas de um Sistema de Gerenciamento de Bancos de Dados – interação com o sistema de arquivos do sistema operacional – cumprimento da integridade – cumprimento da segurança – cópias de segurança (“backup”) e recuperação, – controle de concorrência. Papéis Humanos em um Sistema de Bancos de Dados Usuários do Banco de Dados Realizam operações de manipulação de dados. – programadores de aplicações – usuários sofisticados – usuários especializados – usuários “ingênuos”. Administrador do Banco de Dados e Administrador do SGBD – Administrador de Dados ( DBA) – Administrador do SGBD – definição e atualização do esquema do banco de dados. – definição da estrutura de armazenamento e a estratégia (ou método) de acesso – concessão de autorização para acesso a dados – definição de controles de integridade – definição de estratégias para cópia de segurança e recuperação – monitoramento do desempenho – execução de rotinas de desempenho – modificação da organização física. O Administrador de Banco de dados e o Administrador do SGBD , normalmente são as mesmas pessoas. As tarefas de um DBA dependem da política de cada empresa , mas se considerarmos os serviços de empresas mais rígidas , fica a cargo do mesmo : - Rever o modelo de banco de dados , quando este for criado pelo Analista de Sistemas ou mesmo criar este modelo de dados e documentar este modelo usando um software gráfico, como o ERWIN. - Criar os banco de dados - Criar as tabelas - Criar as regras para cada tabela - Criar índices e chaves - Dar direitos de acessos ao banco de dados , direito de acesso a tabelas e direito de acesso aos campos de cada tabela. - Promover a rotina de backup (schedulagem) - Efetuar testes de restore para confirmar se o backup esta confiável - Promover a Schedulagem (agendamento) de rotinas que o sistema exige que rode num processo batch (rotinas que devem ser executadas sem a intervenção de usuários) - Cuidar da performance do banco de dados , monitorando tarefas que possam sobrecarregar o mesmo , por exemplo um Select mal elaborado que acaba elevando a 100% o consumo de memória ou disco. Neste caso o DBA deverá comunicar os Analista para que revejam os processo do sistema em questão. - O DBA deverá analisar os volumes de dados para prever as possibilidades do banco de dados rodar mais de uma instancia do mesmo (Muitas vezes , é necessário mais memória ou até mesmo um servidor com mais de um processador para que o Banco de Dados forneça uma melhor performance) - O DBA pode monitorar outras ações como , lentidão de uma aplicação pela ausência de índices , store procedures ou triggers mal dimensionadas e configurações que estão mal dimensionadas . Os softwares de banco de dados permitem configurações para dar maior prioridade ou não para um determinada instancia , para aumentar a memória cachê quando a aplicação exigir que mais informações permaneçam na memória RAM , para aumentar o buffer , quando for mais interessante deixar os dados na memória RAM e assim diminuir os acessos para disco , nos processos de atualização ou exclusão de dados (neste caso é fundamental um bom sistema de nobreak) .Enfim , existe, diversas configurações que um banco de dados suporta , de maneira que a performace do mesmo possa ser melhorada , isto é muito semelhante comparando com um carro de formula 1 onde o tipo de peneu , tipo da borracha do pneu , posição do aerofólio, configuração do motor , etc . podem fazer parte de um processo para que este carro vença a corrida. O Oracle é muito rico nestes parâmetros , por isto ele é considerado um dos melhores softwares de banco de dados. Os softwares de banco de dados , como p SQL e o Oracle , fazem um log das transações de inserção, atualização e exclusão. Este log pode gravado em disco , e quando houver a perda do banco de dados , é possível restaurar o backup do dia anterior e também os dados do log permitindo assim , que possamos ter uma base dados mais próxima dos últimos momentos antes do acidente do bando de dados. Imagine um empresa tipo jornal , que grava os anúncios de classificados de clientes e que não utiliza mais o papel . Caso tenhamos que restaurar o backup do dia anterior , não vai ajudar muito , caso o problema tenha acontecido no dia posterior ao backup la´ pelas 16:00 .Assim sendo se for usado o log efetuando um backup do mesmo , por exemplo a cada 1 hora , podemos voltar o backup do dia anterior e votar todos os log´s até o ultimo backup entes do acidente. Isto tem um custo quanto a performance dfo banco do banco de dados , pois consome transações de gravação dos logs em disco . Caso não se deseje trabalhar com estes logs , é possível configurar o banco de dados , como no SQL Sever com : Truncate Log on CheckPoint O DBA , pode configurar o tamanho das paginas que vem para a memória dos micros CLIENT , sito é um SELECT traz um volume de dados padrão. Esta definição depende da quantidade de RAM física no computador e os requisitos de utilização e desempenho do SQL Server. Memória é designada em 2 KB-blocos. Por exemplo, para um servidor SQL dedicado com 128 megabytes (MB) de RAM, Random Access MEMORY, que poderá definir a memória para 64 MB de RAM (Blocos 2-KB 32.768) para o SQL Server. Caso o tamanho da página seja de 32 KB , as informações vem em blocos de maneira a não sobrecarregar o trafego de dados na rede. Este numero pode ser aumentado , para se obter maior performance . Caso o SELECT tenha diversos registros , teremos muitas paginas , pois esta virão de blocos em blocos , se aumentarmos o tamanho da pagina , podemos ter mais registros numa pagina e conseqüentemente mais performance , porem teremos mais trafego de dados circulando na rede e talvez mais SWAP , isto é que ficam transitando entre a memória e disco da maquina client. Portanto temos que avaliar as vantagens , e isto pode ser uma grande desvantagem se o micro client tiver pouca memória e um processador lento. Conceitos Básicos do Banco de Dados Chaves , são atributos que podem ser colocados nos campos das tabelas do banco de dados. A chave , como no caso de uma chave de um porta , não é obrigatória , ele é colocada para dar mais segurança. As chaves mais importantes são Chave Primaria e Chave Estrangeiras . Alem disto o banco de dado permite que se adicionem regras em cada campo , por exemplo uma regra num campo de valor para que só aceite um valor maior que 1000, um campo que não aceite ficar sem preenchimento , um campo que só aceite receber a String ‘M’ ou ‘F’, etc.. Chave Primaria , é um atributo que pode ser colocado num campo de uma tabela e que faz com que nesta tabela , não possam existir informações duplicadas , considerando este campo como referencia . A chave primaria , exige o preenchimento do campo com alguma informação , portanto ,ele não pode ficar vazio. A criação de uma chave primária , faz com que a mesma exiba os registros , no caso do uso do comando SELECT , na ordem do campo de chave primaria , em ordem ascendente ou descendente. Exemplo : Tabela Alunos Matricula ( chave primaria - PK) Nome Sexo Fone Endereço Neste caso podemos colocar uma chave na matricula para que a mesma nunca seja repetida por mais de uma aluno. Não seria recomendável colocar a chave no campo nome pois podemos ter dois nomes iguais , tipo : JOAO DA SILVA É possível , uma tabela ter mais de um campo de chave primaria , mas isto tem que ser feito de maneira que se constitua numa chave composta. Os registros serão apresentados , num SELECT , ordenados pela chave composta . Tabela Alunos Escola Matricula Nome Sexo Fone Endereço Neste caso , o sistema vais atender a mais de uma instituição e portanto podem haver mais de uma matricula igual. Portanto , a chave será composta de Escola+Matricula A chave estrangeira , tem a ver com o conceito de integridade de dados. Considere as seguintes tabelas : Cargos CodCargo (chave primaria) Descr_Cargo Funcionários Matricula (chave primaria) Nome CodCargo Salário O campo código do cargo foi usado na tabela Funcionários , pois se fosse colocado a descrição do cargo , correríamos o risco de ter uma mesma descrição escrita de diversas formas , como : Anl. Sistemas Analista de Sistemas Anl. Sist Quando temos um campo de grupo , por questões de normalização das informações , devemos quebrar em duas ou mais tabelas . Mas ai ficamos com um enorme problema , pois caso desejarmos incluir um código na tabela FUNCIONARIOS que ainda não tenha sido inserida na tabela CARGOS, perdemos a referencia e a integridade referencial da informação , assim sendo , ficamos com um problema de não obediência a integridade referencial e de nada iria adiantar criar duas tabelas. Outros casos podem acontecer considerado a integridade referencial : - Exclusão de um registro da tabela CRGOS , quando este código já tiver sido adcionado em outros regsitros da tabela FUNCIONARIOS. Por exemplo : Tabela CARGOS CodCargo 00013 Desc_Cargo : ANALISTA DE SISTEMAS Tabela FUNCIONARIOS MATRICULA 1222 2222 3333 NOME Jose Silva Ana Lima Pedro Gama CODCARGO 00013 00015 00013 SALARIO 1000 2000 1000 Desta forma , se excluirmos o código 00013 de cargos , os registros da tabela FUNCIONARIO que mantiverem o código 00013 , ficam órfãos , pois não tem como identificar mais a sua origem. Isto também ocorreria , caso fosse alterado o código na tabela CARGOS , por exemplo passar o código 00013 para 00020 , os registros da tabela FUNCIONARIO , ficaram sem a integridade referencial com a tabela CARGOS. Imagine se isto fosse feito num Banco onde numa tabela temos os dados de cadatro de um cliente e nouta os movimentos de credito e debito m Neste caso , poderíamos ter contas corrente completamente órfãos de informações. Podemos colocar uma chave estrangeira no campo CODCARGO , da tabela FUNCIONARIOS , para isto ela deve também existir numa outra tabela e obrigatoriamente deve ser chave primaria nesta outra tabela , no caso a tabela CARGOS. Na criação da chave estrangeira , são utilizados o parâmetro FOREIGN KEY e no da chave primaria PRIMARY KEY , como veremos mais a frente.