217
VII JOLIM 24 a 26 de Outubro / 2011

Oracle Em Linux

Embed Size (px)

Citation preview

Page 1: Oracle Em Linux

VII JOLIM

24 a 26 de Outubro / 2011

Page 2: Oracle Em Linux

Graduação

• Ciência da Computação

Pós-graduação

• MBA em Gestão Empresarial

Richard Ropelato Rizzo

Page 3: Oracle Em Linux

Usina de Açúcar Santa Terezinha Ltda

• Analista de Suporte e Analista de Sistemas

Logtrac Consultores Associados S/C

• Gerente de Informática

Innolution Sistemas de Informática

• Gerente de Projetos

Experiência Profissional

Page 4: Oracle Em Linux

Integrada Assessoria, Serviços e Recuperação de Créditos Ltda

• Sócio-administrador

MRI Assessoria e Serviços Ltda

• Procurador

Phospec Nutrição Animal Indústria e Comércio Ltda

• Desenvolvimento e Manutenção (Oracle)

Vet Science Nutracêuticos Ltda

• Desenvolvimento e Manutenção (Oracle)

Atualmente

Page 5: Oracle Em Linux

Instalação;

Administração de Banco de Dados;

Guia de Desenvolvimento

Tópicos

Page 6: Oracle Em Linux
Page 7: Oracle Em Linux

Sistema Operacional

• Red Hat Enterprise Linux RHEL3 and RHEL4

• Suse SLES-9

• Fedora Core 4

• Red Flag DC Server 5.0 / MIRACLE LINUX V4.0 / Haansoft Linux 2006 Server (Asianux 2.0 Inside)

• Debian 3.1

Protocolo de Rede

• TCP/IP

Requisitos do Sistema

Page 8: Oracle Em Linux

RAM • Servidor: 256 MB (mínimo),

512 MB (recomendado)

• Cliente: 256 MB

Espaço em

Disco

• Servidor: 1.5 GB (mínimo)

• Cliente: 100 MB

Pacotes • glibc – 2.3.2

• libaio – 0.3.96

Requisitos de Sistema

Page 9: Oracle Em Linux

Memória RAM Espaço de Swap Necessário

Entre 0 e 256 MB 3x o tamanho da RAM

Ente 256 e 512 MB 2x o tamanho da RAM

512 MB ou mais 1024 MB

Requisitos de Espaço de Swap

Page 10: Oracle Em Linux

Parâmetro do Kernel Configuração

Semmsl 250

Semmns 32000

Semopm 100

Semmni 128

Shmmax 536870912

Shmmni 4096

Shmall 2097152

file-max 65536

ip_local_port_range 1024–65000

Requisitos do Kernel

Page 11: Oracle Em Linux
Page 12: Oracle Em Linux

XE

• Livre;

• Menor edição;

• Fácil de instalar e administrar.

Interface baseada em

browser

• Administrar o banco de dados;

• Criar tabelas, visões e outros objetos;

• Importar, exportar e visualizar dados em tabelas;

• Executar consultas e scripts SQL;

• Gerar relatórios.

Introdução ao Oracle Database XE

Page 13: Oracle Em Linux

Oracle Application

Express

• Ambiente de desenvolvimento gráfico para criação de aplicações web centradas no banco de dados.

Outras linguagens

• Pode-se usar todas as linguagens e ferramentas da Oracle e de terceiros para desenvolvimento de aplicações.

Utilitários de Linha de

Comando

• SQL*Plus;

• SQL*Loader;

• Data Pump e utilitários de importação e exportação.

Introdução ao Oracle Database XE

Page 14: Oracle Em Linux
Page 15: Oracle Em Linux

• Processos de background;

• Memória alocada.

Instância

• SGA (System Global Area): área de memória compartilhada que contém buffers de dados e informações de controle da instância;

• PGA (Program Global Area): área de memória usada por um único processo de servidor.

2 tipos de memória

Overview de Alocação de Memória

Page 16: Oracle Em Linux

É um processo que serve às requisições de usuários;

Oracle Database XE cria um novo processo servidor ao receber uma requisição de conexão ao banco de dados;

Cada novo processo servidor aloca sua própria PGA privada;

A PGA é usada para processar declarações SQL e armazenar informações de logon e de sessão.

Processo Servidor

Page 17: Oracle Em Linux

Alocação de memória

Page 18: Oracle Em Linux

• Armazena qualquer dado consultado ou modificado.

• Todos os clientes conectados compartilham o acesso ao buffer cache.

• Evita acesso repetido ao disco.

Buffer Cache

Componentes da SGA (System Global Area)

Page 19: Oracle Em Linux

• Armazena informações operacionais e código que podem ser compartilhados entre usuários. Por exemplo:

• Declarações SQL são armazenadas para que possam ser reutilizadas;

• Informações do dicionário de dados – dados do usuário, descrições de tabelas e índices, privilégios – para rápido acesso e reutilização;

• Stored procedures para acesso rápido.

Shared Pool

Componentes da SGA (System Global Area)

Page 20: Oracle Em Linux

• Melhora a performance armazenando informações de redo até que possam ser gravadas nos arquivos físicos (redo log files) em uma única vez e em momento mais oportuno.

Redo Log Buffer

• Área opcional usada para armazenar grandes requisições de I/O de vários processos servidor.

Large Pool

Componentes da SGA (System Global Area)

Page 21: Oracle Em Linux

Os tamanhos padrão da SGA e PGA são definidos durante a instalação, de acordo com a quantidade total de memória RAM;

Ao invés de alterar o tamanho de cada componente da SGA, deve-se alterar o tamanho total ajustando o parâmetro SGA Target;

Oracle XE automaticamente ajusta o tamanho de cada componente individual da SGA;

Oracle XE continuamente ajusta esses componentes para otimizar o desempenho.

Tamanho da SGA (System Global Area) e PGA (Program Global Area)

Page 22: Oracle Em Linux

De forma similar, ao invés de alterar o tamanho de cada PGA individualmente, altera-se o total de memória alocada para a coleção de PGAs;

Oracle XE ajusta automaticamente o tamanho da PGA de acordo com a necessidade;

A coleção de PGA é conhecida como PGA Aggregate;

Altera-se o tamanho máximo da PGA Aggregate configurando o parâmetro PGA Aggregate Target.

Tamanho da SGA (System Global Area) e PGA (Program Global Area)

Page 23: Oracle Em Linux

A quantidade máxima de memória que o Oracle Database XE permite para a SGA e PGA Aggregate é 1 GB;

Qualquer tentativa de alteração na alocação de memória onde a somatória da SGA e da PGA Aggregate exceder 1 GB, retornará uma mensagem de erro.

Tamanho da SGA (System Global Area) e PGA (Program Global Area)

Page 24: Oracle Em Linux

Somente deve-se alterar os tamanhos da SGA e da PGA Aggregate nas seguintes circunstâncias:

• Memória física foi adicionada ao computador e quer-se alocar mais memória ao banco de dados;

• Ao receber mensagem de erro indicando memória insuficiente.

Tamanho da SGA (System Global Area) e PGA (Program Global Area)

Page 25: Oracle Em Linux

Se a mensagem de erro indicar memória insuficiente para SGA, aumente o tamanho da SGA.

• ORA-04031: unable to allocate n bytes of shared memory

• ORA-00379: no free buffer available in buffer pool...

Se a mensagem de erro indicar memória insuficiente para um processo, aumente o tamanho da PGA Aggregate.

• ORA-04030: out of process memory when trying to allocate n bytes

Tamanho da SGA (System Global Area) e PGA (Program Global Area)

Page 26: Oracle Em Linux

Verificando a alocação de

memória atual

Prática 1

Page 27: Oracle Em Linux

Suponha que foi realizado o upgrade de memória de 1 GB para 1,5 GB no computador que executa o Oracle Database XE.

Quer-se alocar ½ dessa memória (250 MB) ao banco de dados;

Destes 250 MB, quer-se alocar 200 MB para a SGA e 50 MB para a PGA Aggregate.

Exemplo: Alterando o tamanho da SGA e PGA Aggregate

Page 28: Oracle Em Linux

Alterando o tamanho da SGA e

PGA Aggregate

Prática 2

Page 29: Oracle Em Linux
Page 30: Oracle Em Linux

• Criadas e reconhecidas somente pelo banco de dados.

Estruturas Lógicas

• Podem ser vistas e operadas a partir do sistema operacional.

Estruturas Físicas

• Usadas para recuperar o banco de dados após uma falha do sistema operacional, falha na instância do banco de dados ou na falha de disco.

