Sistemas Gerenciadores de Banco de Dados Introdução Prof. Marcos Alexandruk EMENTA Sistemas gerenciadores de banco de dados; Configurações do ambiente de trabalho; Diferenças entre as diversas plataformas; Criação de tabelas e consultas; Mecanismos de back-up; Importação e exportação. © 2014 - Prof. Marcos Alexandruk OBJETIVO Conhecer os requisitos de instalação e recursos dos principais SGBDs (Sistemas Gerenciadores de Banco de Dados). © 2014 - Prof. Marcos Alexandruk BIBLIOGRAFIA BÁSICA COSTA, Rogério Luís de Carvalho. SQL: guia prático. 2. ed. Rio de Janeiro: Brasport, 2007. SILBERSCHATZ, A.; KORTH, H.; SUBARSHAN, S. Sistema de banco de dados. 3. ed. Rio de Janeiro: Campus, 2004. SOARES, Walace. MySQL conceitos e aplicações. São Paulo: Érica, 2004. © 2014 - Prof. Marcos Alexandruk BIBLIOGRAFIA COMPLEMENTAR BRYLA, Bob; LONEY, Kevin. Oracle Database 11g manual do DBA. Porto Alegre: Bookman, 2009. DATE, C. J. Introdução a sistemas de bancos de dados. Rio de Janeiro: Elsevier, 2004. ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de banco de dados. 4th ed. São Paulo: Pearson Addison Wesley, 2010 PEREIRA Neto, Álvaro. PostgreSQL: técnicas avançadas: versões Open Source 7.x e 8.x: soluções para desenvolvedores e administradores de banco de dados. 4. ed. São Paulo: Érica, 2007. RAMALHO, José Antonio Alves. Oracle 10g: ideal para quem deseja o aprendizado do Oracle. São Paulo: Pioneira Thomson Learning, 2005. © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 1 Prof. Marcos Alexandruk Características dos SBGDs Conceitos gerais As doze regras de Codd para SGBDRs © 2014 - Prof. Marcos Alexandruk Conceitos gerais SGBD (Sistema de Gerenciamento de Banco de Dados): coleção de dados inter-relacionados + conjunto de programas para acessar e manipular esses dados Silberschatz p. 4 © 2014 - Prof. Marcos Alexandruk Conceitos gerais O gerenciamento de dados envolve: • Definir estruturas de armazenamento • Fornecer mecanismos para a manipulação de informações © 2014 - Prof. Marcos Alexandruk Conceitos gerais O principal objetivo de um SGBD é fornecer um ambiente que seja tanto conveniente como eficiente para armazenamento e recuperação de informações. © 2014 - Prof. Marcos Alexandruk Conceitos gerais O SGBD precisa garantir a segurança apesar de falhas de sistema ou tentativas de acesso não autorizado. © 2014 - Prof. Marcos Alexandruk Conceitos gerais Embora as interfaces de usuário ocultem os detalhes de acesso a um banco de dados, e a maioria das pessoas nem mesmo tenha consciência de estar lidando com um banco de dados, acessar banco de dados é uma parte essencial da vida de quase todo mundo hoje. Silberschatz p. 2 © 2014 - Prof. Marcos Alexandruk As doze regras de Codd Doze regras estabelecidas por Edgard F. Codd, em 1985, por meio das quais podemos determinar o quanto um banco de dados é relacional ou não. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 1. Regra das informações em tabelas: As informações a serem apresentadas no banco de dados devem ser apresentadas como relações (tabelas formadas por linhas e colunas) e o vínculo de dados entre as tabelas deve ser estabelecido por meio de valores de campos comuns. Aplica-se tanto aos dados quanto aos metadados (descrições dos objetos do banco de dados). © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 2. Regra de acesso garantido: Para que o usuário possa acessar as informações contidas no banco de dados, o método de referência deve ser o nome da tabela, o valor da chave primária e o nome do campo. A ordem de apresentação dos dados não tem importância no contexto. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 3. Regra de tratamento sistemático de valores nulos: O SGBD deve ter capacidade de tratar valores que não são fornecidos pelos usuários de maneira que permita a distinção dos valores reais. Exemplo: um campo de armazenamento de dados numéricos, pode conter valores válidos, o valor zero e valores nulos. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 4. Regra do catálogo relacional ativo: Toda a estrutura do banco de dados (tabelas, campos, índices, etc.) deve estar disponível em tabelas (catálogo). Essas tabelas são manipuladas pelo próprio sistema, quando o usuário efetua alterações na estrutura do banco de dados. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 5. Regra da atualização de alto nível: O usuário deve ter capacidade de manipular as informações do banco de dados em grupos de registros, ou seja, ser capaz de inserir, alterar e excluir vários registros ao mesmo tempo. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 6. Regra da sublinguagem de dados abrangente: Pelo menos uma linguagem deve ser suportada para que o usuário possa manipular a estrutura do banco de dados (exemplo: criação e alteração de tabelas), assim como extrair, inserir, atualizar ou excluir dados, definir restrições de acesso e controle de transações (COMMIT/ROLLBACK). Deve ser possível também a manipulação de dados por meio de programas aplicativos. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 7. Regra da independência física: Quando for necessária alguma modificação na forma como os dados são armazenados fisicamente, nenhuma alteração deve ser necessária nas aplicações que fazem uso do banco de dados. Devem também permanecer inalterados os mecanismos de consulta e manipulação de dados utilizados pelos usuários finais. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 8. Regra da independência lógica: Qualquer alteração efetuada na estrutura do banco de dados, como inclusão e exclusão de campos de uma tabela ou alteração no relacionamento entre tabelas não deve afetar o aplicativo que o usa. O aplicativo deve manipular visões das tabelas. Visões são uma espécie de tabela virtual, que agrupam dados de uma ou mais tabelas físicas e apresentam ao usuário os dados. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 9. Regra da atualização de visões: Visto que as visões dos dados são teoricamente suscetíveis a atualizações, então um aplicativo que faz uso desses dados deve ser capaz de efetuar alterações, exclusões e inclusões neles As atualizações devem ser repassadas automaticamente às tabelas originais. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 10. Regra da independência de integridade: As várias formas de integridade do banco de dados (integridade de entidade, referencial, restrição e obrigatoriedade de valores, etc.) precisam ser estabelecidas dentro do catálogo do sistema ou dicionário de dados, e ser totalmente independente da lógica dos aplicativos. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 11. Regra da independência de distribuição: Sistemas de banco de dados podem estar distribuídos em diversas plataformas, interligados em rede e podem inclusive estar fisicamente distantes entre si. Essa capacidade de distribuição não pode afetar a funcionalidade do sistema e dos aplicativos que fazem uso do banco de dados. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 12. Regra não subversiva: O sistema deve ser capaz de impedir que qualquer usuário ou programador de passar por cima de todos os mecanismos de segurança, regras de integridade do banco de dados e restrições, utilizando algum recurso ou linguagem de baixo nível que eventualmente possam ser oferecidas pelo próprio sistema. © 2014 - Prof. Marcos Alexandruk As doze regras de Codd 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Regra das informações em tabelas Regra de acesso garantido Regra de tratamento sistemático de valores nulos Regra do catálogo relacional ativo Regra da atualização de alto nível Regra da sub linguagem de dados abrangente Regra da independência física Regra da independência lógica Regra da atualização de visões Regra da independência de integridade Regra da independência de distribuição Regra não subversiva © 2014 - Prof. Marcos Alexandruk Aula 1: Exercícios 1. Defina em suas palavras o que é um SGBD. 2. Qual é o principal objetivo de um SGBD (Sistema de Gerenciamento de Banco de Dados)? 3. Quais recursos do SGBD podem ser utilizados para garantir a segurança dos dados? 4. Liste algumas ocasiões em que você direta ou indiretamente interagiu com bancos de dados. 5. Escolha três regras elaboradas por Edgard F. Codd e comente sobre a sua importância para os bancos de dados relacionais. © 2014 - Prof. Marcos Alexandruk Aula 1: Use AVA Comente as últimas ameaças divulgadas pela imprensa que envolvam a segurança dos dados de pessoas e empresas. Que soluções ou medidas você propõe para evitar o “roubo” de informações? © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 2 Prof. Marcos Alexandruk Diferenças entre os principais SBGDs Classificações dos SGBDs: • MODELO DE DADOS • NÚMERO DE USUÁRIOS • LOCALIZAÇÃO © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS HIERÁRQUICOS • Um dos primeiros sistemas de controle de base de dados; • IMS (Information Management System): desenvolvido pela IBM e pela Rockwell no fim da década de 1960; • Ambientes de alta plataforma (mainframes): o IMS era instalado em sistemas do tipo: OS/V1, OS/V2, MVS, MVS/XA e ESA; • Exemplo: projeto Apolo da NASA. © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS HIERÁRQUICOS Utiliza a organização de endereços físicos do disco em sua estrutura. Baseado em dois conceitos fundamentais: • segmentos (equivalentes a registros); • relacionamentos (ligações) pai-filho. Um segmento pai pode ter nenhum ou vários segmentos filhos, um segmento filho pode ter apenas um segmento pai. Estrutura em árvore com dados em níveis hierárquicos. © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS HIERÁRQUICOS DESVANTAGENS Em relacionamentos N:N (muitos-para-muitos) a duplicação de registros é necessária para preservar a estrutura de árvore do banco de dados. A duplicação de registros tem dois inconvenientes principais: • atualizações podem levar a inconsistência de dados; • desperdício de espaço. © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS EM REDE Definidos pelo DBTG (Data Base Task Group) do comitê CODASYL (Conference on Data Systems Language) a partir de 1971. Permitem que um mesmo registro participe de vários relacionamentos devido à eliminação da hierarquia. Os comandos de manipulação de registros devem ser incorporados a uma linguagem hospedeira (COBOL, a mais comum, Pascal e FORTRAN). Estruturas fundamentais: registros (records) e conjuntos (sets). Registros contêm dados relacionados e são agrupados em tipos de registros que armazenam os mesmos tipos de informações. © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS RELACIONAIS A maioria dos SGBDs atualmente em uso se enquadra no modelo relacional. Baseia-se nos princípios matemáticos utilizados por Edgard F. Codd em 1968: teoria dos conjuntos e da álgebra relacional. Em 1985, Codd propôs um conjunto de doze regras para que um banco de dados fosse considerado como relacional. Organiza os dados em tabelas (relações) formadas por linhas e colunas. Tabelas são similares a conjuntos de elementos: relacionam as informações de um mesmo assunto de um modo organizado. Facilita a navegação em grandes quantidades de dados, otimizando o uso do hardware. © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS ORIENTADOS A OBJETOS Surgiram em meados de 1980 para armazenamento de dados complexos, não adequados aos sistemas relacionais: GIS (Geographical Information System) e CAD/CAM/CAE. O modelo é caracterizado pela definição de objetos com suas propriedades e operações (métodos). O OMDG (Object Database Management Group) definiu um padrão de estrutura para bancos de dados orientados a objetos. O grupo propôs um padrão conhecido como ODMG-93, atualmente revisado e denomidado ODMG 2.0. Linguagens: ODL (Object Definition Language) e OQL (Object Query Language). © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS BANCOS DE DADOS ORIENTADOS A OBJETOS O modelo de dados orientado a objetos baseia-se nos seguintes componentes: OBJETO: É uma abstração de uma entidade real. Cada objeto representa uma única ocorrência de uma entidade. ATRIBUTOS: Descrevem as propriedades de um objeto. MÉTODOS: Definem o comportamento de um objeto. Equivalem aos procedimentos da linguagem de programação tradicional. CLASSE: Conjunto de objetos que compartilham a mesma estrutura (atributos) e comportamento (métodos). HERANÇA: Capacidade de herdar atributos e métodos de classes superiores (dentro de uma hierarquia). © 2014 - Prof. Marcos Alexandruk MODELO DE DADOS © 2014 - Prof. Marcos Alexandruk NÚMERO DE USUÁRIOS BANCOS DE DADOS MONOUSUÁRIOS Permitem que apenas um usuário por vez acesse o banco de dados. Antigos (1980-1990) e direcionados a uso pessoal: dBASE III, dBASE IV, FoxBase, FoxPro. BANCOS DE DADOS MULTIUSUÁRIOS Suporta o acesso de vários usuários ao mesmo tempo. A maioria dos bancos de dados atuais oferece suporte a multiusuários. © 2014 - Prof. Marcos Alexandruk LOCALIZAÇÃO BANCOS DE DADOS CENTRALIZADOS Localizados em uma única máquina denominada Servidor de Banco de Dados. Embora centralizados, podem oferecer suporte a acesso concorrente de vários usuários. BANCOS DE DADOS DISTRIBUÍDOS O sistema gerenciador e o banco de dados estão localizados em diferentes máquinas interligadas em redes (LANS ou WANS). Independentemente de serem centralizados ou distribuídos os SGBDs atualmente trabalham dentro da arquitetura cliente-servidor. © 2014 - Prof. Marcos Alexandruk HETEROGÊNEOS BANCOS DE DADOS HETEROGÊNEOS Tendência que vem crescendo muito atualmente. Envolve basicamente distribuir na arquitetura de SGBDs vários bancos de dados de fornecedores diferentes. © 2014 - Prof. Marcos Alexandruk HETEROGÊNEOS RESUMO © 2014 - Prof. Marcos Alexandruk HETEROGÊNEOS Quais os tipos de classificações dos bancos de dados? Podem ser classificados quanto a(o): • MODELO DE DADOS • NÚMERO DE USUÁRIOS • LOCALIZAÇÃO © 2014 - Prof. Marcos Alexandruk HETEROGÊNEOS Como são classificados os bancos de dados quanto aos MODELOS DE DADOS? • HIERÁRQUICOS • EM REDE • RELACIONAIS • ORIENTADOS A OBJETOS © 2014 - Prof. Marcos Alexandruk HETEROGÊNEOS Como são classificados os bancos de dados quanto ao NÚMERO DE USUÁRIOS? • MONOUSUÁRIOS • MULTIUSUÁRIOS © 2014 - Prof. Marcos Alexandruk HETEROGÊNEOS Como são classificados os bancos de dados quanto a sua LOCALIZAÇÃO? • CENTRALIZADOS • DISTRIBUÍDOS © 2014 - Prof. Marcos Alexandruk Aula 2: Use AVA Atualmente ocorre uma necessidade crescente de gerenciamento de dados não estruturados, como os encontrados na maioria dos documentos e páginas da web. Quais soluções são utilizadas para o gerenciamento de dados não estruturados? © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 3 Prof. Marcos Alexandruk Especificações dos principais SGBDs Principais SGBDs: • dBase • Paradox • DataFlex • FoxBase / FoxPro • Access • InterBase • FireBird • Informix • Sybase • Oracle Database • SQL Server • DB2 • MySQL • PostgreSQL © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs dBase Lançado em 1984 pela Ashton-Tate (adquirido, em 1991, pela Borland) Apresentava linguagem de programação fácil de aprender, tornava possível criar aplicações inteiras Exemplo: para listar dados de um banco, o comando era: LIST ALL campo1, campo2, campoN TO PRINT Preparado para arquitetura de hardware em baixa plataforma (Apple II, Apple Macintosh, IBM-PC) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs dBase © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Paradox Lançado em 1985 pela Ansa Software (adquirida em 1987 pela Borland) Apresenta um ambiente integrado de desenvolvimento para criação de aplicativos Utiliza o QBE (Query by Example) para consultas Primeira versão para DOS (até a versão DOS 4.5, quando foi lançada uma versão para o Windows) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Paradox © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Dataflex Produzido pela empresa Data Access Corporation, fundada em 1976 Apresentava versões para mainframes e microcomputadores (com versões para UNIX, VAX/VMS, Novell Netware, CP/M, DOS, OS/2 e Linux) Possui um ambiente de desenvolvimento VDF (Visual DataFlex) disponível para Windows Acessa bases SQL Server, Oracle, DB2, etc. (Visual DataFlex: ambiente gráfico de desenvolvimento semelhante ao Visual Basic) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs FoxBase / FoxPro Lançado em dezembro de 1984 pela Fox Software (mais tarde adquirida pela Microsoft) Concorria diretamente com o dBase (inclusive com arquivos-fontes compatíveis) Escrito para microcomputadores com plataforma DOS e mais tarde adaptado para Windows A versão 9 do FoxPro foi a última a ser lançada © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Access Lançado em 1992 pela Microsoft Um dos primeiros SGBDs a ser lançado para uma plataforma gráfica (Windows) Ambiente integrado com interface intuitiva para criação e gerenciamento do banco de dados e o desenvolvimento de aplicações e relatórios Incluído em algumas versões do pacote MS Office Grande integração com a linguagem de programação Visual Basic Utilizado como banco de dados por pequenas empresas © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs InterBase Lançado em 1984 pela Groton Database Systems (Interbase, a partir de 1986, a empresa passou a ser controlada, em 1991, pela Borland) Comercializado atualmente através da Embarcadero Technologies A versão 6.0 deu origem ao FireBird (open source) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs FireBird A versão 6.0 do InterBase deu origem ao FireBird (open source) Versão atual: FireBird 2.5.3, lançada em julho de 2014 © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Informix Projetado por Roger Sippl no final dos anos 1970 A Informix foi fundada em 1980 e tornou-se pública em 1986 Na década de 1990 era o segundo banco mais popular (depois do Oracle) Em 2001 a IBM, por sugestão do Wal-Mart (o maior usuário do Informix), adquiriu a Informix Em meados de 2005, a IBM lançou a versão 10 do Informix IDS © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Sybase Fundada por Mark Hoffman e Bob Epstein em 1984, em Berkeley, na Califórnia A empresa atua em 120 países e tem mais de 82.000 clientes. 2010: A SAP adquire a Sybase por US$ 5,8 bilhões © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs Oracle Database 1977: Larry Ellison, Bob Miner e Ed Oates fundam a SDL (Software Level Laboratories) 1978: O nome da empresa é mudado para RSI (Rational Software Inc.) 1979: A RSI lança o primeiro produto comercial de banco de dados relacional utilizando a linguagem SQL 1983: Lançado o Oracle 3, o primeiro SGBD a rodar em mainframes e em minicomputadores 2013: Última versão: Oracle 12c (c: cloud) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs SQL Server Lançado pela Microsoft em 1988 Inicialmente era uma versão especial do Sybase (parceria com a Microsoft, encerrada em 1994) SQL Server 2005: grande integração com a plataforma .NET Versão atual: SQL Server 2014 (oferece novos recursos em nuvem) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs IBM DB2 Projeto começou no início dos anos 70 (Edgard Frank Codd – IBM) A princípio o produto foi chamado System R Lançado em 1983 com base no SQL/DS (para mainframe) A partir da década de 1990 inclui versões para Windows, Linux e PDAs 2006: Lançamento do DB2 9 Express DB2 9 foi o primeiro SGBD segundo a IBM a armazenar XML nativo Última versão: DB2 10.5 (Linux, Windows, etc.) / DB2 11 (z/OS) (z/OS é um sistema operacional de 64 bits para mainframes, sucessor do OS/390) © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs MySQL Desenvolvido a partir de 1995 por David Axmark, Allan Larsson e Michael Widenius 2008: Sun adquire a MySQL (US$ 1 bilhão) 2009: Oracle compra a Sun (US$ 7,8 bilhões) Licença: GNU-GPL (General Public License) Versões para Windows, LINUX, UNIX, FreeBSD e Mac OS X Muito utilizado em soluções para Web © 2014 - Prof. Marcos Alexandruk PRINCIPAIS SGBDs PostgreSQL Origem: Projeto Postgre, Universidade Berkeley, Califórnia. Equipe orientada pelo Prof. Michael Stonebraker 1988: primeira versão estável 1991: Código adquirido pela Illustra, a qual se fundiu com a Informix (de Stonebraker), hoje pertencente à IBM Licença: BSD (Berkeley Software Distribution) Versões para LINUX, UNIX, Mac OS X e Windows © 2014 - Prof. Marcos Alexandruk Aula 3: Use AVA Analise o seguinte cenário: Você foi contratado para cuidar do banco de dados de uma empresa de médio porte que está iniciando as suas atividades. A empresa optou por trabalhar com software livre, adotando o sistema operacional Linux. Você é chamado a opinar sobre que sistema de gerenciamento de banco de dados deve ser adotado. Qual seria a sua opinião e como você a justificaria? © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 4 Prof. Marcos Alexandruk Arquitetura dos principais SGBDs Oracle Database Microsoft SQL Server IBM DB2 MySQL PostgreSQL © 2014 - Prof. Marcos Alexandruk Oracle Database © 2014 - Prof. Marcos Alexandruk Oracle Database A arquitetura do Oracle é composta de duas partes básicas: Instância (Instance) Banco de Dados (Database) © 2014 - Prof. Marcos Alexandruk Oracle Database INSTÂNCIA A Instância é composta por: SGA (System Global Area) - Área Global do Sistema Background Processes - Processos de Segundo Plano © 2014 - Prof. Marcos Alexandruk Oracle Database SGA (System Global Area) É área de memória usada para armazenar informações compartilhadas pelos processos do banco de dados Está alocada na memória virtual do computador. © 2014 - Prof. Marcos Alexandruk Oracle Database Background Processes Executam tarefas de E/S e monitoram outros processos do servidor Ajudam a garantir maior paralelismo e integridade dos dados, aumentando o desempenho e a confiabilidade do sistema © 2014 - Prof. Marcos Alexandruk Oracle Database Estruturas físicas e lógicas O banco de dados Oracle possui uma estrutura física e uma estrutura lógica. © 2014 - Prof. Marcos Alexandruk Oracle Database Estrutura física A estrutura física consiste em três tipos de arquivos: Data files Control Files Redo Log Files © 2014 - Prof. Marcos Alexandruk Oracle Database Estrutura lógica A estrutura lógica do Oracle inclui: Tablespaces Segmentos Extensões Blocos de dados © 2014 - Prof. Marcos Alexandruk Oracle Database Hierarquia de armazenamento lógico e físico © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server Os componentes principais do Microsoft SQL Server são: Database Engine SSRS (SQL Server Reporting Services) SSAS (SQL Server Analysis Services) SSIS (SQL Server Integration Services) © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server Database Engine Principal serviço do SQL Server Permite armazenar, recuperar, processar e proteger os dados Fornece acesso controlado e processamento de transações para atender aos requisitos dos aplicativos © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server SSRS (SQL Server Reporting Services) Fornece ferramentas e serviços prontos para criar, implantar e gerenciar relatórios Inclui recursos de programação para estender as funcionalidades e personalizar relatórios © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server SSAS (SQL Server Analysis Services) Fornece a solução de BI (Business Intelligence) Responsável por transformar uma quantidade grande de dados em conjuntos essenciais de informação Inclui dois componentes: OLAP (On-Line Analytical Processing) Data Mining © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server SSIS (SQL Server Integration Services) Plataforma para integração de dados em nível corporativo e soluções de transformações de dados Extrai e transforma dados de diversas fontes, como arquivos de dados XML, arquivos simples e bases de dados relacionais e transfere para um ou mais destinos © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server Defaults Databases master: armazena toda a configuração do servidor e informações das instâncias resource: armazena os objetos do sistema model: fornece o modelo para todos os bancos de dados que serão criados tempdb: armazena dados temporários msdb: responsável pela automação de serviços © 2014 - Prof. Marcos Alexandruk http://technet.microsoft.com/en-us/library/bb497064.aspx © 2014 - Prof. Marcos Alexandruk © 2014 - Prof. Marcos Alexandruk IBM DB2 © 2014 - Prof. Marcos Alexandruk IBM DB2 A arquitetura do sistema da IBM possui componentes que efetuam os controles de: Processos Memória Armazenamento © 2014 - Prof. Marcos Alexandruk IBM DB2 Componente de Processo Vários processos são controlados neste componente, o principal processo é o db2sysc, que abre outros processos a partir de uma aplicação remota que se conecta ao servidor pela instrução SQL CONNECT. © 2014 - Prof. Marcos Alexandruk IBM DB2 Componente de Memória Possui áreas de memória em nível de: instância base de dados aplicação © 2014 - Prof. Marcos Alexandruk IBM DB2 Armazenamento Constituído de três componentes: Páginas e Extents: Página é a unidade mínima de armazenamento. Extent é composto por um conjunto de páginas. Buffer Pool: Espaço de memória que mantém um cache de dados e índices evitando perda de tempo de acesso em operações de entrada e saída de dados em disco, mantendo-os na memória principal. Tablespace: Mantém a estrutura lógica dos dados que serão armazenados fisicamente. © 2014 - Prof. Marcos Alexandruk IBM DB2 Defaults Tablespaces SYSCATSPACE: Contém as tabelas de catálogo. O catálogo também é conhecido como dicionário de dados em outros SGBDs. TEMPSPACE1: Usada quando é necessário espaço adicional para a realização de algumas operações, como ordenações (sorts). USERSPACE1: Usada para armazenar tabelas de usuários se não houver a especificação de outra tablespace. © 2014 - Prof. Marcos Alexandruk MySQL © 2014 - Prof. Marcos Alexandruk MySQL © 2014 - Prof. Marcos Alexandruk MySQL Compatibilidade O MySQL apresenta versões para os seguinte SO’s: Microsoft Windows Linux (Fedora, Debian, SuSE, RedHat) Unix (Solaris, HP-UX, AIX, SCO) FreeBSD Mac OS © 2014 - Prof. Marcos Alexandruk MySQL Padrão SQL SQL-92 SQL-99 SQL 2003 (parcialmente) © 2014 - Prof. Marcos Alexandruk MySQL Última versão MySQL Community Server 5.6.20 A MySQL disponibiliza também a seguinte "ferramenta gráfica" (GUI Tool) para administração do banco de dados: MySQL Workbench 6.1.7 Dados atualizados em setembro/2014 © 2014 - Prof. Marcos Alexandruk MySQL Características PORTABILIDADE: Desenvolvido em C/C++ torna-se portável entre diferentes plataformas e compiladores. MULTITHREADS: Aumenta significativamente a velocidade de processamento e facilita a integração com hardware com mais de uma CPU. ARMAZENAMENTO: Disponibiliza vários tipos de tabelas para priorizar a velocidade ou o volume de dados, entre outras características. VELOCIDADE: As tabelas tipo MyISAM utilizam cachês em consultas e indexação BTREE para tabelas tipo HEAP proporcionando maior velocidade de acesso. © 2014 - Prof. Marcos Alexandruk MySQL Multithreads Thread é a forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas simultaneamente. O suporte à thread é fornecido pelo próprio sistema operacional (SO), no caso da Kernel-Level Thread (KLT), ou implementada através de uma biblioteca de uma determinada linguagem, no caso de uma User-Level Thread (ULT). Sistemas que suportam apenas uma única tarefa são chamados de monothread e os que suportam múltiplas tarefas simultâneas são chamados de multithread. © 2014 - Prof. Marcos Alexandruk MySQL Características FULL TEXT SEARCH: Melhora o desempenho em consultas de grandes quantidades de texto. STORED PROCEDURES: Blocos de código armazenados no servidor e que podem ser invocados a partir de outras aplicações. TRIGGERS: Blocos de código armazenados no servidor são invocados automaticamente a partir de certos eventos. CURSORES: Permitem a navegação em conjuntos de resultados através de laços de repetição possibilitando realizar operações e transações à parte para cada linha de uma tabela. VISÕES: Consultas pré-programadas à partir de determinadas colunas de uma um mais tabelas. TRANSAÇÕES DISTRIBUÍDAS: Fornece a possibilidade de gerenciamento de transações realizadas com a união de vários bancos de dados. © 2014 - Prof. Marcos Alexandruk MySQL Características INTEGRIDADE REFERENCIAL: Relacionamentos entre diferentes tabelas são gerenciados pelo banco de dados na inclusão, alteração ou exclusão de dados. REPLICAÇÃO: Torna possível configurar clones ou réplicas de servidores que mantém as informações sincronizadas com um servidor principal aumentando a disponibilidade. CLUSTERIZAÇÃO: Baseada na integração e sincronismo de dois ou mais servidores para dividir a demanda e aumentar a disponibilidade. Este recurso permite que caso o servidor primário fique indisponível, a carga gerada pelas consultas seja balanceada entre os outros servidores restantes. © 2014 - Prof. Marcos Alexandruk MySQL Métodos de armazenamento MyISAM Muito rápido Não apresenta restrições de tipos de dados Permite o uso de todos os recursos do MySQL, exceto suporte a transações Único mecanismo do MySQL que suporta buscas do tipo FullText Searches Nível de bloqueio: tabelas © 2014 - Prof. Marcos Alexandruk MySQL Métodos de armazenamento InnoDB Recomendado para bancos de dados grandes e complexos Oferece suporte a transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade) Armazenamento em disco e memória dos dados e índices: processamento mais veloz Nível de bloqueio: linhas. Portanto, aumenta a disponibilidade: apenas os registros envolvidos em uma transação são bloqueados (não a tabela toda como no MyISAM) © 2014 - Prof. Marcos Alexandruk MySQL Métodos de armazenamento Memory (HEAP) O armazenamento dos dados é realizado na memória RAM Velocidade de processamento muito rápida: não há busca em disco Dados são perdidos quando o servidor é deslidado ou reinicializado Indicado em aplicações cujos dados devem ser armazemados apenas temporariamente (ex: sessões) Nível de bloqueio: tabelas Não suporta dados do tipo BLOB e TEXT Não oferece suporte a transações e índices © 2014 - Prof. Marcos Alexandruk MySQL Métodos de armazenamento ARCHIVE Dados são gravados em arquivos-texto no formato de tabelas sequenciais (ordem de gravação) Utilizado em aplicações de log e outras que podem gerar grande volume de dados (podendo ser armazenadas posteriormente em unidades de backup mensalmente ou em outros períodos) Mecanismo de funcionamento limitado: suporta apenas INSERT e SELECT Não dá suporte a índices: cada SELECT percorre a tabela inteira para garantir que todos os resultados foram obtidos Não oferece suporte a transações e índices © 2014 - Prof. Marcos Alexandruk MySQL Métodos de armazenamento CSV (Comma Separated Values) Similar ao método ARCHIVE, armazena os dados em arquivos texto. Os valores são separados por vírgula ou outro caractere definido previamente. O padrão CSV permite que os dados tornem-se portáveis para outras aplicações (ex: planilhas) de forma simples e rápida Não oferece suporte a transações e índices Não recomendado o uso de tipos BLOB e TEXT, pois podem comprometer a portabilidade © 2014 - Prof. Marcos Alexandruk PostgreSQL © 2014 - Prof. Marcos Alexandruk PostgreSQL © 2014 - Prof. Marcos Alexandruk PostgreSQL Desenvolvimento O POSTGRES foi originalmente patrocinado pelo DARPA (Defense Advanced Research Projects Agency), ARO (Army Research Office), NSF (National Science Foundation) e ESL Inc. O projeto POSTGRES iniciou em 1986, já em 1987 tornou-se operacional. Em 1989 foi lançada a primeira versão para o público externo. Em 1991 foi lançada a versão 3, com melhorias no executor de consultas e algumas partes do código foram reescritas. As versões subsequentes, até o Postgres95, foram focadas em confiabilidade e portabilidade. © 2014 - Prof. Marcos Alexandruk PostgreSQL Desenvolvimento O Postgres95 teve mudanças radicais em relação ao projeto original. O seu código foi totalmente revisado, o tamanho dos fontes foi reduzido em 25%. A performance foi consideravelmente melhorada e vários recursos foram adicionados. Em 1996 o projeto foi rebatizado como PostgreSQL, para enfatizar a relação do POSTGRES original com a linguagem SQL. A numeração da versão voltou a seguir o padrão anterior ao Postgres95 (considerada a 5.0), e a primeira versão do PostgreSQL foi a 6.0. Enquanto a ênfase do Postgres95 tinha sido a correção de falhas e otimização do código, o desenvolvimento das primeiras versões do PostgreSQL foi orientada à melhoria de recursos e implementação de novos recursos, sempre seguindo os padrões SQL. © 2014 - Prof. Marcos Alexandruk PostgreSQL Desenvolvimento As versões 7.x lançadas a partir de maio de 2000 trouxeram as seguintes novidades: WAL - Write Ahead Log (as modificações são gravadas em um log antes de serem aplicadas) Schemas SQL Outer joins Suporte a IPv6 © 2014 - Prof. Marcos Alexandruk PostgreSQL Desenvolvimento A versão 8.0 foi lançada em janeiro de 2005 e entre outras novidades, foi a primeira a ter suporte nativo para Microsoft Windows (anteriormente o PostgreSQL só rodava de forma nativa em sistemas Unix e, em sistemas Windows - através da biblioteca Cygwin). Dentre as muitas novidades da versão 8.x, pode-se destacar o suporte a tablespaces, savepoints, roles e commit em duas fases. Em 24 de julho de 2014 foi lançada a versão (estável) mais recente: 9.2.9. © 2014 - Prof. Marcos Alexandruk PostgreSQL Desenvolvimento O Grupo Global de Desenvolvimento do PostgreSQL tem membros nos Estados Unidos, Canadá, Japão, Rússia e vários outros países. Esse grupo é formado essencialmente por empresas especializadas em PostgreSQL, empresas usuárias do sistema, além dos pesquisadores acadêmicos e programadores independentes. Além da programação, essa comunidade é responsável pela documentação, tradução, criação de ferramentas de modelagem e gerenciamento, e elaboração de extensões e acessórios. © 2014 - Prof. Marcos Alexandruk PostgreSQL Plataformas suportadas pelo PostgreSQL: Unix Linux FreeBSD Microsoft Windows MacOS © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Sub-consultas Subconsulta é uma instrução SELECT aninhada dentro de uma instrução SELECT, INSERT, DELETE ou UPDATE ou dentro de uma outra subconsulta. EXEMPLO: SELECT NRPEDIDO FROM PEDIDO WHERE CODCLIENTE = (SELECT CODCLIENTE FROM CLIENTE WHERE NOMECLIENTE = 'ALFA'); © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Controle de concorrência multi-versão (MVCC) Ao contrário de outros SGBDs que utilizam que utilizam LOCKs para controle de concorrência, o PostgreSQL mantém a consistência dos dados usando um modelo multiversão. Neste modelo, cada transação terá sua versão do banco de dados, estando protegidas de acessar dados inconsistentes que poderiam ser gerados por outras transações. Portanto, o MVCC oferece o isolamento de transações, além de garantir que leituras nunca aguardarão escritas e vice-versa.) © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Integridade Referencial A integridade referencial garante a não corrupção dos dados, de modo a não existir um registro "filho" sem um registro "pai". © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Stored Procedures As procedures do PostgreSQL podem ser escritas em várias linguagens (PL/PgSQL, Perl, Python, Ruby, e outras) © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Triggers Recurso de programação executado sempre que o evento associado ocorrer. Utilizados para ajudar a manter a consistência dos dados ou para propagar alterações em um determinado dado de uma tabela para outras. © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Schemas Schema é um espaço lógico (namespace) dentro do banco de dados para armazenar objetos: tabelas, funções, etc. Este conceito é semelhante ao cross-database, a diferença é que o cross-database relaciona objetos de banco de dados distintos, já o Schema relaciona objetos que estão no mesmo banco de dados, mas em estruturas lógicas distintas. © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Tablespaces Tablespace designa uma subdivisão lógica de um banco de dados utilizada para agrupar estruturas lógicas relacionadas. As tablespaces apenas especificam a localização de armazenamento do banco de dados. armazenadas fisicamente em datafiles. © 2014 - Prof. Marcos Alexandruk Os dados são PostgreSQL Recursos "recentes": Savepoints Estabelece um novo ponto de salvamento na transação corrente. O ponto de salvamento é uma marca especial dentro da transação que permite desfazer todos os comandos executados após o seu estabelecimento, restaurando o estado da transação ao que era quando o ponto de salvamento foi estabelecido. © 2014 - Prof. Marcos Alexandruk PostgreSQL Recursos "recentes": Commit em duas fases Commit em duas fases refere-se a uma transação que pode utilizar dois ou mais bancos de dados (multi-database), que podem estar localizados em servidores diferentes. Durante uma transação em bancos com essa característica garantese que o commit seja realizado em todos os bancos participantes ou em nenhum, ou seja, ou grava tudo ou não grava nada. Por exemplo, se sua aplicação atualiza dados em dois bancos de dados e você faz um commit, o recurso de commit em duas fases previne situações como a de um dos bancos ficar indisponível e suas mudanças serem atualizadas somente em um dos bancos envolvidos. © 2014 - Prof. Marcos Alexandruk PostgreSQL Capacidade: Tamanho máximo do banco de dados: ilimitado Tamanho máximo de uma tabela: 32 TB Tamanho máximo de uma linha: 1,6 TB Tamanho máximo de um campo: 1 GB Número máximo de linhas por tabela: ilimitado Número máximo de colunas por tabela: 250 a 1600 (dependendo dos tipos) Número máximo de índices por tabela: ilimitado © 2014 - Prof. Marcos Alexandruk Aula 4: Use AVA Oracle, Microsoft e IBM lançaram versões gratuitas de seus SGBDs. Faça uma pesquisa sobre estas versões e comente com seus colegas sobre as principais diferenças entre elas. Qual delas você recomendaria para uma empresa de pequeno porte? Por que? © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 5 Prof. Marcos Alexandruk Permissões nos principais SGBDs Oracle Database Microsoft SQL Server IBM DB2 MySQL PostgreSQL © 2014 - Prof. Marcos Alexandruk Segurança e autenticação O controle aos dados em um SGBD deve ser realizado em três áreas: 1. QUEM pode acessar os dados 2. O QUE vai ser acessado 3. QUAL o TIPO de acesso que será permitido leitura inserção alteração exclusão © 2014 - Prof. Marcos Alexandruk DCL - Data Control Language A DCL (Data Control Language) é uma "sublinguagem" da SQL (Structured Query Language). Por meio dela são controlados os acessos de usuários ou de grupos de usuários. Principais comandos: GRANT: Concede privilégios REVOKE: Revoga privilégios © 2014 - Prof. Marcos Alexandruk Oracle Database © 2014 - Prof. Marcos Alexandruk Oracle Criação de usuários Um usuário de banco de dados somente poderá ser criado pelo DBA ou por outro usuário com o privilégio de sistema CREATE USER. Além de informar o nome e a senha (provisória), é possível determinar também quais tablespaces estarão disponíveis e até mesmo quanto espaço de armazenamento o novo usuário poderá utilizar em cada tablespace. Quando um usuário cria um novo objeto no banco de dados (uma tabela, por exemplo) este objeto fará parte de um schema (esquema) que tem o mesmo nome do usuário. © 2014 - Prof. Marcos Alexandruk Oracle Criando um usuário Para criar um novo usuário deve-se utilizar o comando CREATE USER, conforme o exemplo a seguir: CREATE USER FULANO IDENTIFIED BY ABC123 ACCOUNT UNLOCK PASSWORD EXPIRE DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; ACCOUNT UNLOCK: A conta estará desbloqueada (default). PASSWORD EXPIRE: Usuário deverá alterar a senha no primeiro login. DEFAULT TABLESPACE: Tablespace padrão do usuário. TEMPORARY TABLESPACE: Tablespace temporária para este usuário. © 2014 - Prof. Marcos Alexandruk Oracle Alterando um usuário Pode-se alterar os privilégios e outros atributos dos usuários do banco de dados com o comando ALTER USER. O exemplo a seguir estabelece uma cota de 100 MB no tablespace USERS para o usuário anteriormente criado: ALTER USER FULANO QUOTA 100M ON USERS; © 2014 - Prof. Marcos Alexandruk Oracle Concedendo privilégios a um usuário Para conceder privilégios a um usuário deve-se utilizar a instrução GRANT. O exemplo a seguir apresenta a concessão do privilégio CONNECT ao novo usuário que permitirá a ele conectar-se ao banco de dados: GRANT CONNECT TO FULANO; © 2014 - Prof. Marcos Alexandruk Oracle Apresentando os usuários Os nomes dos usuários do banco de dados podem ser obtidos através da visão DBA_USERS. O comando a seguir apresenta os nomes dos usuários: SELECT USERNAME FROM DBA_USERS; Para consultar o status de cada usuário (conta), isto é, para verificar se a conta está ou não bloqueada, utiliza-se: SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; OPEN: A conta está disponível para uso; LOCKED: A conta foi bloqueada pelo DBA; EXPIRED: A senha expirou. O usuário deverá redefini-la; EXPIRED & LOCKED: A conta foi bloqueada e a senha expirou. © 2014 - Prof. Marcos Alexandruk Oracle Eliminando um usuário Para eliminar usuários do banco de dados utiliza-se o comando DROP USER. O exemplo a seguir elimina o usuário anteriormente criado e seus objetos (tabelas, visões, etc.): DROP USER FULANO CASCADE; © 2014 - Prof. Marcos Alexandruk Oracle © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server © 2014 - Prof. Marcos Alexandruk SQL Server Usuários no SQL Server Cada usuário tem dois níveis de nomes e cada nome está associado a uma ID exclusiva: Nome de logon Nome do usuário do banco de dados © 2014 - Prof. Marcos Alexandruk SQL Server Nome de logon Cada usuário autorizado a conectar-se ao SQL Server tem um nome de logon que proporciona ao usuário o acesso a uma instância do SQL Server. Há dois tipos de nomes de logon: Nomes da conta do Microsoft Windows Nomes de logon SQL Server © 2014 - Prof. Marcos Alexandruk SQL Server Nomes da conta do Microsoft Windows Os membros sysadmin ou securityadmin, usando sp_grantlogin, podem autorizar as contas do Windows de usuários individuais ou os grupos do Windows a se conectarem a uma instância do SQL Server. O usuário identificado pela conta do Windows ou qualquer pessoa no grupo do Windows pode, então, se conectar a uma instância do SQL Server usando a Autenticação do Windows. Cada conta do Windows ou nome de grupo é armazenado em sys.server_principals. O identificador de segurança do Windows para a conta ou grupo do Windows é armazenado em sys.server_principals.sid. © 2014 - Prof. Marcos Alexandruk SQL Server Nomes de logon SQL Server São usados quando o usuário se conecta usando a Autenticação do SQL Server. Os nomes de logon do SQL Server são definidos pelos sysadmin ou securityadmin usando sp_addlogin. Cada nome de logon do SQL master.dbo.syslogins.loginname. Server é armazenado em O SQL Server gera um GUID que é usado como identificador de segurança e o armazena em sys.server_principals.sid. O SQL Server usa sys.server_principals.sid como o security_identifier para o nome de logon. © 2014 - Prof. Marcos Alexandruk SQL Server Nome do usuário do banco de dados Cada conta do Windows ou logon do SQL Server deve estar associada a um nome de usuário em cada banco de dados que o usuário estiver autorizado a acessar, ou o banco de dados deve ter um acesso de convidado habilitado. Os nomes de usuário são definidos pelos db_owner ou db_accessadmin e são armazenados na tabela sys.database_principals disponível em cada banco de dados. Cada nome de usuário de banco de dados está associado a uma ID de usuário de banco de dados armazenada em sys.database_principals.uid. O security identifier para cada usuário é armazenado em sys.database_principals.sid; portanto, os usuários podem ser mapeados de volta para os seus logons associados. Pode-se utilizar o mesmo nome do usuário do banco de dados para o logon do SQL Server ou para a conta do Windows, porém, isso não é obrigatório. © 2014 - Prof. Marcos Alexandruk SQL Server Permissões Determinam as ações que os usuários podem executar no SQL Server ou em um banco de dados. Permissões de objeto: Nível de servidor: servidores, logins, funções de servidor, etc. Nível de banco de dados: stored proocedures, functions, schemas, etc. Permissões de instrução: Criação de banco de dados, tabelas, visões, etc. Permissões implícitas: Apenas membros de funções de sistema predefinidas e proprietários de bancos de dados ou objetos de banco de dados têm permissões implícitas. Permitem que executem todas atividades no banco de dados e nos seus objetos (exemplo: ver, adicionar, alterar e excluir dados). © 2014 - Prof. Marcos Alexandruk SQL Server Funções Parecidas com os grupos de segurança do Windows, permitem atribuir permissões a um grupo de usuários e podem ter permissões implícitas (que não podem ser alteradas). Há dois tipos de funções: Funções de servidor Funções de banco de dados © 2014 - Prof. Marcos Alexandruk SQL Server Funções de servidor Utilizadas para garantir recursos de administração de servidor: bulkadmin: Destinada às contas que precisam fazer inserções em massa no banco de dados. dbcreator: Destinada aos usuários que precisam criar, modificar, eliminar e restaurar bancos de dados. diskadmin: Destinada aos usuários que precisam gerenciar arquivos de disco. processadmin: Destinada aos usuários que precisam controlar processos do SQL Server. securityadmin: Destinada aos usuários que precisam gerenciar logins, criar permissões de banco de dados e ler logins de erros. serveradmin: Destinada aos usuários que precisam definir opções de configuração em nível de servidor e encerrar o servidor. setupadmin: Destinada aos usuários que precisam gerenciar servidores vinculados e controlar procedimentos de inicialização. sysadmin: Destinada aos usuários que precisam de controle total sobre o SQL Server e os banco de dados instalados. © 2014 - Prof. Marcos Alexandruk SQL Server Funções de banco de dados São definidas para CADA banco de dados: public: padrão para todos os usuários do banco de dados. Permissões atribuídas à função public ficarão disponíveis a TODOS os usuários do banco. db_acessadmin: Destinada a usuários que precisam adicionar ou remover logins. db_backupoperator: Destinada aos usuários que precisam fazer backup de um banco de dados. db_datareader: Destinada aos usuários que precisam ver os dados de um banco de dados. db_writer: Destinada aos usuários que precisam adicionar dados em qualquer tabela de usuário do banco de dados. db_ddladmin: Destinada aos usuários que precisam executar tarefas relacionada à DDL (Definition Data Language). db_denydatareader: Destinada a restringir o acesso aos dados em um banco de dados pelo login. © 2014 - Prof. Marcos Alexandruk SQL Server Funções de banco de dados (continuação) db_denydatawriter: Destinada a restringir as permissões de modificação em um banco de dados pelo login. db_owner: Destinada a usuários que precisam de controle total ao banco de dados. db_securityadmin: Destinada aos usuários permissões, posse de objetos e funções. que precisam gerenciar dbm_monitor: Destinada aos usuários que precisam monitor o status atual do espelhamento de banco de dados. © 2014 - Prof. Marcos Alexandruk SQL Server Criação de usuários com o utilitário SQLCMD Abrir o prompt de comando do Windows. Acessar o SQLCMD: SQLCMD -S .\SQLEXPRESS SQLEXPRESS = Nome da Instância Criar um login: CREATE LOGIN FULANO WITH PASSWORD = 'ABC123'; GO Criar um usuário de banco de dados para o login acima: CREATE USER FULANO FOR LOGIN FULANO; GO © 2014 - Prof. Marcos Alexandruk IBM DB2 © 2014 - Prof. Marcos Alexandruk IBM DB2 Segurança Há três níveis de segurança para acesso ao SGBD IBM DB2: Autenticação: O acesso à instância é gerenciado por um sistema externo ao SGBD. Pode estar incorporado ao sistema operacional ou a outro produto. Autoridade: Após a autenticação positiva o acesso aos dados é definido e gerenciado pelo DB2. Privilégio: Atribuídos aos usuários para que possam trabalhar com os objetos do banco de dados (SELECT, UPDATE, etc.) © 2014 - Prof. Marcos Alexandruk IBM DB2 Autenticação O parâmetro AUTHENTICATION no DBM CFG, acionado no servidor DB2, tem um leque de valores possíveis. Por exemplo, quando o parâmetro é configurado como SERVER (por omissão), a autenticação é realizada pelo sistema operacional ou mecanismo exterior de segurança no servidor. No entanto, se a AUTHENTICATION é configurada como CLIENT, a autenticação é realizada pelo sistema operativo ou mecanismo exterior de segurança no cliente. © 2014 - Prof. Marcos Alexandruk IBM DB2 Autenticação O parâmetro AUTHENTICATION pode configurado com um dos seguintes valores: SERVER (default): Autenticação ocorre no servidor CLIENT: Autenticação ocorre no cliente SERVER_ENCRYPT: Igual ao SERVER mas os users Ids e as passwords estão encriptadas KERBEROS: Autenticação segurança Kerberos ocorre usando o mecanismo externo de SQL_AUTHENTICATION_DATAENC: A autenticação é efetuada no servidor e as ligações tem que usar encriptação de dados SQL_AUTHENTICATION_DATAENC_CMP: Como a anterior, encriptação de dados que apenas é usada quando disponível exceto na GSSPLUGIN: Autenticação utiliza um mecanismo de segurança externo GSS API-based (Generic Security Services Application Program Interface) © 2014 - Prof. Marcos Alexandruk IBM DB2 Grupo PUBLIC O DB2 define um grupo interno chamado PUBLIC. Qualquer usuário identificado pela autenticação do sistema operacional ou da rede é implicitamente um membro do grupo PUBLIC. Quando uma base de dados é criada, certos privilégios estão garantidos automaticamente ao grupo PUBLIC: CONNECT CREATETAB IMPLICIT SCHEMA BINDADD © 2014 - Prof. Marcos Alexandruk IBM DB2 Grupo PUBLIC Para segurança adicional, é recomendável revogar estes privilégios do grupo PUBLIC como segue: REVOKE CONNECT ON DATABASE FROM PUBLIC REVOKE CREATETAB ON DATABASE FROM PUBLIC REVOKE IMPLICIT_SCHEMA ON DATABASE FROM PUBLIC REVOKE BINDADD ON DATABASE FROM PUBLIC © 2014 - Prof. Marcos Alexandruk IBM DB2 Consultando privilégios Pode-se fazer uma consulta às views do catálogo DB2 SYSCAT para verificar os privilégios de determinado usuário. Por exemplo, se quisermos saber se o usuário DB2ADMIN possui o privilégio SELECT na tabela TESTE, e saber quem garantiu este privilégio, podemos correr a seguinte consulta: SELECT grantor, grantee, selectauth FROM syscat.tabauth WHERE tabname = 'TESTE' GRANTOR GRANTEE SELECTAUTH ------------------------------ALUNO DB2ADMIN Y No exemplo acima, o usuário ALUNO garantiu o privilégio SELECT ao usuário DB2ADMIN. © 2014 - Prof. Marcos Alexandruk MySQL © 2014 - Prof. Marcos Alexandruk MySQL Privilégios de usuários Os dados referentes aos privilégios dos usuários do SGBD MySQL, alterados pelas instruções GRANT e REVOKE são armazenados no banco de dados denominado mysql. Cinco tabelas no banco de dados mysql têm relação com privilégios de usuários: user db host tables_priv columns_priv © 2014 - Prof. Marcos Alexandruk MySQL Privilégios de usuários Estas tabelas podem ser consultadas para solucionar eventuais problemas referentes a privilégios. Ao invés de usar os comandos GRANT e REVOKE o administrador pode modificar diretamente as tabelas. Porém, neste caso, para que as alterações entrem em vigor, precisará executar a instrução: flush privileges; © 2014 - Prof. Marcos Alexandruk MySQL Tabela user A tabela user contém informações sobre o conjunto de privilégios globais de um usuário. Esta tabela contém as seguintes colunas: Colunas de escopo: Usadas para determinar quando uma linha é relevante. As colunas de escopo são: Host, User e Password. Colunas de privilégios: Cada uma corresponde a um dos privilégios globais. Podem ter o valor Y (se o usuário tiver o privilégio) ou N (caso não o tenha). Algumas colunas de privilégios são: Select_priv, Insert_priv, Update_priv, Delete_priv, etc. Colunas de conexão segura: Representam as informações da cláusula REQUIRE da instrução GRANT. As colunas são: ssl_type, ssl_cypher, x509_issuer e x509_subject. Colunas de limite de recursos: Representam qualquer limite no uso de recursos especificados no final da cláusula GRANT. As colunas são: max_questions, max_updates e max_connections. © 2014 - Prof. Marcos Alexandruk MySQL Tabela db A tabela db armazena os privilégios de um usuário para determinado banco de dados. Esta tabela contém as seguintes colunas: Colunas de escopo: Usadas para determinar quando uma linha é relevante. Caso as regras sejam diferentes para cada um dos hosts o campo deve ser deixado em branco e as regras devem ser declaradas na tabela host. As colunas de escopo são: Host, Db e User. Colunas de privilégios: Especificam se a combinação Host, DB e User têm cada um dos privilégios listados. Podem ter o valor Y ou N. Algumas colunas de privilégios são: Select_priv, Insert_priv, Update_priv, Delete_priv, etc. © 2014 - Prof. Marcos Alexandruk MySQL Tabela host A tabela host é consultada quando o MySQL encontra uma entrada em branco na coluna Host da tabela db. Esta tabela contém as seguintes colunas: Colunas de escopo: Usadas para determinar quando uma linha é relevante. Cada linha fornece informações para um único banco de dados acessar a partir de um host. As colunas de escopo são: Host e Db. Colunas de privilégios: Especificam se a combinação Host e DB têm cada um dos privilégios listados. Podem ter o valor Y ou N. Algumas colunas de privilégios são: Select_priv, Insert_priv, Update_priv, Delete_priv, etc. © 2014 - Prof. Marcos Alexandruk MySQL Tabela tables_priv A tabela tables_priv apresenta os privilégios de usuário com relação às tabelas individuais. Esta tabela contém as seguintes colunas: Colunas de escopo: Usadas para determinar quando uma linha é relevante. Cada linha fornece informações para um único banco de dados acessar a partir de um host. As colunas de escopo são: Host, Db, User e Table_name. Colunas de concessão: Especificam que concedeu o privilégio e quando. As colunas de concessão são: Grantor e Timestamp. Coluna Table_priv: Determina quais privilégios a combinação Host, Db e User têm na tabela listada em Table_name. Pode conter os seguintes valores: Select, Insert, Update, Delete, Create, Alter, Drop, Grant, References e Index. Coluna Column_priv: Informa quais privilégios o usuário tem sobre as colunas da tabela listada em Table_name. Pode conter os seguintes valores: Select, Insert, Update e References. © 2014 - Prof. Marcos Alexandruk MySQL Tabela columns_priv A tabela columns_priv apresenta os privilégios de usuário com relação às colunas individuais. Esta tabela contém as seguintes colunas: Colunas de escopo: Usadas para determinar quando uma linha é relevante. Cada linha fornece informações para um único banco de dados acessar a partir de um host. As colunas de escopo são: Host, Db, User, Table_name e Column_Name. Coluna Column_priv: Informa quais privilégios foram concedidos para a combinação determinada nas colunas de escopa. Pode conter os seguintes valores: Select, Insert, Update e References. Coluna Timestamp: Informa quando o privilégio foi concedido. © 2014 - Prof. Marcos Alexandruk PostgreSQL © 2014 - Prof. Marcos Alexandruk PostgreSQL Criando um usuário Para criar um usuário deve-se utilizar o seguinte comando: CREATE USER FULANO WITH PASSWORD 'ABC123'; Para criar um usuário com senha válida até 2015 deve-se utilizar o seguinte comando: CREATE USER FULANO WITH PASSWORD 'ABC123' VALID UNTIL '2015-12-31'; Para criar um com permissão de criar bancos de dados deve-se utilizar o seguinte comando: CREATE USER FULANO WITH PASSWORD 'ABC123' CREATEDB; © 2014 - Prof. Marcos Alexandruk PostgreSQL Alterando atributos do usuário Para renomear um usuário deve-se utilizar o seguinte comando: ALTER USER FULANO RENAME TO BELTRANO; Para modificar a senha de um usuário deve-se utilizar o seguinte comando: ALTER USER FULANO WITH PASSWORD 'XYZ123'; Para permitir que um usuário crie usuários e bancos de dados deve-se utilizar o seguinte comando: ALTER USER FULANO CREATE USER CREATEDB; © 2014 - Prof. Marcos Alexandruk Aula 5: Use AVA MariaDB, SGBD criado por um dos fundadores do MySQL, Michael Widenius, está sendo adotado por grandes empresas como o Google. Faça uma pesquisa sobre o MariaDB destacando aos colegas os pontos que você achou interessante principalmente no que diz respeito à segurança. © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 6 Prof. Marcos Alexandruk Aula 6 Desenvolvendo um pequeno banco de dados Oracle © 2014 - Prof. Marcos Alexandruk Tablespaces Tablespaces • O Oracle apresenta três tipos principais de tablespaces: • Permanente: contém segmentos que persistem além da duração de uma transação ou sessão; • Undo: armazenam valores anteriores a uma inclusão, atualização ou exclusão. Um banco de dados pode ter mais de um tablespace de undo, mas apenas um pode estar ativo em um dado momento. • Temporário: contém dados transitórios que só existem enquanto durar a sessão, alocando, por exemplo, espaço para concluir uma classificação de dados que não cabe na memória. © 2014 - Prof. Marcos Alexandruk Tablespaces Nomes dos tablespaces • Consultar nomes dos tablespaces: SELECT TABLESPACE_NAME FROM DBA_TABLESPACES; TABLESPACE_NAME -----------------------------SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE © 2014 - Prof. Marcos Alexandruk Tablespaces Tipos de gerenciamento de tablespaces • Os tablespaces podem ser gerenciados por dicionário ou localmente. • Se o tablespace SYSTEM for gerenciado localmente todos os outros tablespaces, exceto os que sejam somente de leitura (read only), devem obrigatoriamente ser gerenciados localmente. • Verificar o tipo de gerenciamento de extensões do tablespace SYSTEM: SELECT TABLESPACE_NAME, EXTENT_MANAGEMENT FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = 'SYSTEM'; © 2014 - Prof. Marcos Alexandruk Tablespaces Criando um tablespace permanente gerenciado localmente • Criar um TABLESPACE gerenciado localmente: CREATE TABLESPACE TESTE1 DATAFILE 'E:\DADOS1.DBF' SIZE 10M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K; • UNIFORM SIZE indica que todas as extensões terão o mesmo tamanho. O tamanho (SIZE) default é 1MB. • Consultar os nomes dos tablespaces: SELECT TABLESPACE_NAME FROM DBA_TABLESPACES; © 2014 - Prof. Marcos Alexandruk Tablespaces Criando um tablespace permanente gerenciado localmente • Se a cláusula UNIFORM SIZE for omitida, será assumido o valor default: AUTOALLOCATE (alocação das extensões gerenciada pelo Oracle). • Criar o tablespace TESTE2 com a opção AUTOALLOCATE: CREATE TABLESPACE TESTE2 DATAFILE 'E:\DADOS2.DBF' SIZE 10M EXTENT MANAGEMENT LOCAL AUTOALLOCATE; • Consultar os nomes dos tablespaces: SELECT TABLESPACE_NAME FROM DBA_TABLESPACES; © 2014 - Prof. Marcos Alexandruk Tablespaces Criando tablespaces de UNDO e TEMPORÁRIOS • Criar um TABLESPACE de UNDO: CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'E:\UNDOTBS02.ORA' SIZE 10M EXTENT MANAGEMENT LOCAL AUTOALLOCATE; • Para criar um TABLESPACE TEMPORÁRIO: CREATE TEMPORARY TABLESPACE TEMP2 TEMPFILE 'E:\TEMP2.ORA' SIZE 10M EXTENT MANAGEMENT LOCAL; © 2014 - Prof. Marcos Alexandruk Tablespaces Alterando um tablespace • Incluir mais um arquivo de dados (datafile) em um tablespace: ALTER TABLESPACE TESTE2 ADD DATAFILE 'E:\DADOS3.DBF' SIZE 10M; © 2014 - Prof. Marcos Alexandruk Tablespaces Eliminando um tablespace • Eliminar um tablespace: DROP TABLESPACE TESTE1 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; • INCLUDING CONTENTS: o tablespace será eliminado mesmo que contenha segmentos. A operação fracassará se houverem segmentos de undo ou temporários ativos. • AND DATAFILES: utilizado com INCLUDING CONTENTS, força a eliminação física dos arquivos de dados (datafiles) que compõem o tablespace. • CASCADE CONSTRAINTS: Elimina constraints relacionadas a tabelas do tablespace que está sendo eliminado que estejam em outro tablespace. © 2014 - Prof. Marcos Alexandruk Datafiles Datafiles • Cada arquivo de dados (datafile) do Oracle corresponde a um arquivo físico do sistema operacional. • Um tablespace pode ser composto por vários arquivos de dados, porém um arquivo de dados é membro de somente um tablespace. • Para alterar o tamanho de um datafile deve-se utilizar o comando ALTER DATABASE. • Alterar o tamanho do arquivo DADOS1.DBF para 20 MB: ALTER DATABASE DATAFILE 'E:\DADOS2.DBF' RESIZE 20M; © 2014 - Prof. Marcos Alexandruk Segmentos Segmentos • Um segmento é composto por um grupo de extensões e abrange um objeto (tabela, índice, etc.). • Criar uma tabela no tablespace USERS: CREATE TABLE CLIENTE ( CODIGO NUMBER(4), NOME VARCHAR2(30)) TABLESPACE USERS; Foi alocado um segmento que recebeu o mesmo nome da tabela (coluna SEGMENT_NAME): SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES WHERE TABLE_NAME = 'CLIENTE'; TABLE_NAME TABLESPACE_NAME ------------------- -----------------CLIENTE USERS SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME FROM USER_SEGMENTS WHERE TABLESPACE_NAME = 'USERS'; SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME ------------------ ------------------- ------------------CLIENTE TABLE USERS © 2014 - Prof. Marcos Alexandruk Extensões Extensões • Extensões são formadas por um ou mais blocos de dados. Quando um objeto do banco de dados é expandido são alocadas mais extensões. • Verificar o tipo de gerenciamento de extensões em cada tablespace: SELECT TABLESPACE_NAME, EXTENT_MANAGEMENT FROM DBA_TABLESPACES; TABLESPACE_NAME -----------------------------SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE EXTENT_MAN ---------LOCAL LOCAL LOCAL LOCAL LOCAL LOCAL © 2014 - Prof. Marcos Alexandruk Blocos Blocos • Blocos são as menores estruturas de armazenamento no banco de dados Oracle. • Um bloco de dados pode ser constituído de um ou mais blocos do sistema operacional. • Verificar o tamanho dos blocos em cada tablespace: SELECT TABLESPACE_NAME, BLOCK_SIZE FROM DBA_TABLESPACES; TABLESPACE_NAME BLOCK_SIZE ------------------------------ ---------SYSTEM 8192 SYSAUX 8192 UNDOTBS1 8192 TEMP 8192 USERS 8192 EXAMPLE 8192 © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Autenticação de usuários • Os usuários podem ser autenticados no banco de dados através de três métodos diferentes: • através do banco de dados; • através do sistema operacional; • através da rede. © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Criação de usuários • Quando um usuário cria um novo objeto no banco de dados (uma tabela, por exemplo) este objeto fará parte de um schema (esquema) que tem o mesmo nome do usuário. • Um usuário de banco de dados somente poderá ser criado pelo DBA ou por outro usuário com o privilégio de sistema CREATE USER. Além de informar o nome e a senha (provisória), é possível determinar também quais tablespaces estarão disponíveis e até mesmo quanto espaço de armazenamento o novo usuário poderá utilizar em cada tablespace. © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Criando um usuário • Criar um novo usuário: CREATE USER FULANO IDENTIFIED BY ABC123 ACCOUNT UNLOCK PASSWORD EXPIRE DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; ACCOUNT UNLOCK: A conta estará desbloqueada (default). PASSWORD EXPIRE: Usuário deverá alterar a senha no primeiro login. DEFAULT TABLESPACE: Tablespace padrão do usuário. TEMPORARY TABLESPACE: Tablespace temporária para este usuário. © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Alterando um usuário • Pode-se alterar os privilégios e outros atributos dos usuários do banco de dados com o comando ALTER USER. • Estabelecer para o usuário uma cota de 100 MB no tablespace USERS: ALTER USER FULANO QUOTA 100M ON USERS; © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Concedendo privilégios a um usuário • Para conceder privilégios a um usuário deve-se utilizar a instrução GRANT. • O exemplo a seguir apresenta a concessão do privilégio CONNECT ao novo usuário que permitirá a ele conectar-se ao banco de dados: GRANT CONNECT TO FULANO; © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Eliminando um usuário • Para eliminar usuários utiliza-se o comando DROP USER. • Eliminar o usuário e seus objetos (tabelas, visões, etc.): DROP USER FULANO CASCADE; © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Apresentando os usuários • Nomes dos usuários podem ser obtidos através da visão DBA_USERS: SELECT USERNAME FROM DBA_USERS; • Consultar o status de cada usuário (conta): SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS; OPEN: A conta está disponível para uso; LOCKED: A conta foi bloqueada pelo DBA; EXPIRED: A senha expirou. O usuário deverá redefini-la; EXPIRED & LOCKED: A conta foi bloqueada e a senha expirou. © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários Conectando-se como outro usuário • Há casos em que o DBA precisará conectar-se como outro usuário para resolver determinados problemas. EXERCÍCIO • Utilize o roteiro a seguir e observe como isso pode ser feito. © 2014 - Prof. Marcos Alexandruk Gerenciamento de usuários 1. O DBA (conectado como SYSTEM) obtém a senha conforme gerada por um algoritmo HASH: SELECT NAME, PASSWORD FROM SYS.USER$ WHERE NAME = 'FULANO'; NAME PASSWORD ------------------------- ----------------FULANO 22DD56A22A50F1B8 2. O DBA copia a senha em um arquivo texto. 3. O DBA (conectado como SYTEM) altera temporariamente a senha do usuário: ALTER USER FULANO IDENTIFIED BY SENHA_TEMP; 4. O DBA conecta-se ao banco utilizando a senha temporária: CONNECT FULANO/SENHA_TEMP; 5. O DBA realiza as operações necessárias na conta do usuário: 6. O DBA (conectado como SYSTEM) 'repõe' a senha original do usuário: ALTER USER FULANO IDENTIFIED BY VALUES '22DD56A22A50F1B8';. © 2014 - Prof. Marcos Alexandruk Perfis de usuários Criando um perfil de usuário • Alteração necessária para que os limites relacionados ao recursos de sistema possam ser controlados através de perfis de usuários: ALTER SYSTEM SET resource_limit = TRUE; • Criar um PROFILE denominado LIMITE_LOGIN para limitar o número de vezes consecutivas que um login pode falhar antes de bloquear a senha do usuário: CREATE PROFILE LIMITE_LOGIN LIMIT FAILED_LOGIN_ATTEMPTS 3; • Criar um PROFILE denominado LIMITE_CONEXAO para limitar o tempo de conexão a um usuário em trinta minutos: CREATE PROFILE LIMITE_CONEXAO LIMIT CONNECT_TIME 30; © 2014 - Prof. Marcos Alexandruk Perfis de usuários Criando um perfil de usuário • Quando não for especificado nenhum perfil para um novo usuário do banco de dados o Oracle aplica a este o perfil DEFAULT. • Para conhecer quais são os limites do perfil DEFAULT deve-se utilizar a seguinte consulta ao dicionário de dados: SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT'; © 2014 - Prof. Marcos Alexandruk Perfis de usuários Controle de recursos • Parâmetros relacionados aos recursos que poderão ser utilizados pelos usuários: © 2014 - Prof. Marcos Alexandruk Perfis de usuários Controle de senhas dos usuários • Parâmetros relacionados à administração de senhas de usuários. © 2014 - Prof. Marcos Alexandruk Perfis de usuários Alterando um perfil de usuário • Alterar o parâmetro FAILED_LOGIN_ATTEMPTS: ALTER PROFILE LIMITE_LOGIN LIMIT FAILED_LOGIN_ATTEMPTS 5; • Alterar o tempo de conexão de um usuário para sessenta minutos: ALTER PROFILE LIMITE_CONEXAO LIMIT CONNECT_TIME 60; © 2014 - Prof. Marcos Alexandruk Perfis de usuários Associando um usuário a um perfil • Associar um usuário a um determinado perfil: -- Ao criar o usuário: CREATE USER FULANO IDENTIFIED BY 'ABC123' PROFILE NOME_PERFIL; -- Para usuário criado anteriormente: ALTER USER FULANO PROFILE NOME_PERFIL; • Consultar a que perfil um usuário está relacionado: SELECT USERNAME, PROFILE FROM DBA_USERS WHERE USERNAME = 'FULANO'; © 2014 - Prof. Marcos Alexandruk Privilégios de sistema • Privilégios de sistema envolvem os direitos de realizar determinadas ações sobre objetos do banco de dados e alteração de parâmetros de sistema, dentre outros. • A versão 11.2 do Oracle Database oferece 208 privilégios de sistema que são apresentados na tabela SYSTEM_PRIVILEGE_MAP. © 2014 - Prof. Marcos Alexandruk de dicionário de dados Privilégios de sistema SELECT NAME FROM SYSTEM_PRIVILEGE_MAP; NAME -------------------ALTER SYSTEM AUDIT SYSTEM CREATE SESSION CREATE TABLESPACE ALTER TABLESPACE DROP TABLESPACE CREATE USER ALTER USER DROP USER CREATE TABLE CREATE ANY TABLE ALTER ANY TABLE DROP ANY TABLE ... ... CREATE INDEX CREATE ANY INDEX ALTER ANY INDEX DROP ANY INDEX SYSDBA SYSOPER CREATE VIEW ALTER DATABASE CREATE PROCEDURE CREATE ANY PROCEDURE ... © 2014 - Prof. Marcos Alexandruk Privilégios de sistema PRIVILÉGIO DE SISTEMA DESCRIÇÃO SYSDBA | SYSOPER Criar uma nova entrada no arquivo externo de senhas, inicializar ou interromper uma instância, criar, alterar e recuperar um banco de dados, etc. ALTER SYSTEM Alterar os parâmetros no arquivo SPFILE. Emitir instruções ALTER SYSTEM. AUDIT SYSTEM Fazer auditoria no banco de dados. CREATE SESSION Conectar com o banco de dados. ALTER DATABASE Alterar o estado de um banco de dados. Exemplo: alterar o estado de MOUNT para OPEN. CREATE TABLESPACE Criar novos tablespaces. ALTER TABLESPACE Alterar parâmetros dos tablespaces. DROP TABLESPACE Eliminar tablespaces. CREATE USER Criar novos usuários. ALTER USER Alterar privilégios e outros dados dos usuários. DROP USER Eliminar usuários. CREATE TABLE Criar novas tabelas em seu próprio esquema. CREATE ANY TABLE Criar novas tabelas em qualquer esquema. ALTER ANY TABLE Alterar as tabelas em qualquer esquema. DROP ANY TABLE Eliminar tabelas em qualquer esquema. CREATE PROCEDURE Criar uma procedure, função ou pacote em seu próprio esquema. CREATE ANY PROCEDURE Criar uma procedure, função ou pacote em qualquer esquema. ... ... © 2014 - Prof. Marcos Alexandruk Privilégios de sistema Concedendo privilégios de sistema • Privilégios são concedidos aos usuários utilizando-se o comando GRANT. • Conceder ao usuário FULANO os privilégios necessários para criar tabelas e visões em seu próprio esquema: GRANT CREATE TABLE, CREATE VIEW TO FULANO; • Privilégios também podem ser concedidos a todos os usuários do banco através do grupo especial denominado PUBLIC: GRANT CREATE TABLE TO PUBLIC; © 2014 - Prof. Marcos Alexandruk Privilégios de sistema Concedendo privilégios de sistema • Conceder privilégios ao usuário e permitir que ele, por sua vez, também conceda para outros os mesmos privilégios que está recebendo: GRANT CREATE TABLE TO FULANO WITH ADMIN OPTION; • Se a permissão do usuário FULANO para conceder seus privilégios a outros for revogada, os usuários aos quais ele concedeu os privilégios continuarão a retê-los (não serão revogados). © 2014 - Prof. Marcos Alexandruk Privilégios de sistema Revogando privilégios de sistema • Revogar o privilégio CREATE VIEW concedido anteriormente ao usuário FULANO: REVOKE CREATE VIEW FROM FULANO; © 2014 - Prof. Marcos Alexandruk Privilégios de sistema Consultando privilégios de sistema • O dicionário de dados apresenta algumas visões que podem ser consultadas para obter-se os privilégios concedidos aos usuários do banco de dados. • Consultar os privilégios de sistema atribuídos diretamente para o usuário SCOTT: SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SCOTT'; © 2014 - Prof. Marcos Alexandruk Privilégios de sistema Visões de dicionário de dados de privilégios de sistema VISÃO DESCRIÇÃO DBA_SYS_PRIVS Privilégios de sistema atribuídos a usuários e papéis. SESSION_PRIVS Privilégios de sistema concedidos ao usuário na sessão atual diretamente ou através de um papel. ROLE_SYS_PRIVS Privilégios de sistema concedidos ao usuário na sessão atual através de um papel. © 2014 - Prof. Marcos Alexandruk Privilégios de objetos • Privilégio de objetos é o direito de realizar um tipo específico de ação sobre determinados objetos de um banco de dados (tabelas, visões, procedures, etc.) que não fazem parte do esquema do usuário. • Como ocorre com os privilégios de sistema, para conceder privilégios sobre objetos de banco de dados utiliza-se o comando GRANT e para revogá-los utiliza-se o comando REVOKE. • Os privilégios de objetos podem ser concedidos a todos os usuários do banco de dados através do grupo especial PUBLIC. • Pode-se também conceder privilégios de objetos a determinado usuário e permitir que ele, por sua vez, também conceda-os para outros. Exemplo: GRANT SELECT ON NOME_TABELA TO FULANO WITH GRANT OPTION; • Diferente do que acontece quando se concede permissões de sistema, se os privilégios de objetos do usuário forem revogados, serão também revogados os privilégios de todos os usuários da cadeia, isto é, que receberam seus privilégios através deste usuário (FULANO no exemplo acima). © 2014 - Prof. Marcos Alexandruk Privilégios de objetos Privilégios de tabela • Os privilégios de tabelas podem ser concedidos para operações de DDL (Data Definition Language) e de DML (Data Manipulation Language): • Operações de DDL: adicionar, modificar ou descartar colunas das tabelas ou ainda criar índices nas tabelas. • Operações de DML: SELECT, INSERT, UPDATE e DELETE. É possível restringir os privilégios a determinadas colunas das tabelas. GRANT UPDATE (ID, NOME) ON FULANO.FUNCIONARIO TO SCOTT; • Revogar o privilégio concedido anteriormente: REVOKE UPDATE ON FULANO.FUNCIONARIO FROM SCOTT; © 2014 - Prof. Marcos Alexandruk Privilégios de objetos Consultando privilégios de tabela • O dicionário de dados apresenta algumas visões que podem ser consultadas para obter-se os privilégios de objetos concedidos aos usuários do banco. • Consultar os privilégios de tabela concedidos diretamente ao usuário SCOTT: SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'SCOTT'; © 2014 - Prof. Marcos Alexandruk Privilégios de objetos Visões de dicionário de dados de privilégios de objetos VISÃO DESCRIÇÃO DBA_TAB_PRIVS Privilégios de tabelas concedidos a usuários e papéis. DBA_COL_PRIVS Privilégios de colunas concedidos ao usuário na sessão atual diretamente ou através de um papel. SESSION_PRIVS Privilégios de sistema concedidos ao usuário na sessão atual diretamente ou através de um papel. ROLE_TAB_PRIVS Privilégios de tabelas concedidos ao usuário na sessão atual através de um papel. © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Roles • Papéis ou roles são grupos identificados de privilégios que podem incluir tanto privilégios de sistema como privilégios de objetos. • A utilização de papéis facilita a administração dos privilégios concedidos aos usuários do banco de dados. Pois, em vez de conceder diversos privilégios individualmente aos usuários, é possível concedêlos a um papel e este, por sua vez, ser concedido aos usuários. • Caso seja necessária alguma alteração, esta poderá ser feita no role e, consequentemente, os privilégios de todos os usuários que utilizam este papel serão automaticamente alterados. Isto pode reduzir significativamente os números de comandos GRANT e REVOKE necessários para a administração dos privilégios dos usuários do banco de dados. © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Papéis predefinidos • A tabela a seguir apresenta alguns dos principais papéis predefinidos: PAPEL PRIVILÉGIO CONNECT ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW. RESOURCE CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE. DBA Todos os privilégios de sistema WITH ADMIN OPTION. SELECT_CATALOG_ROLE Privilégio SELECT nos objetos do dicionário de dados. EXP_FULL_DATABASE Privilégio para exportar todos os objetos do banco de dados. IMP_FULL_DATABASE Privilégio para importar todos os objetos do banco de dados. © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Criando um role • Criar um novo role: CREATE ROLE TESTE; • É necessário possuir o privilégio de sistema CREATE ROLE que geralmente é concedido aos administradores do banco de dados. Descartando um papel • Descartar um role: DROP ROLE TESTE; © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Concedendo privilégios a um role • Privilégios são concedidos a um role através do comando GRANT. • Conceder um privilégio de objeto na tabela FUNCIONARIOS ao role GERENTE_RH. (O role GERENTE_RH deve ser criado antes.) GRANT SELECT ON FUNCIONARIOS TO GERENTE_RH; • Conceder um privilégio de sistema ao role GERENTE_RH. GRANT CREATE TRIGGER TO GERENTE_RH; © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Atribuindo um role a um usuário • Atribuir o role GERENTE_RH ao usuário FULANO: GRANT GERENTE_RH TO FULANO; • Caso sejam concedidos outros privilégios ao role GERENTE_RH estes serão imediatamente atribuídos ao usuário FULANO. © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Atribuindo um role a outro role • Roles podem também ser atribuídos a outros roles permitindo assim que o DBA tenha a sua disposição uma hierarquia de papéis. • No exemplo a seguir, em vez de atribuir-se privilégios de objetos individuais ao role TODOS_DEPT, preferiu-se atribuir os roles MM_DEPT, RH_DEPT, FI_DEPT e SD_DEPT ao role TODOS_DEPT. GRANT MM_DEPT, RH_DEPT, FI_DEPT, SD_DEPT TO TODOS_DEPT; • Portanto, o role TODOS_DEPT poderia, por exemplo, ser atribuído ao presidente da empresa e este teria acesso às tabelas de todos os departamentos. GRANT TODOS_DEPT TO USUARIO_PRESIDENTE; • O role TODOS_DEPT poderia ter também outros privilégios de sistema ou de objetos que não seriam atribuídos aos outros (MM_DEPT, RH_DEPT, FI_DEPT e SD_DEPT). © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Revogando um role • Revoga-se um role através do comando REVOKE: REVOKE GERENTE_RH FROM FULANO; • Caso outros roles atribuídos ao usuário FULANO tiverem alguns dos privilégios concedidos ao role GERENTE_RH, o usuário (FULANO) continuará a retê-los até que sejam explicitamente revogados. © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Ativando um role protegido por senha • O DBA poderá atribuir uma senha a um role, aumentando com esta medida a segurança. CREATE ROLE TESTE_SENHA IDENTIFIED BY ABC123; • O papel TESTE_SENHA deve ser concedido normalmente através do comando GRANT. GRANT TESTE_SENHA TO FULANO; • Quando o usuário FULANO conectar-se ao banco de dados deverá fornecer o nome do papel e a sua respectiva senha para que possa "receber" os privilégios. SET ROLE TESTE_SENHA IDENTIFIED BY ABC123; © 2014 - Prof. Marcos Alexandruk Gerenciamento de papéis (roles) Visões de dicionário de dados referentes aos papéis VISÃO DESCRIÇÃO DBA_ROLES Apresenta todos os papéis e se eles requerem senha. DBA_ROLE_PRIVS Apresenta os papéis concedidos a outros usuários ou a outros papéis. ROLE_ROLE_PRIVS Apresenta os papéis concedidos a outros papéis. ROLE_SYS_PRIVS Apresenta os privilégios de sistema que foram concedidos aos papéis. ROLE_TAB_PRIVS Apresenta os privilégios de tabelas e colunas de tabelas que foram concedidos aos papéis. SESSION_ROLES Apresenta os papéis que estão em efeito na sessão atual. © 2014 - Prof. Marcos Alexandruk Exportação e Importação O Oracle apresenta três métodos para fazer backup de um banco de dados: • exportação/importação (backup lógico); • backup off-line (backup físico); • backup on-line (backup físico). Uma boa estratégia de backup para um banco de dados envolve tanto backups lógicos como físicos. © 2014 - Prof. Marcos Alexandruk Exportação e Importação O backup lógico envolve a leitura de um conjunto de registros do banco de dados e a gravação destes registros em um determinado arquivo. A leitura dos registros ocorre independentemente das suas localizações físicas. Apesar de utilitários mais antigos como o Import e o Export ainda estarem disponíveis, é recomendável a utilização do utilitário Data Pump Export (disponível a partir da versão 10g) para realização do backup e do Data Pump Import para recuperação dos mesmos. O Data Pump Export consulta o banco de dados, inclusive o dicionário de dados, e grava os registros em um arquivo padrão XML chamado "arquivo dump de exportação". Podem ser exportados para este arquivo todo o banco de dados, determinados usuários, tablespaces ou tabelas. © 2014 - Prof. Marcos Alexandruk Exportação e Importação Após a exportação dos dados através do Data Pump Export, estes poderão ser recuperados através do utilitário Data Pump Import. É possível recuperar todos os dados ou apenas uma parte dos dados exportados. Caso seja importado todo o arquivo gerado a partir de uma exportação completa, então todos os objetos do banco (tablespaces, arquivos de dados e usuários) serão criados durante a importação. Por outro lado, caso sejam importados apenas uma parte dos dados, os tablespaces, arquivos de dados e usuários, deverão ser devidamente configurados antes da importação. © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP EXPORT O exemplo que será apresentado tem como base a exportação dos objetos do usuário FULANO que deverá ser criado e deverá receber alguns privilégios, conforme segue: • CREATE USER FULANO IDENTIFIED BY ABC123; • GRANT CONNECT, RESOURCE TO FULANO; © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP EXPORT O próximo passo apresenta a criação de uma tabela simples denominada TAB1 para teste. A tabela será criada pelo usuário FULANO: • CREATE TABLE TAB1 ( • COL1 NUMBER(2)); • A seguir serão inseridas duas linhas na tabela TAB1: • INSERT INTO TAB1 VALUES (1); • INSERT INTO TAB1 VALUES (2); • COMMIT; © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP EXPORT Cria-se a seguir um diretório para armazenar os arquivos de dados e de controle que o Data Pump irá criar (na exportação) e ler (na importação). É necessário que o usuário que emitirá o comando tenha o privilégio de sistema CREATE ANY DIRECTORY. Portanto, o DBA criará um diretório denominado TESTE e concederá os privilégios de leitura e escrita ao usuário FULANO: • CREATE DIRECTORY TESTE AS 'C:\TESTE'; • GRANT READ, WRITE ON DIRECTORY TESTE TO FULANO; © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP EXPORT O utilitário EXPDP serve como interface com o Data Dump. A tabela seguir apresenta alguns dos principais parâmetros utilizados com o EXPDP. PARÂMETRO DESCRIÇÃO DIRECTORY Especifica o diretório de destino para os arquivos de log e para os arquivos de dump. DUMPFILE Especifica os nomes dos arquivos de dump. CONTENT Especifica o que será exportado: DATA_ONLY, METADATA_ONLY ou ALL. © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP EXPORT Para utilizar o EXPDP deve-se digitar EXPDP em uma janela de prompt de comando do sistema operacional. O exemplo abaixo apresenta a utilização do EXPDP pelo usuário FULANO. Foi passado o valor METADATA_ONLY ao parâmetro CONTENT. Portanto, apenas a estrutura da tabela TAB1 (único objeto do usuário FULANO) será exportada. Para exportação da estrutura e dos dados da tabela o valor deste parâmetro (CONTENT) deveria ser alterado para ALL. C:\> EXPDP DIRECTORY=TESTE DUMPFILE=DATA.DMP CONTENT=METADATA_ONLY Será solicitado o nome do usuário e sua senha. Após fornecê-los o EXPDP passará à criação do arquivo de log e do arquivo dump no diretório TESTE. © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP EXPORT A etapa seguinte envolverá a importação dos dados com base na exportação que acaba de ocorrer. Porém, antes de executar o utilitário de importação, será eliminada a tabela TAB1 criada no exemplo apresentado. • DROP TABLE TAB1; © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando o DATA PUMP IMPORT Deve-se utilizar o Data Pump Import para importação de arquivos exportados via Data Pump Export. Para importação dos objetos do usuário FULANO, deve-se utilizar o comando: • C:\> IMPDP DIRECTORY=TESTE DUMPFILE=DATA.DMP CONTENT=METADATA_ONLY • Voltando ao SQL Plus ao utilizar o comando DESCRIBE (ou sua abreviação DESC) pode-se observar que o objeto anteriormente excluído (a tabela TAB1) foi recuperado. • DESC TAB1 © 2014 - Prof. Marcos Alexandruk Exportação e Importação No exemplo apresentado apenas a estrutura da tabela foi exportada. Para que os dados também fossem exportados seria necessário passar o valor ALL ao parâmetro CONTENT. Caso a tabela a ser importada já existir e a opção CONTENT receber o valor METADATA_ONLY esta será simplesmente ignorada. Porém, se a tabela já existir e a opção CONTENT receber o valor DATA_ONLY os "novos" dados serão acrescentados aos dados já existentes na tabela. Para alterar isso, deve-se utilizar a opção TABLE_EXISTS_ACTION atribuindo-lhe um dos seguintes valores: • SKIP: Conserva apenas os valores que já se encontravam na tabela, nada será importado; • APPEND: Acrescenta os "novos" valores aos que já se encontram na tabela; • TRUNCATE: Corta (elimina) os valores da tabela e insere os dados contidos no arquivo de importação; • REPLACE: Substitui toda a tabela (estrutura e dados). Para esta opção deve ser especificado o valor ALL ao parâmetro CONTENT na exportação e na importação. © 2014 - Prof. Marcos Alexandruk Exportação e Importação © 2014 - Prof. Marcos Alexandruk Exportação e Importação © 2014 - Prof. Marcos Alexandruk Exportação e Importação © 2014 - Prof. Marcos Alexandruk Exportação e Importação © 2014 - Prof. Marcos Alexandruk Exportação e Importação Utilizando as opções EXCLUDE, INCLUDE e QUERY É possível excluir ou incluir conjuntos de tabelas ou ainda apenas determinadas linhas de tabelas em uma exportação utilizando as opções EXCLUDE, INCLUDE e QUERY. O exemplo a seguir exclui a tabela TAB1 do arquivo de exportação (todas as outras tabelas seriam exportadas, exceto TAB1): C:\>EXPDP DIRECTORY=TESTE DUMPFILE=DATA.DMP EXCLUDE=TABLE:\"=\'TAB1\'\" CONTENT=ALL Caso não seja especificado nenhum nome, todos os objetos do tipo especificado não serão incluídos na exportação. O exemplo a seguir não importará nenhum índice: C:\>EXPDP DIRECTORY=TESTE EXCLUDE=INDEX DUMPFILE=DATA.DMP © 2014 - Prof. Marcos Alexandruk CONTENT=ALL Exportação e Importação Utilizando as opções EXCLUDE, INCLUDE e QUERY O próximo exemplo inclui apenas a TAB1 no arquivo de exportação (todas as outras tabelas não seriam exportadas): C:\>EXPDP DIRECTORY=TESTE DUMPFILE=DATA.DMP CONTENT=ALL INCLUDE=TABLE:\"=\'TAB1\'\" Pode-se exportar apenas determinadas linhas de uma tabela. O exemplo a seguir apresenta a exportação das linhas cujos valores da COL1 (da tabela TAB1) sejam menores que 5: C:\>EXPDP DIRECTORY=TESTE DUMPFILE=DATA.DMP CONTENT=ALL INCLUDE=TABLE:\"=\'TAB1\'\" QUERY=TAB1:\"WHERE COL1 < 5\" Para importação dos dados utiliza-se, por exemplo, o seguinte comando: C:\>IMPDP DIRECTORY=TESTE DUMPFILE=DATA.DMP CONTENT=ALL TABLE_EXISTS_ACTION=APPEND © 2014 - Prof. Marcos Alexandruk Backups Físicos Backups Físicos Podem ser realizados com utilitários dos principais sistemas operacionais: • Windows (copy ou winzip32); • Unix (cp ou tar). O Oracle disponibiliza dois tipos de backups físicos: • Off-line (também chamado fechado ou a frio); • On-line (também chamado aberto ou a quente). © 2014 - Prof. Marcos Alexandruk Backups Físicos Opções disponíveis • Integral ou parcial • Integral: conjunto inteiro de arquivos de dados e de controle; • Parcial: apenas alguns arquivos de dados e/ou de controle. • Total ou incremental • Total: autocontido, utilizável por si próprio; • Incremental: apenas os blocos que foram alterados desde o último backup. (Realizados somente através do RMAN) © 2014 - Prof. Marcos Alexandruk Backups off-line Requisitos O banco deverá ser "desligado" através de um destes tipos de shutdown: • shutdown normal; • shutdown immediate; • shutdown transactional. Não se deve realizar um backup off-line após um shutdown abort para que não ocorram inconsistências nos dados. Caso seja necessário fazer um shutdown abort, para realização de um backup off-line consistente, deve-se reiniciar o banco de dados e realizar novamente um shutdown com uma das três opções acima. © 2014 - Prof. Marcos Alexandruk Backups off-line Deve-se fazer backup de todos os arquivos dos seguintes grupos: • Arquivos de dados; • Arquivos de controle; • Arquivos de logs de redo on-line; • Arquivo init.ora e spfile (se utilizado). © 2014 - Prof. Marcos Alexandruk Backups off-line 1. Criar o diretório para arquivar os backups (Exemplo: C:\BACKUP) 2. Criar (no SQL*Plus) o shell script para executar o backup: SPOOL E:\BACKUP\BACKUP_OFFLINE.BAT SELECT 'COPY '||NAME||' E:\BACKUP' FROM V$DATAFILE UNION ALL SELECT 'COPY '||NAME||' E:\BACKUP' FROM V$CONTROLFILE UNION ALL SELECT 'COPY '||MEMBER||' E:\BACKUP' FROM V$LOGFILE; CREATE PFILE='E:\BACKUP\SPFILE_BACKUP.ORA' FROM SPFILE; SPOOL OFF Para criar o script é preciso fazer login como sysdba (ou equivalente). © 2014 - Prof. Marcos Alexandruk Backups off-line Arquivo gerado SQL> 2 3 4 5 SELECT 'COPY '||NAME||' C:\BACKUP' FROM V$DATAFILE UNION ALL SELECT 'COPY '||NAME||' C:\BACKUP' FROM V$CONTROLFILE UNION ALL SELECT 'COPY '||MEMBER||' C:\BACKUP' FROM V$LOGFILE; 'COPY'||NAME||'C:\BACKUP' -------------------------------------------------------------------COPY C:\APP\MASTER\ORADATA\ORCL\SYSTEM01.DBF C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\SYSAUX01.DBF C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\UNDOTBS01.DBF C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\USERS01.DBF C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\EXAMPLE01.DBF C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\CONTROL01.CTL C:\BACKUP COPY C:\APP\MASTER\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\REDO03.LOG C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\REDO02.LOG C:\BACKUP COPY C:\APP\MASTER\ORADATA\ORCL\REDO01.LOG C:\BACKUP 10 linhas selecionadas. SQL> CREATE PFILE='C:\BACKUP\SPFILE_BACKUP.ORA' FROM SPFILE; Arquivo criado. SQL> SPOOL OFF © 2014 - Prof. Marcos Alexandruk Backups off-line Para executar o backup é preciso realizar o shutdown no banco de dados (como sysdba): SHUTDOWN IMMEDIATE O backup é realizado através do sistema operacional com a 'execução' do script anteriormente criado (BACKUP_OFFLINE.BAT). © 2014 - Prof. Marcos Alexandruk Backups on-line Backups on-line (também denominados abertos ou "a quente") são aqueles realizados enquanto o banco de dados Oracle encontra-se aberto. Não é possível fazer um backup on-line no modo NOARCHIVELOG. Neste modo todas as transações encerradas com COMMIT, mas que ainda não foram gravadas nos arquivos de dados ficam disponíveis nos arquivos de redo log online. Por outro lado, quando o modo ARCHIVELOG está ativado, o processo em background ARCn (Archiver Process) faz uma cópia de cada arquivo de redo log antes de sobrescrevê-lo. © 2014 - Prof. Marcos Alexandruk Backups on-line VERIFICANDO O ARCHIVELOG MODE Consulta a seguir para verificar se o archivelog mode está ativado: SELECT LOG_MODE FROM V$DATABASE; Se o archivelog mode estiver desativado a consulta retornará o seguinte: LOG_MODE -----------NOARCHIVELOG © 2014 - Prof. Marcos Alexandruk Backups on-line ATIVANDO O ARCHIVELOG MODE Antes de ativar o archivelog mode é preciso parar o banco: SHUTDOWN IMMEDIATE A seguir, deve-se subir o banco para o estado mount: STARTUP MOUNT; Para alterar archivelog mode deve-se utilizar o seguinte comando: ALTER DATABASE ARCHIVELOG; O próximo passo será abrir o banco de dados: ALTER DATABASE OPEN; © 2014 - Prof. Marcos Alexandruk Backups on-line BACKUP DOS ARQUIVOS DE CONTROLE Alternativa 1: ALTER DATABASE BACKUP CONTROLFILE TO '/BACKUP/CONTROL1.BKP'; Realiza uma cópia binária do arquivo de controle, isto é, uma cópia idêntica byte-a-byte do arquivo de controle. Alternativa 2: ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/BACKUP/CONTROL2.BKP'; Cria um novo arquivo de controle, um arquivo ASCII, que poderá ser executado enquanto a instância estiver no modo NOMOUNT para criar um novo arquivo de controle com conteúdo idêntico ao original. © 2014 - Prof. Marcos Alexandruk Backups on-line BACKUP DOS ARQUIVOS DE UM TABLESPACE Determinar quais são os arquivos associados ao tablespace (ex. SYSAUX): SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'SYSAUX’; Colocar o tablespace (ex. SYSAUX) no modo backup: ALTER TABLESPACE SYSAUX BEGIN BACKUP; Fazer o backup do(s) arquivo(s) de dados utilizando um utilitário do sistema operacional. (No caso do Microsoft Windows pode-se utilizar o utilitário copy.) C:\>COPY C:\APP\MASTER\ORADATA\ORCL\SYSAUX01.DBF C:\BACKUP\SYSAUX01.DBF; Encerrar o modo backup no tablespace SYSAUX: ALTER TABLESPACE SYSAUX END BACKUP; © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) O RMAN é muito mais do que um simples utilitário que pode ser utilizado do lado cliente para realizar backups. Apresenta muitos recursos que não estão disponíveis em outros métodos de backup. © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) EFETUANDO BACKUP COM O RMAN Para efetuar um backup com o RAMAN deve-se primeiramente verificar se o ARCHIVELOG está habilitado: SELECT LOG_MODE FROM V$DATABASE; Se o archivelog mode estiver desativado a consulta retornará o seguinte: LOG_MODE -----------NOARCHIVELOG © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) ATIVANDO O ARCHIVELOG MODE Antes de ativar o archivelog mode é preciso parar o banco: SHUTDOWN IMMEDIATE A seguir, deve-se subir o banco para o estado mount: STARTUP MOUNT; Para alterar archivelog mode deve-se utilizar o seguinte comando: ALTER DATABASE ARCHIVELOG; O próximo passo será abrir o banco de dados: ALTER DATABASE OPEN; © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) INICIANDO O RMAN A seguir, deve-se entrar no prompt (do sistema operacional) e digitar o seguinte comando: RMAN TARGET SYS/SENHA_DO_SYS O comando anterior produzirá a seguinte saída: Conectado ao banco de dados de destino: ORCL (DBID=1178846893) © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) BACKUP DOS ARQUIVOS DE DADOS Criar o diretório para backup dos arquivos. Configurar o diretório para backup: RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'C:\BACKUP\%U'; Realizar o backup dos arquivos de dados: RMAN> BACKUP DATABASE PLUS ARCHIVELOG; © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) BACKUP DO ARQUIVO DE CONTROLE Configurar o diretório para backup do arquivo de controle: RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'C:\BACKUP\%F'; Realizar o backup do arquivo de controle: RMAN> BACKUP CURRENT CONTROLFILE; É possível consultar os backups realizados através da seguinte consulta: RMAN> LIST BACKUP; © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) RESTORE DO ARQUIVO DE CONTROLE Entrar no utilitário RMAN: RMAN TARGET SYS/SENHA_DO_SYS; Iniciar o banco de dados no modo NOMOUNT: RMAN> STARTUP FORCE NOMOUNT; Fazer o restore do arquivo: RMAN> RESTORE CONTROLFILE FROM 'C:\BACKUP\NOME_ARQ_CONTROLE'; Nota: O arquivo de controle foi feito por último, portanto, provavelmente ele deve ser o último arquivo do conjunto de backup. © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) RESTORE DOS ARQUIVOS DE DADOS Montar a base com o arquivo de controle recuperado: RMAN> STARTUP FORCE MOUNT; Restaurar os arquivos de dados: RMAN> RESTORE DATABASE; Recuperar (recover) a base de dados: RMAN> RECOVER DATABASE; Abrir o banco de dados (com o parâmetro RESETLOGS que cria novos arquivos de REDOLOG): RMAN> ALTER DATABASE OPEN RESETLOGS; © 2014 - Prof. Marcos Alexandruk RMAN (Recovery Manager) APAGAR ARQUIVOS DE BACKUP Excluir os arquivos de backup: RMAN> DELETE BACKUP; © 2014 - Prof. Marcos Alexandruk Sistemas Gerenciadores de Banco de Dados Aula 7 Prof. Marcos Alexandruk Aula 7 Desenvolvendo um pequeno banco de dados SQL Server SQL Command Management Studio © 2014 - Prof. Marcos Alexandruk Microsoft SQL Server SQL COMMAND © 2014 - Prof. Marcos Alexandruk SQL Command ACESSAR O SQL COMMAND • Executar o Prompt de Comando como Administrador • Chamar o utilitário SQLCMD: SQLCMD –S .\SQLEXPRESS ou SQLCMD –S SAMSUNG-5\SQLEXPRESS • SAMSUNG-5 = Servidor • SQLEXPRESS = Instância © 2014 - Prof. Marcos Alexandruk SQL Command CRIAR LOGIN E USER • Criar um novo LOGIN: CREATE LOGIN FULANO WITH PASSWORD = 'ABC123' GO • Criar um novo USER: CREATE USER FULANO FOR LOGIN FULANO GO © 2014 - Prof. Marcos Alexandruk SQL Command CONSULTAR LOGINS E USERS • Apresentar os nomes de LOGINS: SELECT NAME FROM SYS.SERVER_PRINCIPALS GO • Apresentar os nomes de USERS: SELECT NAME FROM SYS.DATABASE_PRINCIPALS GO © 2014 - Prof. Marcos Alexandruk SQL Command LOGIN • Login como usuário FULANO: SQLCMD –S .\SQLEXPRESS – U FULANO –P ABC123 © 2014 - Prof. Marcos Alexandruk SQL Command CRIAR UM DATABASE • Criar um novo database denominado DBTESTE: CREATE DATABASE DBTESTE GO • Criar o database como usuário Administrador ou outro com privilégio CREATE DATABASE. © 2014 - Prof. Marcos Alexandruk SQL Command SELECIONAR UM DATABASE • Selecionar o database DBTESTE: USE DBTESTE GO • Criar uma tabela no database DBTESTE: CREATE TABLE TESTE ( CODIGO INT) GO © 2014 - Prof. Marcos Alexandruk SQL Command SP_GRANTDBACCESS • Utilizar a Stored Procedure SP_GRANTDBACCESS para permitir que o usuário FULANO acesse o database DBTESTE: USE DBTESTE GO SP_GRANTDBACCESS FULANO GO © 2014 - Prof. Marcos Alexandruk SQL Command SP_REVOKEDBACCESS • Utilizar a Stored Procedure SP_REVOKEDBACCESS para retirar do usuário FULANO o privilégio de acessar o database DBTESTE: USE DBTESTE GO SP_REVOKEDBACCESS FULANO GO EXIT © 2014 - Prof. Marcos Alexandruk SQL Command PRIVILÉGIO GRANT SELECT • O usuário FULANO, após receber a permissão para acessar o database DBTESTE, consegue acessá-lo. Porém, não consegue consultar os dados dos objetos do database DBTESTE, pois não recebeu permissão para isso. • Conceder privilégio para que o usuário FULANO possa realizar consultas no database DBTESTE: USE DBTESTE GO GRANT SELECT TO FULANO GO © 2014 - Prof. Marcos Alexandruk SQL Command PRIVILÉGIO CREATE DATABASE • Conceder privilégio para usuário FULANO criar databases: GRANT CREATE DATABASE TO FULANO GO • Retirar privilégio do usuário FULANO criar databases: REVOKE CREATE DATABASE FROM FULANO GO © 2014 - Prof. Marcos Alexandruk SQL Command SCHEMA • Criar um schema para o usuário FULANO: CREATE SCHEMA FULANO AUTHORIZATION FULANO GO EXIT • Usuário FULANO criando uma tabela no schema acima: CREATE TABLE FULANO.TESTE CODIGO INT) GO • A tabela será criada no database master, caso não seja especificado outro database. © 2014 - Prof. Marcos Alexandruk SQL Server SQL COMMAND PL/T-SQL © 2014 - Prof. Marcos Alexandruk SQL Command STORED PROCEDURE • Criar uma Stored Procedure simples denominada SP_TESTE: CREATE PROCEDURE SP_TESTE AS DECLARE @MENSAGEM CHAR(20) SET @MENSAGEM = 'TESTE PROCEDURE' PRINT @MENSAGEM GO • Testar a Stored Procedure SP_TESTE: EXEC SP_TESTE GO • Eliminar a Stored Procedure SP_TESTE: DROP PROCEDURE SP_TESTE GO © 2014 - Prof. Marcos Alexandruk SQL Command STORED PROCEDURE • Criar procedure SP_SOMA que recebe dois números e apresenta o valor da soma: SQLCMD -S .\SQLEXPRESS CREATE PROCEDURE SP_SOMA @A FLOAT, @B FLOAT AS DECLARE @X FLOAT SET @X = @A + @B PRINT @X GO • Executar a procedure SP_SOMA: EXEC SP_SOMA 3.5, 5.4 GO © 2014 - Prof. Marcos Alexandruk SQL Command FUNCTION • Criar a função SF_SOMA que recebe dois números e retorna a soma: CREATE FUNCTION SF_SOMA (@A FLOAT, @B FLOAT) RETURNS FLOAT AS BEGIN DECLARE @X FLOAT SET @X = @A + @B RETURN (@X) END GO © 2014 - Prof. Marcos Alexandruk SQL Command FUNCTION • Chamar a função SF_SOMA: SELECT DBO.SF_SOMA (3, 7) GO • Eliminar a função SF_SOMA: DROP FUNCTION DBO.SF_SOMA GO • dbo = Database Owner (schema default para membros do role sysadmin) © 2014 - Prof. Marcos Alexandruk SQL Command TRIGGER • Criar um trigger, TR_AUDITORIA, para disparar quando ocorrerem atualizações na tabela PRODUTO: CREATE TABLE PRODUTO ( CODPROD INT, NOMEPROD VARCHAR(20)) GO CREATE TABLE AUDITORIA ( USUARIO VARCHAR(20), DATA DATETIME, CODPROD INT) GO © 2014 - Prof. Marcos Alexandruk SQL Command TRIGGER • Criar um trigger, TR_AUDITORIA, para disparar quando ocorrerem atualizações na tabela PRODUTO: CREATE TRIGGER TR_AUDITORIA ON PRODUTO FOR UPDATE AS INSERT INTO AUDITORIA SELECT SUSER_SNAME(), GETDATE(), CODPROD FROM INSERTED GO © 2014 - Prof. Marcos Alexandruk SQL Command TRIGGER • Testar o trigger TR_AUDITORIA: INSERT INTO PRODUTO VALUES (1, 'PRODUTO 1') GO UPDATE PRODUTO SET NOMEPROD = 'PRODUTO 2' WHERE CODPROD = 1 GO SELECT * FROM PRODUTO GO SELECT * FROM AUDITORIA GO © 2014 - Prof. Marcos Alexandruk SQL Server MANAGEMENT STUDIO © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Management Studio © 2014 - Prof. Marcos Alexandruk Aula 7: Use AVA Recentemente a Microsoft lançou o SQL Server 2014. Faça uma pesquisa e comente com seus colegas quais foram as principais novidades desta nova versão. © 2014 - Prof. Marcos Alexandruk