2015.1- INF1340 - BD2 SGBD <Oracle> Grupo: • Amanda • Christian • Gustavo 2015.1- INF1340 - BD2 Breve Histórico Larry Ellison e amigos fundam a SDL(Software Development Laboratories) Primeira versão do oracle (Oracle V1) foi desenvolvida mas nunca lançada oficialmente Oracle V2 começou a ser comercializado e foi o primeiro banco de dados relacional. A primeira versão não suportava transações mas implementava o SQL básico e suportava “queries” e “join” Após 4 anos, é lançado Oracle V3. Foi escrito em C e suporta COMMIT e ROLLBACK, ou seja, funcionalidades para transações. Oracle V7 aparece com novas funcionalidades : stored procedures, triggers e Referential integrity Oracle V8 já incorpora uma JVM(Java Virtual Machine) nativa conhecida como “Aurora”. Essa versão veio com diversas melhorias como suporte a desenvolvimento orientado a objetos. O banco de dados Oracle é um dos mais utilizados. A partir da versão 12c passou a ter suporte as principais plataformas(windows, linux e solaris). De 1992 até hoje, a Oracle comprou diversas empresas. Uma compra importante foi a empresa SUN. O SGDB da Oracle oferece um excelente suporte a desenvolvedores java. 2015.1- INF1340 - BD2 Comparativo Ranking dos principais gerenciadores de banco de dados baseado em sua popularidade. Fonte : http://db-engines.com/en/ranking 2015.1- INF1340 - BD2 Comparativo Como é calculado 1. Numero de menções dos sistemas em websites. 2. Interesse geral nos sistemas. Utiliza-se Google Trends para essa pesquisa. 3. Frequência de discução técnica sobre o sistema. Utiliza-se Stack Overflow e DBA Stack Exchange. 4. Numero de oferta de trabalho sobre o sistema mencionado. 5. Numero de profiles em redes sociais profissionais(serias) onde o sistema é mencionado. Utiliza-se LinkedIn 6. Relevancia em redes sociais. Numero de Tweets no twitter sobre o sistema. 2015.1- INF1340 - BD2 Arquitetura Diagrama de Componentes Instancia SGA Shared Pool Processo de usuario Cache de Dicionários de Dados Processo do servidor PMON SMON Buffer de Redo Log Cache de Buffer de Banco de Dados Cache de Biblioteca Java Pool DBWn LGWR Large Pool CKPT Outros PGA Arquivos de parametros Arquivos de senha Arquivos de dados Arquivos de Controle Arquivos de redo log Banco da Dados Arquivos de Log arquivados 2015.1- INF1340 - BD2 Arquitetura Descrição de Componentes • SGA – Shared Pool – Database Buffer Cache - mantém cópias dos blocos de dados lidos – Redo Log Buffer - Mantém as informações sobre as mudanças ocorridas • Background Process – DBWn (database write) – LGWR (Log Write) – SMON (System Monitor) – PMON (Process Monitor) – CKPT (Checkpoint Monitor) • Banco de dados 1.Redo Log: É o que torna possível refazermos uma transação 2. Controle: Arquivos binários que armazenam diversas informações necessárias para manter o estado atual do banco de dados. 3. Dados: Armazena o dicionário de dados e objetos do usuário. 2015.1- INF1340 - BD2 Otimização Introdução • O plano de execução é mostrado utilizando-se o comando “EXPLAIN PLAN”. – O Comando “EXPLAIN PLAN” mostra o plano de execução escolhido pelo otimizador da oracle para os comandos : “Select”, “Update”, “Insert” e “Delete”. – O Plano de execução é a sequência escolhida pelo otimizador que será utilizado para executar a query. • A tabela de execução contém informações sobre: – Otimização: O custo e a cardinalidade de cada operação – Particionamento: O conjunto de partições acessadas (Tabelas podem ser divididas em partes) – Execução paralela: O método de distribuição para executar o “Join” (Nested Loop/Hash Join/Sort Merge Join/Cartesian Join) 2015.1- INF1340 - BD2 Otimização Introdução • Mudam o plano de execução : – Schemas diferentes. Exemplo : Dois usuários podem apontar para diferentes objetos no mesmo banco de dados e o plano de execução mudar. – Custos diferentes. São levados em consideração : Volume de dados e estatísticas, os tipos e valores das variáveis e os parâmetros de inicialização. • Alem do “EXPLAIN PLAN”, é possível utilizar outros recursos. Um deles é V$SQL_PlAN. – V$SQL_PLAN : Mostra o plano de execução de um comando em SQL. – Suas caracteristicas é semelhante a tabela de execução mas o comando V$SQL_PLAN tem certas vantagens sobre o “EXPLAIN PLAN”, pois você não precisa levar em consideração o ambiente de execução em que aquele plano está sendo executado. – Em resumo : mais geral. 2015.1- INF1340 - BD2 Otimização Tabela de execução A tabela de execução é gerada como output quando se utiliza o comando “EXPLAIN PLAN”. É uma tabela temporária que fica disponível a todos os usuários com informações sobre o plano de execução. 2015.1- INF1340 - BD2 Otimização Executando o “Explain plan” EXPLAIN PLAN FOR SELECT last_name FROM employees; EXPLAIN PLAN FOR SET STATEMENT_ID = ’st1' INTO my_plan_table FOR SELECT last_name FROM employees; 2015.1- INF1340 - BD2 Otimização Exemplo comentado de um plano a. O Exemplo a esquerda mostra uma consulta em SQL utilizando o “EXPLAIN PLAN” para demostrar o funcionamento do comando “SELECT”. O codigo em SQL faz uma consulta na tabela “employees” e procura telefones que começam com 650. a. A tabela de execução abaixo do comando mostra a ordem de execução. Id_0) Executa o “SELECT” É importante notar a identação. Os comandos de dentro executam em ordem para executar os comandos de fora, ou seja, o SELECT(id_0) representa fazer um FULL TABLE SCAN na tabela EMPLOYEES. 2015.1- INF1340 - BD2 Otimização Como funciona o CBO(Cost-based optimizer) da oracle? • O Otimizador gera um conjunto de possíveis planos de acordo com dicas e informações disponíveis • Depois ele estima o custa de cada plano baseado em estatísticas que ele vai calcular utilizando informações do dicionario, características da tabela, índices e partições sendo acessadas pelo comando. • O custo calculado é proporcional aos recursos necessários para executar os comandos de um certo plano. Esses “recursos” incluem IO,CPU e memoria. • O otimizador compara os custos e escolhe o que tem menor custo • Isso tudo acontece dentro de um otimizador chamado CBO (Cost-Based Optimizer) No proximo slide tem uma representação dos componentes e a ordem de execução deles. 2015.1- INF1340 - BD2 Otimização CBO (cost based optimizer) 2015.1- INF1340 - BD2 Otimização Componentes CBO ● QUERY TRANSFORMER (Transformador de query) ○ O principal objetivo dele é determinar se é vantajoso trocar a forma de uma query para que se possível, gerar um plano de execução melhor. ● ESTIMATOR (Estimador) ○ Gera trés tipos de medições ■ Seletividade ■ Cardinalidade ■ Custo ○ Essas estimativas não são independentes. Elas são relacionadas entre si. Uma é derivada da outra. ○ O objetivo principal do estimador é estimar o custo de um plano. Caso tenha “Estatísticas” disponíveis, ele vai levá-as em consideração para computar as medições. ● PLAN GENERATOR (Gerador de plano) ○ A função do gerador de plano é gerar diversos planos(um conjunto) e escolher aquele que tem o menor custo. 2015.1- INF1340 - BD2 Otimização Exemplo tabela & árvore 2015.1- INF1340 - BD2 ● Manual ● RMAN (Oracle Recovery Manager) Recuperação ○ Repositório de dados sobre backups ○ Backups incrementais ■ Backup consistido apenas dos blocos de dados alterados desde o último backup. ○ Block media recovery ■ Reparação de pequenos blocos de dados corrompidos sem a necessidade de utilizar um backup como um todo. ○ Binary Compression ■ Reduz o tamanho geral do backup. 2015.1- INF1340 - BD2 ● RMAN ○ Encrypted Backups ■ O backup é guardado de maneira encriptada ■ Modos: transparent, password-protected e dual-mode. ● Chave cifrada com, respectivamente, a chave mestra do DB, a senha escolhida e ambos. ○ ○ ● Recuperação Duplicação automática Conversão de dados entre plataformas Oracle Flashback ○ Complemento ao backup. Permite ver estados passados de certo dado e “rebobiná-lo” sem a necessidade de uma restauração através de backup. 2015.1- INF1340 - BD2 Recuperação Comandos & exemplos ● Comandos ○ %rman - Inicia o RMAN ○ BACKUP OPERAND ● BACKUP DATABASE PLUS ARCHIVELOG; BACKUP INCREMENTAL LEVEL 1 CUMULATIVE SKIP INACCESSIBLE DATABASE; RUN { ALLOCATE CHANNEL dev1 DEVICE TYPE DISK FORMAT '/disk1/%U'; ALLOCATE CHANNEL dev2 DEVICE TYPE DISK FORMAT '/disk2/%U'; BACKUP AS COPY TABLESPACE SYSTEM, tools, users, undotbs; } 2015.1- INF1340 - BD2 Recuperação Comandos & exemplos RUN #script daily { RECOVER COPY OF DATABASE WITH TAG 'incr_update'; BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE; } BACKUP DEVICE TYPE sbt #tape duas semanas BACKUPSET COMPLETED BEFORE 'SYSDATE-14' DELETE INPUT; RUN { SET MAXCORRUPT FOR DATAFILE 1,2,3,4,5 TO 1; BACKUP CHECK LOGICAL #logico e físico DATABASE; } 2015.1- INF1340 - BD2 Segurança & Autorização Usuários, Grupos, Papéis Quem tem acesso ao que??? A partir de onde????? Quando??????? Como????? Identificação do usuário Controle de Acesso 2015.1- INF1340 - BD2 Segurança & Autorização Usuários, Grupos, Papéis ● USER: Identificação de um usuário que irá possuir privilégios (Grant) para acessar e alterar dados. ● PASSWORD: Criada junto do usuário é o elemento mais precioso do banco de dados por parte do usuário. ● SCHEMA: Criado pelo banco toda vez que um USER é criado. É uma coleção de objetos pertencentes a um usuário. ● OBJETOS DE USUÁRIO: Tables, Types, Views, Clusters, Indexes, Snapshots, Sequences, Procedures, Functions e Packages. ● OBJETOS ADMINISTRATIVOS: TableSpaces, Users, Profiles, Roles, Undo Segments e Directories ● ROLES: É um conjunto de privilégios que pode ser concedido a um usuário 2015.1- INF1340 - BD2 Segurança & Autorização Comando CREATE ROLE CREAT ROLE é usado para criar uma série de privilégios CREATE ROLE dw_manager; IDENTIFIED BY warehouse; CREATE ROLE dw_manager; IDENTIFIED GLOBALLY; 2015.1- INF1340 - BD2 Segurança & Autorização Privilégios em comandos GRANT e REVOKE GRANT REFERENCES (employee_id), UPDATE (employee_id, salary, commission_pct) ON hr.employees TO oe; REVOKE REFERENCES ON hr.employees FROM oe CASCADE CONSTRAINTS; 2015.1- INF1340 - BD2 ● ● ● Procedimentos Armazenados Conjunto de comandos e parâmetros armazenados. Reutilizável e promove metodologia padrão para exercer certa tarefa, sem a necessidade de duplicidade de códigos. Consiste em, geral, três partes: declarações, código em si (obrigatório) e tratador de excessões. Pode ser utilizado tanto SQL como PL/SQL ou, até mesmo, Java. Header AS [declaration statements ...] BEGIN … [EXCEPTION ...] END; CREATE OR REPLACE nome_procedimento(arg1 tipo, ...) AS BEGIN .... END nome_procedimento; 2015.1- INF1340 - BD2 Gatilhos ● Conjunto de comandos executados a partir da ocorrência de certo evento. ● Criação similar à procedimentos, mas com mais uma seção em sua definição; CREATE OR REPLACE TRIGGER nome_trigger BEFORE<ou>AFTER event(DELETE OR INSERT OR UPDATE…) ON <schema/table<ou>view> FOR EACH ROW WHEN (condições) DECLARE … BEGIN ... END; 2015.1- INF1340 - BD2 Exemplo de procedimento armazenado ativado por gatilho ● Procedimento pode ser executado através de um gatilho ○ Comando CALL (obsoleto) ou o uso direto do nome do procedimento. CREATE OR REPLACE TRIGGER Example AFTER INSERT ON emp FOR EACH ROW BEGIN Insert_row_proc; END; CREATE OR REPLACE PROCEDURE Insert_row_proc AS BEGIN INSERT INTO emp@Remote VALUES ('x'); EXCEPTION WHEN OTHERS THEN INSERT INTO Emp_log VALUES ('x'); END; 2015.1- INF1340 - BD2 ● ● ● ● Referências Histórico ○ Historia do banco de dados http://en.wikipedia.org/wiki/Oracle_Database#History Último acesso : 04/06/2015 Comparativo ○ http://db-engines.com/en/ranking Ultimo acesso : 04/06/2015 Arquitetura ○ http://www.linhadecodigo.com.br/artigo/543/oracle-arquitetura-e-seuscomponentes.aspx Último acesso : 04/06/2015 ○ http://www.linhadecodigo.com.br/artigo/99/a-arquitetura-do-oracle.aspx Último acesso : 04/06/2015 Otimização ○ Documentação oficial da oracle (USING EXPLAIN PLAN) http://docs.oracle.com/cd/B19306_01/server.102/b14211/ex_plan.htm#g4223 1 Último acesso : 04/06/2015 ○ Documentação oficial da oracle(Introduction to the optimizer) http://docs.oracle.com/cd/B10500_01/server.920/a96533/optimops.htm Último acesso : 04/06/2015 2015.1- INF1340 - BD2 Referências ● Recuperação http://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmintro.htm Último acesso : 02/06/2015 ● Segurança http://www.ebah.com.br/content/ABAAAA89AAA/usuario-x-squema-no-oracle Ultimo acesso : 04/06/2015 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9013.htm Último acesso : 04/06/2015 ● Procedimentos armazenados e gatilhos https://docs.oracle.com/cd/E12151_01/doc.150/e12155/triggers_proc_mysql.htm# g1049668 Último acesso : 01/06/2015