Estruturas relacionadas à Recuperação

Estruturas de armazenamento

Page 31: Oracle Em Linux

Estruturas de armazenamento

Page 32: Oracle Em Linux

Coleção de estruturas físicas e lógicas que juntas contém todos os dados e metadados para as aplicações;

Também contém estruturas de controle necessárias para startup e operação do banco de dados;

A instância do Oracle Database XE trabalha apenas com 1 banco de dados;

Ao invés de permitir a criação de múltiplos banco de dados para acomodar diferentes aplicações, o Oracle Database XE habilita a separação de dados em diferentes schemas.

Banco de dados

Page 33: Oracle Em Linux

Banco de dados;

• 1 ou mais tablespaces;

Tablespace

• Agrupamento lógico de 1 ou mais arquivos de dados físicos (permanentes ou temporários)

• 1ª estrutura pela qual o banco de dados gerencia o armazenamento.

Tablespaces

Page 34: Oracle Em Linux

Permanentes • Usadas para armazenar dados do sistema e do

usuário;

Temporárias • Melhora a concorrência de múltiplas

operações de classificação, reduzindo o overhead;

Undo

• Quando uma transação modifica o banco de dados, uma cópia do dado original é realizada antes da sua modificação, Isto é necessário para:

• Desfazer qualquer mudança não efetivada em um evento de ROLLBACK;

• Prover consistência;

• Para suportar a característica Flashback Query.

Tipos de Tablespaces

Page 35: Oracle Em Linux

Tablespace Descrição

SYSTEM Contém o dicionário de dados e outras tabelas que contém informações administrativas sobre o banco de dados.

SYSAUX Tablespace auxiliar da tablespace SYSTEM. Alguns componentes e produtos usam essa tablespace.

TEMP Usada para armazenar dados temporários gerados no processamento de declarações SQL.

UNDO Usada para armazenar informações de undo;

USERS Usada para armazenar objetos e dados de usuários de forma permanente.

Descrições das Tablespaces

Page 36: Oracle Em Linux

Arquivos do sistema operacional que armazenam dados do banco de dados;

Os dados são escritos nesses arquivos em um formato proprietário que não podem ser lidos por outros programas a não ser o banco de dados Oracle;

Tempfiles são arquivos de dados especiais associados somente a tablespaces temporárias;

Arquivos de Dados (Datafiles e Tempfiles)

Page 37: Oracle Em Linux

Arquivo binário que armazena os nomes e a localização dos componentes físicos do banco de dados;

Mantém outras informações de controle, incluindo registros de todos arquivos de backup do banco de dados;

É essencial para o funcionamento do banco de dados.

Arquivos de controle (Control Files)

Page 38: Oracle Em Linux

Contém parâmetros usados na inicialização para determinar a configuração e recursos de execução do banco de dados;

Pode-se alterar os parâmetros de inicialização através de comandos ALTER SYSTEM.

Arquivo de Parâmetro (Server Parameter File)

Page 39: Oracle Em Linux

Usado para autenticar um usuário que se conecta remotamente ao usuário SYS;

O usuário SYS pode então realizar funções administrativas a partir de uma estação remota;

Contém a senha do usuário SYS criptografada;

Toda vez que a senha do usuário SYS é alterada, o arquivo de senha é alterado automaticamente.

Arquivo de Senha (Password File)

Page 40: Oracle Em Linux

• Essencial para proteção de dados;

• É um diretório, separado do banco de dados, onde as estruturas relacionadas à recuperação estão armazenadas;

• Inclui:

• Backup dos arquivos físicos (datafiles, control file, server parameter file);

• Online Redo Logs;

• Archived Redo Logs.

Flash Recovery Area

Estruturas Relacionadas à Recuperação

Page 41: Oracle Em Linux

A estrutura crucial para a recuperação do banco de dados é um conjunto de redo log files;

Este conjunto de arquivos é conhecido como redo log para o banco de dados;

A função principal do redo log é registrar todas as mudanças realizadas em dados no banco de dados.

O banco de dados escreve nos redo log files de forma circular.

Online Redo Log Files

Page 42: Oracle Em Linux

Para proteger falhas envolvendo o próprio redo log, permite-se a criação de redo log multiplexado;

Implementa-se a multiplexação criando-se grupos de redo log files;

Multiplexed Redo Log

Page 43: Oracle Em Linux

Pode-se configurar o Oracle Databse XE para habilitar um processo de armazenamento de cópias de redo log files inativos na flash recovery area antes de ser reusado;

Um banco de dados configurado para armazenar redo logs é chamado de modo ARCHIVELOG. O contrário é chamado de modo NOARCHIVELOG.

Vantagens do modo ARCHIVELOG:

• Após uma falha de mídia, o banco de dados pode ser reconstruído com todas as transações efetivadas desde o último backup.

• Pode-se fazer backup do banco de dados enquanto estiver online.

Archived Redo Log Files

Page 44: Oracle Em Linux

Monitorando o Uso do Espaço de

Armazenamento

Prática 3

Page 45: Oracle Em Linux

Se o espaço restante no banco de dados estiver diminuindo, pode-se compactar o espaço de armazenamento;

A compactação tenta recuperar espaço fragmentado não usado;

Dependendo do estado do banco de dados, a compactação pode ou não recuperar espaços não usados.

A compactação ocorre em background, não sendo necessário colocar nenhum dado offline.

Compactando o Espaço de Armazenamento

Page 46: Oracle Em Linux

Compactando o Espaço de

Armazenamento

Prática 4

Page 47: Oracle Em Linux

Visualizando Tablespaces

Prática 5

Page 48: Oracle Em Linux

Visualizando Redo Log Files

Prática 6

Page 49: Oracle Em Linux

Oracle Database XE armazena backups, online redo log files, e archived redo log files na flash recovery area;

As principais tarefas no gerenciamento da flash recovery area são:

• Monitorar o espaço disponível;

• Modificar o tamanho e localização.

A flash recovery area tem tamanho fixo. O valor default é 10GB.

Gerenciamento da Flash Recovery Area

Page 50: Oracle Em Linux

Monitoramento do Espaço na Flash Recovery Area

Prática 7

Page 51: Oracle Em Linux
Page 52: Oracle Em Linux

Uma conta de usuário é identificada por um nome de usuário e define os seguintes atributos:

• Senha para autenticação no banco de dados;

• Privilégios e Roles;

• Tablespace padrão para objetos do banco de dados;

• Tablespace temporária para processamento de consultas.

Ao criar um usuário, implicitamente cria-se um schema para esse usuário.

Para remover um usuário, deve-se primeiro remover todos os objetos do banco de dados que pertencem a esse usuário.

• CASCADE -> na operação DROP apaga os objetos e o usuário simultaneamente.

Contas de Usuários

Page 53: Oracle Em Linux

Ao criar um usuário, deve-se dar privilégios a esse usuário para conectar-se ao banco de dados, executar consultas e criar schemas;

Existem 2 tipos de privilégios:

• Privilégios de Sistema: direito de executar uma determinada ação em um objeto de qualquer schema.

• Privilégios de Objeto: direito de executar uma ação em um objeto de um schema específico.

Privilégios de Usuário e Roles

Page 54: Oracle Em Linux

Role Descrição

CONNECT Permite que um usuário se conecte ao banco de dados.

RESOURCE Permite ao usuário criar alguns tipos de objetos em seu próprio schema.

DBA Permite a um usuário executar a maioria das funções administrativas.

Roles Pré-definidas no Oracle Database XE

Page 55: Oracle Em Linux

Roles -> facilita o gerenciamento e controle de privilégios.

Cria-se Roles -> Dá-se privilégios as Roles -> Atribui-se Roles aos usuários;

Roles não estão contidas em nenhum schema.

Privilégios de Usuário e Roles

Page 56: Oracle Em Linux

Contas criadas automaticamente para administração do banco de dados:

• SYS / SYSTEM;

Outras contas são criadas referente a produtos que possuem schemas próprios:

• CTXSYS -> Oracle Text (usado para indexar a ajuda online do Oracle Database XE;

As únicas contas internas que pode-se conectar são SYS e SYSTEM.

Recomenda-se não conectar-se a conta SYS.

Contas de Usuário Interna

Page 57: Oracle Em Linux

Permitem que se realizem funções de administração como:

• Gerenciamento de usuários;

• Gerenciamento de memória;

• Start up e Shut down.

Contas Administrativas e Privilégios

Page 58: Oracle Em Linux

SYSTEM

• Usuário usado para realizar todas as funções administrativas e start up e shut down.

SYS

• Armazena todas as tabelas e visões do dicionário de dados;

• Estas tabelas e visões são críticas para a operação do banco de dados;

• Para manter a integridade, as tabelas do usuário SYS são manipuladas somente pelo banco de dados, não podendo ser manipuladas por qualquer usuário ou administrador.

Usuários SYS e SYSTEM

Page 59: Oracle Em Linux

Privilégio de sistema associado ao usuário SYS somente;

Permite a realização de tarefas administrativas de alto nível;

Observação: ao conectar-se com o usuário SYS, tem-se privilégios ilimitados nas tabelas do dicionário de dados.

Privilégio SYSDBA

Page 60: Oracle Em Linux

É uma maneira de usar as credenciais do S.O. para autenticar-se no banco de dados;

Um administrador que esteja autenticado através do S.O. não precisa conhecer a senha dos usuários SYS e SYSTEM;

A autenticação de S.O. é necessária para identificar usuários administradores, mesmo que o banco de dados esteja em shut down;

A conta de usuário ORACLE é automaticamente criada e associada ao grupo DBA durante a instalação do Oracle Database XE.

Autenticação por Sistema Operacional

Page 61: Oracle Em Linux

Método Permitido Observação

Autenticar ao BD com usuário SYSTEM

Interface gráfica do Oracle Database XE e SQL Command Line

Para tarefas administrativas como gerenciamento de usuários e gerenciamento de memória. A senha do usuário SYSTEM deve ser fornecida

Autenticar com usuário que tem a role DBA associada

Interface gráfica do Oracle Database XE e SQL Command Line

Para tarefas administrativas como gerenciamento de usuários. Deve-se associar a role DBA através de um usuário administrativo.

Autenticar com privilégio SYSDBA

SQL Command Line Para tarefas administrativas de alto nível. Pode-se usar o privilégio SYSDBA com o usuário SYS ou através de autenticação do S.O.

Autenticação de Administrador

Page 62: Oracle Em Linux

Para alterar a senha dos usuários SYS e SYSTEM:

• Usando o SQL Command Line, conecte-se ao BD com o privilégio SYSDBA;

• Entre um dos seguintes comandos: • ALTER USER SYS IDENTIFIED BY newpassword;

• ALTER USER SYSTEM IDENTIFIED BY newpassword;

Alterando a Senha de Usuário Administrativo

Page 63: Oracle Em Linux

Visualizando Usuários

Prática 8

Page 64: Oracle Em Linux

• Se o usuário terá ou não o direito de criar objetos de banco de dados em seu próprio schema;

• Se o usuário terá ou não o privilégio DBA;

• Se o usuário será criado com a senha expirada;

Antes de Criar um usuário, determine:

Criando Usuários

Page 65: Oracle Em Linux

Criando um novo usuário

Prática 9

Page 66: Oracle Em Linux

Alterar um usuário significa alterar seus atributos;

Pode-se alterar todos os atributos com exceção de:

• Nome do usuário;

• Tablespace padrão;

• Tablespace temporária.

Alterando usuários

Page 67: Oracle Em Linux

Alterando um usuário

Prática 10

Page 68: Oracle Em Linux

Para negar temporariamente o acesso ao BD de um usuário, deve-se bloquear sua conta;

Se a conta estiver bloqueada, uma mensagem de erro será retornada e a conexão não será permitida;

Deve-se desbloquear a conta do usuário quando for liberado o acesso ao BD.

Bloqueando e Desbloqueando contas de usuários

Page 69: Oracle Em Linux

Bloqueando e desbloqueando

conta de usuário

Prática 11

Page 70: Oracle Em Linux

Quando a senha do usuário é expirada, o usuário deverá alterá-la na próxima vez que fizer login;

Razões para expirar a senha de usuário:

• A senha do usuário foi comprometida;

• Existe política de segurança que obriga os usuários a trocar a senha periodicamente;

• O usuário esqueceu a senha.

Expirando a senha de usuário

Page 71: Oracle Em Linux

Expirando a senha de usuário

Prática 12

Page 72: Oracle Em Linux

Antes de remover um usuário, deve-se remover todos os objetos do schema;

Pode-se usar a diretiva CASCADE para remover os objetos e o usuário simultaneamente;

Alternativas para remover o usuário:

• Para negar acesso temporariamente enquanto preserva-se os objetos do schema, pode-se apenas bloquear o usuário;

• Para remover um usuário e reter todos os dados das tabelas, deve-se exportar as tabelas primeiramente.

Removendo Usuários

Page 73: Oracle Em Linux

Removendo um usuário

Prática 13

Page 74: Oracle Em Linux
Page 75: Oracle Em Linux

Através do monitoramento de sessão é possível verificar as sessões do banco de dados, determinando quais usuário estão conectados e que aplicações estão executando.

Pode-se também terminar uma sessão, causando a desconexão da sessão e liberação de recursos.

Monitoramento de Sessão

Page 76: Oracle Em Linux

Verificando Sessões

Prática 14

Page 77: Oracle Em Linux

Terminar uma sessão significa desconectar uma sessão corrente do banco de dados;

Se uma transação estiver sendo executada, esse transação será rolled back;

Razões para terminar uma sessão:

• A sessão não está respondendo;

• É necessário realizar uma função administrativa que requer que todos os usuários estejam desconectados, mas o usuário não pode finalizar sua sessão.

Terminando uma sessão

Page 78: Oracle Em Linux

Terminando uma sessão

Prática 15

Page 79: Oracle Em Linux

As seguintes estatísticas podem ser monitoradas

• I/O físico;

• I/O lógico;

• Uso de memória;

• Eventos de CPU;

• Cursores SQL;

• Transações efetivadas.

Monitorando Estatísticas de Sistema

Page 80: Oracle Em Linux

Monitorando Estatísticas de

Sistema

Prática 16

Page 81: Oracle Em Linux

Representa as declarações SQL que:

• São usadas mais frequentemente;

• Consomem mais recursos de sistema;

• Usam recursos de sistema mais frequentemente.

Permite efetuar refinamento nas declarações SQL que tem mais impacto na performance do banco de dados.

Monitorando Top SQL Statements

Page 82: Oracle Em Linux

Monitorando Top SQL Statements

Prática 17

Page 83: Oracle Em Linux

Mostra estatísticas de operações que são executas por mais de 6 segundos;

Essas funções incluem:

• Funções de backup e recovery;

• Coleta de estatísticas de operações;

• Execução de consultas.

Monitorando Operações Longas

Page 84: Oracle Em Linux

Monitorando Operações Longas

Prática 18

Page 85: Oracle Em Linux
Page 86: Oracle Em Linux

Termo Definição

Exportação Cópia de dados do banco de dados para arquivos externos para importação em outro banco de dados Oracle somente. Os arquivos possuem formato proprietário.

Importação Cópia de dados de um arquivo externo para o banco de dados criado pela exportação de outro banco de dados Oracle.

Descarregamento Cópia de dados do banco de dados para arquivos externos para consumo de outro banco de dados Oracle ou outra aplicação (por exemplo, planilha). Os arquivos são criados no formato CSV.

Carregamento Cópia de dados de um arquivo externo para o banco de dados. Arquivos em formato padrão ou suportado pelo utilitário SQL*Loader.

Sobre Importação, Exportação , Carregamento e Descarregamento de Dados

Page 87: Oracle Em Linux

Característica / Utilitário Descrição

Interface gráfica do Oracle XE • Fácil de usar; • Carregamento/Descarregamento para/de arquivo

texto ou arquivo XML. • Somente tabelas, uma de cada vez; • Acesso somente ao esquema conectado; • Sem filtragem de dados.

SQL*Loader • Linha de comando (sqlldr); • Carregamento em massa; • Suporta vários formatos de arquivos; • Carregamento de múltiplas tabelas

simultaneamente; • Grande capacidade de filtragem de dados.

Escolha do melhor método

Page 88: Oracle Em Linux

Característica / Utilitário

Descrição

Data Pump Export / Data Pump Import

• Linha de comando (expdp / impdp); • Exportação/Importação entre bancos de dados Oracle

(arquivo binário com formato próprio); • Importa/Exporta todos os tipos de objetos; • Importa/Exporta todo o banco de dados, todo o schema,

múltiplas tablespaces ou múltiplas tabelas; • Grande capacidade de filtragem de dados; • Alta velocidade; • Não suporta dados do tipo XML;

Export / Import • Linha de comando (exp/imp); • Exportação/Importação entre bancos de dados Oracle

(arquivo binário com formato próprio); • Suporta dados do tipo XML; • Não suporta tipos de dados FLOAT e DOUBLE; • Similar ao Data Pump.

Escolha do melhor método

Page 89: Oracle Em Linux

Descarregando dados com Wizard

Prática 19

Page 90: Oracle Em Linux

Carregando dados com Wizard

Prática 20

Page 91: Oracle Em Linux

Entrada Arquivo de controle que controla o comportamento do SQL*Loader;

Dados localizados no arquivo de controle ou em arquivo separado.

Saída Banco de dados Oracle;

Arquivo de log (resumo detalhado do carreg. de dados);

Arquivo “bad” (registros rejeitados);

Arquivo de descarte (registros filtrados).

Carregamento de dados com SQL*Loader

Page 92: Oracle Em Linux

• Executa comandos INSERT para popular as tabelas;

• Pode ser mais lento que outros métodos, pois compete igualmente com outros processos.

Método Convencional

• Formata blocos de dados e grava diretamente no banco de dados;

• Normalmente é mais rápido que o método convencional, pois não compete com outros processos.

Método Direto

• Executa comandos INSERT para popular tabelas;

• Permite modificação de dados através de funções SQL ou PL/SQL como parte do comando INSERT.

Tabelas Externas

Métodos usados pelo SQL*Loader

Page 93: Oracle Em Linux

Pode-se usar o SQL*Loader para:

• Carregar dados através da rede de computadores;

• Carregar dados de múltiplos arquivos/para múltiplas tabelas na mesma sessão;

• Fazer seleção dos dados a serem carregados;

• Manipular dados através de funções SQL antes do carregamento;

• Usar arquivos secundários para carregamento de LOBs.

Características do SQL*Loader

Page 94: Oracle Em Linux

Um conjunto de arquivos de dump é formado por um ou mais arquivos contendo dados de tabelas, metadados e informação de controle;

Os arquivos são escritos em um formato proprietário;

Os arquivos de dump são escritos pelo banco de dados e não pela aplicação cliente;

Provê um conjunto de comandos interativos para monitorar e modificar exportações/importações.

Exportando e Importando Dados com DATA PUMP

Page 95: Oracle Em Linux

Maneira simples de transferir dados entre bancos de dados Oracle;

Comandos: exp e imp;

Objetos são extraídos seguidos de seus objetos relacionados (índices, comentários e privilégios);

Arquivo em formato proprietário.

Utilitário Export/Import

Page 96: Oracle Em Linux
Page 97: Oracle Em Linux

Baseado na proteção física dos arquivos do banco de dados:

• Arquivos de dados (datafiles);

• Arquivos de controle (control files);

• Arquivo de parâmetro (server parameter file).

Recovery Manager (RMAN) -> integrado ao banco de dados.

Sobre Backup e Recovery

Page 98: Oracle Em Linux

• Oracle XE implementa uma política de retenção -> mantém 2 cópias completas do banco de dados, para prover redundância da proteção.

• Automaticamente gerencia a Flash Recovery Area, removendo qualquer backup obsoleto.

Gerenciamento Automático

• Realiza backup online do banco de dados (ARCHIVELOG) e backup offline (NOARCHIVELOG);

Script de Backup

• ARCHIVELOG -> restaura o banco de dados, e então usa os archived redo log files para restaurar o banco de dados ao estado anterior a falha;

• NOARCHIVELOG -> Restaura o banco de dados para o estado do último backup.

Script de Recuperação

Sobre Backup e Recovery

Page 99: Oracle Em Linux

Flashback Query -> permite visualizar dados em um ponto do passado.

Recupera dados históricos aplicando dados de undo necessários.

Recuperando Dados Históricos

Page 100: Oracle Em Linux

Quando uma tabela é removida, o banco de dados não remove imediatamente o espaço alocado a ela;

A tabela é renomeada e colocada na lixeira (recycle bin);

A tabela pode ser restaurada em um momento futuro.

Recuperando Tabelas Removidas

Page 101: Oracle Em Linux

A lixeira (recycle bin) é uma tabela do dicionário de dados que contém informação sobre objetos removidos;

Ao restaurar um objeto, este volta ao estado em que se encontrava antes de ser removido;

Ao restaurar uma tabela, todas os objetos dependentes dessa tabela são automaticamente restaurados.

Sobre a Lixeira

Page 102: Oracle Em Linux

Recuperando uma tabela da lixeira

Prática 21

Page 103: Oracle Em Linux

Quando objetos são removidos, o espaço alocado não é liberado até que se esvazie a lixeira, ou até que o banco de dados esvazie a lixeira automaticamente quando falta de espaço é detectada.

Pode-se eliminar objetos individualmente ou esvaziar a lixeira de uma vez.

Quando a lixeira é esvaziada, somente os objetos que pertencem ao seu usuário são eliminadas.

Esvaziando a Lixeira

Page 104: Oracle Em Linux
Page 105: Oracle Em Linux

Oracle Database XE é um banco de dados relacional que armazena e recupera informações;

Em um banco de dados relacional, as informações estão organizadas em estruturas chamadas tabelas;

Cada tabela contém linhas (registros) compostas por colunas (campos);

As tabelas são armazenadas em estruturas chamadas schemas, que são estruturas lógicas onde os usuários armazenam suas tabelas.

Oracle Database Express Edition

Page 106: Oracle Em Linux

Linguagem de programação não estruturada que permite o acesso ao banco de dados relacional;

Usando declarações SQL, pode-se consultar tabelas, criar tabelas, modificar objetos e realizar tarefas administrativas;

Tudo o que precisa-se fazer é descrever o que se quer, e o compilador SQL automaticamente gera um procedimento de navegação no banco de dados e realiza a tarefa desejada.

SQL (Structured Query Language)

Page 107: Oracle Em Linux

É uma extensão procedural da SQL;

Com PL/SQL é possível manipular dados com declarações SQL e controlar o fluxo do programa com construções procedurais, como loops;

Pode-se:

• Declarar constantes e variáveis;

• Definir procedimentos e funções;

• Usar coleções e tipos de objetos;

• Tratar erros de execução;

• Criar funções (functions), pacotes (packages), procedimentos (procedures) e gatilhos (triggers).

PL/SQL

Page 108: Oracle Em Linux

Antes de desenvolver a aplicação deve-se criar os objetos do banco de dados, usados inicialmente para armazenar e organizar os dados:

• Tabelas (tables);

• Índices (index);

• Visões (views);

• Sequencias (sequences);

• Sinônimos (synonyms).

Ao criar os objetos, deve-se especificar um tipo de dados.

Um tipo de dados associa um conjunto de propriedades em relação aos valores que podem ser usados em uma coluna ou em um argumento de uma procedure ou function.

Objetos do banco de dados

Page 109: Oracle Em Linux

• Depende da tecnologia por trás da aplicação bem como as necessidades do usuário

Interface do usuário

• A aplicação é executada em uma máquina diferente de onde o servidor de banco de dados está instalado.

Modelo Cliente/Servidor

• A lógica da aplicação reside completamente no banco de dados usando-se PL/SQL triggers que executam automaticamente quando alguma mudança ocorre no banco de dados, ou através de procedures/functions armazenadas que são chamadas explicitamente.

Codificação Server-side

Conceitos básicos de desenvolvimento de aplicações

Page 110: Oracle Em Linux

• API que permite a conexão ao banco de dados e a preparação e execução de declarações SQL;

Open Database Connectivity (ODBC)

• Ferramenta web-based integrada para desenvolvimento e entrega (deploy) de aplicações.

Oracle Application Express

• Usado especialmente para desenvolvimento web. É comparado a linguagens como JSP (Java Server Pages), PSP (Oracle PL/SQL Server Pages).

PHP

Ferramentas de desenvolvimento

Page 111: Oracle Em Linux
Page 112: Oracle Em Linux

Todo objeto pertence a somente um schema e possui um nome único neste schema;

Normalmente, todos os objetos que pertencem a uma aplicação são colocados no mesmo schema;

Regras para nomear um objeto:

• O n0me do objeto não pode conter mais de 30 bytes;

• O nome do objeto deve começar com uma letra.

Objetos de Banco de Dados

Page 113: Oracle Em Linux

Gerenciando objetos com Object Browser;

Visualizando dados com Object Browser;

Visualizando informações com Object Reports.

Prática 22

Page 114: Oracle Em Linux

Um tipo de dados associa um conjunto de propriedades com valores que são usados em uma coluna ou como parâmetro de uma procedure ou function;

Tipos de dados suportados:

• Caracter;

• Numérico;

• Data e hora;

• Large Objects (LOB).

Usando Tipos de Dados

Page 115: Oracle Em Linux

Tipos:

• VARCHAR2: armazena literais de tamanho variável.

• Tamanho: 1 a 4000 bytes;

• A tabela ocupa menos espaço.

• CHAR: armazena literais de tamanho fixo.

• Tamanho: 1 a 2000 bytes;

• Espaço preenchido com brancos, se valor menor que a precisão.

• NCHAR e NVARCHAR2: armazena somente caracteres Unicode.

Armazenado Dados do Tipo Caracter

Page 116: Oracle Em Linux

• Para armazenar dados eficientemente use VARCHAR2.

Uso de espaço

• Use CHAR quando brancos não forem importantes em comparação de strings.

• Use VARCHAR2 quando brancos forem importantes em comparação de strings.

Semântica de comparação

• CHAR e VARCHAR2 totalmente suportados.

Compatibilidade futura

Escolha de Tipos Caracter

Page 117: Oracle Em Linux

Tipos:

• NUMBER;

• BINARY_FLOAT;

• BINARY_DOUBLE.

Ao definir um dado numérico, pode-se definir a precisão (número máximo de dígitos) e a escala (número de casas decimais).

BINARY_FLOAT e BINARY_DOUBLE permitem fazer cálculos aritméticos mais rapidamente e geralmente ocupam menos espaço de armazenamento.

Armazenando Tipos de Dados Numéricos

Page 118: Oracle Em Linux

• Representa um número inteiro com precisão p e escala zero.

NUMBER(p)

• Especifica explicitamente a precisão (p) e a escala (s).

• É boa prática definir a precisão e a escala para checagem de integridade extra na entrada de dados.

Number(p, s)

• A ausência de precisão e escala especifica o máximo intervalo e precisão.

NUMBER -> Ponto Flutuante

• Armazena ponto flutuante nos formatos 32-bit IEEE 754 e 64-bit IEEE 754 respectivamente.

BINARY_FLOAT e BINARY_DOUBLE

Usando Tipo de Dado Numérico

Page 119: Oracle Em Linux

Oracle Database XE armazena datas em formato próprio que corresponde a:

• Século,ano, mês, dia, hora, minuto e segundo.

Formato padrão de datas:

• DD-MON-RR.

Formato padrão de hora (24 horas):

• HH24:MI:SS.

Armazendo Dados do Tipo Data/Hora

Page 120: Oracle Em Linux

• Armazena um ponto no tempo (data e hora).

DATE

• Armazena frações de segundos.

TIMESTAMP

• Armazena informações de fuso horário.

TIMESTAMP WITH TIME ZONE

• Usado quando o fuso horário não é relevante. Exemplo: ao agendar teleconferências, os participantes veem as datas e horários em seus respectivos fusos horários.

TIMESTAMP WITH LOCAL TIME ZONE

Usando Tipos de Dados DATE e TIMESTAMP

Page 121: Oracle Em Linux

Large Objects -> conjunto de tipos de dados projetados para armazenar grande quantidade de dados.

Armazena entre 8 e 128 terabytes dependendo da configuração do banco de dados.

BLOB, CLOB e NCLOB -> armazenados internamente no banco de dados.

BFILE -> armazenado no sistema de arquivos, externamente ao banco de dados.

Armazenando Large Objects

Page 122: Oracle Em Linux
Page 123: Oracle Em Linux

Pode-se definir restrições de integridade para garantir que regras de negócios preservem a integridade de dados;

Regras de negócios especificam condições e relações que devem ser sempre verdadeiras ou ser sempre falsas;

Restrições podem ser definidas em:

• Coluna -> determinam quais valores são válidos na coluna;

• Tabela -> aplica-se a toda a tabela.

Garantindo Integridade de Dados com Restrições (Constraints)

Page 124: Oracle Em Linux

Pode-se definir valores que são automaticamente armazenados na coluna quando a coluna for inserida sem valor;

Dependendo da regra de negócio, deve-se usar valores padrão para representar ZERO ou FALSE.

Pode ser definido usando-se qualquer literal ou qualquer expressão, incluindo funções SQL.

Valor Padrão (DEFAULT) para Coluna

Page 125: Oracle Em Linux

Restrição de coluna que requer que a coluna contenha um valor quando a coluna for inserida ou atualizada;

Deve ser definida como parte da definição da coluna.

Uma restrição de chave primária sempre acrescenta a restrição NOT NULL às colunas que compõem a chave primária.

Restrição NOT NULL

Page 126: Oracle Em Linux

Requer que a coluna satisfaça uma condição para toda linha na tabela;

Deve ser uma expressão booleana;

Use quando precisar garantir a integridade baseado em expressões lógicas, como comparações.

Restrição de Checagem (CHECK)

Page 127: Oracle Em Linux

Requer que todo valor em uma coluna seja único;

É apropriada para qualquer coluna que valores duplicados não sejam permitidos.

Restrição de Unicidade (UNIQUE)

Page 128: Oracle Em Linux

Requer que uma coluna seja única e garante que não existam linhas repetidas;

A chave primária não pode conter valores nulos (NULL);

Guia para definir uma chave primária:

• Crie uma sequencia para gerar valores únicos;

• Escolha uma coluna cujos valores sejam únicos;

• Escolha uma coluna cujos valores nunca mudem, ou mudem raramente;

• Escolha uma coluna que não contenha valor nulo;

• Escolha uma coluna que seja curta e numérica;

• Minimize o uso de chave composta.

Restrição de Chave Primária (PRIMARY KEY)

Page 129: Oracle Em Linux

Quando 2 tabelas contém um ou mais valores comuns, pode-se criar um relacionamento entre as tabelas;

Requer que todo valor existente na tabela filha exista na tabela pai;

Ações a serem tomadas quando linhas forem removidas na tabela pai:

• DISALLOW DELETE -> bloqueia a remoção de linhas na tabela pai quando existir tabelas dependentes;

• CASCADE DELETE -> remove linhas dependentes quando a linha da tabela pai for removida;

• NULL ON DELETE ->atribui nulo às colunas que compõem a chave estrangeira ao remover uma linha da tabela pai.

Restrição de Chave Estrangeira (FOREIGN KEY)

Page 130: Oracle Em Linux

Gerenciando tabelas

Prática 23

Page 131: Oracle Em Linux
Page 132: Oracle Em Linux

Estruturas opcionais associadas a tabelas;

Podem ser criados para melhorar a performance de consultas;

Índices podem ser criados em uma ou mais colunas da tabela;

Mudanças na estrutura da tabela ou nos dados, como novas linhas, atualização de linhas ou remoção de linhas, são automaticamente incorporadas em todos os índices relevantes.

Índices

Page 133: Oracle Em Linux

• Índice B-tree que contém uma entrada para cada valor no índice associado à linha correspondente na tabela.

Normal Index

• Usado pelo Oracle Text para busca de textos em documentos e páginas web.

Text Index

• Deve-se criar índices de múltiplas colunas quando as colunas são frequentemente incluídas na cláusula WHERE de declarações SQL.

Single-Column and Concatenated Indexes

Tipos de Índices

Page 134: Oracle Em Linux

• Por padrão, índices são criados em ordem ascendente;

• Pode-se inverter a ordem de classificação do índice, indicando que a ordem deverá ser descendente.

Ascending e Descending Indexes

• Tipicamente, um índice é baseado em valores encontrados nas colunas da tabela;

• Pode-se criar índices baseados em funções onde os valores são derivados de dados da tabela.

Column and Function-Based Indexes

Tipos de Índices

Page 135: Oracle Em Linux

Toda chave primária e chave única requerem um índice correspondente;

Observações:

• Restrições usam índices existentes quando possível, ao invés de criar novos índices;

• Chaves primárias e chaves únicas podem usar índices únicos ou não únicos;

• A ordem das colunas do índice e da restrição não precisa ser a mesma;

• Por questões de performance, pode-se criar um índice na tabela filha correspondente à chave estrangeira.

Índices e Restrições

Page 136: Oracle Em Linux

Use o seguinte guia para criar um índice em uma tabela ou coluna:

• Crie um índice em colunas usadas em junções (JOIN) para melhorar a performance;

• Crie índices das chaves estrangeiras;

• Tabelas pequenas não precisam de índices.

Características de colunas candidatas a serem indexadas:

• Valores são únicos, ou existem poucos valores duplicados;

• Existe um grande intervalo de valores;

• A coluna contém muitos valores nulos, mas as consultas selecionam todas as linhas que possuem valores.

Guia para Criação de Índices

Page 137: Oracle Em Linux

Limite o número de índices em cada tabela:

• Quanto mais índices, mais recursos necessários durante a atualização de tabelas;

• Deve-se avaliar os benefícios dos índices em relação a performance de atualizações.

Remova índices não usados:

• Índices não melhoram a performance das consultas;

• As consultas em aplicações não usam o índice;

• Não pode-se remover índices de restrições. Deve-se remover as restrições;

• Ao remover uma tabela, todos os índices são removidos.

Guia para Criação de Índices

Page 138: Oracle Em Linux

Gerenciando Índices

Prática 24

Page 139: Oracle Em Linux
Page 140: Oracle Em Linux

Apresentações personalizadas de dados de uma ou mais tabelas ou de outras visões.

Visões não contém dados, mas tem seus dados derivados das tabelas das quais a visão é baseada.

Tabelas referenciadas são chamadas de tabelas base da visão.

Visões

Page 141: Oracle Em Linux

Pode-se consultar, inserir, atualizar e remover dados com algumas restrições;

Acrescentam nível adicional de segurança restringindo acesso a determinados conjuntos de linhas ou colunas;

Escondem a complexidade dos dados e armazenam consultas complexas.

Visões

Page 142: Oracle Em Linux

Gerenciando Visões

Prática 25

Page 143: Oracle Em Linux
Page 144: Oracle Em Linux

Objeto de banco de dados que gera valores sequenciais e únicos;

Valores usados normalmente em chaves primárias ou únicas;

Referencia-se os valores da sequencia com pseudocolunas:

• CURRVAL: retorna o valor corrente da sequencia;

• NEXTVAL: incrementa o valor da sequencia e retorna o próximo valor.

Ao criar a sequencia, indica-se os valores iniciais e de incremento.

Sequencias

Page 145: Oracle Em Linux

Gerenciando Sequencias

Prática 26

Page 146: Oracle Em Linux
Page 147: Oracle Em Linux

Apelido para qualquer objeto no schema, como uma tabela ou visão;

Oferecem um nome alternativo para o objeto e podem simplificar declarações SQL;

Pode-se criar sinônimos públicos ou privados:

• Sinônimo Público: pode ser acessado por qualquer usuário do banco de dados;

• Sinônimo Privado: pode ser acessado somente pelo usuário especificado.

Sinônimos

Page 148: Oracle Em Linux

Gerenciando Sinônimos

Prática 27

Page 149: Oracle Em Linux
Page 150: Oracle Em Linux

Linguagem não procedural para acesso ao banco de dados;

SQL automaticamente controla a navegação no banco de dados e realiza a tarefa desejada;

Todas as operações no banco de dados são realizadas através de declarações SQL.

SQL

Page 151: Oracle Em Linux

Declarações SQL são divididas em categorias:

• Linguagem de Manipulação de Dados (DML);

• Controle de Transação

• Linguagem de Definição de Dados (DDL).

SQL

Page 152: Oracle Em Linux

A declaração SELECT recupera todas ou parte das colunas de dados a partir das linhas dependentes das condições especificadas na cláusula WHERE.

Exemplos:

• E01_query_all_data_from_table.sql

• E02_query_data_from_specific_columns.sql

• E03_query_data_in_view.sql

Recuperando Dados com SQL

Page 153: Oracle Em Linux

Operador Definição

=, !=, <> Igual, não igual, não igual

>, >=, <, <= Maior, maior que, menor, menor que

BETWEEN... AND... Intervalo incluindo os extremos

LIKE Busca de string

IN ( ), NOT IN ( ) Checa a ocorrência, ou não, em uma lista de valores especificada

IS NULL, IS NOT NULL Checa se um valor é nulo, ou não

A cláusula WHERE usa operadores de comparação para identificar linhas específicas na tabela.

Restringindo Dados Usando a Cláusula WHERE

Page 154: Oracle Em Linux

Exemplos: • E04_selecting_data_with_where_clause.sql

Restringindo Dados Usando a Cláusula WHERE

Page 155: Oracle Em Linux

Expressão Regular permite a busca de padrões em strings usando convenções de sintaxe padronizadas.

Exemplos:

• E05_using_regular_expressions.sql

Usando Expressão Regular ao Selecionar Dados

Page 156: Oracle Em Linux

A cláusula ORDER BY ordena as linhas de acordo com uma coluna específica da tabela;

Exemplos:

• E06_selecting_data_with_order_by.sql

Ordenando Dados Usando a Cláusula ORDER BY

Page 157: Oracle Em Linux

Pode-se mostrar dados de múltiplas tabelas através de um processo chamado de junção (JOIN) de tabelas.

Tipos de Junções:

• SELF-JOIN: junção de uma tabela com ela mesma;

• INNER JOIN: junção de 2 ou mais tabelas que retorna somente as linhas que satisfazem a condição de junção;

• OUTER JOIN: junção de 2 ou mais tabelas que retorna todas as linhas que satisfazem a condição de junção e também retorna algumas ou todas as linhas de uma tabela que não satisfaçam a condição de junção.

• LEFT OUTER, RIGHT OUTER e FULL OUTER.

• NATURAL JOIN: junção automática de 2 tabelas que contenham colunas com mesmo nome e mesmo tipo de dados.

Mostrando Dados de Múltiplas Tabelas

Page 158: Oracle Em Linux

• E07_selecting_data_natural_join.sql

NATURAL JOIN

• E08_selecting_data_join_using.sql

JOIN USING

• E09_selecting_data_join_on.sql

JOIN ON

Mostrando Dados de Múltiplas Tabelas

Page 159: Oracle Em Linux

• E10_self_join.sql

SELF JOIN

• E11_outer_join.sql

OUTER JOIN

Mostrando Dados de Múltiplas Tabelas

Page 160: Oracle Em Linux

• Conjunto de funções que podem ser usadas em declarações SQL para manipular valores numéricos.

• Exemplo:

• E12_using_numeric_functions.sql

Funções Numéricas

• Conjunto de funções que podem ser usadas em declarações SQL para personalizar valores de caracteres

• Exemplo:

• E13_using_character_functions.sql

Funções Caracteres

• Conjunto de funções que podem ser usadas em declarações SQL para manipular e calcular valores de data e hora.

• Exemplo:

• E14_using_date_functions.sql

Funções de Datas

Usando Funções

Page 161: Oracle Em Linux

• Conjunto de funções que podem ser usadas em declarações SQL para manipular converter valores de um tipo de dado para outro.

• Ao converter um valor, pode-se especificar um formato de dado.

• Exemplos:

• E15_using_character_conversion_function.sql

• E16_using_number_convertion_function.sql

• E17_using_date_conversion_function.sql

Funções de conversão

• Operam em conjuntos de linhas para obter um resultado agregado.

• Exemplo:

• E18_using_aggregate_functions.sql

Funções de Agregação

Usando Funções

Page 162: Oracle Em Linux

• Conjunto de funções que podem ser usadas em declarações SQL para trabalhar com valores nulos.

• Exemplo:

• E19_using_null_functions.sql

Funções para Valores Nulos

• Conjunto de funções que podem ser usadas em declarações SQL para retornar valores baseados em condições de múltiplos valores.

• Exemplo:

• E20_using_conditional_functions.sql

Funções Condicionais

Usando Funções

Page 163: Oracle Em Linux

• Use a declaração INSERT para adicionar dados em uma tabela;

• O dado inserido deve ser válido para o tipo de dado e tamanho para cada coluna da tabela.

• Exemplo: E21_using_insert_statement.sql

Adicionando Dados

• Use a declaração UPDATE para atualizar dados em uma tabela;

• O dado atualizado deve ser válido para o tipo de dado e tamanho para cada coluna da tabela.

• Exemplo: E22_using_update_statement.sql

Atualizando Dados

• Use a declaração DELETE para remover dados em uma tabela.

• Exemplo: E23_using_delete_statement.sql

Removendo Dados

Manipulando Dados com Declarações SQL

Page 164: Oracle Em Linux

Declarações de controle de transações gerenciam as mudanças realizadas por declarações DML;

Permitem:

• Tornar uma transação permanente (COMMIT);

• Desfazer alterações em uma transação (ROLLBACK);

Usando Controle de Transações

Page 165: Oracle Em Linux

Declarações DDL incluem:

• CREATE;

• ALTER;

• DROP.

Exemplos:

• E24_creating_single_table.sql

• E25_creating_table_not_null_constraints.sql

• E26_adding_altering_dropping_table_column.sql

• E27_creating_altering_dropping_constraints.sql

• E28_renaming_table.sql

• E29_dropping_table.sql

Usando DDL para Gerenciar Objetos do Banco de Dados

Page 166: Oracle Em Linux

Exemplos:

• E30_creating_modifying_dropping_index.sql

• E31_creating_view.sql

• E32_dropping_view.sql

• E33_creating_sequence.sql

• E34_dropping_sequence.sql

• E35_creating_synonym.sql

• E36_dropping_synonym.sql

Usando DDL para Gerenciar Objetos do Banco de Dados

Page 167: Oracle Em Linux
Page 168: Oracle Em Linux

Linguagem procedural que expande a SQL;

Executada no servidor (server-side), fácil de usar, portável e segura;

Permite misturar declarações SQL com construção procedural. Pode-se criar procedures, functions e packages.

PL/SQL

Page 169: Oracle Em Linux

Pode-se construir:

• Anonymous Block: bloco que aparece na aplicação mas não é nominado ou não é armazenado no banco de dados.

• Stored ou Standalone procedure e function: bloco armazenado no banco de dados que pode ser chamado na aplicação.

• Package: grupo de procedures, functions e definições de variáveis armazenadas no banco de dados.

• Trigger: Stored procedure armazenada no banco de dados associada a uma tabela, visão ou evento.

PL/SQL

Page 170: Oracle Em Linux

Combina o poder da manipulação de dados da SQL com o poder de processamento de linguagens procedurais;

Permite quebrar a complexidade de problemas em código procedural compreensível, e reusar esse código através de várias aplicações.

Características da PL/SQL

Page 171: Oracle Em Linux

Um bloco da PL/SQL possui 3 partes básicas:

• Uma parte declarativa (DECLARE);

• Uma parte executável (BEGIN ... END);

• Uma parte para tratamento de exceções (EXCEPTION).

Exemplo:

• E37_using_simple_block.sql

Usando a Estrutura de Blocos da PL/SQL

Page 172: Oracle Em Linux

Variáveis podem ter qualquer tipo de dados da SQL. Pode-se também declarar tabelas aninhadas, arrays de tamanho variável e registros;

A declaração de constantes é similar a declaração de variável, exceto pelo acréscimo da palavra CONSTANT;

Exemplo:

• E38_declaring_variables.sql

Declarando variáveis e Constantes

Page 173: Oracle Em Linux

Identificadores permitem nomear itens de programas, como constantes, variáveis, exceções e subprogramas.

Não é permitido o uso de dos seguintes caracteres: &, - , /, espaço.

Exemplo:

• E39_using_identifiers_for_variables.sql

Usando Identificadores

Page 174: Oracle Em Linux

Literal é um valor (numérico, caracter, string, booleano) explícito que não é representado por um identificador.

Exemplos:

• E40_using_numeric_literals.sql

• E41_using_character_literals.sql

• E42_using_string_literals.sql

• E43_using_boolean_literals.sql

• E44_using_date_time_literals.sql

Usando Literais

Page 175: Oracle Em Linux

Pode-se usar a palavra chave DEFAULT para inicializar variáveis quando são declaradas.

Pode-se também usar a restrição NOT NULL para não permitir que uma variável receba um valor nulo.

Exemplo:

• E45_using_default_and_not_null.sql

Declarando variáveis com DEFAULT e NOT NULL

Page 176: Oracle Em Linux

Outra forma de atribuir valores a variáveis é selecionar valores no banco de dados.

Exemplo:

• E46_assigning_values_using_select_into.sql

Atribuindo Valor a Variáveis com SELECT INTO

Page 177: Oracle Em Linux

%TYPE

• Provê o tipo de dado de uma variável ou coluna da tabela.

%ROWTYPE

• O tipo de dado record armazena a mesma informação que uma linha da tabela.

Exemplos:

• E47_using_type.sql

• E48_using_rowtype.sql

Usando %TYPE e %ROWTYPE

Page 178: Oracle Em Linux

As estruturas de controle são a extensão mais importante da PL/SQL;

Além de manipular dados, permite processar os dados usando fluxo de controle condicional, iterativo e sequencial;

Usando Estruturas de Controle

Page 179: Oracle Em Linux

Permite executar uma sequencia de declarações de forma condicional.

Formas:

• IF – THEN;

• IF – THEN – ELSE;

• IF – THEN – ELSEIF – ELSE.

Exemplo:

• E49_using_if_then_statement.sql

• E50_using_if_then_elsif_statement.sql

IF - THEN

Page 180: Oracle Em Linux

Usado para escolher entre vários valores;

Avalia uma condição e realiza uma ação;

Quando possível, reescreva IF – THEN – ELSE com CASE, pois é mais eficiente.

Exemplos:

• E51_using_case_when_statement.sql

• E52_using_if_then_else_and_case_statement.sql

CASE

Page 181: Oracle Em Linux

Permite executar uma sequencia de declarações várias vezes;

Formas:

• FOR – LOOP;

• WHILE – LOOP;

• EXIT – WHEN;

• GOTO.

Exemplos:

• E53_using_for_loop.sql

• E54_using_while_loop.sql

• E55_using_exit_when_statement.sql

• E56_using_goto_statement.sql

LOOPs

Page 182: Oracle Em Linux

Procedures e Functions são blocos PL/SQL nomeados que podem ser chamados com um conjunto de parâmetros a partir de um bloco PL/SQL;

Uma procedure é um subprograma que realiza uma ação específica;

Uma function é um subprograma que calcula e retorna um valor;

Usando Procedures e Functions em Blocos PL/SQL

Page 183: Oracle Em Linux

Ao passar parâmetros para procedures e functions, os parâmetros podem ser:

• IN: deve ser fornecido um valor para o parâmetro ao chamar a procedure ou function;

• OUT: a function ou a procedure vão determinar o valor do argumento;

• IN OUT:o valor pode ser determinado pelo chamador ou pela procedure ou function.

Exemplo:

• E57_declaring_procedure_in_out_parameters.sql

• E58_declaring_function_in_parameter.sql

• E59_declaring_complex_procedure.sql

Usando Procedures e Functions em Blocos PL/SQL

Page 184: Oracle Em Linux

Cursor é uma área privada onde é mantida a informação para processamento de declarações específicas;

Um cursor implícito é criado para toda manipulação de dados em um conjunto de linhas;

Pode-se explicitar um cursor caso seja necessário controlar o processamento de consultas;

Usando Cursores e Variáveis do Tipo Cursor

Page 185: Oracle Em Linux

Deve-se declarar cursores explícitos para consultas que retornam mais de uma linha, processando cada linha individualmente;

Uma variável do tipo cursor (REF CURSOR) é similar ao cursor e aponta para a linha corrente em um conjunto de resultado de uma consulta com várias linhas;

Exemplos:

• E60_fetching_single_row_with_cursor.sql

• E61_fetching_multiple_rows_with_cursor.sql

• E62_passing_parameters_to_cursor.sql

Usando Cursores e Variáveis do Tipo Cursor

Page 186: Oracle Em Linux

Variáveis do tipo cursor são como ponteiros para conjunto de resultados;

Uma variável do tipo cursor é mais flexível que um cursor pois não está vinculada a uma consulta;

Variáveis do tipo cursor são usadas quando deseja-se realizar uma consulta em uma function ou procedure, e depois processar o resultado em outro subprograma, possivelmente em outra linguagem;

Exemplo:

• E63_using_cursor_variable.sql

Variável do Tipo Cursor

Page 187: Oracle Em Linux

Atributos que retornam informação sobre a execução de declarações DML e DDL:

• %FOUND;

• %ISOPEN;

• %NOTFOUND;

• %ROWCOUNT.

Atributos de Cursor

Page 188: Oracle Em Linux

• Estrutura de dados composta por diferentes tipos de dados;

• Exemplo:

• E64_declaring_initializing_record_type.sql

• E65_using_rowtype_with_record.sql

Record Types

• Similar a arrays, conjuntos e hash tables encontradas em outras linguagens;

• Exemplo:

• E66_using_varray_type.sql

• E67_using_varray_with_record.sql

Collections

Estruturas de Dados PL/SQL

Page 189: Oracle Em Linux

PL/SQL suporta SQL dinâmico e estático;

SQL dinâmico permite a construção de declarações SQL dinamicamente em tempo de execução;

Para processar uma declaração de SQL dinâmico, usa-se a declaração EXECUTE IMMEDIATE;

Exemplos:

• E68_dynamic_sql_manipulate_data.sql

• E69_dynamic_sql_create_table.sql

SQL Dinâmico

Page 190: Oracle Em Linux

Quando um erro ocorre, uma exceção (EXCEPTION) é retornada: a operação normal é finalizada e transfere-se o controle para o código de tratamento de exceções;

Exceções pré-definidas são tratadas para alguns erros comuns envolvendo variáveis ou operações do banco de dados;

Pode-se declarar exceções próprias para condições de erro a serem tratadas ou para corresponder a erros retornados pelo banco de dados.

Tratamento de Erros

Page 191: Oracle Em Linux

Exceção Descrição

DUP_VAL_ON_INDEX Tentativa de armazenar valor repetido em uma coluna com restrição de chave única.

INVALID_CURSOR Tentativa de realizar uma operação não permitida, como fechar um cursor que não foi aberto.

NO_DATA_FOUND Declaração SELECT INTO não retorna linhas.

TOO_MANY_ROWS Declaração SELECT INTO retorna mais de uma linha.

ZERO_DIVIDE Tentativa de executar uma divisão por zero.

Exceções Pré-definidas

Exemplo: E70_managing_multiple_errors.sql

Page 192: Oracle Em Linux

Não é permitido declarar uma exceção 2 vezes no mesmo bloco;

Exceções declaradas em um bloco são locais a esse bloco e globais nos sub-blocos;

Se uma exceção global for redefinida em um sub-bloco, prevalece a declaração local;

Exemplo:

• E71_determining_scope_exception.sql

Escopo do Tratamento de Exceções

Page 193: Oracle Em Linux

Escreva o código a ser tratado em um bloco BEGIN – END interno com seu próprio tratamento de exceções;

Exemplo:

• E72_continuing_after_exception.sql

Continuando a Execução Após o Tratamento de Exceção

Page 194: Oracle Em Linux
Page 195: Oracle Em Linux

Oracle Database XE oferece a capacidade de armazenar programas no banco de dados;

Essa funcionalidade permite que código comum seja escrito e testado uma única vez e então acessado por qualquer aplicação;

Vantagens:

• Torna o desenvolvimento de aplicações mais fácil;

• Garante a consistência entre os desenvolvedores.

Overview

Page 196: Oracle Em Linux

Uma vez compiladas, podem ser referenciadas ou chamadas qualquer número de vezes por múltiplas aplicações;

Podem aceitar parâmetros quando são executadas;

São a chave para modularização e reuso de código PL/SQL;

Possuem a vantagem de compartilhar memória, portanto, somente uma cópia do subprograma é carregada na memória para execução por múltiplos usuários.

Stored Procedure e Functions

Page 197: Oracle Em Linux

É um objeto que agrupa logicamente PL/SQL relacionado;

Possuem duas partes:

• Especificação: interface da package;

• Corpo: definição das consultas de cursores e código dos subprogramas.

Packages

Page 198: Oracle Em Linux

A especificação armazena declarações públicas, visíveis para stored procedures e outros códigos fora da package;

O corpo da package armazena os detalhes da implementação de declarações privadas, que está escondido de códigos fora da package.

Packages

Page 199: Oracle Em Linux

Exemplos:

• E73_creating_simple_stored_procedure.sql

• E74_creating_stored_procedure_with_parameter.sql

• E75_creating_stores_function_return_string.sql

• E76_creating_function_return_number.sql

Gerenciando Stored Procedures e Functions

Page 200: Oracle Em Linux

Chamada a partir de um bloco BEGIN .. END ou a partir de outro subprograma ou package;

Notações para passagem de parâmetros:

• Posicional: especifica-se os parâmetros na mesma ordem que são declarados;

• Nomeada: especifica-se os nomes e valores dos parâmetros;

• Mista: especifica-se os primeiros parâmetros na notação posicional e os últimos na notificação nomeada.

Exemplo:

• E77_tecniques_calling_stored_procedures.sql

Chamando Stored Procedures e Functions

Page 201: Oracle Em Linux

Ao escrever uma package, mantenha-a o mais geral possível para reuso futuro;

Projete e defina a especificação antes do corpo;

Coloque na especificação somente as partes que devem ser visíveis;

Gerenciando Packages

Page 202: Oracle Em Linux

Para diminuir a necessidade de recompilação, coloque o menor número possível de itens na especificação;

Alterações no corpo da package não exigem recompilação das procedures chamadoras;

Alterações na especificação da package exigem que todos os subprogramas que referenciem a package sejam recompilados.

Gerenciando Packages

Page 203: Oracle Em Linux

Exemplos:

• E78_creating_package_specification.sql

• E79_creating_packge_body.sql

• E80_executing_function_from_package.sql

• E81_calling_subprogram_in_packages.sql

Gerenciando Packages

Page 204: Oracle Em Linux

DBMS_OUTPUT

• Permite exibir o retorno de blocos PL/SQL, subprogramas, packages e triggers;

DBMS_RANDOM

• Gera números randômicos;

• Exemplo:

• E82_using_dbms_random.sql

Packages Úteis

Page 205: Oracle Em Linux

HTP

• Permite criar páginas web gerando tags HTML;

• Exemplo:

• E83_using_htp_print_procedure.sql

UTL_FILE

• Permite ler e gravar em arquivos no sistema operacional;

• Exemplo:

• E84_using_utl_file.sql

Packages Úteis

Page 206: Oracle Em Linux
Page 207: Oracle Em Linux

Uma trigger (gatilho) é uma stored procedure associada a uma tabela, visão ou evento;

A trigger pode ser chamada uma vez, quando ocorre um evento, ou várias vezes, uma vez para cada linha afetada por declarações INSERT, UPDATE ou DELETE.

A trigger pode ser chamada antes ou depois de um evento;

A parte executável da trigger pode conter declarações procedimentais de declarações SQL de manipulação de dados.

Overview

Page 208: Oracle Em Linux

Triggers DML em tabelas;

Triggers INSTEAD OF em visões;

Triggers de sistema no banco de dados ou schema.

Tipos de Triggers

Page 209: Oracle Em Linux

Uma trigger é disparada baseada em uma instrução de acionamento, que especifica:

• A declaração SQL ou evento de sistema, evento de banco de dados ou evento DDL que dispara a trigger;

• A tabela, visão, banco de dados ou schema associado à trigger.

Quando uma Trigger é Disparada

Page 210: Oracle Em Linux

BEFORE e AFTER

• Especificam exatamente quando disparar a trigger em relação à instrução de acionamento que está sendo executada.

FOR EACH ROW

• A trigger dispara uma vez para cada linha da tabela que é afetada pela instrução de acionamento.

Controlando Quando uma Trigger é Disparada

Page 211: Oracle Em Linux

Baseada em Condições

• Uma restrição opcional pode ser incluída na definição de uma trigger especificando-se uma expressão SQL booleana com a cláusula WHERE.

INSTEAD OF

• Somente pode ser criada em uma visão e somente pode ser ativada para cada linha;

• São válidas para eventos DML em visões.

Controlando Quando uma Trigger é Disparada

Page 212: Oracle Em Linux

Se uma condições de erro ocorrer durante a execução de uma trigger, todos os efeitos da trigger, bem como os da instrução de acionamento são revertidos, a menos que exista um tratamento de exceção;

Condições de Erro e Exceções em Triggers

Page 213: Oracle Em Linux

Use triggers para garantir que quando uma operação específica acontecer, operações relacionadas aconteçam;

Não defina triggers que dupliquem características já existentes no banco de dados;

Limite o tamanho da trigger. Se a lógica da trigger ultrapassar 60 linhas de código PL/SQL, coloque a maior parte do código em stored procedures e chame a procedure a partir da trigger.

Diretrizes

Page 214: Oracle Em Linux

Use triggers somente para operações globais e centralizadas que devem ser disparadas para as instruções de acionamento;

Não crie triggers recursivas;

Use triggers criteriosamente. Triggers são disparadas para todo usuário e a todo momento que o evento ocorrer.

Diretrizes

Page 215: Oracle Em Linux

Exemplos:

• E85_creating_trigger_after.sql

• E86_creating_trigger_before.sql

• E87_creating_instead_of_trigger.sql

• E88_creating_trigger_exception_handler.sql

• E89_creating_trigger_fires_only_once.sql

• E90_creating_logon_trigger.sql

• E91_creating_logoff_trigger.sql

• E92_dropping_triggers.sql

Gerenciando Triggers

Page 216: Oracle Em Linux
Page 217: Oracle Em Linux

Documentos

• Installation Guide;

• Getting Started Guide;

• 2 Day DBA;

• 2 Day Developer Guide;

• 2 Day Plus Application Express Developer Guide.

Site

• http://www.oracle.com/pls/xe102/homepage

Referências