Você está na página 1de 904

sobre os autores

John Watson (Oxford, Reino Unido) é um Oracle Master Certified Master, com muitas outras
acreditações Oracle.
Tecnologias para Ele trabalha para a Skillbuilders Corporation, ensinando e consultando por toda
Europa e América do Norte. Ele esteve com a Oracle Corporation há vários anos em Joanesburgo
parte
trabalhando para suporte interno e Oracle University. Ele fala regularmente no Oracle User Group
reuniões e escreveu vários livros sobre tecnologias Oracle. John tem 30 anos de experiência em TI
e primeiro encontrou o Oracle com a versão 5 do banco de dados, instalando-o em PCs IBM.

Ropeh Ramklass (Canadá) é um mestre certificado da Oracle com experiência em infraestrutura,


middleware e arquitetura de banco de dados. Ele trabalhou para o Oracle Global Support, Advanced
Serviços ao Cliente e Oracle University. Ele dirigiu uma consultoria de TI e é experiente com
sistema de infra-estrutura, desenvolvimento de software e integração de sistemas. Ele falou em
Oracle Users Group conferências e é o autor de vários livros de tecnologia.
numerosos
Bob Bryla (Wisconsin) é um Oracle 9 i , 10 g , 11 g e 12 c Professional Certificado com mais de 20
anos de experiência em design de banco de dados, desenvolvimento de aplicativos de banco de
dados, treinamento
administração de banco
e Oracle
de dados. Ele é o principal Oracle DBA e engenheiro de sistemas da Epic
em Verona, Em seu tempo livre, ele é autor de diversos livros do Oracle DBA, como Oracle
Wisconsin.
12 c: A Referência Completa e o Banco de Dados Oracle 12 c Manual do DBA . Além disso, ele tem
Database
Criou vários guias de estudo de certificação para Oracle Database 11 g e 12 c . Ele também foi
para assistir a filmes de ficção científica e mergulhar em videografia em seu tempo livre.
conhecido
Copyright © 2015 de McGraw-Hill Education (editor). Todos os direitos reservados. Exceto quando
permitido
nos termos da Lei de Direitos Autorais dos Estados Unidos de 1976, nenhuma parte desta publicação
pode ser reproduzida
distribuídos de qualquer
ou forma ou por qualquer meio, ou armazenados em um banco de dados ou
sistema de escrita
permissão recuperação,
do editor,
semcom
o anterior
a exceção de que as listas de programas podem ser inseridas,
armazenado e executado em um sistema de computador, mas eles não podem ser reproduzidas para
publicação.
ISBN: 978-0-07-182807-9
MHID: 0-07-182807-9
O material neste eBook também aparece na versão impressa deste título: ISBN: 978-0-07-182808-6,
MHID: 0-07-182808-7.
conversão eBook por codeMantra
versão 1.0
Todas as marcas comerciais são marcas comerciais de seus respectivos proprietários. Em vez de
colocar
cada ocorrência
um símbolo
de um
de nome
marcaderegistrada
marca registrada,
depois usamos nomes de maneira editorial somente, e em
do titular da marca, sem intenção de violação da marca registrada. Onde tais designações
benefício
aparecem neste livro, eles foram impressos com tampas iniciais.
McGraw-Hill Education eBooks estão disponíveis em descontos especiais quantidade para usar
como prémios
vendas de promoções
e ou para uso em programas de treinamento corporativo. Para entrar em contato
com
na página Fale conoscovisite
um representante, na www.mhprofessional.com .
Informação foi obtida por Editor de fontes consideradas confiáveis. No entanto, devido
da possibilidade de erro humano ou mecânico por nossas fontes, editor, ou outros, Publisher faz
não garante a precisão, adequação ou integridade de qualquer informação incluída neste trabalho e
não é responsável por quaisquer erros ou omissões ou os resultados obtidos com o uso de tais
informações.
Oracle é uma marca registrada da Oracle Corporation e / ou suas afiliadas. Todas as outras marcas
comerciais
de propriedade
são de seus respectivos proprietários, e McGraw-Hill Education não faz nenhuma
reivindicação
pela menção dedeprodutos
propriedade
que contêm estas marcas.
Tela exibe de programas de software da Oracle com copyright foram aqui reproduzido com a
permissão da Oracle Corporation e / ou suas afiliadas.
A Oracle Corporation não faz quaisquer representações ou garantias quanto à exatidão, adequação,
integralidade das informações contidas neste trabalho, e não é responsável por quaisquer erros ou
ou
omissões.
livros McGraw-Hill Education estão disponíveis em descontos especiais quantidade para usar como
prémios e de vendas, ou para uso em programas de treinamento corporativo. Para entrar em contato
promoções
com
as páginas
um representante,
em contato conosco
visite pelo www.mhprofessional.com .
TERMOS DE USO
Este é um trabalho com direitos autorais e McGraw-Hill Education e os seus licenciadores reservam
todos
o os direitos
trabalho. e
A utilização deste trabalho está sujeito a estes termos. Com excepção do permitido ao
1976
abrigoe da
o direito de armazenar
lei Copyright de e recuperar uma cópia do trabalho, você não pode descompilar,
engenharia reversa, reproduzir, modificar, criar trabalhos derivados com base, transmitir, distribuir,
desmontar,
disseminar, vender, publicar ou sublicenciar o trabalho ou qualquer parte dele sem McGraw-Hill
Education do

consentimento prévio. Você pode usar o trabalho para seu próprio uso não comercial e pessoal;
Qualquer
o trabalhooutro uso do proibido. Seu direito de usar o trabalho pode ser rescindido se você deixar
é estritamente
de cumprir
com estes termos.
O TRABALHO É FORNECIDO “COMO ESTÁ”. McGraw-Hill EDUCAÇÃO E SEUS
Não fazer nenhuma garantia OU GARANTIA QUANTO À PRECISÃO, ADEQUAÇÃO OU
LICENCIADOS
INTEGRIDADE DE OU resultados a serem obtidos de usar a obra,
Incluindo qualquer informação que pode ser acessado através do trabalho VIA
HYPERLINK OU DE OUTRA FORMA, E EXPRESSAMENTE REJEITAM QUALQUER
GARANTIA,
OU IMPLÍCITA, EXPRESSA
INCLUINDO, MAS NÃO SE LIMITANDO A GARANTIAS DE
COMERCIALIZAÇÃO OU ADEQUAÇÃO A UM DETERMINADO FIM. McGraw-Hill
e seus licenciadores não assegura ou garante que as funções contidas no trabalho vai atender às suas
Education
exigências ou que sua operação será ininterrupta ou livre de erros. Nem McGraw-Hill Education
nem seus licenciadores será responsabilizada por você ou qualquer outra pessoa por qualquer
imprecisão, erro ou omissão,
independentemente da causa, no trabalho ou por quaisquer danos resultantes. McGraw-Hill
Education
não é responsável
tem pelo conteúdo de qualquer informação acessada através do trabalho. sob nenhuma
circunstância a McGraw-Hill Education e / ou os seus licenciadores responsáveis por quaisquer
danos incidentais,
indiretos, especiais, punitiva, consequenciais ou semelhantes, que resultam da utilização ou
da utilizar
de incapacidade
o trabalho, mesmo que nenhum deles tenha sido avisada da possibilidade de tais danos.
limitação de responsabilidade é aplicável a qualquer reivindicação ou causar qualquer se tal
este
reclamação
surge ou causa
em contrato, dano ou outra forma.

Obrigado a Silvia, para tornar a vida vale a pena viver.


-John

Todo o meu amor para Ameetha, para uma viagem de uma vida.
Rupesh

As crianças e o cão e o resto da família ... Eu faço isso por você!


-Prumo
CONTEÚDO at a Glance

Parte I Introdução
Capítulo 1 Instalar o software Oracle Database
Capítulo 2 Criação de um banco de dados Oracle usando DBCA
Capítulo 3 Instalação Oracle Grid Infrastructure para um servidor autônomo
Capítulo 4 Usando o Oracle Restart

PARTE II SQL
Capítulo 5 DDL e objetos de esquema
Capítulo 6 DML e simultaneidade
Capítulo 7 Recuperação, Restringindo e classificando dados usando SQL
Capítulo 8 de Uma Única Linha e conversão Funções
Capítulo 9 Funções de Grupo
Capítulo 10 SQL junta
Capítulo 11 Subqueries e operadores de conjunto

PARTE III DBA1


Capítulo 12 Visão Geral Arquitetural do Oracle Database 12 c
Capítulo 13 Gerenciamento de Instância
Capítulo 14 do Oracle Networking
Capítulo 15 do Oracle Armazenamento
Capítulo 16 do Oracle Segurança
Capítulo 17 Movimentação e Dados Re-organização
Capítulo 18 A AWR e do Sistema de Alerta
Capítulo 19 Ajuste de Desempenho
Capítulo 20 O Resource Manager
Capítulo 21 O Scheduler

Parte IV DBA2
Capítulo 22 Configurando o banco de dados para backup e recuperação
Capítulo 23 Back Up com o RMAN
Capítulo 24 Restaurar e recuperar com o RMAN
Capítulo 25 Falhas Diagnosticar
Capítulo 26 Flashback
Capítulo 27 Duplicando um banco de dados
Capítulo 28 Encrypting, garantindo, Monitoramento e Ajuste RMAN Backups

Parte V Melhoramentos e multitenant


Capítulo 29 Atualização de Software Oracle Database e Dados Migrando
Capítulo 30 Atualizando um banco de dados Oracle
Capítulo 31 multitenant Container e Pluggable Database Architecture
Capítulo 32 Como criar e gerenciar multitenant recipiente e plugáveis Databases
Capítulo 33 Gerenciamento de armazenamento, segurança, disponibilidade e desempenho em um
CDB e PDBs
Apêndice sobre o download
Glossário
Índice
CONTEÚDO

Introdução

Parte I Introdução
Capítulo 1 Instalar o software Oracle Database
Plano para uma instalação Oracle Database Software
Plataformas suportadas
Obter o software Oracle Database
Contas de usuário
Espaço e Diretórios disco
Os cheques pré-requisito
Instalar o software Oracle Database
O Inventário SIM
O diálogo OUI: instalação interativa
Instalação silenciosa e arquivos de resposta
Variações Windows e Linux
Broca Two-Minute
Plano para uma instalação Oracle Database Software
Instalar o software Oracle Database
Auto teste
Respostas de auto-teste

Capítulo 2 Criação de um banco de dados Oracle usando DBCA


Criar um banco de dados usando o banco de dados Assistente de Configuração
A Instância, o banco de dados e o Dicionário de Dados
Usando o Assistente de Configuração de banco de dados para criar um banco de
dados
O diálogo DBCA
Gerar scripts de criação de banco de dados usando o DBCA
Gerando os Scripts
Os scripts de criação
O arquivo de inicialização de parâmetros
Gerenciar banco de dados Modelos de usando DBCA
Configurar opções de banco de dados usando DBCA
Broca Two-Minute
Criar um banco de dados usando o banco de dados Assistente de Configuração
Gerar scripts de criação de banco de dados usando o DBCA
Gerenciar banco de dados Modelos de usando DBCA
Configurar opções de banco de dados usando DBCA

Auto teste
Respostas de auto-teste

Capítulo 3 Instalação Oracle Grid Infrastructure para um servidor autônomo


Configurar armazenamento para Automatic Storage Management da Oracle
GI Arquitetura
ASM Arquitetura
Discos ASM
Criando discos ASM
Instalar Oracle Grid Infrastructure para um servidor autônomo
Broca Two-Minute
Configurar armazenamento para Automatic Storage Management da Oracle
Instalar Oracle Grid Infrastructure para um servidor autônomo
Auto teste
Respostas de auto-teste

Capítulo 4 Usando o Oracle Restart


Usar o Oracle Restart para gerenciar os componentes
Administrar os processos Oracle Restart
Administrando recursos registrados
Reinicie Capability
Broca Two-Minute
Usar o Oracle Restart para gerenciar os componentes
Auto teste
Respostas de auto-teste

PARTE II SQL
Capítulo 5 DDL e objetos de esquema
Use as ferramentas de cliente
SQL * Plus
SQL Developer
Categorizar banco de dados principal Objects
Tipos de objeto
Usuários e Esquemas
Esquema de nomeação de objetos
Namespaces de objetos
Listar os tipos de dados que estão disponíveis para Columns
Criar uma tabela simples
Criando tabelas com a coluna Especificações
Criando tabelas de Subqueries
Alterando Definições Tabela após a criação

Deixando cair e Truncating Tabelas


Criar e usar tabelas temporárias
índices
Por que os índices são necessários
Tipos de Índices
Criação e Utilização de Índices
Modificar e remover um índice
restrições
Os tipos de restrições
definindo Restrições
Estado restrição
Verificação restrição
Visualizações
Por que usar exibições em tudo?
Visualizações simples e complexas
CREATE VIEW, ALTER VIEW, e DROP VIEW
sinônimos
seqüências
criação de seqüências
usando Seqüências
Broca Two-Minute
Categorizar banco de dados principal Objects
Listar os tipos de dados que estão disponíveis para Columns
Criar uma tabela simples
Criar e usar tabelas temporárias
índices
restrições
Visualizações
sinônimos
seqüências
Auto teste
Respostas de auto-teste

Capítulo 6 DML e simultaneidade


Descreva Cada Manipulação de Dados Declaração Idioma
INSERIR
ATUALIZAR
EXCLUIR
TRUNCAR
MERGE
Falhas instrução DML
Transações de controle

Transações de banco de dados


Executar instruções SQL
Controle de Transação: COMMIT, ROLLBACK, SAVEPOINT, SELECT FOR
ATUALIZAR
Explique DML e Undo geração de dados
Monitorar e administrar Undo Dados
Condições de erro relacionadas à Desfazer
Parâmetros para a Gestão de Undo
Dimensionamento e Acompanhamento da tabela de undo
Undo temporária
Criando e Gerenciando Undo Tablespaces
Descrever a diferença entre Undo Dados e Dados Redo
Configurar Anular Retenção
Configurando Undo Retenção de Apoio às consultas de longa duração
Flashback Query e Anular Retenção
Descrever o mecanismo de bloqueio e gerenciamento de concorrência Dados
Bloqueios exclusivos compartilhada e
O Mecanismo Enqueue
Bloqueio Automático e Manual
Monitorar e resolver conflitos Trava
As causas da disputa do bloqueio
Detectando a disputa do bloqueio
Resolver contenção de bloqueio
Impasses: um caso especial
Broca Two-Minute
Descreva Cada Manipulação de Dados Declaração Idioma
Transações de controle
Explique DML e Undo geração de dados
Monitorar e administrar Undo Dados
Descrever a diferença entre Undo Dados e Dados Redo
Configurar Anular Retenção
Descrever o mecanismo de bloqueio e gerenciamento de concorrência Dados
Monitorar e resolver conflitos Trava
Auto teste
Respostas de auto-teste

Capítulo 7 Recuperação, Restringindo e classificando dados usando SQL


Explique as capacidades de instruções SQL SELECT
Apresentando a instrução SQL SELECT
A Tabela de Comando DESCREVER
Capacidades da instrução SELECT
Normalização de dados

Modelagem de dados
Entidades e Relações
Linhas e Tabelas
Criar os esquemas de demonstração
Usuários e Esquemas
O HR e OE Esquemas
Demonstração criação de esquema
Executar uma instrução SELECT Básica
Sintaxe da instrução SELECT Primitive
Regras são destinadas a ser Seguido
SQL Expressões e Operadores
NULL é nada
Limitar as linhas recuperadas por uma consulta
A cláusula WHERE
Operadores de comparação
Operadores booleanos
regras de precedência
Classificar as linhas recuperadas por uma consulta
A cláusula ORDER BY
A cláusula SQL Row-Limitando
Ampersand Substituição
Variáveis de substituição
Definir e Verificar
Broca Two-Minute
Explique as capacidades de instruções SQL SELECT
Executar uma instrução SELECT Básica
Limitar as linhas recuperadas por uma consulta
Classificar as linhas recuperadas por uma consulta
Ampersand Substituição
Auto teste
Respostas de auto-teste

Capítulo 8 de Uma Única Linha e conversão Funções


Descrever e usar Character, Número, e funções de data no SQL
Definir uma Função
Tipos de Funções
Usando funções Caixa de Conversão
Usando funções de manipulação de caracteres
Usando funções numéricas
Trabalho com datas
Descrevem vários tipos de funções de conversão disponíveis em SQL
Funções de conversão

Use as funções de conversão TO_CHAR, to_number, e TO_DATE


Usando as funções de conversão
Aplicar expressões condicionais em uma instrução SELECT
Funções aninhadas
Funções condicionais
Broca Two-Minute
Descrevem vários tipos de funções de conversão disponíveis em SQL
Use as funções de conversão TO_CHAR, to_number, e TO_DATE
Aplicar expressões condicionais em uma instrução SELECT
Auto teste
Respostas de auto-teste

Capítulo 9 Funções de Grupo


Descrever as funções de agrupamento
Definição de Funções de Grupo
Usando Funções de Grupo
Dados do Grupo Usando a Cláusula GROUP BY
Criação de grupos de dados
A cláusula GROUP BY
O agrupamento por várias colunas
Funções grupo aninhado
Incluir ou excluir linhas agrupadas usando a cláusula HAVING
Restringindo Resultados do Grupo
A cláusula HAVING
Broca Two-Minute
Descrever as funções de agrupamento
Dados do Grupo Usando a Cláusula GROUP BY
Incluir ou excluir linhas agrupadas usando a cláusula HAVING
Auto teste
Respostas de auto-teste

Capítulo 10 SQL junta


Escrever SELECTs para acessar dados de mais de uma tabela Usando Equijoins
e Nonequijoins
Tipos de junta
Unindo tabelas usando ANSI SQL Sintaxe
Qualificar nomes de coluna ambíguos
O NATURAL JOIN Cláusula
O Cadastrar-se usando Cláusula
O JOIN ON Cláusula
N-Way junta e Junte adicionais Condições
Nonequijoins

Junte-se a uma tabela a si mesmo usando um auto-Junte


Juntando-se uma tabela a ela mesma Utilizando o JOIN. . . ON Cláusula
Visualizar dados que não atende a condição de associação usando associações externas
Inner contra associações externas
Left Outer Joins
Outer direita junta
Outer completa junta
Gerar um produto cartesiano de duas ou mais tabelas
Criando produtos cartesianos Usando Cruz junta
Broca Two-Minute
Escrever SELECTs para acessar dados de mais de uma tabela Usando
Equijoins e Nonequijoins
Junte-se a uma tabela a si mesmo usando um auto-Junte
Visualizar dados que não atende a condição de associação Usando Junções
Externas
Gerar um produto cartesiano de duas ou mais tabelas
Auto teste
Respostas de auto-teste

Capítulo 11 Subqueries e operadores de conjunto


definir Subqueries
Descrever os tipos de problemas que os Subqueries pode resolver
O uso de um resultado Subquery Definir para comparação Purposes
Transformação estrela
Gerar uma tabela de qual escolher
Gerar valores para a projeção
Gerar linhas a serem passados para uma instrução DML
Descrever os tipos de Subqueries
Simples e múltiplas fileiras Subqueries
Subconsultas correlacionadas
Write Single-Row e Multiple-Row Subqueries
Usando o EXISTE Condição
Os resultados nulos em uma subconsulta
Descrever os operadores de conjunto
Conjuntos e diagramas de Venn
Definir princípios Operador Gerais
Use um operador de conjunto para combinar várias consultas em uma única consulta
O operador UNION ALL
O operador de união
O operador de intersecção
O operador MINUS
Exemplos
Controlar a ordemmais complexos
de linhas retornadas

Broca Two-Minute
definir Subqueries
Descrever os tipos de problemas que os Subqueries pode resolver
Descrever os tipos de Subqueries
Write Single-Row e Multiple-Row Subqueries
Descrever os operadores de conjunto
Use um operador de conjunto para combinar várias consultas em uma única
consulta
Controlar a ordem de linhas retornadas
Auto teste
Respostas de auto-teste

PARTE III DBA1


Capítulo 12 Visão Geral Arquitetural do Oracle Database 12 c
Listar os componentes arquitectónicos de um banco de dados Oracle
Arquitectura de bases de instância única
Sistemas de arquiteturas distribuídas
Explicar as estruturas de memória
O banco de dados Buffer Cache
O Log Buffer
A piscina comum
A grande piscina
A Piscina Java
A Piscina Streams
Descrevem os processos de fundo
SMON, o Monitor do Sistema
PMON, o Processo Monitorar
DBW n , o escritor de banco de dados
LGWR, o escritor Log
CKPT, o processo de verificação
MMON, o Monitor de Gerenciamento
MMNL, o gerenciamento luz do monitor
Mman, o Gerenciador de Memória
LREG, o Processo de Registro Listener
ARC n , o arquivador
RECO, o Processo Recoverer
Alguns outros processos em segundo plano
Explicar a relação entre as estruturas de armazenamento lógico e físico
As Estruturas de banco de dados físico
As Estruturas de banco de dados lógico
O Dicionário de Dados
Broca Two-Minute

Listar os componentes arquitectónicos de um banco de dados Oracle


Explicar as estruturas de memória
Descrevem os processos de fundo
Explicar a relação entre as estruturas de armazenamento lógico e físico
Auto teste
Respostas de auto-teste

Capítulo 13 Gerenciamento de Instância


Usar ferramentas de gerenciamento de banco de dados
Trabalhando com o SQL * Plus
Logon como um usuário normal ou privilegiadas
Trabalhando com Banco de Dados Expresso
Entenda Inicialização Parâmetro Arquivos
Estática e arquivos de parâmetros dinâmicos
Estáticos e dinâmicos Parâmetros e o arquivo de inicialização de parâmetros
Os parâmetros básicos
Alterar parâmetros
Iniciar e desligar uma instância Oracle Database
Iniciar o Listener de banco de dados
Banco de dados de inicialização e desligamento
Ver log de alerta e acesso dinâmico Desempenho Visualizações
O Registro de alertas
O Log DDL
O desempenho Dynamic Views
Broca Two-Minute
Usar ferramentas de gerenciamento de banco de dados
Entenda Inicialização Parâmetro Arquivos
Iniciar e desligar uma instância Oracle Database
Ver log de alerta e acesso dinâmico Desempenho Visualizações
Auto teste
Respostas de auto-teste

Capítulo 14 do Oracle Networking


Configurar Oracle Net Services
Oracle Net e Paradigma Cliente-Servidor
Estabelecendo uma sessão
Criando um Listener de banco de dados
Registro Dynamic Service
servidor compartilhado
Use ferramentas para configurar e gerenciar a Rede do Oracle
A Net Manager
O Assistente de Configuração Net

O Utilitário de Controle Listener


A variável TNS_ADMIN Ambiente
Configurar a rede do lado do cliente
Resolução Easy Connect Nome
Resolução Local Naming Nome
Naming Directory e Naming externa
Teste do Oracle Net Conectividade
Entenda banco de dados Pooling Residente Connection
Configurar a comunicação entre bancos de dados
Broca Two-Minute
Configurar Oracle Net Services
Use ferramentas para configurar e gerenciar a Rede do Oracle
Configurar a rede do lado do cliente
Entenda banco de dados Pooling Residente Connection
Configurar a comunicação entre bancos de dados
Auto teste
Respostas de auto-teste

Capítulo 15 do Oracle Armazenamento


Descrever o armazenamento de tabela de dados Row nos Blocos
O modelo do Oracle armazenamento de dados
Segmentos, extensões, bloqueia e linhas
Criar e gerenciar Tablespaces
criando Tablespaces
alterando Tablespaces
Dropping Tablespaces
Gestão de extensão
Gerenciamento do Espaço segmento
A Oracle Managed Files
Explicar como Oracle Database Server gerencia automaticamente o espaço
Segmento cessão de espaço
Gestão automática do espaço Segmento
Economizar espaço usando a compactação
Proativamente monitorar e gerenciar Tablespace Uso de Espaço
Use o Segment Advisor
Recuperar espaço desperdiçado a partir de tabelas e índices usando o Segmento Shrink
funcionalidade
Gerenciar Resumable Espaço Allocation
Broca Two-Minute
Descrever o armazenamento de tabela de dados Row nos Blocos
Criar e gerenciar Tablespaces
Explicar como Oracle Database Server gerencia automaticamente o espaço

Economizar espaço usando a compactação


Proativamente monitorar e gerenciar Tablespace Uso de Espaço
Use o Segment Advisor
Recuperar espaço desperdiçado a partir de tabelas e índices usando o Segmento
Shrink
funcionalidade
Gerenciar Resumable Espaço Allocation
Auto teste
Respostas de auto-teste

Capítulo 16 do Oracle Segurança


Criar e gerenciar contas de banco de dados de usuários
Atributos de Conta de Usuário
Métodos de autenticação
criando contas
Conceder e revogar privilégios
privilégios de sistema
Privilégios de objeto
Criar e gerenciar funções
Criando e Concedendo Roles
funções predefinidas
permitindo Roles
Análise Privilege
Criar e gerenciar perfis
Limites senha Perfil
Criação e atribuição de Perfis
Explique Responsabilidades DBA para a Segurança e Auditoria
Motivos para Auditoria
técnicas de auditoria
Habilitar Auditoria Database Standard e Unified Auditoria
Activar a auditoria Padrão
Habilitar Unificação de Auditoria
Broca Two-Minute
Criar e gerenciar contas de banco de dados de usuários
Conceder e revogar privilégios
Criar e gerenciar funções
Criar e gerenciar perfis
Explique Responsabilidades DBA para a Segurança e Auditoria
Habilitar Auditoria Database Standard e Unified Auditoria
Auto teste
Respostas de auto-teste

Capítulo 17 Movimentação e Dados Re-organização

Descreva maneiras de mover dados


Criar e usar objetos de diretório
Use SQL * Loader para carregar dados de um banco de dados não-Oracle
Usando o SQL * Loader
Modo SQL * Loader Expresso
Use tabelas externas para mover dados através de arquivos Platform-Independent
Explicar a arquitetura geral do Oracle Data Pump
Use Data Pump Export e Import para mover dados entre bancos de dados Oracle
capacidades
Usando o Data Pump com os utilitários de linha de comando
Tablespace Exportação e Importação
Use Bomba dados em um ambiente multitenant
Exportação de Não-CDB e Importação para PDB
Exportação e importação entre PDBs
Exportação de PDB e Importação para não-CDB
Completa Transportável Exportação e Importação
Transportar um banco de dados sobre a rede
Use o SQL * Loader em um ambiente multitenant
Broca Two-Minute
Descreva maneiras de mover dados
Criar e usar objetos de diretório
Use SQL * Loader para carregar dados de um banco de dados não-Oracle
Use tabelas externas para mover dados através de arquivos Platform-
Independent
Explicar a arquitetura geral do Oracle Data Pump
Use Data Pump Export e Import para mover dados entre bancos de dados
Oracle
Use Bomba dados em um ambiente multitenant
Use o SQL * Loader em um ambiente multitenant
Auto teste
Respostas de auto-teste

Capítulo 18 A AWR e do Sistema de Alerta


Gerenciar o Automatic Workload Repository
Gathering HORA Estatísticas
Gerenciando o AWR
Use o Automatic Database Diagnostic Monitor
Descrever e usar o Quadro Consultivo
Os Advisors memória
Os Advisors SQL
O Undo Advisor automático
O tempo médio para recuperar Advisor
A Data Recovery Advisor
O Segment Advisor

O Advisor SQL Repair


Definir Limites de alerta
Alerta Monitoramento de condições e Notificações
definindo limites
Utilize Tarefas Automatizadas
os Autotasks
Controlando as Autotasks
Broca Two-Minute
Gerenciar o Automatic Workload Repository
Use o Automatic Database Diagnostic Monitor
Descrever e usar o Quadro Consultivo
Definir Limites de alerta
Utilize Tarefas Automatizadas
Auto teste
Respostas de auto-teste

Capítulo 19 Ajuste de Desempenho


Use Enterprise Manager para monitorar o desempenho
A metodologia de ajuste de desempenho
Dados Performance Monitoring
O banco de dados Expresso Desempenho Páginas
Use Gerenciamento automático de memória
Gerenciamento de memória PGA
Gerenciamento de memória SGA
Gerenciamento automático de memória
Use o Memory Advisor para o tamanho da memória buffers
Gerenciar Optimizer Estatísticas
objeto Estatísticas
Como o otimizador utiliza estatísticas
Gathering Estatísticas manualmente
Use o SQL Tuning Advisor
As capacidades do SQL Tuning Advisor
A API SQL Tuning Advisor: O Pacote DBMS_SQLTUNE
Use o SQL Access Advisor para Tune Workload
As capacidades do SQL Access Advisor
Usando o Advisor acesso SQL com DBMS_ADVISOR
Broca Two-Minute
Use Enterprise Manager para monitorar o desempenho
Use Gerenciamento automático de memória
Use o Memory Advisor para o tamanho da memória buffers
Gerenciar Optimizer Estatísticas
Use o SQL Tuning Advisor

Use o SQL Access Advisor para Tune Workload


Auto teste
Respostas de auto-teste

Capítulo 20 O Resource Manager


Configurar o Database Resource Manager
A necessidade de Gestão de Recursos
O Gerente de Arquitetura de Recursos
Configuration Manager Resource
Acesso e criar planos de recursos
Método CPU
A utilização do Método do Ratio CPU
A sessão ativa Método Piscina
Limitando o grau de paralelismo
Controle de trabalhos de Tempo de Execução
Terminar sessões de tempo ocioso
Restringindo Geração de Undo Dados
Monitorar o Gerenciador de recursos
Broca Two-Minute
Configurar o Database Resource Manager
Acesso e criar planos de recursos
Monitorar o Gerenciador de recursos
Auto teste
Respostas de auto-teste

Capítulo 21 O Scheduler
Usar o Oracle Scheduler para simplificar as tarefas de gerenciamento
A Arquitetura Scheduler
Scheduler Objects
Use Chains trabalho para executar uma série de tarefas relacionadas
Use Scheduler Jobs em sistemas remotos
Use Scheduler recursos avançados para Priorizar Jobs
Usando classes de emprego
usando o Windows
Broca Two-Minute
Usar o Oracle Scheduler para simplificar as tarefas de gerenciamento
Use Chains trabalho para executar uma série de tarefas relacionadas
Use Scheduler Jobs em sistemas remotos
Use Scheduler recursos avançados para Priorizar Jobs
Auto teste
Respostas de auto-teste

Parte IV DBA2
Capítulo 22 Configurando o banco de dados para backup e recuperação
Possíveis Falhas e sua resolução
falha Categorias
A Oracle Backup and Recovery Solutions
Recuperação Instância ea impossibilidade de corrupção de dados
Postos de controle e o Redo Log
O Mecanismo Checkpointing
Proteger o Redo Log Files on-line
Modo Archivelog e os Processos Archiver
Backup e Recuperação: Configuração
Configurar a Área de Recuperação Rápida
Configurar o modo ARCHIVELOG
Broca Two-Minute
Possíveis Falhas e sua resolução
Postos de controle e o Redo Log
Configurar a Área de Recuperação Rápida
Configurar o modo ARCHIVELOG
Configurar arquivos de controle e Redo Log Files para recuperação
Auto teste
Respostas de auto-teste

Capítulo 23 Back Up com o RMAN


Teoria de backup e sintaxe básica
Conceitos de backup
RMAN sintaxe básica
Configurações RMAN persistentes
Alguns Recursos avançados do RMAN
O Catálogo de Recuperação
Criar e utilizar RMAN Scripts armazenados
backups incrementais
outros Recursos
Broca Two-Minute
Criar backups banco de dados consistente
Fazer backup de seu banco de dados sem desligá-lo
Criar backups incrementais
Automatizar backups de banco de dados
Gerenciar backups eo repositório RMAN
Usar vários tipos de backup do RMAN e Estratégias
Executar backups completos e incrementais
Use Técnicas para melhorar Backups

Auto teste
Respostas de auto-teste

Capítulo 24 Restaurar e recuperar com o RMAN


Executar recuperação completa e incompleta
Restauração e recuperação em uma página
Usando o RMAN restaurar e recuperar Comandos
Executar a recuperação completa de um Noncritical Datafile
Executar a recuperação completa de um arquivo de dados Critical
Executando Recuperação Incompleta Usando RMAN
Recuperando Usando Backups incremental Atualizado
Mudar para cópias de imagens para recuperação rápida
Executar recuperação para Spfiles, Controlfiles, e Online Redo Log Files
Restaurar o spfile da Cópia de Segurança Automática
Restaurar o CONTROLFILE
Recuperando-se de um grupo de Redo Log Perdido
Backup e restauração do arquivo de senha
Recuperação de uma perdida Tempfile
Broca Two-Minute
Executar recuperação completa e incompleta
Executar recuperação para Spfiles, Controlfiles, e Online Redo Log Files
Executar recuperação de tempfiles
Auto teste
Respostas de auto-teste

Capítulo 25 Falhas Diagnosticar


Descrever o fluxo de trabalho automático de diagnóstico
Compreender o ADR
Usando a ferramenta ADRCI
Compreender Alertas, problemas e incidentes
Usando o Monitor de Saúde
Lidar com bloco Corrupção
Bloquear a Corrupção
Usando Bloco de Mídia de Recuperação
Usando o Data Recovery Advisor
Broca Two-Minute
Descrever o fluxo de trabalho automático de diagnóstico
Lidar com bloco Corrupção
Auto teste
Respostas de auto-teste

Capítulo 26 Flashback

Descrever as tecnologias Flashback


Flashback Database
Flashback Query, Transação, e Tabela
Flashback Gota
Flashback Data Archive
Quando usar Flashback Tecnologia
Use Flashback para consultar dados
Básico Flashback Query
Flashback tabela de consulta
Versões Flashback Query
Flashback Transaction Query
Flashback e Dados Undo
Realizar operações de Flashback Table gota
A Implementação de Flashback Gota
Usando Flashback Gota
Gerenciando a Lixeira
Executar recuperação Tabela de Backups
Descrever e usar Flashback Data Archive
Execute Flashback Database
Arquitectura de bases Flashback
Configurando Flashback Database
Monitoramento Flashback Database
Usando Flashback Database
Broca Two-Minute
Descrever as tecnologias Flashback
Use Flashback para consultar dados
Realizar operações de Flashback Table
Executar recuperação Tabela de Backups
Descrever e usar Flashback Data Archive
Execute Flashback Database
Auto teste
Respostas de auto-teste

Capítulo 27 Duplicando um banco de dados


Descrever e usar transportáveis Tablespaces e Bases de Dados
Configurando transportáveis Tablespaces
transportar Tablespaces
Transportar um banco de dados
Duplicar um banco de dados
Usando um banco de dados duplicados
Duplicar a partir do banco de dados ativo
Duplicados de backup

Broca Two-Minute
Descrever e usar transportáveis Tablespaces e Bases de Dados
Escolha uma técnica para duplicar um banco de dados
Criar um banco de dados duplicados baseado-Backup
Duplicar um banco de dados
Auto teste
Respostas de auto-teste

Capítulo 28 Encrypting, garantindo, Monitoramento e Ajuste RMAN Backups


Criar backups criptografados-RMAN
Configurando e usando criptografia transparente
Usando Criptografia de senha
Usando criptografia Dual-Mode
Configurar e usar o Oracle Secure Backup
Instalando e Configurando o Oracle Secure Backup
Usando RMAN com o Oracle Secure Backup
Comandos diversos obtool
Monitorar e RMAN desempenho sintonizar
Monitoramento Sessões RMAN e Empregos
Desempenho RMAN sintonia
Identificar Backup e Restauração Passos
paralelização conjuntos de backup
Entendimento RMAN Multiplexing
Canais de sintonia RMAN
Ajustando o comando de backup
Broca Two-Minute
Criar backups criptografados-RMAN
Configurar e usar o Oracle Secure Backup
Desempenho RMAN Tune
Auto teste
Respostas de auto-teste

Parte V Melhoramentos e multitenant


Capítulo 29 Atualização de Software Oracle Database e Dados Migrando
Descrever métodos de atualização
Atualização de software
Atualização de banco de dados: DBUA ou Manual
Descrever os métodos de migração de dados
Descreva o processo de atualização
Migrar dados usando o Oracle Data Pump
Broca Two-Minute

Descrever métodos de atualização


Descrever os métodos de migração de dados
Descreva o processo de atualização
Migrar dados usando o Oracle Data Pump
Auto teste
Respostas de auto-teste

Capítulo 30 Atualizando um banco de dados Oracle


Descreva requisitos de atualização quando determinados recursos ou opções são
usadas
BasenodeOracle
dados
Oracle Label Security e Oracle Data Vault
Oracle Warehouse Builder
Use a ferramenta de informações de pré-atualização Antes de executar uma
atualização
Prepare o novo Oracle Home Antes de executar uma atualização
Atualizar o banco de dados para o Oracle Database 12 c usando a atualização do banco
de dados
Assistente
Executar uma atualização manual para o Oracle Database 12 c usando scripts e
ferramentas
Migrar para Unified Auditoria
Executar tarefas Postupgrade
Broca Two-Minute
Descreva requisitos de atualização quando determinados recursos ou opções são
usadas
oracle
emDatabase
Use a ferramenta de informações de pré-atualização Antes de executar uma
atualização
Prepare o novo Oracle Home Antes de executar uma atualização
Atualizar o banco de dados para o Oracle Database 12 c usando a atualização
do banco de dados
Assistente
Executar uma atualização manual para o Oracle Database 12 c usando scripts e
ferramentas
Migrar para Unified Auditoria
Executar tarefas pós-upgrade
Auto teste de auto-teste
Respostas

Capítulo 31 multitenant Container e Pluggable Database Architecture


Descrever a arquitetura de banco de dados multitenant Container
Conceitos multitenant
Os drivers para multitenant
O CDB eo Container Root
PDBs: Pluggable Recipientes
Explique Provisioning banco de dados Pluggable
Técnicas para Provisioning Pluggable Containers
As comunicações entre Containers
Broca Two-Minute

Descrever a arquitetura de banco de dados multitenant Container


Explique Provisioning banco de dados Pluggable
Auto teste
Respostas de auto-teste

Capítulo 32 Como criar e gerenciar multitenant recipiente e plugáveis Databases


Criar um banco de dados Container
Use DBCA para criar um CDB
Usando SQL * Plus para criar um CDB
Criar Containers plugáveis
Usando PDB $ SEED para criar um novo PDB
A clonagem de um APO para criar um novo PDB
Conecte um não-CDB em um CDB
Ligar uma APO desconectado num CDB
Desligue e soltar um APO
Migrar um banco de dados pré-12.1 Non-CDB para CDB
Estabelecer conexões com CDBs e PDBs
Compreender CDB e nomes de serviços PDB
Criação de Serviços de CDBs ou PDBs
Alternando conexões dentro de um CDB
Start Up e Desligar a CDB e PDBs Abrir e Fechar
Startup Instância CDB
Abrir e fechar um APO
CDB Instância Shutdown
Automatizando PDB Startup
Alterar PDB Estado
Avaliar o impacto de alterações de parâmetros Valor
Compreender o escopo dos parâmetros Alterações
Usando ALTER SYSTEM em um ambiente multitenant
Broca Two-Minute
Criar um banco de dados Container
Criar Containers plugáveis
Migrar um banco de dados pré-12.1 Non-CDB para CDB
Estabelecer conexões com CDBs e PDBs
Start Up e Desligar a CDB e PDBs Abrir e Fechar
Avaliar o impacto de alterações de parâmetros Valor
Auto teste
Respostas de auto-teste

Capítulo 33 Gerenciamento de armazenamento, segurança, disponibilidade e desempenho em um


CDB e PDBs Gerenciamento de espaço em um ambiente multitenant
tablespace Arquitetura
Usando CREATE TABLESPACE
Padrão Permanente e espaços de tabela temporários em um PDB
Gerenciar comuns e locais usuários, funções e privilégios
Usuários comuns e locais
Conceder privilégios Comumente e localmente
Gerenciar funções comuns e locais
Habilitar os usuários comuns para acessar dados em PDBs específicos
Auditoria na multitenant Ambiente
Backup multitenant e Recuperação
Fazer backup de um CDB e Individual PDBs
Restauração e recuperação
PDBs duplicado utilizando RMAN
Mulitenant Performance Monitoring and Tuning
Ajustando o Instância
Usando a memória Advisors
Gerenciar alocação de recursos entre PDBs e dentro de um APO
Usando Ações para gerir os recursos Inter-PDB
Criando e Recursos Modificando Planos gerente
Execute o Database Replay
Fonte de captura de banco de dados As cargas de trabalho
As cargas de trabalho de processos no sistema de destino
Reproduzir cargas de trabalho no alvo CDB: Repetição Consolidado
Broca Two-Minute
Gerenciar Permanente e espaços de tabela temporários em CDB e PDBs
Gerenciar usuários comuns e locais
Gerenciar privilégios comuns e locais
Gerenciar funções comuns e locais
Habilitar os usuários comuns para acessar dados em PDBs específicos
Executar backups de um CDB e PDBs
Recuperar APO da perda PDB Datafiles
Use Data Recovery Advisor
PDBs duplicado utilizando RMAN
Monitorar operações e desempenho em um CDB e PDBs
Gerenciar alocação de recursos entre PDBs e dentro de um APO
Execute o Database Replay
Auto teste
Respostas de auto-teste

Apêndice sobre o download


Requisitos de sistema
Instalando e executando total Tester
Sobre Total Tester

Suporte técnico

Glossário
Índice
INTRODUÇÃO

Há uma demanda cada vez maior para o pessoal com certificação da indústria de TI. Os benefícios
parasignificativos
são os empregadores(eles podem estar certos de que os funcionários têm um certo nível de
competência),
os e ostermos
indivíduos, em benefícios para
de demanda por seus serviços, são igualmente grandes. Muitos
empregadores
pessoal técnicoexigem
para ter certificações, e muitos compradores não vai comprar de empresas que não
profissionais certificados. As certificações da Oracle estão entre os mais procurados. Mas, além de
têm
recompensas
sentido do negócio,
em uma estudando para os exames é um processo agradável que pode permitir que você
para investigar
aspectos do banco de dados que você pode não costumo usar.
Sua iniciação no mundo maravilhoso de administração banco de dados Oracle está prestes a
podecomeçar.
estudar Você
isso para o resto de sua vida. Apreciar!

oracle Certification
Há várias faixas de certificação Oracle; este livro está preocupado com o banco de dados Oracle
Trilha de certificação Administração, especificamente para liberação 12 c do banco de dados.
Existem
de certificação
três níveis
DBA: Oracle Certified Associate (OCA), Oracle Certified Professional (OCP), e
Oracle Certified Master (OCM). A qualificação OCA é baseada em dois exames; o OCP
qualificação exige passar um terceiro exame. Você pode tomar estes exames a qualquer Pearson
VUE Center, em qualquer ordem. A qualificação OCM exige completar uma avaliação adicional de
doiscentro
um dias no de testes Oracle, envolvendo simulações de ambientes complexos e utilização de técnicas
avançadas
técnicas que não são abordados neste livro.
Para se preparar para os exames OCA / OCP, você pode assistir instrutor-conduzido Oracle
University
cursos de formação, você pode estudar Oracle University material de aprendizagem on-line, ou você
podetodos
Em ler este
os casos,
livro. você também deve consultar a Biblioteca de documentação do Oracle para obter
detalhes
livro serásobre
uma aadição
sintaxe.
valiosa
este para outros métodos de estudo, mas também é suficiente por si só. Tem
projetado com os objetivos do exame em mente, embora também inclui uma grande quantidade de
sido
informações
que será útil no curso de seu trabalho.
Estudar o material e experiência, e como você trabalha através de exercícios e exemplos de
perguntas
e tornar-se mais familiarizados com o ambiente Oracle, você vai perceber que há uma regra de ouro:

“Quando em dúvida, experimentá-lo.”

Em uma infinidade de casos, você vai achar que um teste simples que leva um par de minutos
horas
pode
de especulação
salvar e debruçado através de manuais. Se alguma coisa é sempre claro, construir um
exemplo e
ver o que acontece. Note-se que este livro foi desenvolvido usando o Windows e Linux, mas para
realizar o e suas posteriores investigações, você pode usar qualquer plataforma para o qual o banco
exercícios
de dados é
acessível.
O exame
Aqui estão algumas sugestões para abordar o exame.

Um OCA / exame OCP será composto por questões de múltipla escolha, mas é de múltipla
escolhaAs
esteróides. sobre
perguntas não são sempre “escolher a melhor resposta.” Às vezes as perguntas pedirá
você “escolher todas as respostas corretas” ou “colocar as respostas na ordem correta.” Algumas
perguntas
fácil, alguns
sãosão difíceis, e alguns são confusas. Você pode ser solicitado (por exemplo) para
“escolher ovocê
resposta”e melhor
vai pensar:‘Todas as respostas estão erradas!’ou talvez“Mas duas das respostas são
corrigir “Nesse caso, leia a questão com cuidado, e você pode, eventualmente, ver o que eles estão
as perguntas são muitas vezes precisamente formulada.
querendo!;
As perguntas são justas e não requerem feitos de memória. Você não (por exemplo) ser
um perguntado
nome da vista se é V $ DATAFILE ou V $ data_file. Mas você pode ser perguntado se V $
DATAFILE ou
DBA_DATA_FILES é visível quando o banco de dados está no modo de montagem. Fair o
suficiente:
se uma vista você
é preenchida
deve saberdo exemplo, a partir do controlfile, ou do dicionário de dados; você
deve saber qual destas estruturas está disponível no modo de montagem. Esta não é uma questão de
éortografia;
algo que você
isto pode trabalhar para fora.
A técnica de exame que você deve seguir é passar por todas as perguntas o mais rápido possível,
respondendo as que você conhece e marcação aqueles que você não (há uma opção para fazer isso).
Esse primeiroirá levá-lo a metade do tempo. Em seguida, passar o resto do tempo passando por cima
run-through
das perguntas
marcado, novamente
que você
e novamente. No final, ainda pode haver algumas perguntas onde você não tem
idéia. Dentro
Nesses casos, apenas adivinhar-não há deduções para erros. O erro que você não deve fazer é tentar
fazer as perguntas em ordem, porque você vai ficar sem tempo. E pode ter havido algumas fáceis
perguntas no final que você nunca olhou.
Todos os detalhes de como reservar um exame está disponível no site da Oracle University,
http://education.oracle.com/certification .

Conhecimento pré-requisito e Meio Ambiente


Este livro foi desenvolvido usando o Windows e Linux, a partir do qual vêm todos os exemplos.
Para levar a cabo
os exercícios e as novas investigações, você pode usar qualquer plataforma na qual o banco de dados
pode ser instalado. Note que você não pode instalar o Oracle em qualquer sistema operacional de 32
Oracle
bits. Nãosobre
desligou fique se
muito
sua plataforma é suportado. Por exemplo, a Oracle não suporta o banco de dados
qualquer edição “casa” do Windows ou no CentOS Linux, mas estes devem trabalhar para fins de
aprendizagem,
problema. não
Claramente, você deve estar familiarizado com qualquer interface de linha de comando e
seu ferramentas de administração
ambiente oferece. gráficasusa Linux em sala de aula, e algumas questões do exame
Oracle University
ter um Linux sentir a eles, por isso, se possível, tentar fazer pelo menos alguma preparação em uma
fazer
máquina Linux.
Os lançamentos do banco de dados usado para o desenvolvimento deste livro foram 12.1.0.0
pode(uma
observar
versão
embeta,
alguns
comoscreenshots),
você 12.1.0.1 (a primeira versão de produção), e 12.1.0.2. Você
baixar e instalar qualquer que seja a última versão atualmente disponível para você passa a ser.
deve
Universidade valida os exames contra a primeira versão de produção. Quando uma nova versão
Oráculo
(talvez
12.2.0.1) é emitido, Oracle University revalidar todas as questões contra o novo lançamento e ajustar
ou remover quaisquer perguntas onde as mudanças no comportamento podem afetar a resposta.
Assim,
não importa
para fins
o quedelibertá-lo
exame, ele
usar, mas para efeitos práticos, você quer estar na mais recente.

Uma palavra sobre Exemplo de perguntas não


autorizadas (aka Cérebro
Lixões)
A revisão capítulo e exame de prática perguntas que vêm com este livro não são exame real do
questões; que seria ilegal. No entanto, eles cobrem o conhecimento que você deve ter. Não há
Oracle
ponto em memorizar as perguntas e respostas. Tratá-los apenas como um cheque de saber se você
agarrou o material. Alguns alunos gostam de passar por muitos exames de simulação (que você pode
tem
comprar
talvez ou de graça, embora a legalidade destes deve ser confirmado) repetidamente até que
baixar
tem uma pontuação perfeita. Nós acreditamos fortemente que este é técnica de preparação pobre. Ele
não prova
mais do quenada
isso, você pode passar por um exame simulado particular. O único valor desse material
questionar
érespostas as respostas,
que se você
erradas ou seja, Essa
estão errados. vocêétrabalha para
a maneira defora porque
abordar a resposta
todas supostamente
as questões neste livro.correta é
Se você
correta
arealmentee por
necessidade que
sente o
de fazer um exame de julgamento, porque não basta agendar a coisa real? Você nunca
asabe,
primeira
você vez.
pode passar

baixar
Para mais informações sobre o conteúdo digital, consulte o apêndice, “ sobre o download .”

objetivos Mapas
Aqui você vai encontrar um mapa de objetivos de cada um dos três exames. Os mapas foram
construídos
permitem que
para
você referência cruzada os objetivos do exame oficial com os objetivos como eles são
e coberto neste livro. Os objetivos são listados como apresentado pelo organismo de certificação
apresentados
com o de referência correspondente.
capítulo

exame 1Z0-061
exame 1Z0-062
exame 1Z0-063
PARTE I

Começando
Capítulo 1 Instalar o software Oracle Database
Capítulo 2 Criação de um banco de dados Oracle usando DBCA
Capítulo 3 Instalação Oracle Grid Infrastructure para um servidor autônomo
Capítulo 4 Usando o Oracle Restart
CAPÍTULO 1

Instalando o Oracle Database Software

Objetivos do exame
Neste capítulo, você vai aprender a
• Plano de 062.2.2.1 para uma instalação Oracle Database Software
• 062.2.4.1 instalar o software Oracle Database
O software de banco de dados Oracle está instalado com o Oracle Universal Installer (OUI). OUI é
produtos Oracle em seu próprio direito que é usado para gerenciar a instalação e manutenção de
uma
muitos outros
produtos. A instalação do software Oracle, na medida do possível, foram padronizados para todos
produtos em todas as plataformas, mas existem plataformas e produtos variações. Antes de instalar
qualquer
É essencial
coisa,
que você leia notas de lançamento do produto para a plataforma em causa. Este capítulo
através do processo de planejamento da instalação e, em seguida, instalar o Oracle Database 12 c
vai
com exemplos de Linux e Windows.
software,

Plano para uma instalação Oracle Database Software


O processo de instalação requer uma série de pré-requisitos, e principal entre eles são a
do software e uma máquina adequada. Uma vez que estes estão no lugar, a instalação real é
disponibilidade
simples e, dependendo do hardware, deve levar cerca de 15 minutos. Idealmente, os alunos
têm a sua própria instalação em seu próprio PC para que eles possam praticar tanto quanto desejado.
Essa é a descrito aqui.
ambiente

Plataformas suportadas
Historicamente, o banco de dados Oracle foi apoiado em uma extraordinariamente ampla gama de
que foi uma das razões para a preeminência do produto no software de gerenciamento de banco de
plataformas,
dados relacional
(RDBMS) mercado. Nos últimos anos, o número de plataformas considerada comercialmente viável
tem
diminuída, de modo a Oracle Corporation reduzida apoio em conformidade. Linux é sempre a
primeira
para a liberação.
plataforma
As plataformas mais comumente disponíveis para os estudantes são Linux e
Microsoft
assim que Windows,
estas são as plataformas mais comumente referenciados nos exames e neste guia.

Obter o software Oracle Database


Oracle Corporation fez com que o software disponível para download público, sem a necessidade de
comprar
licença. Noumentanto, essa licença pública é restrito. Você pode baixar e instalar o produto em sua
máquina própria apenas para fins de desenvolvimento de aplicações e de auto-aprendizagem. Isso
fica
o contrato
claro emde licença. Há também restrições legais sobre o download (ou posteriormente
transferindo para) determinados países. Além disso, normalmente, apenas a libertação de base está
disponível
obter manchaspublicamente.
de qualquerPara
tipo, é necessário ter um contrato de suporte. A libertação de base é
para fins de treinamento, embora não necessariamente para uso em produção.
adequada
As duas fontes comumente utilizados para download de software são o Oracle Technology
(OTN)Network
e Oracle Software Delivery Cloud. Para chegar ao site de download do OTN, ir para
www.oracle.com , navegar através do guia Downloads para Oracle Database, e selecione o mais
liberação disponível. Para usar o Oracle Software Delivery Cloud, ir para http://edelivery.oracle.com
recente
eselecionar o pacote de produto de banco de dados Oracle. Em qualquer local, é necessário fazer
logoncriar
(Ou em uma
uma nova
contaconta
do Oracle
Oracle) e, em seguida, aceitar o contrato de licença. O software está na
de arquivos zip, e quatro são necessários: dois arquivos para o software de banco de dados Oracle e
forma
dois para de
software a grade
infra-estrutura. Descompacte-los (um diretório para o software de banco de dados
Oracle e uma
diretório para segunda
a Infra-estrutura Grid), e você está pronto para ir.

Contas de usuário

Em qualquer versão do Unix ou Linux, não é possível instalar o software como usuário root. Isto é
necessário criar contas que será o dono do software. A melhor prática é criar uma conta que
será o dono do software de banco de dados e uma segunda conta que será o dono do software da
gradepermite
Isto de Infra-estrutura.
a separação das funções entre o domínio de administração do banco de dados e o
domínio administração. Para efeitos da educação, uma conta pode ser usado para ambas as funções.
sistema
Tradicionalmente, esta conta é nomeado Oracle e dado o grupo primário de oinstall. Um secundário
grupo será dba. Estes grupos devem ser criados antes de instalar e deve ser atribuído ao
conta Oracle.
No Windows, não é incomum para instalar software Oracle em uma conta com Administrador
privilégios. Embora esta é certamente ruim do ponto de vista de segurança e nunca deve ser feito em
sistema de produção, não vai causar um problema em um sistema de formação. O instalador irá criar
uma
grupos operacionais necessárias chamado ORA_DBA e atribuí-lo à conta da qual o instalador é
todos
corre.

Espaço e Diretórios disco


A instalação requer cerca de 5 GB para o banco de dados Oracle Home. Um Oracle Home é o local
de um produto da Oracle instalação-um conjunto de arquivos em uma estrutura de diretório. Note-se
que causa
por variações
da plataforma,
no tamanhodo tipo de sistema de arquivos e as opções selecionadas pode ser
substancial.
diretório pode
o estar em um sistema de arquivos local ou um sistema de arquivos em cluster, mas
deve ser isto
sistema, um “cozinhado” file de disco Automatic Storage Management (ASM) ou um dispositivo
é, não um grupo
bruto.
A estrutura de diretório recomendado é conhecido como Optimal Flexible Architecture (OFA).
OFAa éfacilitar o processo de organização de várias instalações de software. A idéia geral é que
destina
cada produto deve ser instalado em seu próprio Oracle Home, debaixo de uma Base de Dados
éOracle.
um diretório
A Baseque
de Dados
irá conter
do Oracle
um ou mais Casas da Oracle, bem como vários outros diretórios para
fins de administração e também as bases de dados reais. O diretório que contém o inventário OUI
existe fora da base de dados de Oracle, que faz sentido uma vez que deve ser independente de
qualquer outra
produtos.
A convenção de nomenclatura recomendadas da Oracle base é baseado em três variáveis:
/ Pm / s / u
E para cada Oracle Home, adicione um literal e mais variáveis:
/ Pm / s / u / produto / v / type_ [n]
Os arquivos que compõem cada banco de dados estão na base de dados Oracle, além de duas
variáveis:
/ Pm / s / u / q / d
Tabela 1-1 mostra as variáveis e valores sugeridos.

Tabela 1-1 A OMF Naming Convention

aqui estão alguns exemplos:

• Uma base de dados de Oracle of D: \ app \ oracle é uma indicação de que existem todos os
arquivos
em um da
diretório
Oracle-relacionados
chamado \ appna
e que
unidade
as instalações
D: foram feitas pela Oracle usuário do
Windows.
• Um Oracle Home do /u01/app/oracle/product/12.1.0/dbhome_1 sugere que a Base do Oracle
é / u01 / app / oracle e que este diretório contém a primeira instalação do 12 c liberação 1
software de banco de dados no computador.
• O caminho D: \ app \ oracle \ oradata \ orcl é o diretório sob o Oracle base de dados que
contém
de umos
orcl
arquivos
banco de dados chamado.
• O caminho / u01 / app / oraInventory é a localização dos arquivos de inventário Oui, ao lado
doBase.
Oráculo

Não é essencial para se conformar com a estrutura de diretórios OFA, mas OFA faz um banco de
vidadados
do administrador mais fácil. Muitos administradores de banco de dados (DBAs), e alguns
produtos,
OFA está no
assumir
lugar,que
o que significa que se desvia de OFA pode causar confusão.

Os cheques pré-requisito
O lançamento Notas de instalação para cada lista plataforma os pré-requisitos. Estes serão
geralmente(espaço
requisitos hardware em disco e memória de acesso aleatório), versões do sistema operacional, a
disponibilidade
certos utilitários,deconfigurações de segurança, limites de recursos do kernel, e níveis de patch. De um
modo geral,nível
instalações nestedo Windows são mais simples do que o Linux. Isso ocorre porque o Windows é um
rigidamente
meio ambientecontrolado
e OUI pode fazer muitas suposições. Da mesma forma, se a distribuição Linux é o
Enterprise Linux, é provável que uma instalação padrão irá cumprir todos os pré-requisitos. A Red
Oracle
SUSE, ou distribuição CentOS não pode conformar por padrão e pode, portanto, precisam de algum
Hat,
trabalhopode
Oracle antesser instalado.
Existem pré-requisitos para a execução OUI e mais pré-requisitos para produtos específicos. a
pré-requisitos
OUI são codificados na oraparam.ini arquivo e são básicos. Pesquisar este arquivo no
descompactado
Programas. O seguinte é de liberação 12.1.0.1.0 para Linux de 64 bits:

OUI irá se recusar a correr se não forem cumpridas estas condições. Depois, há pré-requisitos
realmente
para o está
produto
sendo instalado. Estes são codificados no arquivo cvu_prereq.xml e são verificados
porinstalação.
da OUI comoÉparte
possível ignorar falhas para atender os pré-requisitos e prosseguir com
instalação, mas se você fizer isso, não há nenhuma garantia a instalação vai realmente funcionar
corretamente.

DICA Muitas vezes o problema com as falhas pré-requisito não é que os produtos não vai funcionar;
é decidir
se importa. Por exemplo, no Linux, algumas das configurações de kernel e pacotes não são
necessário para uma instalação de nível de entrada. No entanto, pode ocorrer um problema com o
realmente
apoio.solicitação
uma Se você jádeseserviço
levantar
(um SR, que é passado para Serviços de Suporte Oracle através My
eOracle
seu sistema
Support)
não é compatível com os pré-requisitos, os analistas de suporte pode se recusar a
Portanto, se você tem que quebrar uma das regras para obter uma instalação completamente,
ajudá-lo.
certifique-se
possível depois.
de corrigi-lo assim

Instalar o software Oracle Database


OUI dá várias opções para a instalação. A instalação sugerido, discutidas a seguir, será adequado
para todos os estudos até o nível Oracle Certified Professional. O currículo do Oracle Certified
inclui RAC, a instalação de que não é coberto aqui. Uma opção é se a cadeia do
Master
instalação do software com a criação de um banco de dados. Esta opção não vai ser tomada aqui,
no entanto, porque a criação de um banco de dados é tratado como um tópico separado.

O Inventário SIM
OUI cria um inventário, que é um conjunto de Extensible Markup Language (XML) arquivos que
exatamente o que os produtos da Oracle foram instalados na máquina, com detalhes de onde o
gravam
Casas são. Para evitar este inventário de ser corrompidos, um mecanismo de bloqueio evita a
Oráculo
execução
OUI (ou o opatch patching rotina) simultaneamente em duas ou mais sessões. Sempre OUI ou
éopatch
executado, a primeira coisa que faz é localizar o inventário e verificar se ele já está bloqueado. o
localização do inventário e do grupo de sistema operacional que possui são armazenadas em um
arquivo de ponteiro
ponteiro.tem
o um nome e local específico da plataforma. No Linux, é
/etc/oracle/oraInst.loc,
Neste como em
exemplo, o que mostra que o inventário está localizado no diretório / app / oraInventory / U01:

No Solaris ou AIX, o arquivo ponteiro reside no diretório oracle / var / opt /. No Windows, o
localização de inventário é definido em uma chave de registro.
HKEY_LOCAL_MACHINE / SOFTWARE / ORACLE / inst_loc
OUI é escrito em Java, utilizando o JDK 1.5, que está incluído no produto. Isto significa que
o mesmo
OUI éem todas as plataformas, com exceção de certas variações triviais na interface do usuário
Java,
tais como se as janelas têm cantos quadrados ou arredondados. OUI pode ser instalado como uma
produto em sua própria Oracle Home, mas isso geralmente não é necessário porque ele é enviado
auto-contido
com cada
outro produto Oracle e pode ser iniciado a partir do CD de instalação do produto (ou DVD); ele irá
-se no Oracle Home juntamente com o produto. Existem diferentes versões do OUI, e se um
instalar
produto vem com uma versão anterior do que já está instalado na máquina, é geralmente uma boa
ideia (e pode de fato ser necessário) para instalar o produto usando a versão já instalada do
Oracle Home existente. Quando OUI solicita o local do arquivo products.xml, especifique o DVD
ou directório com o produto que você deseja instalar.

DICA Utilize sempre a versão mais recente da OUI que tem disponível. Pode haver problemas com
a atualização
inventário OUIdose você tentar reverter para versões anteriores depois de usar uma versão posterior.
Observe também
produtos (como oque
servidor
alguns
WebLogic) ainda não utilizam OUI e são instalados de forma
independente.
baixar a últimaVocê
OUI pode
do Oracle Technology Network.

O diálogo OUI: instalação interativa


Para iniciar OUI, executar o script shell runInstaller.sh (Linux) ou o programa setup.exe (Windows)
a raiz
partirdodediretório no qual o software foi descompactado. Para uma instalação interativa, uma gráfica
terminal deve estar disponível. No Windows, isso não é problema. Para Linux, isso significa um
terminal
algum tipo.X deSe você estiver conectado ao console através de um dos gerentes de janela padrão Linux
(Tais como o Gnome), OUI será executado imediatamente. Se você está se conectando remotamente,
X
você terádeque
método conexão
usar um
que permite a exibição de gráficos, como um desktop VNC ou um servidor X
Não há nada de especial sobre este; qualquer tutorial Linux ou usuário Linux experiente pode
Window.
explicar.
No entanto, este assunto está além do escopo de um tutorial Oracle.
O uso do diálogo OUI é detalhado no exercício, no final deste capítulo. Em resumo, aqui está
as informações solicitadas pelas 12 etapas do instalador no Linux (Windows é um pouco diferente):

1. Atualizações configurações de segurança Dê credenciais de login para My Oracle Support


(opcional).
2. Baixar atualizações de software Ativar downloads automáticos de CPUs ou UPAs
(opcional).
3. Selecione a Opção de Instalação Escolha se para encadear a instalação para criar ou
atualizar
base deumdados.
4. Grade Opções de instalação Crie uma instalação de única instância, RAC, ou RAC One
Nó.
5. Selecione um produto Idiomas Por padrão, apenas o Inglês é selecionado.

6. Selecione Database Edition Escolha Enterprise Edition, Standard Edition ou Standard


Edition
1.
7. Especifique Local de instalação Especifique os diretórios do Oracle Base e Oracle Home.
8. Grupos sistema operacional privilegiada nomear os grupos que irão gerenciar o Oráculo
Casa.
9. Realizar Pré-requisitos verificará Validar o ambiente.
10. Resumo Leia o resumo do diálogo.
11. Instalar Produto Ver o progresso.
12. Concluir Você concluiu com êxito o diálogo OUI.

Passo 9 pode falhar em alguns testes. Isso é improvável no Windows, mas no Linux (se você não
versão
estiver
do Linux
usandoOracle
uma validados, como OEL 5.8), você pode enfrentar uma série de questões.
estes envolvem ajustes de parâmetros do kernel e a disponibilidade de certos gestores de pacotes
Tipicamente,
RPM
(RPMs). Cada edição será marcada como “aviso” ou “crítica”. Ao clicar no Fix e verifique
botão irá gerar um script e pedir-lhe para executá-lo como root, o que irá corrigir muitos problemas
novamente
(Tais como os limites de kernel). No entanto, ele não pode corrigir todos eles. Portanto, quaisquer
“solucionáveis”
problemas
faltando RPMs
unfixable
críticos)
(taisdevem
como ser abordadas antes de prosseguir. Se não for possível corrigir os
problemas,
clicando no caixa de seleção Ignorar Tudo lhe permitirá prosseguir, mas sem garantia de que o
instalação será bem-sucedida.
Passo 11, no Linux, inclui uma solicitação para executar o root.sh script como o usuário root.
realiza
estedeterminadas
script tarefas que exigem privilégios de root, como a criação de arquivos em / etc e
modos de propriedade e de acesso em determinados arquivos no Oracle Home.
mudando

Instalação silenciosa e arquivos de resposta


Correndo OUI interativamente é bom para instalar um one-off. No entanto, se você estiver
instalandoou
máquinas emtalvez
múltiplos
a concepção de um procedimento repetível e automatizada, é necessário usar
Técnica: condução OUI com um arquivo de resposta. Um arquivo de resposta é lido por OUI e
outro
contém
todas asrespostas
questões para
colocadas pelo diálogo interativo. Ao usar um arquivo de resposta, normalmente
você vai querer
desativar todas as saídas gráfica. Isso permite que você para realizar instalações em sistemas onde
nenhuma gráfica
dispositivo de terminal está disponível, tais como servidores de lâmina sem consola ligada.
Criando um arquivo de resposta a partir do zero está além da capacidade da maioria dos DBAs
júnior.
arquivo de No entanto,
resposta uma é fornecido: o db_install.rsp arquivo no diretório / resposta / diretório
modelo
abaixo
do software
da raiz
de instalação. É bem documentado, com descrições de cada valor necessário. Mas
mesmo DBAs veteranos vão tentar evitar escrever um arquivo de resposta com a mão. E não há
necessidade
você pode gerar
de causa
um com uma corrida interativa da OUI. Lançar OUI e passar pelo diálogo. No
tela final você verá uma caixa de seleção ao lado da pergunta “Gerar arquivo de resposta?” Neste
ponto você
nomear um local para um arquivo de resposta gerado automaticamente com base no diálogo anterior
em seguida, cancelar a instalação.
Para executar uma instalação silenciosa mais tarde (talvez em uma máquina diferente), edite o
meio arquivo
ambiente
gerado
e, em
para
seguida,
corresponder
lançar OUI
à com a seguinte sintaxe (para Windows):

Você pode passar muitas outras opções de linha de comando para o instalador. Isto é como exibi-
los todos
em Linux:

Um interruptor particularmente útil é -ignoreSysPrereqs, que permitem uma silenciosa ou


proceder
instalação
mesmointerativa
que os cheques
para pré-requisito falhar.

Variações Windows e Linux


Discutindo os detalhes das variações plataforma está fora do âmbito do Oracle Certified Professional
(OCP) syllabus. No entanto, porque é possível que os alunos podem encontrar as diferenças confuso,
aqui está um resumo das principais diferenças:

• ID de usuário no Linux Um usuário do sistema operacional que será o dono do software


deve
e deve
ser precreated
ser um membro de grupos do sistema operacional a ser utilizado para o próprio Oracle
Home e para do banco de dados. Costuma-se citar o oráculo de usuário e os grupos oinstall e
administração
dba. Execute OUI como este usuário; você não pode executar o OUI como root.
• ID de usuário no Windows OUI deve ser executado como um usuário com privilégios de
solicita o usuário
administração, e que possui o Oracle Home. Se o usuário não existir, ele será criado.
• grupos de sistema operacional em Linux Pelo menos um grupo deve ser precreated, o
OSDBA
grupo. Você pode chamá-lo de qualquer coisa que você quiser, mas dba é o nome do grupo
habitual, oeoinstalador
executar usuário deve ser um membro deste grupo. Um segundo grupo, habitualmente
chamado
oinstall, deve ser o grupo primário da OUI usuário em execução.
• grupos do sistema operacional no Windows Os nomes são codificados e será criado por
OUI. O usuário nomeado será feito um membro desses grupos automaticamente.
• certificados de raiz no Linux No final da instalação, um shell script deve ser executado
como
do utilizador.
raiz Este script faz algumas alterações que necessitam de privilégios de root.
Executá-lo
O Windowsquando
não requerem
solicitado.
este passo porque o OUI deve-se ter sido executado como um
usuário com
direitos de administração.

Exercício 1-1: Instalar o software Oracle Database Neste exercício, você irá instalar um Oracle
Casa, mas você não vai criar um banco de dados neste momento.
Prepare o seu sistema de formação através da criação de diretórios apropriados e um usuário; em
sigaseguida,
o assistente.
lançar
OsOUI
passos
e e instruções são ligeiramente diferentes entre o Windows e Linux
diálogos, mas em geral, o processo é semelhante e auto-explicativa, com assistência sensível ao
disponível através do botão Ajuda. O seguinte é um exemplo do diálogo OUI para Windows,
contexto
seguido
por um diálogo a partir de uma instalação Linux. Claro, você deve ajustar o processo às suas
próprias
Você pode
circunstâncias.
usar estes dois exemplos para ajudá-lo na sua instalação.
A caixa de diálogo de instalação do Windows foi capturado executando o arquivo setup.exe OUI
Windows
em um8.064-bit
máquina. Pode ser necessário ajustar as respostas sugeridas ao seu ambiente.

1. Atualizações configurar a segurança Desmarque a I Wish caixa de seleção Atualizações de


Segurança
Deixar os
para
outros
receber.
campos em branco, clique em Avançar e, em seguida, clique em Sim
quando avisado sobre não fornecendo

um endereço de e-mail.
2. Faça o download Software Update selecione o botão Ignorar Software Updates e clique em
Próximo.
3. Selecione a Opção de Instalação Selecione o único botão Instalar Software de banco de
dados
clique
de rádio
em Avançar.
e, em seguida,
4. Classe Sistema Selecione o botão Class Server. Isso não tem nenhum significado técnico,
masnão garante que você vai, posteriormente, ver todas as opções possíveis. Clique em Avançar.
5. Grade opções de instalação Selecione o botão de instalação de banco de dados de instância
única
emeseguida, clique em Avançar.
6. Selecione Tipo de Instalação Selecione o botão de opção Instalação Avançada e clique em
Avançar.
7. Selecione um produto Idiomas Adicione quaisquer idiomas que você precisa e, em seguida,
clique em Avançar.
8. Selecione Database Edition Selecione o botão de opção Enterprise Edition e clique em
Avançar.
9. Especifique Oracle Home Usuário Digite o nome ea senha de qualquer um usuário
existente quea instalação ou um novo usuário a ser criado por OUI. Um nome de utilizador é
possuirá
usado comumente
Oracle (em letras minúsculas). Clique em Avançar.
10. Especificar Local de instalação Insira um diretório do Oracle Base, como C: \ app \ oracle,
e umalocalização de software, tais como C: \ app \ oracle \ product \ 12.1.0 \ dbhome_1. Clique em
Avançar. verificações de pré-requisito OUI irão realizar suas verificações. Corrigir
11. executar
quaisquer
12. Resumo problemas.
Um resumo da instalação será exibida. É possível fazer alterações
aqui ou para navegar de volta através do diálogo com o botão Voltar. Clique em Instalar para
continuar.
A caixa de diálogo de instalação do Linux foi capturado executando o arquivo OUI
Linux
runInstaller.sh
5.8 máquina.emPode
um ser
64-bit
necessário ajustar as respostas sugeridas ao seu ambiente.

1. Atualizações configurar a segurança Desmarque a I Wish caixa de seleção Atualizações de


Segurança
Deixar os
para
outros
receber.
campos em branco, clique em Avançar e, em seguida, clique em Sim
quando
um endereço
avisado
de sobre
e-mail.não fornecendo
2. Faça o download Software Update selecione o botão Ignorar Software Updates e clique em
Próximo.
3. Selecione a Opção de Instalação Selecione o único botão Instalar Software de banco de
dados
clique
de rádio
em Avançar.
e, em seguida,
4. Grade opções de instalação Selecione o botão de instalação de banco de dados de instância
única
emeseguida, clique em Avançar.
5. Selecione um produto Idiomas Adicione quaisquer idiomas que você precisa e, em seguida,
clique em Avançar.
6. Selecione Database Edition Selecione o botão de opção Enterprise Edition e clique em
Avançar.
7. Especifique Local de instalação Insira um diretório do Oracle base sobre a qual o usuário
Linux
todas
temas permissões, como / u01 / apporacle, e uma localização software dentro dele, como
/u01/app/oracle/product/12.1.0/dbhome_1. Clique em Avançar.

8. Grupos de Sistemas Operacionais privilegiadas Selecione um grupo de sistema


operacional
caixa paradebaixo.
cada drop
A lista será dependente da participação em grupo do usuário sob o qual
você
está executando a OUI. Selecionando dba, se disponível, é geralmente uma boa escolha.
Clique emPré-requisitos
9. Realizar Avançar. verificará OUI irá realizar suas verificações. Corrigir quaisquer
problemas.
10. Resumo Um resumo da instalação será exibida. É possível fazer alterações
aqui ou para navegar de volta através do diálogo com o botão Voltar. Clique em Instalar para
continuar.
11. Instalar Produto OUI copia o software para o Oracle Home, liga-lo, e corre vários
scripts de configuração.
12. Executar Scripts de configuração de uma janela pop-up (se certificar de que não está se
escondendo
outra janela!)
atrás irá pedir-lhe para executar um script shell como root. Executar este, padrões
aceitando
para todos os valores solicitado. Em seguida, clique em OK na janela pop-up. A instalação
está agora clique em Fechar para sair do instalador.
completo;

Broca Two-Minute
Plano para uma instalação Oracle Database Software
• Criar grupos de sistemas operacionais e usuários.
• Crie um diretório sob o qual a Base de Dados Oracle vai existir.
• Baixar a versão apropriada dos DVDs de instalação.

Instalar o software Oracle Database


• Lançamento OUI: setup.exe (Windows) ou runInstaller.sh (Linux).
• Siga o diálogo SIM.

Auto teste
1 . Qual afirmação melhor descreve a relação entre a Base de Dados Oracle e Oracle
Casa? (Escolha a melhor resposta.)
A. The Oracle base existe dentro do Oracle Home.
B. The Oracle base pode conter Oracle Homes para produtos diferentes.
C. Um a Oracle base é necessária para cada produto, mas versões do produto pode existir
em suas próprias casas de Oracle dentro de sua base de dados de Oráculo.
D. A Base do Oracle é criado quando você executar o script orainstRoot.sh, e que contém
umaponteiro para o Oracle Home.
2 . O que Optimal Flexible Architecture descrever? (Escolha a melhor resposta.)
A. A estrutura de diretório
B. sistemas de banco de dados distribuído
C. Uma arquitectura de processamento de múltiplas camadas
D. Tudo o que precede
3 . O variável de ambiente deve ser definido no Linux antes de executar o Oracle Universal
Installer para uma instalação interativa? (Escolha a melhor resposta.)
A. ORACLE_HOME
B. ORACLE_BASE
C. ORACLE_SID
D. EXIBIÇÃO
4 . Se a OUI detecta que um pré-requisito não foi cumprido, o que pode fazer? (Escolha o
melhor
responda.)
A. Você deve cancelar a instalação, corrigir o problema e lançar OUI novamente.
B. A instalação silenciosa falhará; uma instalação interativa irá continuar.
C. Instruir OUI para continuar (em seu próprio risco).
D. As opções vão depender de quão longe no OUI instalação é quando o problema é
detectou.
5 . Que tipo de dispositivos OUI pode instalar um Oracle Home para? (Escolha todos os que se
aplicam.)
A. sistemas de arquivos regulares
B. sistemas de arquivos em cluster
C. Dispositivos brutos
D. grupos de discos ASM
6 . Qual opção de linha de comando pode ser usado para impedir a OUI de parar quando pré-
requisito
testes falham? (Escolha a melhor resposta.)
A. -silent
B. -record
C. -responsefile
D. -ignoresysprereqs
7 . Quando é que um inventário OUI são criados? (Escolha a melhor resposta.)
A. Cada vez que um novo Oracle Home é criado
B. Toda vez que um novo Oráculo base é criado
C. Antes da primeira corrida da OUI
D. Durante a primeira execução da OUI

Respostas de auto-teste

1. B . O diretório do Oracle Base contém todos os Lares da Oracle, que pode ser qualquer
de quaisquer
versão produtos.
A , C , e D estão incorrectos. Um é incorrecta porque ele inverte a relação. C é
incorreto, pois não há nenhuma exigência para uma base separada para cada produto. D é
incorrecta
porque ele não entende o propósito do script orainstRoot.sh, que é criar a
arquivo oraInst.loc, para não criar o diretório do Oracle Base.
2. Um . A arquitetura flexível Optimal grandiosamente chamado é nada mais do que um
convenção de nomenclatura para estruturas de diretório.
B , C , e D estão incorrectos. Estas opções de resposta são incorretas porque eles vão
alémmuito
OFA.
3. D . Sem um conjunto DISPLAY, a OUI não será capaz de abrir todas as janelas.
A , B , e C são incorrectas. Estas opções de resposta são incorretas porque embora eles
podem antes da OUI é lançado, a OUI solicitará valores para eles.
ser definido
4. C . Talvez não é aconselhável, mas certamente você pode fazer isso.
A , B , e D são incorrectas. A está incorreta porque, embora possa ser uma boa idéia,
algonão
queévocê tem que fazer. B está incorreta porque a instalação interativa irá parar. D é
incorreto porque todos os pré-requisitos são verificados ao mesmo tempo.
5. A e B . A Oracle Home deve existir em um sistema de arquivos, mas pode ser local ou
cluster.
C e D são incorrectas. Dispositivos e dispositivos ASM Raw pode ser usado para
parabancos
um Oracle
de dados,
Home.mas não
6. D . O interruptor -ignoresysprereqs pára OUI de execução dos testes.
A , B , e C são incorrectas. A está incorreta porque esta mudança irá suprimir a geração
de e não a execução de testes. B está incorreta porque esta é a chave para gerar uma
janelas,
resposta
Arquivo. C está incorreta porque esta é a chave para ler um arquivo de resposta.
7. D . Se a OUI não consegue encontrar um inventário, ele irá criar um.
A , B , e C são incorrectas. A e B estão incorretas porque um inventário pode gerenciar
qualquer
número de casas em qualquer base. C é incorrecta porque o inventário é criado no final de
o processo, não o começo.
CAPÍTULO 2

Criação de um banco de dados Oracle


usando DBCA
Objetivos do exame
Neste capítulo, você vai aprender a
• 062.2.5.1 Criar um banco de dados usando o banco de dados Assistente de Configuração
(DBCA)
• 062.2.5.2 Gerar scripts de criação de banco de dados usando o DBCA
• 062.2.5.3 gerenciar banco de dados Modelos de usando DBCA
• Opções 062.2.5.4 Configure banco de dados usando DBCA
Este capítulo passa pela teoria e prática de criar um banco de dados através da mecânica de
criação usando tanto a interface gráfica do usuário (GUI) e da linha de comando. Este capítulo
descreve como criar modelos de banco de dados. No entanto, um objetivo que deve ser tratada com
também
imediatamente é desmistificar o processo: a criação de um banco de dados não é grande coisa. Além
disso,
não precisa
você realmente
se preocupar em acertar. Quase nada é fixo no momento de criação de banco de dados.
Certamente faz sentido pensar sobre como seu banco de dados será estruturada, a sua finalidade, e
isto
ambiente no momento da criação, mas com uma exceção: tudo pode ser mudado depois (embora
sua
algumas alterações podem ser estranho). Como regra geral, manter as coisas o mais simples possível
nesta fase.
Criar um banco de dados usando a configuração do
banco
Assistente
Criação de um banco de dados não é difícil. O processo pode ser rápido e simples: Pode demorar
menos deedez
minutos, um único comando de duas palavras vai fazê-lo. No entanto, existem alguns conceitos
que deveria
compreender antes de prosseguir com o processo de criação, ou seja, a instância, o banco de dados
dicionário de dados.
eo

A Instância, o banco de dados e o Dicionário de Dados


Um servidor Oracle é uma instância e um banco de dados; os dois são distintos, mas ligados. O
exemplo é de estruturas e processos de memória em sua memória de acesso aleatório (RAM) e no seu
composta
unidades centrais de processamento (CPUs). Sua existência é transitória; ele pode ser iniciado e
éinterrompido.
composto poro arquivos
banco denodados
disco; uma vez criado, ele persiste até que seja excluído. Criando uma
instância
nada maisédo que a construção das estruturas de memória e iniciar os processos. Criação de um
bancopela
feito de dados
instância
é como uma única operação de fora, e o exemplo pode, então, subsequentemente,
abrir
o e fechar
banco de dados muitas vezes. O banco de dados é inacessível sem a instância.
Dentro do banco de dados é um conjunto de tabelas e outros objetos chamados o dicionário de
dados .descreve
dicionário Os dadostodas as estruturas lógicas e físicas no banco de dados, incluindo todos os
que armazenar dados do usuário. O processo de criação do banco de dados envolve a criação o
segmentos
mínimo denecessárias
estruturas física para apoiar o dicionário de dados e, em seguida, criar o dicionário de dados
dentro deles.
Um exemplo é definido por um arquivo de parâmetro de instância. O arquivo de parâmetro
define
contém
(entrediretrizes
outras coisas)
que como a instância deve ser construído na memória, incluindo o tamanho
estruturas de memória e o comportamento dos processos em segundo plano. Após o exemplo foi
do
construído,
está eleem nenhum mount modo. Em nenhum modo de montagem, a instância existe mas não
a ser dito
se conectou
base de dados.a um
Na verdade, o banco de dados pode não ter sido criado neste momento.
Todos os parâmetros, tanto especificados pelo arquivo de parâmetros ou definir implicitamente,
o parâmetro
tem padrões,
DB_NAME.
exceto para
Este parâmetro nomes do banco de dados para que a instância irá se
Este nome também está embutido no controlfile. Um parâmetro, CONTROL_FILES, diz a instância
conectar.
a localização do controlfile. Este parâmetro define a conexão entre a instância eo
base de dados. Quando a instância lê o controlfile (o que vai encontrar pela leitura do
parâmetro CONTROL_FILES ou contando com o valor padrão), se há uma incompatibilidade no
banco deo dados
nomes, banco de dados não será montado. No modo de montagem, a instância se conectou com
sucesso à Se o controlfile está danificado ou inexistente, será impossível para montar o banco de
controlfile.
dados.

O controlfile é pequena, mas vital.


Dentro do controlfile são ponteiros para outros arquivos (os arquivos de log redo on-line e os
que arquivos
compõemdeodados)
resto do banco de dados. A montagem do banco de dados, a instância pode abrir o
banco de dados
localizando e abrir esses outros arquivos. Um banco de dados aberto é um banco de dados onde a
instância
abriu todos
tem
os arquivos de log redo online disponíveis e arquivos de dados. Também dentro do
controlfile
de arquivosédeumdados
mapeamento
de espaços de tabela. Isso permite que a instância identificar os arquivos de
dados que compõem
tablespace. No espaçoo desistema
tabela SYSTEM, ele vai encontrar o dicionário de dados. O dicionário de
dados permite que o
referências instância determinação de objectos referidos no código Structured Query Language
(SQL) paraem
segmentos o que residem e trabalham fora onde, fisicamente, os objetos são.
A criação de um servidor de banco de dados deve, portanto, envolver estes passos:
1. Criar a instância.
2. Crie o banco de dados.
3. Criar o dicionário de dados.
Na prática, porém, há uma quarta etapa.
4. Faça o banco de dados utilizável.

O dicionário de dados, tal como inicialmente criado com a base de dados, é totalmente funcional,
mas inutilizável.
capacidade para definir
Ele teme agerir os dados do usuário, mas não pode ser usado por seres humanos
normais,
estrutura é tambémsua
porque a obscuro. Antes de usuários (ou administradores de banco de dados) pode
realmente
de pontos de
usar
vista
o banco
devem deser
dados,
criados
um em
conjunto
cima do dicionário de dados que irá apresentá-lo em um ser
Formato. Além disso, muitos pacotes PL / SQL são necessárias para adicionar funcionalidade.
humano-compreensível
O dicionário de dados em si é criado pela execução de um conjunto de scripts SQL que existem
ORACLE_HOME
no / rdbms / admin. Estes são chamados pelo comando CREATE DATABASE.
O primeiro é sql.bsq, que em seguida, chama vários outros scripts. Esses scripts emitir uma série de
comandos
que criar todas as tabelas e outros objetos que compõem o dicionário de dados.
Os pontos de vista e outros objetos que fazem a base de dados utilizável são gerados com mais
scripts do
ORACLE_HOME / rdbms diretório e / admin ter um gato prefixo. Exemplos destes são catalog.sql
e catproc.sql, que deve sempre ser executado imediatamente após a criação do banco de dados. Há
outros scripts opcionais “gato” que permitirão que determinados recursos de alguns destes podem ser
muitos
executados
Tempo; outros
na criação
podem ser executados posteriormente para instalar os recursos em uma data posterior.

Usando o Assistente de Configuração de banco de dados para criar um banco de


dados
Estes são os passos a seguir para criar um banco de dados:

1. Crie um arquivo de parâmetro e (opcionalmente) um arquivo de senha.


2. Use o arquivo de parâmetros para construir uma instância na memória.
3. Edição o comando DATABASE CRIAR. Isso irá gerar, no mínimo, um controlfile,
dois arquivos de log redo on-line, um arquivo de dados cada para o sistema e os espaços de
tabela
um dicionário
SYSAUX, de dados.
e A sintaxe não permite muito mais a ser feito neste momento.
4. Executar scripts SQL para gerar as visualizações do dicionário de dados e os pacotes PL /
SQL fornecidos.

5. Executar scripts SQL para gerar o código que implementa Enterprise Manager banco de
dados
bemExpresso
como quaisquer opções (como Java) o banco de dados vai exigir.
6. Em sistemas Windows, há um passo adicional porque a Oracle é executado como um serviço
do A
Windows.
Oracle fornece um utilitário, oradim.exe, para ajudá-lo na criação deste serviço.

Estes passos podem ser executados de forma interativa a partir do SQL * Plus alerta ou através
Assistente
de umade ferramenta
Configuração
GUI,de
o banco de dados (DBCA). Alternativamente, você pode automatizar o
processo
scripts ouusando
DBCA com um arquivo de resposta.
Independentemente da plataforma que está sendo executado, a maneira mais fácil para criar um
DBCA.
banco Eledecria
dadosuméarquivo
atravésde parâmetros e um arquivo de senha e, em seguida, gera scripts que
vão começar
exemplo, criara o banco de dados e gerar o dicionário de dados e as visualizações do dicionário de
Alternativamente, você pode criar o arquivo de parâmetro e arquivo de senhas com a mão e, em
dados.
seguida,SQL
Sessão fazer* oPlus.
restoMuitos
de umadministradores de banco de dados (DBAs) combinam as duas técnicas:
DBCA para gerar os arquivos e scripts e, em seguida, olhar para eles e, talvez, editá-los antes de
Usam
executar
-los a partir do SQL * Plus.
Para iniciar DBCA no Windows, tomar o atalho no menu Iniciar. Este é um exemplo do
caminho de navegação: Iniciar | programas | A Oracle - OraDB12Home1 | Configuração e Migração
Ferramentas
Assistente de| Configuração de banco de dados.
Observe que o caminho exato vai variar dependendo do nome dado à Oracle Home no momento
Tempo.
da instalação
Como alternativa, executar o script dbca.bat de um prompt CMD. Após uma instalação
padrão,
será incluído
ele no seu caminho de busca do Windows.
Para iniciar DBCA no Linux, primeiro defina as variáveis de ambiente que devem sempre ser
Linux
definidos
sessão DBA:
para qualquer
DISPLAY, ORACLE_BASE, ORACLE_HOME e PATH. Aqui está um exemplo
de um script que vai fazer isso:

Note que a Base e Início variarão de acordo com as escolhas feitas no momento da instalação. as
também
variáveis
existem em um ambiente Windows, mas são geralmente definidas como variáveis de
registro estabelecidos
Universal Installer (OUI),
pela em
Oracle
vez de variáveis do shell. A variável de exibição deve ser definido
para o do servidor X. Para iniciar DBCA, executar o script shell dbca, que está localizado na
endereço
$ ORACLE_HOME / bin.

DICA Certifique-se de ter o diretório / bin $ ORACLE_HOME no início do seu caminho de busca
no caso quaisquer executáveis do Linux com o mesmo nome como executáveis Oracle. Um caso
existem
bem conhecido
ponto é rman, que
na é o nome de ambos uma ferramenta Oracle e um utilitário SUSE Linux.

Lembre-se que (com uma exceção) a cada escolha feita no momento da criação do banco de
maisdados
tarde,pode
masser
quealterado
algumas mudanças são difíceis e envolverá tempo de inatividade. Portanto, não
é vital para obter
tudo certo, mas quanto mais você pode obter direito, melhor.

O diálogo DBCA
O diálogo DBCA consiste (dependendo das opções) de cerca de 13 passos.

Passo 1: Base de dados de operação


Os botões de rádio disponíveis nesta primeira etapa permite que você selecione o tipo de operação
que deseja
executar.

• Criar banco de dados Você pode iniciar um diálogo que irá pedir-lhe para criar uma instância
e uma
base de dados.
• Configurar opções de banco de dados Você pode ajustar um banco de dados existente,
talvez
capacidades
instalando
adicionais.
• Excluir banco de dados Você pode remover todas as instâncias e bancos de dados existentes.
• Gerenciar Modelos Um modelo é um armazenados, banco de dados pré-configurado. Alguns
modelos
fornecido,
são ou você pode criar o seu próprio a partir de um banco de dados existente.
• Gerenciar Pluggable bancos de dados bancos de dados plugáveis são um novo recurso em
12ocescopo
e estãodo
além
currículo Oracle Certified Associate (OCA).

Passo 2: Modo de Criação


A criação de um banco opção configuração padrão com lhe dá acesso a um pequeno subconjunto de
capacidades de dbca. A opção Modo Avançado, por outro lado, dá-lhe acesso a todas as
possibilidades.

Passo 3: Modelo de Banco de Dados


Um modelo é uma versão armazenada de um banco de dados pré-configurado a partir do qual você
pode de
base gerar
dados.
umaCriação
nova de um banco de dados a partir de um template é muito mais rápido do que
criá-lo asão
opções partir
configuráveis.
do nada, masA não
Oracle
todos
fornece dois modelos de demonstração: um modelo de uso geral,
o qual está configurado para nada em particular, e um modelo de armazenamento de dados, a qual é
otimizado para o processamento de consultas em vez de processamento de transações. A opção de
supostamente
bancoum
gera dediálogo
dados personalizado
que vai lhe dar total liberdade na forma como o banco de dados está configurado,
limites predefinidos.
sem
Passo 4: Base de dados de identificação
O banco de dados deve ter um nome de banco de dados global. O nome global consiste em um nome
de banco de dados
opcionalmente, umae, base de dados de domínio. O nome do banco de dados é incorporado no
controlfile,
como o parâmetro
será especificado
de instância DB_NAME, e deve ser exclusivo na máquina do servidor. O nome
pode
até sercaracteres, incluindo caracteres alfanuméricos, sublinhados (_), sinais de número (#), e
oito
cifrões ($), e o primeiro caractere deve ser alfabético. caso sensibilidade podem variar de um
plataforma para outra. O nome do banco de dados é um exemplo de um valor que deseja obter
direito; pode ser
mudado mais tarde, mas isso requer tempo de inatividade.
O banco de dados de domínio pode ser de até 128 caracteres, incluindo caracteres alfanuméricos
sinale de
o número (#). Os pontos podem ser utilizados como separadores para os diferentes elementos
édoutilizado
domínio.para
O domínio
o parâmetro exemplo DB_DOMAIN. Note-se que embora seja possível construir um
nome global que lembra os nomes de domínio totalmente qualificados (FQDNs) usado em
Transmission
Protocol (TCP)Control
redes, não há nenhuma relação entre eles.
O segundo valor requerido é o identificador de sistema (SID). Este é o nome da instância do
a serOracle
criado e é usado para o parâmetro ORACLE_SID. Não há nenhuma razão para que isso seja o
como o valor DB_NAME, mas para o bem da sua sanidade, normalmente você vai mantê-lo o
mesmo
mesmo.
única naDeve ser do servidor de banco de dados.
máquina

DICA O uso de nomes globais com um domínio pode ajudar a distinguir os bancos de dados em
máquinas de
acontecer diferentes
ter o mesmo
que DB_NAME. Muitos DBAs irá acrescentar FQDN da máquina como o
DB_DOMAIN para esta finalidade. Mas não há necessidade de usar um DB_DOMAIN em tudo.
alguns DBAs
considerar domínios para ser uma responsabilidade, possivelmente porque eles podem causar
confusão
links de banco
devido
deaodados
seu impacto
e o nomesobre
global do banco de dados.

Passo 5: Opções de Gestão


Uso do Oracle Enterprise Manager (OEM) é totalmente opcional. Se você quiser usá-lo, você tem
possibilidades: Enterprise Manager banco de dados Express e Cloud Control Enterprise Manager.
dois
Enterprise Manager banco de dados Express é uma versão de OEM que está configurado dentro do
um conseguiu
base de dados. Se você instalar um segundo banco de dados, você precisará de uma instância
separada do banco
configurado de dados
no interior Express,
da referida base. Enterprise Manager Cloud Control é a gestão universal da
sistema, que geralmente é executado em uma máquina dedicada (ou máquinas) com agentes de
Oracle
execuçãoSe
servidor. emvocê
cadatem
alvouma instalação Cloud Control disponíveis, DBCA precisa saber como fazer
logon a ele.
Passo 6: As credenciais de banco de dados
Nesta etapa, você fornecer senhas para os esquemas SYS e sistema. SYS é o esquema que possui
o próprio dicionário de dados, e a senha é escrito para o arquivo de senhas externo. O usuário SYS
é muito especial, e a senha pode ser necessário para algumas funções críticas (tais como
inicialização
desligar). O esquema
e SYSTEM é realmente apenas um usuário como qualquer outro, mas é dado
muitos poderosos
privilégios.
A Oracle melhor prática é que essas senhas devem ter pelo menos oito caracteres, incluindo uma
mistura edeminúsculas e pelo menos um dígito. Os personagens são qualquer incluído no seu
maiúsculas
banco de de
conjunto dados
caracteres (detalhado mais adiante neste capítulo). Se você especificar uma senha que é
considerado
DBCA vai reclamar,
muito simples,
mas vai deixar de prosseguir, no entanto.
Uma variação do Windows neste momento é que você será solicitado para a senha da operação
conta do sistema que possui o Oracle Home.

DICA É muitas vezes considerada a melhor prática para furar a uma pequena gama de caracteres
para as senhas
(Letras maiúsculas e minúsculas, números e sinais de pontuação mais comuns) e começar com uma
levando caractere alfabético. Alguns intérpretes de shell de comando pode ter problemas com a mais
personagens incomuns.

Passo 7: Locais de armazenamento


O banco de dados pode ser criado em qualquer um grupo de disco Automatic Storage Management
ou em umdoarquivo
diretório sistema. De qualquer maneira, você pode nomear o destino ou deixar DBCA decidir
onde armazenar
arquivos de bancoo de dados, com base em seu valor derivado para a variável de ambiente
ORACLE_BASE.
tipos de armazenamento
Ambostambém pode usar, opcionalmente, Oracle Files Controlados (OMF). OMF
permite todos
nomear que o os
Oracle
seus assumir
arquivosodecontrole
banco de dados e construir uma estrutura de diretórios adequado
dentro do qual para armazenar
eles.
A secção de recuperação de arquivos relacionados desta etapa permite nomear uma área de
recuperação
usado como um rápida para ser
local padrão para backups e outros arquivos relacionados à recuperação e também
para permitir
modo de registro
que de
o arquivamento de operação. A maioria (se não todos) os bancos de dados de
produção
mas pode será
ser ativada
executado
a qualquer
no modo momento
de registro
apósdeaarquivamento,
criação do banco de dados.

Passo 8: Opções de banco de dados


Várias opções são licenciados separadamente e deve ser selecionada ou não de acordo com sua
licença. A guia Esquemas de exemplo causará DBCA para instalar os esquemas de demonstração em
próprio espaço de tabela.
sua

Passo 9: Parâmetros de inicialização


Existem mais de 300 parâmetros de inicialização publicamente visíveis e milhares mais chamadas
parâmetros escondidos. DBCA fornece instruções para o mínimo, com um link para um editor onde
pode ver os seus padrões para os outros e definir qualquer que quiser. Passo 9 do diálogo DBCA
você
solicita
um totalquer
geralpara
para memória a ser usada pela instância ou para especificar valores para System
Global eArea
(SGA) Global Area o Programa (PGA). SGA é usado pela instância e é acessível a partir de todos
sessões; ele é dividido em vários sub-estruturas, algumas das quais podem ser ajustados
individualmente.
dividido em áreasPGA
de memória
é privada para cada sessão eo processo conectado. Esta etapa do DBCA
diálogo define alguns dos parâmetros de memória.
A guia de dimensionamento mostra dois parâmetros: DB_BLOCK_SIZE (embora o prompt é
Tamanho)
apenas ebloco
processos. DB_BLOCK_SIZE é crítico; é o único parâmetro que nunca pode ser
mudou após a criação do banco de dados. Isto é porque especifica o tamanho dos blocos em que o
SISTEMA tablespace datafile é formatado. A tabela sistema armazena o dicionário de dados, e
alterá-lo exigiria recriar o dicionário de dados, o que seria equivalente a criação de um
novo banco de dados. O DB_BLOCK_SIZE padrão é 8KB. Os valores legais são 2KB, 4KB, 8KB,
16KB,
e (em algumas plataformas) 32KB.
Os conjuntos de caracteres guia permite que você escolha o conjunto de caracteres de banco de
dados ea alternativa nacional

conjunto de caracteres. O conjunto de caracteres do banco de dados é usado para o dicionário de


dados eNVARCHAR2,
exceto todos os tipos de dados de
NCHAR caracteresque usam o conjunto de caracteres nacional. É
e NCLOB,
possível mudar o conjunto de caracteres, a qualquer momento após a criação do banco de dados, mas
teoricamente
este é umperigoso
processo potencialmente
e não aquele em que a embarcar levemente. Muitos DBAs acreditam que a melhor
prática
não usaré o padrão (que é derivado de seu sistema operacional), mas para usar Unicode-
especificamente,
AL32UTF8.
A guia Modo de ligação permite configurar o servidor compartilhado. Este tópico é discutido no
14. Capítulo

DICA Não DBA nunca foi demitido por escolher 8 KB, o valor padrão, como o DB_BLOCK_SIZE
valor. Raramente há qualquer razão para usar qualquer outra coisa. Mas o conjunto de caracteres
padrão podeespecialmente
impróprio, muito bem serse você é sempre susceptível de ter clientes que utilizam outras do que o
americano idiomas
Inglês.

Passo 10: Opções de Criação


Nesta etapa, a caixa de seleção Criar banco de dados vai lançar a criação real. Salvar como um
caixa
bancodedeseleção
dados modelo irá gerar um modelo armazenado baseado no diálogo anterior, o que pode
subsequentemente ser usado muitas vezes (isto é seleccionado no passo 3). Finalmente, a criação de
banco de
Scripts marque
dados aGerar
caixa irá gerar e salvar um conjunto de scripts que podem ser executados
manualmente
base de dados.para criar o

Passo 11: Controlo de pré-requisito


DBCA corre alguns breves “checagens” para confirmar que a criação vai funcionar. Se houver
fracassos, eles realmente devem ser abordadas antes de prosseguir. No entanto, você pode optar por
algum
e prosseguir independentemente.
ignorá-los

TIP verificações de validação O DBCA não são abrangentes. Os erros podem aparecer apenas
durantede
Típico o passo
estes são
13. problemas de memória. Por exemplo, se no passo 9 especificar Automática de
Gestão com um total que é mais do que a memória compartilhada configurada no seu sistema, você
Memória
não vai um erro neste ponto.
receber

Passo 12: Síntese


A janela Resumo mostra o que DBCA pretende fazer. Examine o relatório, e se você ver
qualquer coisa que você não gosta, este é um bom momento para usar o botão Voltar e fazer
alterações.

Passo 13: Progresso Página


A janela Progresso página mostra a criação de scripts (se fossem solicitadas) e depois a
vários estágios de criação de banco de dados. Isso pode demorar 10 minutos, ou pode demorar uma
hora ou mais.
diferença é largamente
o dependente se um modelo foi usado, quais as opções foram selecionados, ea
especificações de hardware.

Exercício 2-1: Criar um banco de dados com DBCA Usando a ferramenta DBCA gráfica, criar
um banco
Repita de dados.tantas vezes quanto possível, eliminar quaisquer bancos de dados criados
o exercício
éanteriormente
curto no RAM primeiro
ou espaço
se você
em disco. É importante se sentir confortável com o processo e
experimentar com as várias opções apresentadas pelo diálogo.
Algumas das respostas vão variar dependendo se a plataforma é o Windows, Linux, ou
algo mais. As variações serão óbvias, e mais comumente têm a ver com a nomeação de diretório
convenções. Aqui estão os passos a seguir:

1. Faça logon no computador do servidor.


Conectar ao servidor como o usuário do sistema operacional que fez a instalação. O padrão
nome da conta é oráculo.
2. Lançamento DBCA.
A partir de um shell de comando, certifique-se que as variáveis de ambiente apropriadas
definidas.um
Segue-se o diálogo típico em um sistema Linux usando o shell bash:

A variável DISPLAY esteja definida para apontar para o endereço do servidor X


(normalmente
Testá-lo executando
o seu PC).
qualquer programa X, como o X-Relógio. Se você estiver executando
no console
talvez em um
ou desktop VNC, isso não será necessário. Em seguida, o valor é definido
ORACLE_BASE
e assume uma instalação Optimal Flexible Architecture (OFA) (binários de propriedade de
oráculo). ORACLE_HOME e PATH continuar o padrão OFA. Usando o qual utilitário
usuário
confirma que dbca está no caminho de pesquisa, então lançá-lo.
No Windows, pode ser possível encontrar um link para DBCA no menu Iniciar e executá-lo
confiando
em variáveis definidas no registro. Alternativamente, você pode controlar tudo manualmente
a partir de um
prompt comando, assim:

3. respondem às solicitações da seguinte forma:

A. Selecione o botão Criar banco de dados de rádio. Clique em Avançar.


B. Selecione o botão de Modo Avançado. Clique em Avançar.
C. Selecione o botão de opção de banco de dados personalizado. Clique em Avançar.
Note-se que, neste ponto, dependendo se o produto infraestrutura de rede já tem
foi instalado no servidor, você pode receber um prompt sobre a Oracle Restart. ignorar
e continuar.
esta
D. especificar o nome de banco de dados global e os valores SID como orcl121. Clique em
Avançar.
E. Selecione a caixa de seleção Configurar Enterprise Manager (EM) Banco de dados
Express. Clique
F. selecione em Avançar.
o botão usar a mesma senha administrativa para todas as contas e
entrar Oracle121 . Clique em Avançar.
G. Select File System na caixa drop-down do tipo de armazenamento, e selecione o botão
de rádio
Locais
Use
dos arquivos banco de dados do modelo. Deixar tudo no padrão. Isso vai
causar DBCA para criar o banco de dados e do Espaço rápida recuperação sob o
ORACLE_BASE. Clique em Avançar.
H. Na guia Componentes de banco de dados, deixe tudo no padrão. Clique no Sample
Esquemas guia e selecione a caixa de seleção esquemas de amostra. Clique em Avançar.
I. configurações de memória aceitável dependerá de seu ambiente, e o padrão pode ou
pode não ser adequado. Esses valores funcionam normalmente, mesmo em sistemas
muitoMemória,
guia baixo-spec.
selecione
No o botão de opção típica, defina o valor do tamanho da memória
(SGA para
PGA) e 640MB, e desmarque a caixa de seleção Gerenciamento de memória Use
Automatic.
No personagem guia Conjuntos, selecione o botão de opção Use Unicode (AL32UTF8).
J. Clique
Marqueem as Avançar.
caixas de seleção para tanto criar banco de dados e gerar Criação de banco de
dados
Scripts. Observe o diretório onde os scripts serão criados. Clique em Avançar.
K. Isso não deve exigir qualquer entrada.
L. Estudo do resumo. Clique em Concluir.
M. Os scripts serão gerados, seguido por uma pequena janela modal dizer onde eles
são (se você não vê esta janela, certifique-se de que não está escondendo debaixo outra
coisa).
Clique em OK.
Como os assistentes de correr, você vai notar que os dois primeiros, que criar a instância
banco de dados, completa em apenas alguns minutos. Os outros, que criam o dicionário
eo
de dados
pontos de vista e os vários componentes, levará muito mais tempo.
Em conclusão, você será presenteado com uma janela de sucesso que mostra o uniforme
Resource Locator (URL) para acessar banco de dados Enterprise Manager Express. Será
assemelham-se o seguinte:
http://db121a.example.com:5500/em
Nota esta URL para uso futuro.
4. Após a instalação, confirme que você pode fazer logon para o banco de dados recém-criado
usando
SQL * Plus.

A partir de um prompt do sistema operacional, definir a sua variável de ambiente


ORACLE_SID
da ao nome
instância de banco de dados, e depois log on e off, como neste exemplo para Windows:

Como alternativa, usar este exemplo para Linux:

5. Repita ad infinitum .
Passar por este exercício tão frequentemente quanto possível, fazendo suas próprias
variações,
com todas até que você
as opções. Naesteja
Etapafeliz
1: Operação de banco de dados, você pode querer selecionar
o Excluir
botão de opção do banco de dados para remover a criação anterior.

Gerar scripts de criação de banco de dados usando o


DBCA
Não há nenhuma razão para não criar um banco de dados de forma interativa com DBCA, mas em
muitas situações
melhor para criaréum banco de dados a partir da linha de comando. Por quê? Talvez por uma das
seguintes razões:
• A máquina servidor pode não ter capacidade gráfica.
• procedimentos de controle de mudanças pode exigir certificados testados.
• Você pode ter que criar uma dúzia de bancos de dados idênticos.
• Você não quer se sentar na frente de uma tela de responder às solicitações.

Seja qual for a razão, é simples de criar um banco de dados manualmente, se você tem os scripts.
A maneira mais fácil de escrever os scripts é deixar DBCA fazer isso por você.

Gerando os Scripts
Para gerar os scripts, lançar DBCA e passar pelo diálogo, tendo tudo o que opções estão
apropriada. Na etapa 10, marque a caixa de seleção apropriada e escolha um diretório. O local
está abaixo ORACLE_BASE. A localização típica de um banco de dados chamado orcl121 no
padrão
Windows
ser como se
seria
segue:

No Linux, o local típico seria o seguinte:

Seja qual for a plataforma, os scripts têm a mesma estrutura: shell script chamado após o banco
(Pordeexemplo,
dados orcl121.sh para Linux, orcl121.bat para Windows) que faz algum sistema operacional
trabalho e, em seguida, lança SQL * Plus para executar um script SQL (chamado oracle121.sql). As
(OS)
unidades
o resto dade script do
criação sqlbanco de dados. Estudar esses scripts e os scripts que chamam é instrutiva.
Os scripts de criação
O ponto de partida é o shell script. Dê uma olhada em um exemplo de Linux:

Isso cria alguns diretórios, usando valores calculados a partir do ORACLE_BASE e


ORACLE_HOME variáveis de ambiente, fornecidos na caixa de diálogo DBCA, ou de padrões com
permissões de acesso adequadas. Em seguida, ele conclui com o apelo à SQL * Plus para iniciar o
script SQL Uma variação no Windows serão chamadas para o utilitário oradim que cria do
orcl121.sql.
sob a qual a instância será executado.
Windows
O script SQL condução irá variar muito, dependendo das opções tomadas no diálogo DBCA.
Aqui está um exemplo:

Os comandos ACCEPT solicitar senhas para os esquemas SYS e sistema. Então o


roteiro invoca um shell do host para executar o utilitário orapwd. Este utilitário cria o arquivo de
senhas
com umexterna
nome que é plataforma específica. No Linux, será
$ ORACLE_HOME / dbs / orapw <DBNAME> (onde <dbname> é o nome do banco de dados), e
no Windows, que será% ORACLE_HOME% \ database \ PWD <DBNAME> .ora.
Após este é um conjunto de chamadas para outros scripts SQL, começando com CreateDB.sql.
A segunda linha conecta-se como utilizador SYS usando a palavra-passe fornecidas. A quinta
banco
linha
de começa
dados, ema nenhum modo de montagem usando um arquivo de parâmetro nomeado init.ora.
Este arquivodefinidos
parâmetros será preenchida
por padrão
comou especificado no diálogo DBCA. O próximo comando (que
continua
final do arquivo)
a cria o banco de dados.

NOTA Lembre-se os modos: O comando nomount significa “construir as estruturas de memória e


os processos.”
começar

Seguindo a linha CREATE DATABASE “orcl121” são algumas configurações para limites (tais
como
MAXDATAFILES = 100, o que significa que esta base de dados será restrita a 100 arquivos de
cláusulas de quatro
dados) e, em seguidaespaços de tabela:

• O espaço de tabela SYSTEM (onde o dicionário de dados vive) estará em um arquivo de


dados chamado com um tamanho de 700 MB.
system01.dbf
• O espaço de tabela SYSAUX (objetos que não estão associados com o dicionário de dados,
mas
intimamente
são relacionada) estará em um arquivo de dados chamado sysaux01.dbf com um
tamanho de 550MB.
• Um espaço de tabela temporário padrão (para espaço temporário de dados necessários por
sessões para, um
esperanças, apenas um breve período) chamado TEMP estará em temp01.dbf tempfile, com
um tamanho
Uma tabela dedeundo
20 MB.
(usado para desfazer segmentos, que são necessários para assegurar
consistência) chamado UNDOTBS1 usará o undotbs01.dbf arquivo de dados, com um
transacional
tamanho de 200 MB.
Em seguida, os conjuntos de caracteres para o banco de dados e língua nacional são
são especificados.
Unicode. A seçãoNo exemplo,
LOGFILEeles especifica que o banco de dados deve ter três arquivo de log on-line
grupos, cada um consistindo de uma imagem (o membro do ficheiro de registo) que é 50MB em
tamanho.
para SYS Finalmente,
e SYSTEM as sãosenhas
definidos.
Este comando de criação de banco de dados leva alguns minutos apenas um par para ser
estruturas
executado.
mínimas
Tudonecessárias
que faz é criar
paraoum banco de dados, o mais importante do dicionário de dados.
De controlo,
para o script SQL
em seguida,
chamando,
retorna
que (no exemplo) lança mais scripts.

• CreateDBFiles.sql cria uma tabela chamada USUÁRIOS, para ser usado como o espaço de
tabelas
armazenar
padrãoobjetos
para permanentes (como tabelas).
• CreateDBCatalog.sql chama um conjunto de scripts para gerar as vistas necessárias para a
dados
dicionário e os vários pacotes PL / SQL fornecidos.
• Vários scripts de (JServer.sql através apex.sql), em seguida, gerar várias opções que foram
selecionadas
no diálogo DBCA.
• postDBCreation.sql corre qualquer coisa necessária imediatamente após a criação, tais como a
aplicação
empacotado manchas e convertendo o pfile para um spfile.
• lockAccount.sql bloqueia todas as contas de pré-configuradas (com algumas exceções) e,
finalmente,
base de dados.
reinicia o

Os scripts gerados e os seus conteúdos variam muito, dependendo do diálogo DBCA. Para
exemplo, se no passo 3 você optou por criar um banco de dados a partir de um modelo, todo o
processo é muito
mais simples maiso banco de dados não precisam ser criados, e a maioria do trabalho é feito
porque
através
os procedimentos
de chamadasdo para
gerente de recuperação RMAN, que por efeito restaurar um banco de dados de
um backup no
modelo.

O arquivo de inicialização de parâmetros


Para iniciar a instância de banco de dados, DBCA deve criar um arquivo de parâmetro de
inicialização.
se Este éa gerado
você selecionar opção para criar um banco de dados ou para gerar scripts. O arquivo é gerado no
mesmo diretório que os outros scripts e é indicado no comando de inicialização no CreateDB.sql
roteiro.

Aqui está o arquivo gerado pelo diálogo a partir Exercício 2-1 (linhas de comentário removido
por brevidade):
Todos estes parâmetros serão abordados em capítulos posteriores. O arquivo tem apenas 16
foraparâmetros
das centenas
especificados
e é o mínimo necessário para obter um funcionamento de banco de dados típico.
Muito mais irão geralmente ser adicionados, subsequentemente, de acordo com os requisitos para o
parâmetros
ambiente,
escala e desempenho.

Exercício 2-2: Gerar scripts de criação de banco de dados usando o DBCA Use DBCA para
vários conjuntos de scripts de criação de banco de dados. Executar como muitas iterações deste
gerar
como você
nome diferente
quer,banco
fornecendo
de dados
umae SID de cada vez e selecionar opções diferentes. Aqui estão os
passos para
Segue:

1. Lançamento DBCA. Responda às solicitações da seguinte forma:


A. Selecione o botão Criar banco de dados de rádio. Clique em Avançar.
B. Selecione o botão de Modo Avançado. Se você selecionar Criar um banco de dados com
Padrão
Configuração, você não receber uma solicitação para gerar scripts. Clique em Avançar.
C. Selecione o botão de uso geral ou Transaction Processing. Clique em Avançar.
D. Especifique o valor gpdb tanto para Global Database Name e SID. Clique em Avançar.
E. desmarcar tudo. Clique em Avançar.
F. Digite as senhas como Oracle121 . Clique em Avançar.
G. Escolher tipo de armazenamento: File System. Deixar tudo no padrão. Clique em
Avançar.
H. Deixar tudo no padrão. Clique em Avançar.
I. Deixar tudo no padrão. Clique em Avançar.
J. desmarque as caixas de verificação Criar banco de dados e salvar como modelo de
banco
marque
de dados.
a caixaSelecione
Gerar scripts
os de criação de banco de dados. Observe o diretório de
destino. Clique
Próximo.
K. No input necessário.

L. Estudo do resumo. Note-se que a instalação de um modelo irá incluir todas as opções
queforam solicitadas no exercício anterior e também terá valores para vários
parâmetros. Clique em Concluir.
M. Os scripts será gerada. Clique em OK e em Fechar.
2. Estude os scripts.
Tentar fazer engenharia reversa do processo de criação. Note-se que o processo é muito mais
simplesum
usando quando
molde. Compare os scripts gerados por este exercício com aqueles gerados pela
exercício anterior.
3. Repita.
E repita mais uma vez, com variações. É vital para se familiarizar com o diálogo DBCA e
com os scripts que ele gera.

Gerenciar banco de dados Modelos de usando DBCA


Um modelo é uma definição armazenados de um banco de dados. Esta definição pode ser
posteriormente
número de bancos
usado
de dados,
para criar
e é qualquer
portável entre plataformas. Modelos vêm em uma das duas formas:

• Estrutura única Um modelo somente-estrutura contém a informação estrutural (base de


dados
as opções selecionadas, detalhes de armazenamento, parâmetros de inicialização), mas não
inclui o real
arquivos de dados. Quando este modelo é usado, o banco de dados será criado a partir do
nada. Não
possível para
é todos os dados definidos pelo utilizador para ser incluído.
• Estrutura e dados Um modelo de estrutura-e-de dados também inclui os arquivos de dados.
Bases
criado
de adados
partir desse modelo será idêntico ao banco de dados a partir do qual o modelo foi
gerado, a partir do tempo de geração.
Os modelos são gerenciados por meio DBCA. Se na etapa 1 da caixa de diálogo DBCA você
botão
escolher
Gerenciar
o rádio
Modelos, você será perguntado se deseja excluir um modelo ou criar um do
uma das três fontes:

• Um modelo já existente
• Um banco de dados existente, estrutura única
• Um banco de dados existente, a estrutura e os dados

O modelo ou banco de dados já deve existir na máquina a partir da qual DBCA está em
que execução. Nota
a criação do modelo a partir de um banco de dados rodando exigirá uma reinicialização do
banco deinclui
modelo dadosarquivos
de origem
de dados,
se o mas não se é apenas a estrutura.
O diálogo DBCA é perfeitamente simples. Você será solicitado para a fonte e tipo do
modelo e, se ele inclui arquivos de dados, para a localização do arquivo que irá armazenar o
base de dados. Uma vez que o modelo foi criado, ele será visível como uma fonte para um novo
comprimido
banco
3 do diálogo
de dados
DBCA.
no passo
O armazenamento subjacente para um modelo é de arquivos no
ORACLE_HOME / assistentes / dbca / diretório de modelos. Copiar esses arquivos para outro Lar
do Oracle

vai tornar o modelo disponível lá.

Exercício 2-3: Gerenciar Modelos banco de dados usando DBCA Use DBCA para criar uma
modelo do banco de dados criado no primeiro exercício deste capítulo. Estes são os passos a seguir:

1. Lançamento DBCA. Responda às solicitações da seguinte forma:


A. Selecione o botão Gerenciar Modelos. Clique em Avançar.
B. Selecione os botões de opção Criar um modelo de banco de dados e de um banco de
dados
(Estrutura, bem como de dados). Clique em Avançar.
C. Select orcl121 da Instância caixa drop-down banco de dados. Clique em Avançar.
D. Dê o modelo um nome e descrição. Note que o nome é usado para o nome do
arquivo de dados modelo no ORACLE_HOME / assistentes / dbca / templates. Clique
em Avançar.
E. Selecione o botão de opção para converter os locais de arquivo para usar a estrutura
OFA.
geralmente
Isto é a melhor opção, porque torna mais simples para usar o modelo em outra
máquina
com um sistema de arquivos diferente. Clique em Avançar.
F. Observe as informações de resumo. Clique em Concluir.
G. O modelo será criado, reiniciar o banco de dados de origem se ele está em execução. Isto
é necessário para a cópia dos arquivos de dados para ser consistente; a cópia é feita com o
banco de dados no modo de montagem. Clique em OK e em Fechar.
2. Use o modelo.
Use o modelo (se você quiser) para criar um banco de dados. Lançar DBCA e responder à
solicita como se segue:
A. Selecione o botão Criar banco de dados. Clique em Avançar.
B. Selecione o botão de Modo Avançado. Clique em Avançar.
C. A lista de modelos apresentados incluem o modelo recém-criado. Note que ele faz
incluir arquivos de dados. Selecione seu botão de rádio, e clique no botão Exibir
detalhes.
gerar o equivalente
Isso vai a um resumo das informações anteriormente apresentado quando a
banco de dados foi criado. Estudar isso e, em seguida, fechar a janela.
fonte
3. Sair DBCA. Clique no botão Cancelar e confirme para sair.

Configurar opções de banco de dados usando DBCA


O tópico final sobre a criação de banco de dados está modificando bancos de dados posteriores à
criação. Oé conceito
pendurar que uma de
opção de banco de dados, em geral, é uma combinação de código executável no
Oracle Home e objetos necessários (como tabelas e procedimentos PL / SQL) no banco de dados. o
instalação do software terá instalado o código executável. Mas para qualquer um banco de dados de
correr que
Casa, as opções serão ativadas somente se os objetos foram criados. O banco de dados DBCA
criação solicita que opções para instalar, que determina os scripts chamados pela condução
script de criação de banco de dados. Vai agora ser evidente porque quando se utiliza um modelo com
arquivos controlar
possível de dados as
nãoopções:
é ou vai ou não vai ter existido no banco de dados a partir do qual

o modelo foi gerado.


Usando DBCA para configurar as opções faz com que DBCA para gerar chamadas para scripts
opções
que no
irábanco
instalar
de dados. Não é possível desinstalar opções através DBCA. Para ver o instalado
opções, fazer logon no banco de dados e consultar a exibição DBA_REGISTRY. Este é um exemplo:

Exercício 2-4: Configurar opções de banco de dados usando DBCA Neste exercício, você vai
usar DBCA
adicionar uma
para
opção que não foi selecionado para a criação banco de dados original. Aqui estão os
passos a seguir:
1. Confirme a lista de opções instaladas.
A partir de um prompt do sistema operacional, fazer logon no banco de dados e executar
esta consulta:
2. Lançamento DBCA. Responda às solicitações da seguinte forma:
A. Selecione o botão Configurar opções de banco de dados. Clique em Avançar.
B. Selecione o botão de opção para o banco de dados orcl21. Clique em Avançar.
C. DBCA apresenta a lista de componentes de dados em tempo de criação com os
anteriormente
selecionado cinza e qualquer restante disponível para seleção. Note que não é possível
para adicionar os esquemas de amostragem com este método.
Selecione a caixa de seleção Oracle Label Security. Clique em Avançar.
D. Desmarque a caixa de seleção do Oracle Database Vault. Clique em Avançar.
E. Deixar tudo no padrão. Clique em Avançar.
F. O resumo irá mostrar o que está a ser instalado. Clique em Concluir.
G. A opção irá instalar. Clique em OK e em Fechar.
3. Confirme a instalação.
Execute novamente a consulta contra DBA_REGISTRY e observe que a Segurança etiqueta
é agora um instalado
componente.

Broca Two-Minute
Criar um banco de dados usando o banco de dados Assistente de Configuração
• DBCA é escrito em Java e requer uma exibição gráfica.

• A caixa de diálogo solicita todas as informações necessárias para criar uma instância e um
banco de dados.da criação, o banco de dados está pronto para uso.
• Na conclusão

Gerar scripts de criação de banco de dados usando o DBCA


• A geração inclui um script shell que chama um conjunto de scripts SQL.
• Também gerados são um arquivo de parâmetro e um arquivo de senha.
• Os scripts podem, opcionalmente, ser editado e, em seguida, executar manualmente.

Gerenciar banco de dados Modelos de usando DBCA


• Um modelo é uma definição de banco de dados salvos de que mais bancos de dados podem
ser
• Oscriados.
modelos incluem informação estrutural e, opcionalmente, arquivos de dados.
• Um modelo só de estrutura não pode incluir referências a objetos de usuário.
• Um modelo de estrutura-e-dados permite apenas alterações mínimas no momento da criação.

Configurar opções de banco de dados usando DBCA


• Opções são instalados por execução de scripts contra um banco de dados existente.
• Não é possível desinstalar opções através DBCA.

Auto teste
1 . Qual destas operações pode ser realizado com DBCA? (Escolha todos os que se aplicam.)
A. Criar um banco de dados
B. Remover um banco de dados
C. Melhora a uma base de dados
D. Adicionar opções de banco de dados
E. Remova opções de banco de dados
2 . Para criar um banco de dados, em que modo deve a instância ser? (Escolha a melhor
resposta.)
A. Não iniciado
B. iniciado no modo NOMOUNT
C. iniciado no modo MOUNT
D. Iniciado no modo ABERTO
3 . Várias ações são necessárias para criar um banco de dados. Coloque estes na ordem correta:
1. Criar as views de dicionário de dados.
2. Crie o arquivo de parâmetro.
3. Crie o arquivo de senha.

4. Emita o comando CREATE DATABASE.


5. Emita o comando de inicialização.
(Escolha a melhor resposta.)
A. 2, 3, 5, 4, 1
B. 3, 5, 2, 4, 1
C. 5, 3, 4, 2, 1
D. 2, 3, 1, 4, 5
4 . O parâmetro de instância não pode ser alterado após a criação do banco de dados? (Escolha
o melhor
responda.)
A. Todos os parâmetros de instância pode ser alterado após a criação do banco de dados.
B. Todos os parâmetros de instância pode ser alterado após a criação do banco de dados, se
for exemplo
feito enquanto
é no modo
o de montagem.
C. CONTROL_FILES.
D. DB_BLOCK_SIZE.
5 . Quais arquivos são criados pelo comando CREATE DATABASE? (Escolha todos os que se
aplicam.)
A. O controlfile
B. O arquivo de parâmetro de servidor
C. Os arquivos de log de redo on-line
D. O arquivo de senhas
E. O arquivo de parâmetro de inicialização estática
F. O ficheiro de dados de tabela SYSAUX
G. O sistema de arquivo de dados de tabela
6 . O que vai acontecer se você não executar os scripts catalog.sql e catproc.sql depois de criar
umbase de dados? (Escolha a melhor resposta.)
A. Não será possível abrir o banco de dados.
B. Não será possível criar quaisquer tabelas de usuário.
C. Não será possível usar PL / SQL.
D. Não será possível consultar as views de dicionário de dados.
E. Não será possível conectar como qualquer usuário que não seja SYS.
7 . Que ferramentas podem ser usadas para gerenciar modelos? (Escolha a melhor resposta.)
A. O banco de dados Assistente de Configuração
B. O Database Upgrade Assistant
C. SQL * Plus

D. Dados Expresso
E. A Oracle Universal Installer
8 . Em que ponto você não pode escolher ou alterar o conjunto de caracteres de banco de
dados?
responda.)
(Escolha o melhor
A. No momento da criação do banco de dados, se você estiver usando um modelo DBCA
B. No momento da criação do banco de dados, se você estiver usando um modelo DBCA
que inclui
C. no arquivos
momento de dados
da criação do banco de dados, se você não estiver usando um modelo
DBCA
D. Após a criação do banco de dados, usando DBCA para instalar opções
9 . Se houver vários bancos de dados criados fora da mesma Oracle Home, como será base de
dados
ser Expresso
configurado? (Escolha a melhor resposta.)
A. banco de dados Express irá dar acesso a todos os bancos de dados criados a partir da uma
da Oracle
Casa através de um URL.
B. Banco de Dados Express irá dar acesso a cada banco de dados através de portas
diferentes.
C base de dados expresso deve ser configurado em apenas uma base de dados e pode, então,
ser conectar-se
usadas para a todos eles.
D. banco de dados Express pode gerir apenas um banco de dados por Oracle Home.
10 . O espaço de tabela SYSAUX é obrigatória. O que vai acontecer se você tentar emitir um
CRIARcomando DATABASE que não especifica um arquivo de dados para o espaço de tabela
aSYSAUX? (Escolher
melhor resposta.)
A. O comando falhará.
B. O comando terá êxito, mas o banco de dados não funcionará até que o SYSAUX
tablespace é criado.
C. Um SYSAUX tabela e arquivo de dados padrão será criado.
D. objetos O SYSAUX será criado no espaço de tabela SYSTEM.
11 . Quais arquivos são gerados quando você escolher a opção Gerar scripts de criação de banco
de dados
o banco
em de dados Assistente de Configuração? (Escolha todos os que se aplicam.)
A. A shell script
B. SQL scripts
C. Um arquivo de parâmetro
D. arquivo de senhas A
E. Um arquivo de resposta

Respostas de auto-teste
1. A , B , e D . DBCA pode criar e remover bancos de dados e também opções de
basesinstalação
de dados em
existentes.

C e E estão incorrectos. A atualização do banco de dados exigiria a atualização de


Assistant
banco(DBUA),
de dados não DBCA. remoção de opções não pode ser feito através de qualquer
assistente. É um
processo manual.
2. B . O exemplo deve ser executado antes de criar um banco de dados.
A , C , e D estão incorrectos. A instância deve ser iniciada, mas não pode ser montado
(Porque não existe controlfile) ou aberto (porque não existem arquivos de dados).
3. Um . Esta é a sequência correcta (embora 2 e 3 pode ser feito o contrário).
B , C , e D estão incorrectos. Estas sequências não são possíveis.
4. D . Este é o único parâmetro que não pode ser alterado após a criação.
A , B , e C são incorrectas. A e B estão incorretas porque DB_BLOCK_SIZE não pode
ser não importa quando você tentar fazê-lo. C é incorrecta porque os
mudou,
parâmetro pode certamente ser alterado, embora isso exigirá um desligamento e reiniciar.
CONTROL_FILES
5. A , C , F , e G . Todos estes sempre serão criados, por padrão, se eles não são
especificados.
B , D , e E são incorrectas. B e D são incorrecta porque estes devem existir antes do
instância é iniciada. E é incorreto porque a conversão do parâmetro estático arquivo para um
arquivo de parâmetro dinâmico ocorre, opcionalmente, apenas após o banco de dados é
6. criado.
D . O banco de dados irá funcionar, mas sem as visões de dicionário de dados e PL /
SQLcriados por esses scripts, será inutilizável.
pacotes
A , B , C , e E são incorrectas. A está incorreta porque o banco de dados será aberta; na
deveverdade,
ser aberto para executar os scripts. B está incorreta porque as tabelas e outros objetos
pode
ser certamente
criado. C está incorreta porque PL / SQL estará disponível; é os pacotes fornecidos que
vai estar ausente. E é incorreta porque embora os scripts precisam ser executado por SYS,
você podecomo outros usuários.
conectar
7. Um . DBCA é a única ferramenta que pode gerenciar modelos.
B , C , D , e E são incorrectas. Estes são todos incorreta porque só DBCA oferece
gestão.
template
8. D . Não é possível alterar conjuntos de caracteres após a criação do banco de dados com
conjuntos
DBCA. de caracteres não são instalados como opções.
A , B , e C são incorrectas. A e B estão incorretas porque os modelos não são
relevantes.
O modelo incluiEarquivos
se de dados, DBCA vai mudar o conjunto de caracteres nos
bastidores.porque
incorreto C é a criação sem um modelo dá-lhe o controle completo, incluindo o seu
escolha do conjunto de caracteres.
9. B . Banco de dados Express pode ser usado para cada banco de dados e será
portaconfigurado
diferente para
comcada
um um.
A , C , e D estão incorrectos. A está incorreta porque isso exigiria Cloud Control. C é
incorreto porque banco de dados Express deve ser instalado em cada banco de dados que vai
usá-lo. D épois embora uma instância de banco de dados Express é apenas um banco de
incorreto,
dados, de
banco cada
dados pode ter o seu próprio.
10. C . Há padrões para tudo, incluindo o espaço de tabela SYSAUX e arquivo de dados
definições.
A , B , e D são incorrectas. A está incorreta porque o comando terá sucesso. B e D

estão incorretas porque estes não são a maneira que os padrões funcionam.
11. A , B , C , e D . Um shell script é gerado que chama um conjunto de scripts SQL. Há
sim registrar uma senha para permitir conexões SYSDBA e um arquivo de parâmetro
também
paraEiniciar a instância.
é incorreto, pois os arquivos de resposta são gerados pelo Oracle Universal Installer,
pelonão
Assistente de Configuração.
CAPÍTULO 3

Instalando o Oracle Grid Infrastructure


para um autônomo
Servidor

Objetivos do exame
Neste capítulo, você vai aprender a
• 62.2.4.1 Configurar armazenamento para Oracle Automatic Storage Management (ASM)
• 62.2.2.2 Instale Oracle Grid Infrastructure para um servidor autônomo
Este capítulo descreve a instalação da rede de Infra-estrutura (GI). GI é um produto instalado
que fornece clustering, rede, armazenamento e serviços de alta disponibilidade para bancos de dados
separadamente
éOracle.
necessário
isto para Clusters (RAC) bases de dados de aplicação real e também pode ser usado com
uma única
bancos instância
de dados. Em um ambiente de instância única, GI é normalmente usado para fornecer
Automatic Storage
Management (ASM) dispositivos para armazenar arquivos de banco de dados (como descrito neste
capítulo)
uma capacidade
e para fornecer
de religamento automático em caso de falhas (como descrito no Capítulo 4 ). O
tratamento
na Oracle Certified
de GI Associate (OCA) programa é limitado a usar a capacidade de reinicialização em
um único exemplo, embora os conceitos de ASM pode também ser examinado.
ambiente

Configurar armazenamento para Automatic Storage da


Oracle
Gestão
Grade infra-estrutura inclui a capacidade ASM para gerenciar o armazenamento a ser utilizado para
banco de dados
arquivos. Em versões
Oracleanteriores (até liberar 11.1. X ), ASM foi enviado como parte do software de
banco de dados,
mas a partir de 11,2. x em diante, é parte do GI. GI é um conjunto de processos que são executados
como parte
sistema: no da
Windows,
operaçãoserviços que são executados com privilégios de administrador; no Linux,
daemons que
privilégios defuncionam
root. Os processos
com GI iniciar uma instância ASM. De certa forma, uma instância ASM
aseinstância
assemelhade sistema de gestão de base de dados relacional (RDBMS) com a qual todos os banco de
dados
administradores (DBAs) são familiares, mas o seu objectivo é muito diferente: ele gerencia
dispositivos que são
disponibilizados às instâncias RDBMS para armazenamento de arquivos. Estes dispositivos devem
ser configuradoantes
administrador pelodesistema
instalar GI.

GI Arquitetura
GI consiste de um conjunto de processos, todos os quais estão protegidos contra falha. O processo é
o núcleo
Alta Disponibilidade Serviços daemon, o OHASD. Esta é protegido pelo sistema operacional. Se ele
o sistema operacional (OS) vai reiniciá-lo. O OHASD então começa e monitora um conjunto de
falhar,
processos, que por sua vez irá iniciar e monitorar recursos utilizados por instâncias de banco de
outras
dados.
são ASM estes
e banco
recursos
de dados ouvintes.

DICA Você pode executar ouvintes de banco de dados a partir de uma casa de banco de dados ou de
um lar GI.
prática paraEle
executar
é considerado
apenas um
o melhor
ouvinte (da casa GI se GI foi instalado).

GI mantém um registro de recursos que são executados sob seu controle. Esses recursos podem
incluir
todos um ou
os seguintes:

• ouvintes de banco de dados


• Virtual Internet Protocol (IP)
• Uma instância ASM (apenas uma)
• grupos de discos ASM
• instâncias de banco de dados
• Os produtos de terceiros

O registro existe em um arquivo chamado Oracle Registro Local (ROL). A localização do ROL é
especificado por um ponteiro de plataforma específica. No Linux, o ponteiro é o /etc/oracle/olr.loc
arquivo.
Janelas, éEm
a chave de registro HKEY_LOCAL_MACHINE / SOFTWARE / Oracle / ROL /
olrconfig_loc.
Os recursos são registrados no OLR usando o utilitário crsctl. Estes registos incluem detalhes de
como iniciar e parar os recursos, as contas de exploração sob o qual deve ser executado e o que
fazer se eles falham. Os daemons GI fazer uso desta informação para gerir os recursos.
A utilidade crsctl também é usada para iniciar e parar os processos de IG, incluindo o OHASD, e
administrar
a recursos registrados. Uma ferramenta de administração alternativa é a utilidade srvctl.
srvctlos
gerir pode
recursos do Oracle, e não quaisquer produtos de terceiros que podem ter sido registrados e
sob controlo GI. Em geral, é muito mais fácil usar sintaticamente (e é menos propenso a erros) do
colocados
que o utilidade.
crsctl

EXAME TIP processos GI e quaisquer recursos pode ser administrado com o utilitário crsctl. o
utilitário pode gerenciar apenas os recursos do Oracle; que não possa gerir GI ou de terceiros
srvctl
recursos.
ASM Arquitetura
ASM é um gerenciador de volume lógico (LVM) que pode ser usado para configurar listrada e
volumes
para armazenar
espelhados
arquivos de banco de dados Oracle. Estes volumes são conhecidos como grupos de
discos . Grupos
formatado com um
de discos
sistemanão
desão
arquivos que é visível para o sistema operacional; eles podem ser
usados somente
arquivos de banco
para
de Oracle
dados, e estes arquivos podem ser gerenciados apenas com produtos e
utilitários Oracle. a relação entre um arquivo ASM e um arquivo de banco de dados Oracle, estudar a
Para entender
diagrama
entity-relação apresentada na Figura 3-1 .
Figura 3-1 modelo de armazenamento A ASM

arquivos ASM residir em um grupo de discos, que consiste em um ou mais discos ASM. Os
discos ASM
formatado são
em unidades de atribuição (AUS). UA são agrupados em extensões de arquivo e um
arquivo
mais extensões
consistedeemarquivo.
um ou Há, com efeito, um relacionamento muitos-para-muitos entre arquivos
ASMarquivo
Um e discos
pode
ASM.ser espalhado por diversos discos e um disco pode conter partes de muitos
arquivos. Tãorelacionais,
engenheiros bom não permitimos muitos-para-muitos relacionamentos; este é resolvido de
duas entidade
pela maneiras:de grupo disco e pela extensão de arquivo e via UA. Qualquer medida um arquivo
consiste
UA consecutivos
em em um disco ASM. Um arquivo ASM é definido por seu mapa medida , ou seja, a
lista de para os locais físicos de suas extensões de arquivo.
ponteiros
ASM é gerido pela instância ASM. A instância ASM consiste em componentes de memória e
os processos de fundo; é uma estrutura leve que gerencia o ambiente ASM. Ele rastreia o
mapas medida em que definem os locais de arquivos, adicionar ou remover extensões de arquivos
para ou a partir
demandas de arquivos
da instância RDBMSde acordo com o arquivo.
utilizando
A instância ASM tem uma área global do sistema (SGA), e aceita sessões da mesma forma que
uma instância RDBMS faz, mas nunca é de qualquer modo diferente de nomount. Uma instância
ASM não
monta um controlfile; ele tem nenhum dicionário de dados. Portanto, a única maneira de logon é
usando operacional
sistema de autenticação ou a autenticação de arquivo de senha.
O bootstrap ASM faz o seguinte:

1. O sistema operacional inicia os processos GI.

2. GI inicia a instância ASM.


3. O exemplo ASM localiza os dispositivos de disco ASM.
4. A instância ASM monta os grupos de discos e registra-los com GI.
5. A instância RDBMS começa.
6. instância O RDBMS precisa de um arquivo que está em um grupo de discos ASM.
7. O RDBMS solicita o endereço instância ASM de GI.
8. A instância RDBMS inicia sessão para a instância ASM e solicita acesso ao arquivo ASM.
9. A instância ASM retorna mapa extensão do arquivo.
10. instância O RDBMS abre o arquivo.

Em resumo, ao abrir um arquivo ASM, GI facilita a conexão entre os RDBMS e


instâncias ASM, e, em seguida, o exemplo ASM facilita a ligação entre o exemplo RDBMS
eo arquivo.

EXAME TIP Nenhum dado sempre passa por uma instância ASM. Todos os I / O é entre o exemplo
RDBMS
eo arquivo. O exemplo ASM é apenas uma estrutura de controlo.

Um grupo de discos ASM pode armazenar apenas arquivos de banco de dados, mas é uma
incudes
definição
esses ampla
tipos de
dearquivos:
arquivos de banco de dados e
• Controlfiles
• Arquivos de dados
• tempfiles
• arquivos de log on-line
• arquivos de log Arquivo
• arquivo de parâmetro Server, o spfile
• Arquivo de senha
• RMAN backups
• arquivos de despejo Data Pump

Esses tipos de arquivo não pode ser armazenado em um grupo de discos ASM:

• O Início da Oracle
• arquivos de rastreamento ou o log de alerta
• arquivo de inicialização pfile A

• backups gerenciados pelos usuários

Discos ASM
O termo disco ASM é um pouco enganador, porque os dispositivos não são realmente discos. A
seguir,
as possibilidades:
são

• partições de armazenamento directamente ligados dispositivos (DAS)


• Dispositivos de rede de área de armazenamento (SAN)
• Network-attached storage (NAS) devices

dispositivos DAS são discos fisicamente conectadas ao servidor. Tipicamente, isto significa
algumadiscos
variação
SCSI ou do mesmo. Em versões anteriores, era possível dar todo o disco, prima para ASM
como um disco ASM. Este foi raramente aconselhável e não é mais possível. agora é necessário que
usar
os discos
uma tabela de partição, mesmo que este define apenas uma partição que cobre todo o disco. A
partição
em seguida,
é apresentado ao ASM.
dispositivos SAN vai geralmente ser listrado (e possivelmente espelhados) Os volumes de gestão
e conectado
por uma ao
matriz
servidor
de armazenamento
através de um canal de fibra óptica. Eles serão apresentados ao ASM como
unidade lógica
números (LUN). Não há limite prático para o tamanho que estes volumes podem ser. striping do
volumes com qualquer algoritmo RAID é considerado adequado irá melhorar o desempenho.
Mirroring pode ser habilitado no nível SAN ou geridas pela ASM.
dispositivos NAS será tipicamente volumes iSCSI ou arquivos NFS. Um dispositivo iSCSI é
exportada
da rede por umapara o
máquina de destino iSCSI e montado no servidor de banco de dados por um
iniciador existirá
arquivos iSCSI. NFS
como grandes arquivos de zero preenchidos em um volume NFS exportado a partir
de umservidor
pelo servidordeNFS
banco
e montadas
de dados. O armazenamento subjacente para dispositivos NAS pode, é claro,
asercamada
um dispositivo
NAS irá esconder
RAID; este de ASM. A conexão de rede local entre o banco de dados
servidor e servidor de armazenamento deve ser de alta velocidade e dedicada a esta função.
multipathing éacrescentar largura de banda e capacidade de resistência contra falhas de rede.
aconselhável
DAS, dispositivos SAN ou iSCSI (que não devem ser formatados com qualquer sistema de
por arquivos)
seus drivers
sãodeidentificados
dispositivo. arquivos NFS são identificados pelo seu nome de arquivo totalmente
qualificado.
instância ASMDe precisa
qualquerdeterminar
maneira, oquais os dispositivos que ele deve usar. Um exemplo ASM é
controlado
arquivo de parâmetro,
por um da mesma forma como uma instância RDBMS. Um parâmetro crítico é
ASM_DISKSTRING. Esta é uma lista separada por vírgulas de valores (o que pode incluir
caracteres universais
caracteres) que identificam os discos ASM. A forma de nomear os dispositivos, e, por conseguinte,
para osno
incluir valores
ASM_DISKSTRING, é plataforma específica. Estes são os valores padrão para alguns
sistemas operacionais populares:
É importante notar que o valor padrão pode encontrar discos que não são destinados ao uso do
esteASM. E seé imperativo para definir o parâmetro de tal forma que ele vai encontrar apenas
é o caso,
dispositivos apropriados.
Criando discos ASM
criação do disco será feito pelo administrador do sistema. Subsequentemente, cada dispositivo de
disco será
acedido através de um controlador de dispositivo. Os drivers de dispositivo são criados pelo sistema
operacional
Durante a inicialização,
como ele inicia.
o sistema operacional verifica os vários autocarros de I / O e cria um driver
de dispositivo
dispositivo quepara cada Uma vez que este é um processo dinâmico, é possível que um qualquer
encontra.
dispositivo
para um driver
podedeser
dispositivo
atribuído diferente em cada boot. Além disso, após a criação, os drivers de
dispositivo
raiz de propriedade.
será
Para fazer com que os dispositivos utilizados por ASM, é necessário que os nomes se persistente
reiniciado
no sistema
e que os controladores de ser legível e gravável pelos processos Oracle. No Linux,
três técnicas para isso.
existem

• A biblioteca do kernel ASMLib Esta biblioteca está disponível para algumas distribuições
Linux,
dependendo da sua licença de Linux.
• O driver ASM Filtro Esta facilidade é fornecida a partir liberação 12.1.0.2 e pode substituir o
ASMLib. Ele adiciona funcionalidade que irá impedir que qualquer processo não-Oracle a
partir escrito
discos ASM. ao
• A instalação udev Esta instalação executa scripts escritos pelo administrador do sistema que
identificam
dispositivos e definir o dono e permissões apropriadas.

Para configurar dispositivos no Windows, a Oracle fornece o utilitário asmtool.exe. outros


sistemas
operacional
terão suas próprias técnicas específicas da plataforma para o gerenciamento de propriedade
de dispositivo e nome
persistência.
Se você estiver usando arquivos NFS como discos ASM, criá-los com comandos como estes, que
um criam
arquivo de 1 TB e dar acesso ao proprietário Oracle:

Os detalhes da criação de discos ASM estão fora do escopo do exame OCA, e há


muitas variações de plataforma.

Instalar Oracle Grid Infrastructure para um Stand-


Alone
Servidor
GI é instalado em um Oracle Home dedicado. O lançamento de GI deve ser maior ou igual ao
liberação de qualquer banco de dados que pretende utilizar os serviços GI. É, por exemplo, possível
para uma 12.1.
instalação para xatender
GI um 11.2. x banco de dados, mas não o contrário. GI deve ser sempre
sobre os mesmos nós que as instâncias de banco de dados. É, no entanto, possível em um ambiente
correndo
de cluster para
configurar Flex ASM, onde apenas um pequeno número de nós (por padrão, três) casos prazo ASM.
A mídia de instalação GI incluem uma cópia do Oracle Universal Installer (OUI). Executar este
(a
executável é o shell script runInstaller.sh em Unix e é o arquivo setup.exe no Windows) e siga
as instruções. Estes são os principais escolhas:

• Baixar atualizações de software Escolha se deseja registrar a instalação com My Oracle


Apoio para facilitar o download de patches e atualizações.
• Selecione a Opção de Instalação Que tipo caixa de diálogo deve a OUI presente de? As
opções
do seguinte
são modo:
• Instalar e configurar Oracle Grid Infrastructure para um cluster
• Instalar e configurar Oracle Grid Infrastructure para um servidor independente
• Melhora a Oracle Grid Infrastructure ou Automatic Storage Management da Oracle
• Instalar Oracle Grid Só Software de Infra-estrutura
• Criar ASM Disk Grupo Set o caminho descoberta ASM_DISKSTRING e escolher discos
para
ser utilizado para um grupo de discos.

A Figura 2/3 mostra a janela que solicita para a criação de um grupo de discos. Esta janela é
caixa
parte
de diálogo
do apresentadas pelas opções de instalação instalar e configurar.

Figura 3-2 Criando um grupo de discos ASM durante GI instalar

Na figura, observe que, por padrão redundância é configurado para Normal, o que significa que a
casomenos que especificado
contrário, cada extensão de todos os arquivos criados neste grupo de discos será espelhado. Isto
significa
grupo deve
quesero composto de pelo menos dois discos porque não haveria sentido em criar uma cópia
do mesmo
no espelho dispositivo como a cópia primária, e ASM não vai permitir isso. Os outros botões de
rádio osão
Alta, que significa que três cópias irá ser feita de cada medida (e, pelo menos, três discos são
necessários),
e externos, o que significa que ASM não irá espelhar em tudo, mas sim contar com a tolerância a
falhas
o meiofornecido
de armazenamento.
pelo
A unidade de alocação de tamanho padrão para 1MB. Isto tem um efeito knock-on do tamanho
primeiros
do arquivo
20.000 extensão.
extensões
o de qualquer arquivo são um UA, os próximos 20.000 extensões são
quatro
são 16 UA,
Aus. etamanho
além de UAque pode
eles ser definido como 1, 2, 4, 8, 16, 32, ou 64 MB. Ela se aplica a todos
eosnunca
arquivos
podenosergrupo
alterado
de discos
após a criação do grupo de discos.

DICA As opiniões estão tendendo para 4MB sendo o tamanho AU ideal para grandes sistemas e é
recomendada pela Oracle para instalações Exadata. Mas, no contexto da ASM, “grande” significa
“Realmente muito grande.” Na verdade, 1MB será bom para a maioria das instalações.

Na Figura 3-2 , sem discos são mostrados. Isso ocorre porque o caminho de pesquisa padrão não
nenhuma
detectou
seqüência
qualquerdoedisco ainda não foi definido. Clicando no botão Path Mudança Descoberta irá
pedir para odos discos ASM preparados, que irá então (se configurada corretamente) ser listados
localização
comooscandidatos
para membros do grupo de discos.
Se você estiver usando OUI para realizar uma atualização, a OUI detectará a instalação existente
transferir
e sua configuração para a casa GI recém-instalado. Não é possível ter duas instâncias do GI
rodando em uma máquina ao mesmo tempo, e os assistentes de instalação vai cuidar de desativar a
versão anterior.
É considerada a melhor prática para instalar GI sob um usuário do sistema operacional diferente
software
do quedeobanco de dados. Isto é para permitir a separação de tarefas: um usuário OS pode
gerenciarde
recursos o armazenamento
alta disponibilidade,
de GItornando-os
e disponíveis para vários DBAs que cada um tem o seu
próprioEm
conta. sistema
um pequeno
operacional
site, onde o administrador GI eo DBA são a mesma pessoa, não há nenhuma
necessidade de seguir esta regra. No entanto, o sistema operacional será sempre separar estes papéis
através da utilização de grupos de sistema operativo. O administrador GI deve ser um membro do
grupo. O nome deste grupo é codificado em Windows como ORA_ASMDBA, eo grupo é
OSASM
criado implicitamente. No Unix, o grupo pode ter qualquer nome e deve ser criado antes de executar
OUI.
Exercício 3-1: Instalar grade Infra-estrutura Neste exercício, você irá instalar o software GI e
configurá-lo para uso. Supõe-se que o software foi baixado e descompactado. A rotina é
ligeiramente diferente no Windows e Linux.

1. Siga estes passos no Windows:


A. Inicie a caixa de diálogo OUI executando o arquivo setup.exe. Você vai precisar de fazer
issoprompt
a partirde
decomando
um começou com o privilégio Executar como administrador.
B. Na janela Download Software Updates, selecione o rádio Ignorar Software Updates

botão. Clique em Avançar.


C. Na janela Selecionar Opção de instalação, selecione Instalar Rede Software de Infra-
estrutura
Apenas botão de rádio. Clique em Avançar.
D. No Selecione Instalar janela Tipo, selecione a instalação de infra-estrutura Oracle Grid
paraStandalone
um botão Server. Clique em Avançar.
E. Na janela Selecionar Produto Idiomas, escolha quaisquer idiomas que deseja. Clique em
Avançar.
F. No Local de instalação Especifique, ajustar o diretório se você quer (o padrão é
geralmente muito bem). Clique em Avançar.
G. Na janela Verifica a Realizar Pré-requisito, qualquer “falhou” verificações devem ser
endereçadas
e uma decisão sobre se é provável que importa no seu caso. Avisos (para
exemplo, em relação às questões de segurança do Windows) geralmente pode ser
ignorado.
Todos caixa
Verifique
e cliqueaem
Ignorar
Avançar.
H. Na janela Resumo, clique em Instalar.
I. Após a conclusão da instalação, a janela Finish, mostrado a seguir, irá pedir-lhe para
executar
comando
o do sistema operacional necessário configurar GI para um servidor autônomo:
Na ilustração, o comando, que deve ser executado como administrador, é uma longa

comando sem quebras de linha (copy / paste será útil).

Depois de executar o comando, clique em Fechar para sair do instalador.


2. Siga estes passos no Linux:
A. Inicie a caixa de diálogo OUI em uma sessão gráfica, executando o script shell
runInstaller.
Isso não pode ser feito como o usuário root. Usando a mesma conta que foi usada para
instalação de software vai ficar bem (embora para um local de produção, que
Oracle
normalmente
separate OS user
seriatocriar
install
umGI).
B. Na janela Download Software Updates, selecione o rádio Ignorar Software Updates
botão. Clique em Avançar.
C. Na janela Selecionar Opção de instalação, selecione Instalar Rede Software de Infra-
estrutura
Apenas botão de rádio. Clique em Avançar.
D. Na janela Selecionar Produto Idiomas, escolha quaisquer idiomas que deseja. Clique em
Avançar.
E. Na janela privilegiada Operating System Groups, se você estiver executando o instalador
como
mesmo
o usuário que instalou o software Oracle, selecione o dba grupo para todos os três
(OSASM, OSDBA para ASM, e OSOPER para ASM).
grupos
F. Na janela Especificar Local de instalação, ajustar o diretório se você quer (o padrão
é geralmente muito bem). Clique em Avançar.
G. Na janela Verifica a Realizar pré-requisito, você pode geralmente ignorar os avisos.
Qualquer
cheques “falidos” devem ser abordadas. Por exemplo, uma falha do teste para uma NTP
daemon não importa; uma falha em permissões de arquivo o faria. Verifique a caixa
eTodos
cliqueIgnorar,
em Avançar.
H. Na janela Resumo, clique em Instalar.
I. executar scripts de configuração é uma janela pop-up que irá pedir-lhe para executar um
script
nomeado algo como /u01/app/12.1.0.grid/root.sh como root. Executar este script a partir
de uma aceitando
sessão, raiz os padrões para quaisquer solicitações. A figura seguinte mostra a
resultado de uma corrida típica:
J. Ainda em sua sessão de raiz, execute o comando gerado pelo script root.sh que vai
completar a configuração de um servidor autônomo. Este é um comando de
comprimento,
quebras de linha.
semNa ilustração anterior, o comando é como segue:

Após a conclusão, retornar à janela OUI e clique em OK e fechar.


3. Para confirmar a instalação bem-sucedida, use o utilitário crsctl. Isso vai estar no diretório
binsob o diretório escolhido para a instalação. Aqui está um exemplo no Windows:

Aqui está um exemplo em Linux:

Estes comandos mostram que o serviço de alta disponibilidade (HAS) está habilitado e que o
Event Management Daemon está em execução, como mostrado na ilustração a seguir:

4. Investigar a inicialização automática dos processos GI.


A. No Windows, GI é lançado por um serviço do Windows. Verifique sua configuração e
status
com o utilitário sc, como mostrado nesta ilustração:

B. No Linux, GI é lançado através do sistema rc. Procure o arquivo /etc/rc.d/init.d/init.ohasd


e links para ele em vários diretórios rc. Haverá também uma entrada em / etc / inittab
vai reaparecer o processo init.ohasd se ele falhar.
que

Broca Two-Minute
Configurar armazenamento para Automatic Storage Management da Oracle
• Um ASM lojas do grupo em disco apenas os arquivos de banco de dados; ele não tem sistema
de arquivos
• discos ASMnormal.
são DAS, dispositivos SAN ou NAS não formatados.
• A instância ASM é apenas uma estrutura de controlo; sem os dados passam através dele.

Instalar Oracle Grid Infrastructure para um servidor autônomo


• GI deve ser instalado em seu próprio Oracle Home.
• Configurar GI requer privilégios de root (Linux) ou Administrador (Windows).
• A cadeia de pesquisa disco ASM pode ser definido no momento da instalação ou alterado
posteriormente.
• Os daemons GI são lançados pelo sistema operacional na inicialização.

Auto teste
1 . Que tipos de arquivos e diretórios podem ser armazenados com ASM? (Escolha todos os
queA.se log
aplicam.)
Alerta
B. Controlfiles
C. Datafiles
D. arquivos de log redo online
E. diretório Oracle Home
F. tempfiles
2 . Qual dos seguintes arquivos de recuperação pode ser armazenado com ASM? (Escolha
todos
A. os que se de
arquivos aplicam.)
log redo Arquivo
B. conjuntos de backup do RMAN
C. RMAN cópias de imagem
D. backups gerenciados pelos usuários
E. A área de recuperação de flash
3 . Quais são as características padrão de arquivos ASM? (Escolha a melhor resposta.)
A. Os arquivos serão distribuídos para o desempenho, mas não espelhado para a segurança.
B. Os arquivos serão espelhados para a segurança, mas não listrado para o desempenho.
C. Os arquivos serão tanto listrado e espelhados.
D. Os arquivos não será nem listrado nem espelhados.
4 . Qual afirmação é correta sobre ASM e gerenciadores de volume lógicos (LVMs)? (Escolha
o

melhor resposta.)
A. ASM é em si um LVM e não pode trabalhar com um LVM de terceiros.
B. ASM pode usar volumes LVM se eles estão formatado com um sistema de arquivos.
C. Você pode usar ASM para striping ea LVM para espelhamento.
D. Você pode usar ASM para espelhamento eo LVM para distribuição.
5 . Como você pode se conectar a uma instância ASM? (Escolha a melhor resposta.)
A. Ao usar apenas a autenticação do sistema operacional
B. Usando a autenticação de arquivo de senha única
C. Usando autenticação dicionário de dados única
D. Ao usar qualquer sistema operacional ou a autenticação de arquivo de senha
6 . O que faz stripe ASM? (Escolha a melhor resposta.)
A. Arquivos em todos os grupos de discos
B. discos em todos os grupos de discos
C. grupos de discos em todos os discos
D. arquivos em todos os discos em um grupo
7 . Você quer fazer serviços Grade de infra-estrutura disponível para o seu banco de dados.
Onde pode oser instalado? (Escolha a melhor resposta.)
software
A. Para o banco de dados Oracle Home se for a mesma versão
B. Em um Oracle Home em uma máquina acessível a todos os bancos de dados através de
uma rede
C. Em um Oracle Home dedicado em cada máquina que executa um banco de dados
D. Tudo o que precede
8 . Que utilitários que você pode usar para iniciar e parar os GI Alta Disponibilidade Services?
(Escolha
respostas
doiscorretas.)
A. crsctl
B. SQL * Plus
C. srvctl
D. utilitário de rede iniciar o Windows

Respostas de auto-teste
1. B , C , D , e F . Você pode usar ASM para arquivos de banco de dados, como o
arquivos
controlfile,
de dados,
o os arquivos temporários, e os arquivos de log on-line.
A e E são incorrectas. A está incorreta porque o alerta e arquivos de rastreamento deve
estar na
armazenamento convencional, e E é incorreta porque o Oracle Home deve estar em
armazenamento bem.
convencional

2. A , B , C , e E . Logs de arquivo, backups RMAN e cópias de imagem e na verdade


área toda
de recuperação de flash pode estar em ASM.
D está incorrecta. Você não pode dirigir backups gerenciados pelo usuário para ASM
porquedooperacional
utilitários sistema não pode escrever para dispositivos ASM.
3. C . Por padrão, os arquivos são tanto listrado e espelhados porque este é o padrão
a criação
quando
de um grupo de discos e será aplicada a todos os arquivos, a menos que
especificado
A , B , e em contrário.
D são incorrectas. A está incorreta porque a redundância normal de
espelhamento
padrão. B e D estãoé incorretas
a porque enquanto você pode desativar o espelhamento usando
aopção de redundância externo, você não pode desativar striping (e você não iria querer
para).
4. C . Esta é provavelmente a melhor maneira de usar ASM: contar com um LVM para
fornecer
tolerância culpapara fornecer striping do Oracle-aware.
e ASM
A , B , e D são incorrectas. A está incorreta porque um LVM pode ser usado para criar
os discosao ASM. B é incorrecta porque LVMs deve ser apresentado como dispositivos
apresentado
brutos, não tãosistemas de arquivos. D está incorreta porque você pode (e deve) usar duas
“Cozinhado”
camadas se
primeiro ao striping:
nível do hardware sobre volumes físicos, então ASM vai listra em cima destes.
5. D . A autenticação de arquivo de senha e sistema operacional vai funcionar.
A , B , e C são incorrectas. A e B são incorrecta porque ambas as técnicas podem ser
é incorrecto
usadas. Cporque uma instância ASM tem nenhum dicionário de dados.
6. D . Listras ASM arquivos em todos os discos do grupo.
A , B , e C são incorrectas. A está incorreta porque um arquivo só pode existir em um
grupo.incorretas
e C estão B porque é extensões de arquivos que são listrados, e não discos ou
7. diskgroups.
C . GI deve ser instalado em seu próprio diretório home.
A , B , e D são incorrectas. A está incorreta porque não é possível para o GI e
binários de banco de dados para coexistir em um Oracle Home. B e D são incorrecto porque
não é para um banco de dados para entrar em contato com GI através de uma conexão de
possível
8. rede.A e D . crsctl é a ferramenta Oracle desde que pode gerenciar os processos de IG, e
sobre
Janelas gerente de serviço também pode ser usado.
B e C são incorrectas. B está incorreta porque o SQL * Plus pode gerenciar uma
mas instância
não Gi. CASM,
está incorreta porque srvctl pode gerenciar GI registrado recursos, mas não
em si.
GI
CAPÍTULO 4

Usando o Oracle Restart

Objetivos do exame
Neste capítulo, você vai aprender a
• 62.2.5.1 Use a Oracle Restart para gerenciar os componentes
Este capítulo detalha o uso do Oracle Restart, que é a versão sem cluster de grade
A infraestrutura. Ele fornece a capacidade de gerenciar uma variedade de recursos Oracle. Uma vez
colocada os
controle, sobrecursos
GI podem ser iniciado e interrompido com os utilitários GI e reiniciado
automaticamente
caso de falha.

Usar o Oracle Restart para gerenciar os componentes


A Oracle Restart é um serviço prestado pelo GI. Ele consiste de um conjunto de processos iniciados
e monitorizados
o sistema operacional.
por Alguns destes processos são executados com a raiz (ou administrador)
privilégios,
executar como
e outros
o usuário sob o qual GI foi instalado. A Oracle de reinicialização pode ser
configurado
ou para iniciar automaticamente
manualmente.
Um recurso é, neste contexto, algo que pode ser gerido pelo GI. Todos os recursos são
registrados
no local Registro Oracle (ROL). Uma vez registrado, eles estão sob o controle da Oracle Restart.
Algumas ferramentas de configuração irá registar implicitamente recursos se detectar a presença de
um Oracle de reinicialização; outros não. Neste último caso, o recurso deve ser explicitamente
configuração
Uma vez cadastrado, um recurso pode ser iniciado ou parado ou com utilitários GI (que também irá
registrado.
levá
cuidar de parar ou iniciar quaisquer recursos dependentes) ou com os utilitários nativos para o
recurso.
De grande importância é a capacidade de alta disponibilidade. GI inclui um evento de
monitoramento
mecanismo que irá detectar qualquer mudança de estado de um recurso registrado, propagar
mensagensde
alterações sobre
estado e, se necessário, tente uma reinicialização automática de recursos falharam.

Administrar os processos Oracle Restart


Após a instalação do GI, os processos do Oracle Restart será iniciado automaticamente na
a inicialização do servidor. No Linux, o processo central é o daemon init.ohasd. Esta é lançado
atravésrc,decom
script um monitoramento e de respawn ativada por uma entrada no arquivo / etc / inittab. Se o
morrer (ou ser morto), o init irá reiniciá-lo. No Windows, a mesma função é fornecida pelo
daemon
serviço OracleOHService Windows, que lança, monitores, e reinicia o processo ohasd.exe.
Para controlar a Oracle Restart manualmente, utilize o utilitário crsctl. A Figura 1/4 mostra a
freqüentemente
utilização deusado
mais comandos crsctl para administrar o Oracle Restart em um sistema Windows. o
comandos são sintaticamente idêntico em Linux. Note-se que a maioria destes comandos podem ser
executados
somente por um usuário com Administrador (Windows) ou privilégios de root (Linux).
Figura 4-1 Usando o utilitário crsctl para gerenciar o Oracle Restart (Windows)

Estes são os comandos usados na Figura 4-1 :

Figura 4-2 mostra mais alguns comandos crsctl, desta vez em um sistema Linux.
Figura 4-2 Usando o utilitário crsctl para gerenciar o Oracle Restart (Linux)

Estes são os comandos usados na Figura 4-2 :

Administrando recursos registrados


Os recursos devem ser registradas com o Oracle Restart, se é para prestar um serviço de alta
disponibilidade
eles. Algumas ferramentas
para irá registrar recursos como eles são criados; outros não. Por exemplo, se
criar um banco de dados com o utilitário Assistente de Configuração de banco de dados (DBCA), ele
você
irá detectar
presença daaOracle Restart e executar comandos para registrar o banco de dados. Você pode ver
essesscripts
nos comandos
que DBCA gera. Se você criar o banco de dados com SQL * Plus, você deve registrá-lo
você mesmo. Se você criar um ouvinte com o Assistente de Configuração Net, será registada; se
criar um com o Net Manager, não será registrado. Se GI foi instalado após o outro
vocês
produtos já foram instalados, todos os recursos criados anteriormente devem ser explicitamente
registrado.
É possível registrar recursos com o utilitário crsctl, mas esta é uma ferramenta de uso geral eo
sintaxe para adicionar um recurso é, para dizer o mínimo, estranho. Ao registrar um recurso, você
precisa
dar a Oracle Restart, no mínimo, as seguintes informações:

• Exatamente como para iniciar, parar e monitorar o recurso

• O que fazer se o recurso falhar


• Em que outros recursos que podem depender

Além disso, a natureza da informação necessária será diferente para diferentes tipos de
Recursos. Uma alternativa muito melhor quando se trabalha com recursos do Oracle é usar o
utilitário
Este é pré-configurado
srvctl. com comandos para trabalhar com todos os recursos que um DBA é provável
quenoprecisam.
É, entanto, limitada aos recursos da Oracle; você não pode usá-lo para (por exemplo) registe-se
web Apache
ouvinte como um recurso gerenciado.
A sintaxe geral do utilitário srvctl é como se segue:

Os comandos normalmente utilizados são os seguintes:

Os objectos vulgarmente utilizados são os seguintes:


As opções usadas em um comando srvctl dependem do comando e da natureza do objeto.

DICA O utilitário srvctl tem uma facilidade de ajuda soberba. Execute -help srvctl , e você vai
ver o completo
sintaxe de cada comando para cada tipo de recurso. Infelizmente, você não pode fazer isso quando se
toma a
exame.

Para registrar um banco de dados, use um comando como este:

A primeira opção é a DB_UNIQUE_NAME da base de dados, o que irá (em geral) ser a
DB_NAME. A segunda opção é o Oracle Home off qual a instância que abre o banco de dados
correrá. Outras opções não utilizadas raramente permitem especificar grupos em disco necessário,
enomear
o arquivo
o spfile
de senhas, e controlar o início automático. Por padrão, o banco de dados será
de tal forma que a Oracle Restart vai iniciá-lo no modo aberto automaticamente. Para mostrar a
configurado
configuração
orclz banco dedodados, use este comando:

Esta é a forma de iniciar, parar e verificar o status de um banco de dados:

Os argumentos STARTOPTION e padrão STOPOPTION para abrir e imediata (como


mostrando). Outros valores STARTOPTION possíveis são NOMOUNT, montar e READONLY. De
outros
valores STOPOPTION são normais, transacional, e abortar.

TIP EXAME O utilitário srvctl está instalado em ambos um banco de dados Oracle Home and the
eHome
pode GI
serdo
executado
Oracle a partir de qualquer um. O utilitário crsctl está disponível apenas no GI Oracle
Home.
Reinicie Capability
Quando um recurso é colocada sob o controlo de reinicialização da Oracle, que vai ser monitorizada
por GI e em caso de fracasso. Um encerramento controlado do recurso (quer seja com o utilitário
reiniciado
ou com uma ferramenta nativa para o recurso) não vai desencadear um reinício.
srvctl

EXAME TIP Não há “verificação da realidade” ao usar SRVCTL ADD. O fato de que um banco de
dados é com êxito na ROL não significa que ele realmente existe.
registrado

comportamento de reinicialização é determinado pelo argumento POLÍTICA passado para o


ou para o SRVCTL
comando MODIFICAR
SRVCTL ADD comando posteriormente. O valor padrão é permitir o reinício
automático.

Exercício 4-1: Configurar um banco de dados para Oracle Restart Neste exercício, você
registrar
banco deodados
seu com o Oracle Restart. Supõe-se que o exercício 3-1 foi concluída.

1. A partir de um prompt do sistema operacional, confirme que o OHASD está configurado e


funcionando.
que você precisará
Nota de privilégios de administrador ou de raiz, e garantir que o seu caminho
dediretório
o pesquisabin
inclui
em casa GI. Em seguida, utilizar o utilitário crsctl como se segue:

2. Demonstrar que o processo de GI que implementa o Oracle Restart é em si protegidos contra


falha por parte do sistema operacional. No Linux, como o usuário root, identificar o número
do processo
daemon do matá-lo. Use estes comandos, substituindo qualquer que seja o número do
e depois
processo
seu processo
de init.ohasd é para 12345:

No Windows, use o Gerenciador de tarefas para localizar o processo ohasd.exe e, em


seguida,
botão de clique
tarefa para
no Fim
matá-lo.
Observe que o processo é reiniciado, com um diferente ID do processo, em questão de
segundos.
3. Use o utilitário srvctl para registrar o seu banco de dados com o Oracle Restart. Você pode
confiar
para em
todos
padrões
os argumentos, exceto o nome único banco de dados e o Oracle Home. Se você
tem o
ORACLE_HOME variável de ambiente definida para a casa do banco de dados, você pode
usá-lo. Aqui
exemplo em Linux
está umcom um banco de dados chamado orclz:

4. Verifique se o banco de dados foi registrado com êxito e, em seguida, verificar o seu status.

O banco de dados será relatado como “não execução,” se é ou não. Isso é porque ele não tem
foi iniciado desde que foi registrado.
5. Força GI para realizar uma verificação da realidade através da emissão de um comando de
partida
novamente.
e, em seguida, verificar o estado

A ilustração a seguir mostra as etapas 2 a 4 em um sistema Windows:


6. Experiência com comandos de inicialização e desligamento, ambos com srvctl e com o SQL
* Plus.
Verifique o status de cada vez.
7. Enquanto o banco de dados está em execução, demonstram a capacidade de reinicialização.
Nocomando
Linux, use
para
o psidentificar o processo de fundo smon e depois matá-lo. Isto irá terminar a
instância imediatamente. No Windows, use o botão Gerenciador de tarefas Terminar tarefa
para matar processo.
oracle.exe o
Observe que a instância irá reiniciar dentro de segundos.
A ilustração a seguir mostra o teste de reinício exemplo em Linux:

A Oracle Restart pode proteger diferentes bases de dados de recursos, incluindo o Oracle
serviços
fornecido
e serviços de terceiros. Se a Oracle Restart já está instalado, então a maioria dos serviços da
instalado
Oracle posteriormente
ser registrado depois. será registrado durante a sua instalação. Se isso não foi feito, eles podem

Exercício 4-2: registrar um ouvinte como um recurso gerenciado Coloque o ouvinte banco de
dados sobReiniciar controlo e demonstrar a sua eficácia. O comando será necessário (sem linha
A Oracle
quebras) é como se segue:

Os valores padrão para os argumentos assumem que o ouvinte é chamado ouvinte, que o
ouvindo endpoint é 1521, e que a Oracle Home é a casa GI (que não estará correto se você
seguiu os exercícios até agora). Em seguida, verifique a sua configuração e status, parar e iniciar o
ouvinte, e observar o efeito de matar o processo do ouvinte com um utilitário do sistema operativo.
A seguir, são possíveis comandos (com um Windows Oracle Home):

Esta é uma maneira de simular uma falha no Windows:

No Linux, encontrar o ID de processo do processo tnslsnr e matá-lo.


Note-se que o ouvinte irá reiniciar dentro de alguns segundos.

Broca Two-Minute
Usar o Oracle Restart para gerenciar os componentes
• Controle do Oracle Restart com o utilitário crsctl.
• Administrar recursos do Oracle Restart-gerenciados com o utilitário srvctl.
• O processo OHASD é protegido pelo sistema operacional.
• componentes protegidas podem ser bancos de dados, ouvintes de banco de dados, a instância
ASMgrupos.
e disco ASM
• Se dependências ter sido configurada (por exemplo, entre uma base de dados e um grupo de
disco),
Restart
a Oracle
vai parar e iniciar-los em uma seqüência apropriada.

Auto teste
1 . Em que circunstâncias vai a Oracle Restart reiniciar um banco de dados? (Escolha duas
respostas.)
A. Se ele é parado com SQL * Plus
B. Se falhar após ser iniciado com o SQL * Plus
C. Se falhar após ser iniciado com o utilitário srvctl
D. Se for interrompida com o utilitário crsctl
2 . Existem várias técnicas para registrar um banco de dados com o Oracle Restart. Qual destes
técnicas não irá resultar em um registro bem-sucedido?
A. Use o comando DATABASE SRVCTL ADD do banco de dados para casa para adicionar
o banco de dados para a ROL e, em seguida, criar o banco de dados com SQL * Plus.
B. Crie o banco de dados com DBCA.
C. Criar um banco de dados e deixá-lo funcionando e, em seguida, instalar o GI e executar a
configuração
scripts. GI
D. Crie o banco
comando de dados
da casa gradecom SQL * Plus para
Infra-estrutura e, emadicionar
seguida,ousar o banco
banco de SRVCTL
de dados ADD
para a ROL.
3 . Após uma instalação padrão, os processos GI inicia-se automaticamente quando uma
máquina
é inicializado. Como você pode alterar esse comportamento de tal forma que deve ser
iniciado manualmente?
(Escolha a melhor resposta.)
A. Use o utilitário srvctl:

B. Use o utilitário crsctl:

C. Edite o arquivo / etc / inittab para remover a entrada que inicia o OHASD.
D. Use o utilitário gráfico DBCA para ajustar o modo de arranque.
4 . Seu banco de dados usa os grupos de discos ASM DATA e FRA para seu armazenamento.
Vocêbanco
registrar
de dados
o com o comando:

Qual das seguintes afirmações é correta? (Escolha a melhor resposta.)


A. Se você tentar usar srvctl para iniciar o banco de dados antes que a instância ASM
montou
grupos
o de discos, o banco de dados não será iniciado.
B. Se você tentar usar srvctl para iniciar o banco de dados antes que a instância ASM foi
iniciado,
instância
o ASM será iniciado automaticamente.
C. A $ ORACLE_HOME variável deve ser definida para a casa ASM para que o banco de
dados
instância pode localizar a instância ASM.
D. O comando registro falhará se o banco de dados não existe.

Respostas de auto-teste
1. B e C . A Oracle Restart irá reiniciar automaticamente depois de qualquer falha, não
bancoimporta
de dadoscomo
foi oiniciado.
A e D são incorrectas. Estes são incorretas porque a Oracle Restart não vai reiniciar um
banco de dados que é interrompido de forma ordenada, não importa o utilitário é usado para
2. isso.C . A instalação e configuração GI não inclui qualquer instalação para detectar e
registrar bancos de dados, ou não estão em execução no momento.
A , B , e D são incorrectas. B está incorreta porque se DBCA detecta a presença de GI,
ele e executar comandos apropriados. A e D estão incorretas porque inscrição no
irá gerar
a ROL pode ser feito antes ou depois da criação do banco de dados, executar o utilitário a
3. partirBde
. Aqualquer
utilidadecasa.
crsctl é a técnica suportado para desactivar o arranque automático do GI
processos.
A , C , e D estão incorrectos. A está incorreta porque o utilitário srvctl pode gerenciar
um Oracle
Recurso reiniciar-registrado, não a própria Oracle Restart. C está incorreta porque embora
você
poderia cortar no inittab sistema operacional e arquivos rc, não é uma técnica de suporte. D
éincorreto porque DBCA não pode gerenciar todos os componentes GI, apenas a bases de
4. dados.B . A Oracle Restart está ciente de dependências, e ele vai começar a ASM e montar
grupos
qualquer
de discos necessários.
A , C , e D estão incorrectos. A está incorreta porque dependências registradas vai
disto.cuidar
C está incorreta porque quando você está registrando um banco de dados, o
ORACLE_HOME
argumento deve apontar para o off casa qual a instância RDBMS será executado. D é
incorrecta
porque não há nenhuma “realidade” verificar ao adicionar entradas para o COV; os erros
mais tarde.
virá
PARTE II

SQL

Capítulo 5 DDL e objetos de esquema


Capítulo 6 DML e simultaneidade
Capítulo 7 Recuperação, Restringindo e classificando dados usando SQL
Capítulo 8 de Uma Única Linha e conversão Funções
Capítulo 9 Funções de Grupo
Capítulo 10 SQL junta
Capítulo 11 Subqueries e operadores de conjunto
CAPÍTULO 5

DDL e objetos de esquema

Objetivos do exame
Neste capítulo, você vai aprender a
• 061.10.1 Categorizar banco de dados principal Objects
• 061.10.2 Explicar a estrutura da tabela
• 061.10.3 Descrever os tipos de dados que estão disponíveis para Columns
• 061.10.4 criar uma tabela simples
• 061.10.5 Explique como as restrições são criadas no tempo de criação de tabelas
• 061.10.6 descrever como objetos de esquema Trabalho
Este capítulo contém várias seções que não estão diretamente testados pelo exame, mas são
conhecimento pré-requisito para todos os alunos. Duas ferramentas utilizadas extensivamente para
considerados
exercícios
SQL Developer,
são SQL
que*são
Plusabordados
e neste capítulo. especialistas da Oracle usá-los todos os dias em
sua
trabalhos. Os exercícios e muitos dos exemplos são baseados em dois conjuntos de demonstração de
dados,
o RH econhecidos
esquemas OE,
comofornecido pela Oracle. Há instruções sobre como iniciar as ferramentas e
criar os esquemas de demonstração.

Os tipos de dados primitivos e a estrutura da tabela organizada-pilha padrão são as primeiras


mensagens
capítulo neste
que estão diretamente medido no exame. O capítulo se move para definir os tipos de objetos
são dependentes de tabelas (índices, restrições e visitas) e, em seguida, sequências e sinónimos.
que
Tudo tipos
estes de de objeto será usado durante todo o restante deste livro.

Use as ferramentas de cliente


Inúmeras ferramentas podem ser usadas para conectar a um banco de dados Oracle. Dois dos mais
ebásicos são SQL *Estes
SQL Developer. Plus são fornecidos pela Oracle Corporation e são adequados para a maior parte
trabalhar que um desenvolvedor ou um administrador de banco de dados precisa fazer. A escolha
do
entre
de preferência
eles é uma
pessoal,
questãoem parte, a ver com o ambiente e, em parte, a ver com a funcionalidade. SQL
Desenvolvedor, sem dúvida, oferece muito mais funcionalidade do SQL * Plus, mas é mais exigente
em precisa
ele que de um terminal gráfico, enquanto SQL * Plus pode ser usado em dispositivos de modo
personagem.
A ferramenta que já dura mais longo é o SQL * Plus, e apesar de Oracle Corporation está
SQLpromovendo
Developer fortemente como um substituto, os técnicos que trabalham no ambiente Oracle
ser bem aconselhados a se familiarizar com o SQL * Plus.

SQL * Plus
SQL * Plus é uma ferramenta cliente-servidor para se conectar a um banco de dados e emitir
comandos
também pode
SQL seradusado
hoc. isto
para a criação de código de PL / SQL e dispõe de instalações para resultados
de formatação.
todas Ele está
as plataformas emdisponível em o banco de dados; as seções que seguem dar algum detalhe
que foi portado
sobre*como
SQL Plus no
usarLinux e Windows. Não há diferenças significativas com o uso do SQL * Plus em
outra plataforma.
qualquer
Em termos de arquitetura, SQL * Plus é um processo de usuário escrito em C. Ele estabelece
umauma
ocorrência
sessão contra
e um banco de dados sobre o protocolo Net Oracle. As plataformas para o cliente eo
pode ser diferente. Por exemplo, não há nenhuma razão para não usar SQL * Plus em um PC com
servidor
Windows
um banco para conectar-se
de dados rodando em um servidor Unix (ou o contrário), desde que a Oracle Net tem sido
configurada para fazer a ligação.

SQL * Plus no Linux


O arquivo executável SQL * Plus em uma instalação Linux é sqlplus. O local desse arquivo será
instalação específica, mas será tipicamente algo como isto:

Sua conta Linux deve ser configurado adequadamente para executar o SQL * Plus, mas você
precisará definir alguns
variáveis ambientais. Estas são as seguintes:
ORACLE_HOME
CAMINHO
LD_LIBRARY_PATH
Os ORACLE_HOME variável aponta para o Oracle Home. Um Oracle Home é o Oráculo
instalação de software, ou seja, o conjunto de arquivos e diretórios que contêm o código executável
e alguns dos arquivos de configuração. O caminho deve incluir o diretório bin contido dentro do
Oracle Home. O LD_LIBRARY_PATH deve incluir o diretório lib, também contido dentro do
Oracle Home, mas na prática você pode começar afastado sem definir isso. Figura 5-1 mostra um
Linux
janela de terminal e alguns testes para ver se o ambiente está correto.
Figura 5-1 Verificação da configuração da sessão Linux

Na Figura 5-1 , em primeiro lugar as verificações comando echo se as três variáveis foram
criadas Há uma ORACLE_HOME, e os diretórios bin e lib em que foram definidas como a
corretamente.
elemento do caminho e o primeiro elemento das variáveis LD_LIBRARY_PATH, respectivamente.
última
Então, o que comando confirma que o arquivo executável SQL * Plus é realmente disponível no
Finalmente, o SQL * Plus é lançado com um nome de usuário, uma senha e um identificador de
PATH.
aconexão
linha depassado paraSeele
comando. osem
testes não retornam resultados aceitáveis e SQL * Plus não iniciar, você
deve discutir este assunto com o administrador do sistema e o administrador do banco de dados.
Algo com
erros comum
o logon em si são descritos na seção “Criando e testando um banco de dados
Connection”mais adiante neste capítulo.
O formato do texto de logon é o nome de usuário do banco de dados seguido por um caractere de
um barra
delimitador,
como então uma senha seguido por um símbolo @ como um delimitador e, finalmente,
um Oracle Net
conectar identificador. Neste exemplo, o nome de usuário é o sistema, cuja senha é admin123, eo
banco de dados é identificado por coda.
Após o logon, as próximas linhas de texto exibir a versão do SQL * Plus sendo usado, o que é
12.1.0.0.2; a versão do banco de dados para o qual foi feita a conexão (que passa a ser
o mesmo que a versão do SQL * Plus ferramentas); e que as opções foram instaladas dentro do
base de dados. A última linha é o prompt para o usuário, SQL>, altura em que o usuário pode inserir
SQL * Plus ou comando SQL. Se o logon não terá êxito com qualquer nome de usuário
qualquer
(provavelmente
sistema) nãoalocado, você deve discutir este assunto com o seu administrador de banco de
tiver sido
dados.
SQL * Plus no Windows
Historicamente, sempre houve duas versões do SQL * Plus para Microsoft Windows: o personagem
versão ea versão gráfica. A versão personagem era (e ainda é) o arquivo executável
sqlplus.exe, e a versão gráfica foi sqlplusw.exe. Com a versão atual e 11g, o
versão gráfica não existir mais, mas muitos desenvolvedores vão preferir usá-lo, e as versões
com versões anteriores são perfeitamente boas ferramentas para trabalhar com um 12 c banco de
enviado
dados. Nãocom
problemas há a mistura de versões; a 12 c SQL * cliente Plus pode conectar-se a 10 g de banco de
dados,* ePlus
SQL a 10cliente
g pode se conectar a um 12 c banco de dados. Após uma instalação padrão de
qualquer
banco de um
dados
Oracle
ou apenas um cliente Oracle no Windows, SQL * Plus estará disponível como um
atalhoIniciar
menu no do Windows. A localização do arquivo executável lançado pelo atalho será tipicamente
algo como o seguinte:

No entanto, o caminho exato será específico de instalação. A Figura 5-2 mostra um início de
SQLsessão
* Plus,
a um
lançado
bancoa de
partir
dados
do atalho.
com A primeira linha de texto mostra a versão do SQL * Plus, que
éo lançamento 12.1.0.0.2, eo tempo que o programa foi lançado. A terceira linha de texto é um início
de sessão
pronto.
Figura 5-2 Um logon banco de dados com SQL * Plus para Windows

Isto é seguido pela seqüência de logon inseridos manualmente, que é a seguinte:

Uma mudança que algumas pessoas gostam de fazer para o atalho que lança SQL * Plus é para
imediatamente
evitar que ele
apresentar um prompt de logon. Para fazer isso, adicione a opção nolog ao final do
comando.

Não há razão para não lançar SQL * Plus a partir de um prompt do sistema operacional ao invés
do do menu Iniciar; basta abrir uma janela de comando e executá-lo. O programa irá
Atalho
solicitará um logon, a menos que você execute-o com a chave nolog descrito anteriormente.
imediatamente

Criar e testar uma conexão de dados


O SQL * Plus não tem qualquer forma de armazenar detalhes de conexão de banco de dados. Cada
vez que um
conectar usuário
a um bancoquer
de dados, o usuário deve informar SQL * Plus quem são e onde o banco de
dados é. tem
variações dependendo instalações de segurança específicas do local, mas os meios mais comuns de
-se ao banco de dados é através da apresentação de um nome de usuário e uma senha maiúsculas de
identificação
minúsculas. formas
tipicamente Há doisde identificador de ligação utilizada para identificar o banco de dados: quer
fornecendo
que um alias
é resolvido em detalhes de conexão completos ou digitando os detalhes completos.
A partir de um prompt do sistema operacional, estes comandos irá lançar SQL * Plus e conectar-
se como
usuário SCOTTbasecuja
de dados
senha está tigre usando cada técnica:

O primeiro exemplo utiliza um alias, orcl, para identificar o banco de dados. Isso deve ser
conecte
resolvido
detalhes.
no total
As técnicas usuais para esta resolução de nomes são o uso de um arquivo de texto
armazenados
chamado o arquivo
localmente
tnsnames.ora (geralmente contido dentro do subdiretório network / admin do
ORACLE_HOME) ou entrar em contato com um diretório LDAP como o Active Directory ou do
Microsoft
Oracle’s Oracle Internet Directory (OID).
O segundo exemplo fornece toda a conexão detalhes em linha. Os detalhes de conexão
necessários
hostname são o
do computador no qual a instância do banco de dados está em execução, o Transmission
Protocol (TCP) porta na qual o ouvinte de banco de dados Oracle Net pode ser contactado, eo banco
Control
de dadosao qual o usuário quer o ouvinte de banco de dados para conectar-lo. A primeira técnica,
serviço
onde o precisa inserir apenas um apelido, exige que o administrador de banco de dados para
usuário
configurar a aresolução
mecanismo; segunda de nomes
técnica pode funcionar apenas se o usuário conhece os detalhes de conexão.
Há uma série de circunstâncias que fará com que uma tentativa de conexão SQL * Plus para
5-3 falhar.
ilustra Figura
alguns dos problemas mais comuns.

Figura 5-3 Alguns problemas de início de sessão comuns

Primeiro, o usuário lança SQL * Plus a partir de um prompt do sistema operacional Windows,
mudar
usando
para oimpedir
NOLOG que o prompt de logon imediata. Nenhum problema até agora.

Em segundo lugar, a partir do SQL> prompt, o usuário emite uma solicitação de conexão, que
errofalha com um bem
conhecido:

Este erro ocorre porque o identificador de conexão dado, wrongalias, não pode ser resolvido na
base de
detalhes da dados
ligação pela camada transparente de rede Substrate (TNS) da Oracle Net. O nome
método de resolução para ser usado e sua configuração são assuntos para o administrador de banco
de dados.
caso, o erro
Nisso
é óbvia: O usuário entrou o identificador de conexão errada.
A segunda tentativa de conexão dá o identificador correto, orcl. Esta falha com o seguinte:

Isso indica que o identificador de conexão resolveu corretamente no endereço de um banco de


ouvinte,
dadosmas que o ouvinte não está realmente funcionando. Note-se que uma outra possibilidade
seria que ode endereço está com defeito e está enviando SQL * Plus para o endereço errado. Após
resolução
esse erro,
usuário deve
o entrar em contato com o administrador de banco de dados e pedir-lhe para iniciar o
ouvinte. Em seguida,
O terceiro pedido tente novamente.
de ligação falha com o seguinte:

Este erro é gerado pelo ouvinte banco de dados. SQL * Plus encontrou o ouvinte sem
problemas, mas o ouvinte não pode fazer a conexão em diante para o serviço de banco de dados. O
mais provável
razão para isso é que a instância de banco de dados não foi iniciado, para que o usuário deve pedir ao
banco de dadospara iniciá-lo e tente novamente.
administrador
O quarto pedido de conexão falha com o seguinte:

Para receber esta mensagem, o usuário deve ter contactado o banco de dados. O usuário tem
obtido
todos através de rede possíveis, a instância de banco de dados está em execução e o banco de
os problemas
dados em
aberto pelosiexemplo.
tem sido O usuário só tem a senha ou nome de usuário errado. Note que a mensagem
não indica se é a senha ou o nome de usuário que está errado; se fosse a fazê-lo, seria
estar dando informações no sentido de que o outro estava certo.
Finalmente, a quinta tentativa de conexão bem-sucedida.

DICA O exemplo anterior demonstra uma técnica de resolução de problemas que você vai usar com
freqüência.
algo falhar, E
o trabalho
se através do que ele está fazendo passo a passo. Ler cada mensagem de erro.

SQL Developer
SQL Developer é uma ferramenta para se conectar a um banco de dados Oracle (ou, de fato, bancos
de dados alguns
também) e emitirnão-Oracle
comandos SQL ad hoc. Ele também pode gerenciar objetos PL / SQL. Ao
contrário de SQL * Plus, é uma

ferramenta gráfica com assistentes para acções comuns necessárias. SQL Developer é escrito em
Java e um Java Runtime Environment (JRE) para ser executado.
requer
Sendo escrito em Java, SQL Developer está disponível em todas as plataformas que suportam o
apropriado
versão do JRE. Não há diferenças significativas entre plataformas.

Instalando e iniciando o SQL Developer


SQL Developer não está instalado com o Oracle Universal Installer, que é usado para instalar todos
os outros Oracle. Ela não existe em um Oracle Home, mas é um produto completamente auto-
produtos
suficiente.
versão maiso recente pode ser baixado do site da Oracle Corporation.

DICA Uma instalação do 12 c banco de dados irá incluir uma cópia do SQL Developer, mas não
será o Atual. Mesmo se acontecer de você ter uma instalação do banco de dados, normalmente você
Versão
vai querer
instalar a versão atual do SQL Developer também.

Para instalar o SQL Developer, descompacte o arquivo ZIP. Isso é tudo. Ele requer um JDK, o
MeioJava
Ambiente,
Runtimeque estará disponível; isso vem de Oracle. Mas se um JDK apropriada não é já
disponível na máquina que está sendo usado, há versões para download de SQL Developer para
Windows que incluí-lo. Para outras plataformas que não o Windows, o JDK deve ser pré-instalado.
a partir do site da Oracle e instalar de acordo com as instruções específicas da plataforma. Para
baixar
JDK estáse
verificar disponível
o com a versão correta, a partir de um prompt do sistema operacional, execute o
comando:
seguinte

Isso deve retornar algo como o seguinte:

Se isso não acontecer, usando o qual comando java podem ajudar a identificar o problema; o
caminho uma
ser localizar de pesquisa poderia
versão incorreta.
Uma vez que SQL Developer foi descompactado, alterar o diretório atual para o diretório no qual
SQL Developer foi descompactado e lançá-lo. No Windows, o arquivo executável é
No Linux, é o shell script sqldeveloper.sh. Lembre-se de verificar se o ambiente DISPLAY
sqldeveloper.exe.
variável foi definida para um valor adequado (como 127.0.0.1:0.0, se SQL Developer está sendo
executado
console dono
sistema) antes de executar o script shell.
Qualquer problema com a instalação do JRE e lançamento de SQL Developer deve ser
administrador
encaminhado do sistema.
para o seu

A interface do usuário SQL Developer


A Figura 5-4 mostra o interface de utilizador SQL Developer depois de ligar a um banco de dados.

Figura 5-4 Interface desenvolvedor utilizador O SQL

O layout geral da janela do SQL Developer é um painel da esquerda para a navegação em torno
um depainel
objetos
da direita
e para apresentar e introduzir informação.
Na figura, o painel esquerdo mostra que uma ligação foi feita para um banco de dados. A
chamados
conexão orcl_sys.
é Este nome é apenas um rótulo escolhido quando a conexão foi definida, mas a
os desenvolvedores vão usar algum tipo de convenção de nomenclatura, neste caso, o nome
maioria
escolhido é o banco
identificador, que é orcl,
de dados
e o nome do utilizador a ligação foi feito como, o qual foi SYS. o
ramos abaixo lista todos os possíveis tipos de objetos que podem ser gerenciados. Expandir os ramos
iria listar os objetos em si. O painel direito tem uma parte superior solicitando que o usuário digite
um SQL e uma parte inferior que irá exibir o resultado da declaração. SQL Developer pode ser um
declaração
ferramenta, pois é altamente personalizável. Experimento com ele, ler a ajuda, e configurar a
útil
ainterface
maneirado usuário
que funciona melhor para você.
Criando uma conexão de dados
conexões de banco de dados podem ser criados e salvos para reutilização. A janela onde as ligações
podem ser
definido pode ser alcançado escolhendo o símbolo + visíveis na guia Conexões mostrado
anteriormente
Figura 5-4 . em
O nome para a conexão é arbitrária. O nome de usuário e senha devem ambos ser fornecido, mas
apenas o nome de usuário serão salvas a menos que a caixa de seleção Salvar senha é selecionado.
Salvando uma senha
significa que futuras ligações podem ser feitas sem qualquer solicitação de senha. Isto é conveniente,
mas
altamente perigoso se houver qualquer possibilidade de que o computador que você está trabalhando
não é seguro.
verdade, vocêDentro
está delegando a autenticação para o seu sistema operacional local; se você pode fazer
logonpode
você em que,
fazer logon no banco de dados.
Supondo que você está usando SQL Developer para conectar a um banco de dados Oracle em
banco
vezdededados
um de terceiros, selecione a guia Oracle.
A caixa suspensa Função lhe dá a opção de se conectar como sysdba . Uma ligação é sysdba
necessária antes de certas operações particularmente graves (como a inicialização do banco de dados
e desligamento)
ser realizada. Isso
pode
nunca vai ser necessário para os exercícios abordados neste livro.
Os botões Tipo de conexão de rádio deixá-lo escolher entre cinco opções:

• Básico Este solicita o nome da máquina do servidor de banco de dados, a porta na qual o
ouvinte de banco de dados vai aceitar pedidos de ligação, ea instância (o identificador da
sessão
[SID]) ou o serviço para o qual a conexão será feita.
• TNS Se um método de resolução de nomes foi configurado, então um alias para o banco de
dados
selecionado
pode ser(a partir do arquivo tnsnames.ora local) ou inseridos, ao invés de todos os
detalhes
opção básica.
necessários para o
• LDAP definições de serviço de banco de dados e seus detalhes de conexão que são
armazenadas
serviço de diretório
em um Lightweight Directory Access Protocol (LDAP) pode ser consultado por
especificando os detalhes do servidor LDAP.
• Avançada Esta permite a entrada de um total conectividade de banco de dados Java (JDBC)
ligar
Istocadeia.
é completamente o Oracle independente e poderia ser usado para se conectar a qualquer
banco de dadoscom
conformidade queo padrão JDBC.
• Local / legar Se o banco de dados está sendo executado na mesma máquina como seu SQL
Developer
cliente, esta opção permite que você conecte diretamente a um processo de servidor,
ignorando
ouvinte. a rede

Seleção de Base exige que o usuário saiba como se conectar ao banco de dados; selecionando
alguma
TNSconfiguração
exige ter sido feito na máquina do cliente pelo administrador de banco de dados para
que opode ser resolvido em detalhes conexão completa.
alias

Categorizar banco de dados principal Objects


Vários tipos de objetos podem existir dentro de um banco de dados, muitos mais com a versão atual
do que com
versões. Todos
mais
oscedo
objetos têm nomes, e todos os objetos são propriedade de alguém. O “alguém” é
base de dados de utilizador, tais como AR. Os objetos que o usuário possui são o seu esquema . O
uma
nome de um
obedecer a certas
objetoregras.
deve

Tipos de objeto
Esta consulta lista a contagem por tipo de objeto para os objetos que acontecem a existir neste banco
de dados específico:
Esta consulta aborda a DBA_OBJECTS vista, que tem uma linha para cada objeto no
base de dados. Os números são baixos, porque a base de dados é um pequeno usado apenas para o
ensino.deUMA
banco dados usado por um aplicativo de negócios geralmente tem muito mais objetos. Você pode
anão visão
ser DBA_OBJECTS
capaz de ver porque depende de que foram concedidas permissões para o seu
conta. visões alternativas são USER_OBJECTS, que irá mostrar todos os objetos de sua propriedade,
eALL_OBJECTS, que irá mostrar todos os objetos para o qual tenha sido concedido o acesso
seu próprio). Todos os utilizadores têm acesso a esses pontos de vista. Em uma 12 c da base de
(incluindo
dados, umacom
prefixado camada
CDB_ adicional
foi adicionado
de pontos
paradefacilitar
vista o novo recurso de banco de dados multitenant
que, logicamente,
separa uma base de dados tradicional para um recipiente e, opcionalmente, várias bases de dados
conectáveis.
Os objetos de maior interesse para um programador de SQL são aqueles que contêm, ou dar
dados.
acesso
Estes
a, incluem tabelas, vistas, sinónimos, índices e sequências.
Tabelas basicamente armazenar dados em linhas segmentadas por colunas. A vista é uma
que instrução
pode ser referenciada
SELECT armazenados
como se fosse uma tabela. Não é nada mais do que uma consulta nomeada.
Ao invés adeinstrução, o usuário emite uma instrução SELECT contra a visão. Com efeito, o utilizador
executar
éseleccionando a partir do resultado de uma outra selecção. Um sinónimo é uma abreviatura para uma
mesa (ou uma vista). Os usuários podem

executar instruções SQL contra o sinônimo, eo banco de dados irá mapear os em declarações contra
O objeto ao qual os pontos sinônimo. Os índices são um meio de melhorar os tempos de acesso a
linhas de
mesas. Se uma consulta requer apenas uma linha, em seguida, em vez de digitalizar a tabela inteira
para encontrar
índice pode fornecer
a linha,um
umaponteiro para a localização exata do linha. É claro, o próprio índice deve ser
mas este é muitas vezes mais rápido do que a digitalização da tabela. Uma sequência é uma
pesquisado,
construção
números que gera
emitir números.
seqüências em ordem sob demanda.
Os tipos de objetos remanescentes são menos comumente relevantes para um programador de
maisSQL. Suas
dentro do quedas
reino dedeprogramadores
uso PL / SQL e administradores de banco de dados.

Usuários e Esquemas
Muitas pessoas usam os termos do usuário e esquema alternadamente. No ambiente Oracle, você
pode obter
acabar com isso (embora não necessariamente com outros sistemas de gerenciamento de banco de
dados).pode
quem Umse usuário
conectar
é uma
ao banco
pessoade dados. O usuário terá um nome de usuário e uma senha. Um
esquema épara
container um os objetos pertencentes a um usuário. Quando um usuário é criado, seu esquema é
criado também.
esquema é os objetos
UMApertencentes a um usuário; Inicialmente, ele estará vazio.
Alguns esquemas estará sempre vazia; os usuários nunca irá criar quaisquer objetos porque eles
precisa
não efazem
(se configurado corretamente) não terá os privilégios necessários de qualquer maneira.
Usuários
terá sido permissões,
como este seja através de privilégios diretos ou através de papéis, para usar código
dados
possuirdemuitos
concedido acesso em outros
e objetos, masesquemas
nunca vaipertencentes a outros
realmente fazer logonusuários.
no bancoOutros utilizadores
de dados. Eles nãopode ser a
poderia
inversa da presente;
mesmo ter osido
concedido elas vão
privilégio SESSION CRIAR, então a conta está efectivamente desactivado (ou, na
bloqueado);
verdade ele pode
essesser
esquemas são usados como repositórios de código e dados acessados por outras
pessoas.
objetos de esquema são objetos com um proprietário. O identificador único para um objecto de
não um
é o tipo
seu nome;
específico
é o nome prefixado com o nome do esquema ao qual pertence. Assim, a mesa
HR.REGIONS é uma tabela chamada REGIÕES, que é propriedade do usuário HR. Não poderia
haver outra tabela
SYSTEM.REGIONS nomeados, o que seria uma tabela completamente diferente (talvez diferente
em ambose conteúdo) de propriedade pelo sistema de usuário e residentes no seu esquema.
estrutura
Um número de usuários (e seus esquemas associados) são criados automaticamente na criação de
Tempo.
banco Entre
de dados
estas estão SYS e SYSTEM. Usuário SYS é dono do dicionário de dados, que é um
conjunto de tabelas (no esquema SYS) que definem o banco de dados e seu conteúdo. SYS também
possui
cem pacotes
váriosPL / SQL, que consistem em código que é fornecido para o uso de banco de dados
administradores e desenvolvedores. Objetos no esquema SYS nunca deve ser modificado com dados
linguagem de manipulação (DML) comandos. Se você fosse para executar DML contra o dicionário
de dadosvocê corre o risco de corromper o dicionário de dados, com resultados desastrosos. você
tabelas,
o dicionário de dados, executando comandos DDL (tais como CREATE TABLE), que fornecem uma
atualizar
camada deentre você eo dicionário de dados. As lojas de esquema SYSTEM vários adicional
abstração
objectos usados para administração e monitorização.
Dependendo das opções selecionadas durante a criação do banco de dados, pode haver mais
Esses
usuários
usuárioscriado.
armazenar código e dados exigidos por várias opções de banco de dados. Por
exemplo, os
armazena os MDSYS
objetos usados
usuáriopelo Spatial, uma opção que estende os recursos de um banco de dados
Oracle para
gerenciar de informação geográfica.

Esquema de nomeação de objetos

Um objeto de esquema é de propriedade de um usuário e deve obedecer a certas regras:

• O nome pode ter entre 1 e 30 caracteres (com exceção de nomes de link de banco de dados
que pode ser de até 128 caracteres).
• Palavras reservadas (como SELECT) não podem ser usados como nomes de objetos.
• Todos os nomes devem começar com uma letra do alfabeto.
• Os nomes de objetos só podem incluir letras, números, o sublinhado (_), o cifrão ($), ou o
símbolo cardinal (#).
• As letras minúsculas serão convertidos automaticamente para maiúsculas.

Colocando o nome dentro de aspas duplas, todas essas regras (com exceção do comprimento)
pode
ser quebrado, mas para chegar ao objeto posteriormente, deve sempre ser especificado com aspas
duplas,
os exemplos
comonaemFigura 5-5 . Note-se que as mesmas restrições também se aplicam aos nomes das
colunas.
Figura 5-5 Usando aspas para usar nomes não padronizados

NOTA nomes objeto não mais de 30 caracteres deve ser. Os personagens podem consistir de letras e
dígitos, bem como os símbolos de sublinhado, dólar, e hash.

Embora ferramentas como o SQL * Plus e SQL Developer converterá automaticamente em


minúsculas

letras em maiúsculas, a menos que o nome é colocado dentro de aspas duplas, lembre-se que os
nomes
são de objetos
sempre maiúsculas e minúsculas. Neste exemplo, as duas tabelas são completamente diferentes:

DICA Embora seja possível usar nomes minúsculas e caracteres fora do padrão (mesmo espaços), é
considerado uma má prática por causa da confusão que pode causar.

Namespaces de objetos
De um modo geral, o identificador exclusivo para um objeto é o seu nome, que é ponto prefixado
com odo esquema. No entanto, para um entendimento completo de nomeação de objetos, é
nome
necessário
conceito deintroduzir
um namespace
o . Um namespace define um grupo de tipos de objetos, dentro do qual
todos
ser os nomes exclusivamente
identificada devem pelo esquema e nome. Objetos em diferentes namespaces podem
compartilhar
Estes tiposo de
mesmo nome.
objetos todos compartilham o mesmo espaço de nomes:

• Mesas
• Vistas
• Seqüências
• sinônimos privados
• procedimentos autônomos
• Funções autônomo armazenados
• Pacotes
• visões materializadas
• Tipos definidos pelo usuário e operadores

Assim, é impossível criar uma exibição com o mesmo nome de uma tabela se eles estão na
esquema.
mesmaUma vez que declarações criadas, SQL podem abordar uma visão como se fosse uma
tabela. Ovisualizações
tabelas, fato de que e sinônimos privados compartilham o mesmo espaço de nomes significa que
você pode configurar vários

camadas de abstração entre o que os usuários ver e as mesas reais, que pode ser inestimável para
a segurança e para simplificar o desenvolvimento de aplicações.
Estes tipos de objetos, cada um tem seu próprio namespace:

• Restrições
• Clusters
• gatilhos de banco de dados
• ligações de base de dados privados
• Dimensões

Assim, é possível (embora talvez não uma boa idéia) para um índice para ter o mesmo nome de
mesa,
ummesmo dentro do mesmo esquema.

EXAME TIP dentro de um esquema, tabelas, visualizações e sinônimos não pode ter o mesmo
nome.
Exercício 5-1: Determine quais objetos são acessíveis a sua sessão Neste exercício, consulta
várias visões de dicionário de dados como usuário HR para determinar o que os objetos pertencem
ao esquema
que objetos em
HRoutros
e esquemas são acessíveis a HR. Por favor, siga as instruções descritas no
Capítulo 7 para criar o esquema HR se ele está ausente do seu banco de dados.

1. Conecte-se ao banco de dados com SQL * Plus ou SQL Developer como usuário HR.
2. Determine como muitos objetos de cada tipo estão no esquema HR.

Os USER_OBJECTS visualizar listas de todos os objetos de propriedade do esquema ao


qual a corrente
sessão está conectada, neste caso HR.
3. Determinar quantos objetos em RH total de tem permissões.

Os ALL_OBJECTS visualizar listas de todos os objetos aos quais o usuário tem algum tipo
de acesso. quem possui os objetos HR pode ver.
4. Determinar

Listar os tipos de dados que estão disponíveis para


Columns
Ao criar tabelas, cada coluna deve ser atribuído um tipo de dados, o que determina a natureza do

valores que podem ser inseridos na coluna. Esses tipos de dados também são usados para especificar
a natureza dopara procedimentos e funções PL / SQL. Ao selecionar um tipo de dados, você deve
argumentos
considerar
dados que você
o precisa para armazenar e as operações que você vai querer realizar sobre ela. O
espaço é também
consideração. Alguns
um tipos de dados são de comprimento fixo, ocupando o mesmo número de bytes
não importa
dados é, na verdade
o que nele; outros são variáveis. Se uma coluna não é preenchida, o Oracle não vai dar
qualquer
espaço em tudo. Se, posteriormente, atualizar a linha para preencher a coluna, em seguida, a linha
vaioficar
se tipo maior,
de dados
nãoé importa
de comprimento fixo ou variável. Em 12 c banco de dados, um novo parâmetro
do sistema,
MAX_STRING_SIZE, permite que tipos de dados string para ser muito maior do que nas versões
anteriores,
alterado dequando
seu valor
é padrão da norma para Extended.
A seguir estão os tipos de dados para dados alfanuméricos:

• VARCHAR2 dados de caracteres de comprimento variável, de 1 byte para 4.000 bytes se


MAX_STRING_SIZE = STANDARD e até 32.767 bytes se
MAX_STRING_SIZE = EXTENDED. Os dados são armazenados no conjunto de caracteres
de banco de dados.
• NVARCHAR2 como VARCHAR2,
conjunto de caracteres, mas osdedados
um dos conjuntos são armazenados
caracteres na língua nacional
Unicode permitidos.
alternativa
• CHAR dados de caracteres de comprimento fixo, a partir de um byte para 2000 bytes, no
conjunto
Se os dados
de caracteres
não é o comprimento
da base de dados.
da coluna, então ele irá ser preenchido com espaços.

DICA Para conformidade com a Organização Internacional de Normalização (ISO) e da American


National Standards Institute (ANSI), você pode especificar um tipo de dados VARCHAR, mas
nenhuma
tipo serãocoluna
convertidos
desta automaticamente para VARCHAR2.

O seguinte é o tipo de dados para dados binários:

• RAW dados binários de comprimento variável, a partir de um byte de 4.000 bytes se estiver
MAX_STRING_SIZE = STANDARD e até 32.767 bytes se
MAX_STRING_SIZE = EXTENDED. Ao contrário dos tipos de dados CHAR e
VARCHAR2,
dados não são RAW
convertidos pela Oracle Net a partir de conjunto de caracteres do banco de
dados para
conjunto deocaracteres
usuário processo
em SELECT
de ou para o outro lado em INSERT.
O seguinte são os tipos de dados para os dados numéricos, todos comprimento variável:

• NÚMERO dados numéricos, para o qual você pode especificar precisão e escala. A precisão
pode
gama de 1 a 38, e a escala pode variar desde -84 a 127.
• FLUTUADOR um ANSI tipo de dados, número de ponto flutuante com uma precisão de 126
binário
decimal).
(ou 38
A Oracle também fornece BINARY_FLOAT e BINARY_DOUBLE como
alternativas.
• INTEGER Equivalente a NÚMERO, com escala de zero.

A seguir estão os tipos de dados de data e hora de dados, todos comprimento fixo:

• DATA Isto é, quer de comprimento zero, se a coluna está vazia, ou 7 bytes. Todos os dados
DATE
século,
inclui
ano, mês, dia, hora, minuto e segundo. O intervalo válido é de 1 de janeiro de 4712
BC, a 31 de Dezembro de 9999 AD.
• TIMESTAMP Este é o comprimento zero se a coluna está vazia, ou até 11 bytes, dependendo
doprecisão especificada. Isto é semelhante à data, mas com uma precisão de até nove decimal
lugares para os segundos e seis lugares por padrão.
• TIMESTAMP WITH TIMEZONE Isto é como TIMESTAMP, mas os dados são
armazenados
registro mantido
com umdo fuso horário para o qual se refere. O comprimento pode ser de até 13
bytes, dependendo
precisão. Este tipo de dados permite que a Oracle determinar a diferença entre duas vezes por
normalizando-os para Tempo Universal Coordenado (UTC), mesmo que os tempos são para
fusos horários.
diferentes
• TIMESTAMP WITH TIMEZONE LOCAL Isto é como TIMESTAMP, mas os dados são
normalizada para a zona de tempo do banco de dados sobre a poupança. Quando recuperado,
ele é normalizado
zona aoutilizador
do processo de tempo seleccionar.
• ANO intervalo para MÊS Isto é usado para a gravação de um período em anos e meses
entre duas datas ou marcas de tempo.
• INTERVAL DAY TO SECOND Isto é usado para a gravação de um período de dias e
segundos
entre duas datas ou marcas de tempo.

A seguir estão os grandes tipos de objeto de dados:

• CLOB dados de caracteres armazenados no conjunto de caracteres de banco de dados. O


tamanho é efetivamente
4GB menos ilimitada:
uma multiplicada pelo tamanho do bloco de dados.
• NCLOB como CLOB, mas os dados são armazenados no conjunto de caracteres do idioma
nacional
um dosalternativa,
conjuntos de caracteres Unicode permitidos.
• BLOB como CLOB, mas os dados binários que não vai sofrer conversão conjunto de
Líquido.pela Oracle
caracteres
• BFILE Um localizador apontar para um arquivo armazenado no sistema operacional do
servidor
O tamanho
de banco
dos arquivos
de dados.é limitado a 2 elevado à potência de 64 menos 1, embora o seu
sistema
pode teroperacional
outras idéias.
• LONGO Dados de caracteres no conjunto de caracteres de banco de dados, até 2GB menos 1.
Toda
de comprimento
a funcionalidade
(e mais) é fornecido por CLOB; LONGs não deve ser utilizado em um banco
edesedados
o seumoderno,
banco de dados tem quaisquer colunas deste tipo, eles devem ser convertidos para
CLOB.
Pode haver
Lá apenas uma coluna LONG numa tabela.
• LONG RAW como Long, mas os dados binários que não serão convertidos pela Oracle Net.
Qualquer
colunas RAW tempo deve ser convertido para BLOBs.

A seguir, o tipo de dados ROWID:

• ROWID Este é um valor codificado na base 64 que é o indicador para a localização de uma
linha
mesa.
numa
Ele é criptografado. Dentro dele é o endereço físico exato. ROWID é uma propriedade
da Oracle

tipo de dados que não é visível, a menos que especificamente seleccionado.

TIP EXAME Para o exame você vai esperar para saber sobre estes tipos de dados: VARCHAR2,
CHAR, número, a data, carimbo do tempo, INTERVALO, CRU, muito, muito RAW, CLOB, gota,
BFILE e ROWID. O conhecimento detalhado também serão necessários de VARCHAR2, número e
ENCONTRO.

O tipo de dados VARCHAR2 deve ser qualificada com um número que indica o comprimento
coluna.
máximo
Se umdovalor é inserido na coluna que é menos do que isso, não é um problema. O valor será
ocupar apenas tanto espaço quanto ele precisa. Se o valor for maior do que esse máximo, o INSERT
falhará
com um erro. Se o valor é atualizado para um valor maior ou menor, o comprimento da coluna (e
Por conseguinte, a própria linha) vai mudar em conformidade. Se não for inserido em tudo ou é
atualizado
ele vai ocupar
paranenhum
NULL, espaço
em seguida,
em tudo.
O tipo de dados NÚMERO pode opcionalmente ser qualificada com uma precisão e uma escala.
define
a precisão
o número máximo de dígitos decimais significativos, onde o algarismo mais significativo é o
dígito mais diferente de zero e o dígito menos significativo é o dígito mais à direita conhecido no
esquerdo
énúmero.
o númeroA escala
de dígitos do ponto decimal para o dígito menos significativo. Uma escala positiva é a
número de dígitos significativos para a direita do ponto decimal até (e incluindo) a menos
dígito. Uma escala negativa é o número de dígitos significativos para a esquerda do ponto decimal
significativo
em (mas não
incluindo) o dígito menos significativo.
O tipo de dados DATE inclui sempre século, ano, mês, dia, hora, minuto e segundo-even
Se todos esses elementos não são especificados em tempo de inserção. Ano, mês, dia e deve ser
especificado;
horas, minutosseeosegundos são omitidos, eles será o padrão para a meia-noite. Usando a função
TRUNC
uma dataemtambém tem o efeito de definir as horas, os minutos e os segundos para a meia-noite.

Exercício 5-2: Investigar os tipos de dados no esquema HR Neste exercício, descobrir o que os
tipos são usados nas tabelas no esquema HR, utilizando duas técnicas.
dados

1. Conecte-se ao banco de dados como usuário HR com o SQL * Plus ou SQL Developer.
2. Use o comando DESCRIBE para mostrar os tipos de dados em algumas tabelas.

3. Use uma consulta contra uma vista dicionário de dados para mostrar o que colunas compõem
os FUNCIONÁRIOS
mesa, como o comando DESCRIBE faria.

O USER_TAB_COLUMNS vista mostra o detalhe de cada coluna em cada tabela na


esquema do usuário atual.

Criar uma tabela simples


As tabelas podem ser armazenados no banco de dados de várias maneiras. O mais simples é a pilha
de mesa.
linhas Uma pilha constituída
de comprimento variável em ordem aleatória. Pode haver alguma correlação entre a ordem
em quesão inseridas e a ordem em que eles são armazenados, mas esta é uma questão de sorte. Mais
linhas
estruturas de tabela, como o seguinte, pode impor ordenação e agrupamento nas linhas ou forçar uma
avancado
distribuição aleatória:

• Índice organizadas mesas essas linhas de loja na ordem de uma chave de índice.
• aglomerados Índice Estes podem desnormalizar tabelas em relações pai-filho para que
relacionado
linhas de diferentes tabelas são armazenados juntos.
• agrupamentos hash Estes forçar uma distribuição aleatória de linhas, o que vai quebrar
qualquer
ordenação baseada na sequência de entrada.
• As tabelas particionadas essas linhas de loja em estruturas físicas separadas, as partições e
atribuir linhas de acordo com o valor de uma coluna.

Usando as estruturas de tabelas mais avançados não tem qualquer efeito sobre SQL. Cada
instrução
executada SQLtabelas definidas com estas opções retornarão os mesmos resultados que embora as
contra
foram tabelas de heap padrão, portanto, usando esses recursos não afetará código. Mas enquanto a
mesas
sua utilizaçãopara
transparente é os programadores, eles dão enormes benefícios em termos de desempenho.

Criando tabelas com a coluna Especificações


Para criar uma tabela de heap padrão, use esta sintaxe:

No mínimo, especificar o nome da tabela (que será criado no seu próprio esquema, se você não
de outra
especificar
pessoa) e pelo menos uma coluna com um tipo de dados. Há poucos desenvolvedores que já
ORGANIZAÇÃO MONTÃO porque este é o padrão e é SQL padrão da indústria. O padrão
especificam
palavra-chave em uma definição de coluna permite que você forneça uma expressão que irá gerar
um valor
coluna para ouma linha é inserida se um valor não é fornecido pela instrução INSERT.
quando
Considere a seguinte declaração:

Isto irá criar uma tabela chamada EMP no esquema SCOTT. Ou o próprio usuário SCOTT tem
emitir
quea declaração (caso em que nomear o esquema não seria realmente necessário), ou de outra
usuário pode emiti-lo se ele foi permissão para criar tabelas no esquema de outro usuário concedido.
Levando
as colunas de um por um, aqui está uma repartição:

• EMPNO pode ter quatro dígitos, sem casas decimais. Se nenhum decimais são incluídos em
umINSERT, eles serão arredondados (para cima ou para baixo) para o número inteiro mais
próximo.pode armazenar quaisquer caracteres em tudo, até dez deles.
• ENAME
• HireDate aceitará qualquer data, opcionalmente, com o tempo, mas se um valor não for
fornecido,
a data de hoje será inserido como a meia-noite.
• SAL, destinado salário do empregado, aceitará valores numéricos com até sete dígitos.
Um máximo de cinco dígitos pode ser à esquerda do ponto decimal. Se qualquer dígito mais
àdedireita
dois devem
do ponto decimal, eles serão arredondados.
• COMM (por percentual de comissão) tem um valor padrão de 0,03, que será inserido se o
INSERT não inclui um valor para esta coluna.
Após a criação da tabela, estas declarações inserir uma linha e selecione o resultado:

Note que os valores para as colunas não mencionados na instrução INSERT ter sido gerados por
as cláusulas padrão. Tinha essas cláusulas não foram definidos na definição da tabela, as colunas
faria
ter sido NULL. Observe também o arredondamento do valor fornecido para SAL.

TIP A cláusula padrão pode ser útil, mas é de funcionalidade limitada. Você não pode usar uma
subconsulta para gerar o valor padrão; você pode especificar valores somente literais ou funções ou
seqüências.
Criando tabelas de Subqueries
Em vez de criar uma tabela de nada e, em seguida, inserir linhas em que (como na secção anterior),
tabelas podem ser criadas a partir de outras tabelas usando uma subconsulta. Esta técnica permite
criar a tabela
definição e preencher a tabela com linhas com apenas um comunicado. Qualquer consulta em tudo
apode
fonte
serdeusado
tantocomo
a estrutura da tabela e as linhas. A sintaxe é como se segue:
CREATE TABLE [ esquema .] Tabela AS subquer y;
Todas as consultas retornar um conjunto bidimensional de linhas; este resultado é armazenada
exemplo
comosimples
a nova tabela.
de criarAqui
umaestá
tabela
umcom uma subconsulta:

Esta declaração vai criar um EMPLOYEES_COPY tabela, que é uma cópia exata do
tabela EMPREGADOS, idêntico em ambos definição e as linhas que ele contém. Qualquer não nula
e verificação
restrições sobre as colunas também serão aplicadas para a nova tabela, mas qualquer chave primária,
original, ou
restrições de chave estrangeira não será. (As restrições são discutidos mais tarde.) Isto é porque estes
trêsrestrições
de tipos exigem índices que podem não estar disponíveis ou desejado.
O seguinte é um exemplo mais complexo:

As linhas na nova tabela será o resultado da união das duas tabelas de origem, com dois dos
colunas selecionadas de ter seus nomes alterados. A nova coluna SERVIÇO será preenchida com o
resultado da aritmética que calcula o número de dias desde que o empregado foi contratado. As
linhas
ser inserido
serão na ordem especificada. Esta ordenação não será mantido pelo DML subseqüente, mas
assumindo que os dados do esquema HR padrão, a nova tabela será parecido com este:
A subconsulta pode, é claro, incluir uma cláusula WHERE para restringir as linhas inseridas na
mesa.
nova
Para criar uma tabela com nenhuma linha, use uma cláusula WHERE que irá excluir todas as
linhas:

A cláusula WHERE 1 = 2 nunca pode retornar TRUE, então a estrutura da tabela será criado,
usar,pronto
mas hápara
linhas serão inseridas no momento da criação.

Alterando Definições Tabela após a criação


Há muitas alterações que podem ser feitas a uma tabela após a criação. Aquelas que afetam o físico
alterações de armazenamento cair no domínio do administrador de banco de dados, mas muitos são
puramente
será realizada
lógico
pelos
e desenvolvedores de SQL. Os seguintes são exemplos (para a maior parte auto-
explicativo):

• A adição de colunas:

• Modificação de colunas:

• Deixar cair colunas:

• Marcação colunas como não utilizadas:

• colunas Renomear:

• Marcando a tabela como somente leitura:

Todas essas mudanças são a linguagem de definição de dados (DDL) comandos com o built-in
ElesCOMMIT.
são, portanto, não reversível e irá falhar se houver uma transação ativa contra a mesa. Eles
são também virtualmente instantânea, com a excepção de que deixa cair uma coluna. Eliminando
uma colunaexercício
demorado pode serporque
um como cada coluna é descartado, cada linha deve ser reestruturada para
remover dados da coluna. O comando NÃO UTILIZADO SET, o que torna colunas inexistente,
tanto está
SQL quanto
em causa, é muitas vezes uma alternativa melhor, seguido, quando conveniente, pelos
seguintes
que vai cair
linhas,
todas as colunas não utilizados em uma passagem através da tabela:

Marcando uma tabela como somente leitura irá causar erros para qualquer tentativa de comandos
DML.
ainda podeMas a mesa
ser descartado. Isto pode ser desconcertante, mas é perfeitamente lógico, quando você
CAIR comando não
pensa sobre isso. UMArealmente afetar a mesa; ela afeta as tabelas no dicionário de dados que definem
a mesa, e estes não são somente leitura.

Deixando cair e Truncating Tabelas

O comando TRUNCATE TABLE tem o efeito de remover todas as linhas de uma tabela, deixando
a definição da tabela intacta. GOTA TABELA é mais drástica na definição que a tabela é removido
bem. A sintaxe é como se segue:
como
DROP TABLE [ esquema ]. Tablename ;
Se o esquema não é especificado, então a tabela chamada tablename no seu esquema conectado
seráno momento
descartado.
Tal como acontece com um TRUNCATE, SQL não produzirá um aviso antes da tabela é
Alémdescartado, e com qualquer comando DDL, inclui um COMMIT. Mas existem algumas
disso, como
restrições;sessão
qualquer E se (mesmo a sua própria) tem uma transação em andamento, que inclui uma linha na
tabela, então
GOTA irá falhar,
o e também é possível reduzir uma tabela que é referido em uma restrição de chave
definido para outra tabela. Esta tabela (ou a restrição) deve ser descartado em primeiro lugar.
estrangeira

TIP do Oracle 12 c inclui uma opção de lixeira que é ativado por padrão. Isso permite que qualquer
mesa para ser restaurada a menos que foi abandonada com a opção PURGE ou a menos que a opção
caiu
de lixeira
foi desabilitado.

Exercício 5-3: Criar Tabelas Neste exercício, utilize SQL Developer para criar uma tabela pilha,
inserção
algumas linhas com uma subconsulta, e modificar a tabela. Fazer mais algumas modificações com o
SQLseguida,
em * Plus esolte a tabela.

1. Conecte-se ao banco de dados como usuário HR com SQL Developer.


2. Direito do mouse no ramo Tabelas da árvore de navegação e clique em Nova tabela.
3. O nome do novo EMPS de mesa e use o botão Adicionar Coluna para configurá-lo, como no
seguinte
ilustração:
4. Clique na guia DDL para ver a declaração foi construído. Deve olhar como este:

Retornar à guia Table (como na ilustração anterior) e clique em OK para criar a tabela.
5. Execute a seguinte declaração:

e comprometer a inserção:

6. Direito-clique na tabela EMPS no SQL Developer navegador e clique em coluna e em


Adicionar.
7. Definir uma nova coluna HIRED, de tipo DATE, como na seguinte ilustração; clique em
Aplicar
criar para
a coluna.
8. Ligue para o banco de dados como HR com o SQL * Plus.
9. Definir um padrão para a coluna HIRED na tabela EMPs:

10. Inserir uma linha sem especificar um valor para o CONTRATADO e verifique se a nova
linhadata
temcontratado,
um mas que as outras linhas não fazer:

11. Arrumar por deixar cair a nova tabela:

Criar e usar tabelas temporárias


A temporária tabela tem uma definição que é visível para todas as sessões, mas as linhas dentro dele
asão privados
sessão parainserido. Os programadores podem usá-los como uma área de armazenagem
que eles
privada para
grandes quantidades
manipular
de dados. A sintaxe é como se segue:

A definição da coluna é a mesma como uma tabela regular e podem, efectivamente, ser fornecida
A cláusula
a partir opcional
de uma subconsulta.
no final determina o tempo de vida de quaisquer linhas inseridas. O padrão é
para
as linhas
remover
no momento da transação que eles inserido completa, mas este comportamento pode ser
alterado paraaté que a sessão que lhes inserido termina. Independentemente da opção escolhida, os
preservá-los
dados serão
privada para cada sessão; diferentes usuários podem inserir suas próprias fileiras em sua própria
cópianunca
eles da tabela,
verá linhas
e de cada um.
De muitas maneiras, uma tabela temporária é semelhante a uma tabela permanente. Você pode
comando
executar
SELECT
qualquer
contra
DML ela.
ouEle pode ter índices, restrições e gatilhos definidos. Pode ser
referenciado em exibições e sinônimos ou se juntou a outras mesas. A diferença é que os dados são
transitórios
e privado para a sessão e que todos os comandos SQL contra ele será muito mais rápido do que os
contra tabelas permanentes.
comandos
A primeira razão para a velocidade é que as tabelas temporárias não são segmentos em
A tabela
tablespaces
é escrita
permanentes.
para um segmento temporário na tabela temporário do usuário. I / O em
tabela temporários é muito mais rápido do que eu / O em tablespaces permanentes porque não ir
atravésdodobuffer do banco de dados; tudo é executada diretamente no disco pelo processo servidor da
cache
sessão.
Uma segunda razão para a velocidade é que DML contra tabelas temporárias não gera redo.
dadosDesde
persiste
o somente para a duração de uma sessão (talvez apenas para a duração de uma
transação),
nenhum há na geração de um refazer. Isto dá o benefício duplo de fast DML para a sessão de
efeito
atrabalho
mesa e sobre
tomar a tensão fora do sistema de geração de redo, que pode ser um mau ponto de discórdia
em bancos de dados multiusuários ocupados.
Figura 5-6 mostra a criação e utilização de uma tabela temporária com SQL * Plus. O Database
Tabela
Control
Assistente de Criação também pode criar tabelas temporárias.
Figura 5-6 criação e utilização de uma tabela temporária

Exercício 5-4: Criar e usar tabelas temporárias Neste exercício, crie uma tabela temporária a ser
usado para informar sobre os atuais funcionários. Demonstrar, usando duas sessões SQL * Plus, que
éosprivada
dados para cada sessão.

1. Conecte-se ao seu banco de dados com SQL * Plus como usuário HR.
2. Criar uma tabela temporária da seguinte forma:

3. Insira algumas linhas e cometê-los.

4. Iniciar uma segunda sessão SQL * Plus como HR.


5. Na segunda sessão, confirme que a primeira inserção não é visível, apesar de ter sido
comprometida
na primeira sessão, e inserir algumas linhas diferentes.

6. Na primeira sessão, truncar a tabela.

7. Na segunda sessão, confirme que ainda existem linhas na cópia que da sessão da mesa.

8. Na segunda sessão, demonstram que terminar a sessão não limpar as linhas. Isso vai
exigem desligar e ligar novamente.
9. Arrumar o ambiente, largando as tabelas em ambas as sessões.

índices
Índices têm duas funções: para impor chave primária e restrições exclusivas e melhorar
desempenho. estratégia de indexação de uma aplicação é fundamental para o desempenho. Não há
demarcação de cuja gestão índice de domínio se encontra dentro. Quando os analistas de negócios
clara
regras de negócios que serão implementadas como restrições, que estão em vigor especificando
especificar
índices. o
administradores de banco de dados estará monitorando a execução de código em execução no banco
de dados
fazer e vontade para índices. O desenvolvedor, que deve ter a melhor idéia do que está
recomendações
no código ea natureza dos dados, também serão envolvidos no desenvolvimento da estratégia de
acontecendo
indexação.
Por que os índices são necessários
Os índices são parte do mecanismo de restrição. Se uma coluna (ou um grupo de colunas) é marcado
como um
chave primária da tabela, em seguida, cada vez que uma linha é inserida na tabela, a Oracle deve
verificar
com se uma
o mesmo fileira
valor na chave primária ainda não existir. Se a tabela não tem nenhum índice na
colunas, a única maneira de fazer isso seria fazer a varredura para a direita através da mesa,
verificando
Embora istocada
possalinha.
ser aceitável para uma mesa de apenas algumas linhas, para uma tabela com
milhares(ou
milhões ou bilhões) de linhas, isso não é viável. Um índice dá (quase) acesso imediato a chave
valores, então a verificação de existência pode ser feita praticamente instantâneo. Quando uma chave
restrição é definida, o Oracle criará automaticamente um índice em colunas de chave primária, se um
primária
ainda não existir.
Uma restrição únicos também requer um índice. Ela difere de uma restrição de chave primária
colunas
em que
da restrição
a exclusiva pode ser deixado nulo. Isso não afeta a criação e utilização do índice.
restrições de chave estrangeira são aplicadas por índices, mas o índice deve existir na tabela pai, não
necessariamente na tabela para a qual a restrição está definida. Uma restrição chave estrangeira
refere
na tabela
umafilho
coluna
para a chave primária ou uma chave única na tabela pai. Quando uma linha é inserida
tabela filho, a Oracle irá fazer uma pesquisa sobre o índice na tabela pai para confirmar que há uma
em
correspondentes linha antes de permitir a inserção. No entanto, você deve sempre criar índices no
estrangeiro
colunas de chave dentro da tabela a criança por motivos de desempenho; A Apagar na tabela pai será
muito mais rápido se a Oracle pode usar um índice para determinar se existem quaisquer linhas na
tabela de criança
referenciando a linha que está sendo excluído.
Os índices são essenciais para o desempenho. Ao executar qualquer instrução SQL que inclui um
cláusula,
WHERE Oracle tem de identificar quais as linhas da tabela são para ser seleccionada ou modificada.
Se nãonas
índice há colunas referenciadas na cláusula WHERE, a única maneira de fazer isso é com uma mesa
cheia
digitalização . A varredura completa da tabela lê cada linha da tabela, a fim de encontrar as linhas
relevantes.
muitas linhas,
Se aisso
tabela
podetem
levar um longo tempo. Se houver um índice nas colunas relevantes, a Oracle
pode
o índice
pesquisar
vez. Um índice é uma lista ordenada de valores-chave, estruturado de uma forma que torna
a pesquisa
muito eficiente. Com cada valor-chave é um ponteiro para a linha na tabela. Localizando linhas
relevantes através de um
índice de pesquisa é muito mais rápido do que usar uma varredura completa da tabela, se a tabela é
sobre um determinado
proporção das linhas a tamanho ea
serem recuperadas está abaixo de um determinado valor. Para pequenas
mesas ouque
cláusula parairáuma
recuperar
ONDEuma grande fração de linhas da tabela, uma varredura completa da tabela
será mais rápido.
(Geralmente) confiar
VocêOracle
pode para tomar a decisão correta a respeito de se usar um índice baseado em
informação estatística da base de dados reúne sobre as tabelas e as linhas dentro deles.
Uma segunda circunstância onde os índices podem ser utilizados é para a classificação. A
inclui
instrução
o ORDER SELECT
BY, GROUP
que BY, ou palavra-chave UNION (e alguns outros) devem classificar as
linhas
em ordem, a menos que exista um índice, que pode retornar as linhas na ordem correcta, sem
necessidade deem primeiro lugar.
classificá-los
A terceira circunstância quando os índices podem melhorar o desempenho é quando as tabelas
A Oracle
são unidas,
tem uma masescolha.
novamente
Dependendo do tamanho das tabelas e os recursos de memória
disponíveis,
ser mais rápido
pode para fazer a varredura tabelas na memória e se juntar a eles lá, em vez de índices de
uso. O técnica
juntar loop aninhado
passa através de uma tabela usando um índice na outra tabela para localizar as linhas
correspondentes;
esta é geralmente uma operação de disco intensivo. Um hash técnica lê a tabela inteira na memória,
converte-os em uma tabela hash, e usa um algoritmo de hash para localizar linhas correspondentes;
isso é mais
memória e CPU. Um merge sort juntar os tipos as tabelas no fusões de coluna e, em seguida, juntar-
-los juntos; este é frequentemente um compromisso entre os recursos de disco, memória e CPU. Se
se
não houver
índices, o Oracle é severamente limitada nos juntar técnicas disponíveis.

DICA Índices ajudar instruções SELECT e também qualquer UPDATE, DELETE ou MERGE
que o uso de uma cláusula WHERE, mas eles vão abrandar instruções INSERT.
declarações

Tipos de Índices
Oracle oferece suporte a vários tipos de índices, cada um com diversas variações. Os dois tipos de
índices de aqui é o índice B * Árvore, que é o tipo de índice padrão, eo índice de bitmap. Como
preocupação
regra, índices irá melhorar o desempenho para recuperação de dados, mas reduzir o desempenho
geral
para DML Isto é porque os índices deve ser mantida. Cada vez que uma linha é inserida em uma
operações.
tabela,chave
nova uma deve ser inserido em cada índice na tabela, o que coloca uma pressão adicional sobre o
base de dados. Por esta razão, em sistemas de processamento de transações é habitual para manter o
númerotão
índices de baixas quanto possível (talvez não mais do que os necessários para as restrições) e sobre
sistemas intensivos, como um armazém de dados para criar tantos como pode ser útil.
query-

Os índices de árvore B *
AB * Árvore índice (o B significa “equilibrada”) é uma estrutura de árvore. O nó raiz dos pontos de
árvoresnopara
nodos segundo nível, que podem apontar para os nós no terceiro nível, e assim por diante. A
profundidade
da árvore seránecessária
em grande parte determinada pelo número de linhas na tabela e o comprimento do
índice
valores-chave.

TIP estrutura A B * árvore é muito eficiente. Se a profundidade for maior do que três ou quatro,
então oudeoíndice são muito longos ou a tabela tem bilhões de linhas. Se nenhum destes é o caso,
chaves
éentão o índicede beneficiar de uma reconstrução.
susceptível

Os nós de folhas da árvore índice armazenar chaves das linhas, na ordem, cada um com um
a localização
ponteiro que
física
identifica
da linha. Então, para recuperar uma linha com um índice de pesquisa, se a
cláusulaum
usando WHERE
predicadoé de igualdade na coluna indexada, a Oracle navega para baixo da árvore para o

quefolha
contém o valor de chave desejado e, em seguida, usa o ponteiro para encontrar o local da linha.
Se o ONDE
cláusula está usando um predicado nonequality (como COMO, ENTRE,> ou <), o Oracle pode
para baixo da árvore para encontrar o primeiro valor chave correspondente e, em seguida, navegar
navegar
entreencontrar
para os nós folha
todos
do os
índice
outros valores correspondentes. Como ele faz isso, ele vai recuperar as linhas
da tabela em ordem.
O ponteiro para a linha é a idlinha . O rowid é um pseudocoluna Oracle proprietária, que
cada carreira, de cada mesa tem. Criptografado dentro dele é o endereço físico da linha. porque
rowids
não fazem parte do padrão SQL, eles nunca estão visíveis para uma instrução SQL normal, mas você
podeever
-los usá-los se quiser. Isto é demonstrado na Figura 5-7 .
Figura 5-7 Resultados e usando rowids

O rowid para cada linha é globalmente únicos. Cada linha em cada mesa em todo o banco de
ter um
dados
rowid diferente. A criptografia idlinha fornece o endereço físico da linha; oracle pode
usar isso para calcular qual arquivo do sistema operacional, e onde no arquivo, a linha é e ir direto
paraíndices
ele. de árvore B * são uma maneira eficiente de recuperar linhas, se o número de linhas
necessário é baixa em

proporcionalmente ao número total de linhas na tabela e se a tabela é grande. Considere a seguinte


declaração:

Esta cláusula WHERE é suficientemente abrangente em que ele irá incluir todas as linhas na
ser muito
tabela.mais
Serialento para pesquisar o índice para encontrar as rowids e, em seguida, usar os rowids
para encontrar
digitalizar todaas linhas do
a tabela. que de
Afinal a contas, é toda a tabela que é necessário. Outro exemplo é que se a
é pequeno o suficiente para que uma leitura do disco pode digitalizá-lo em sua totalidade, não há
tabela
nenhum
Diz-seponto em ler um índice
frequentemente primeiro.
que, se a consulta está indo para recuperar mais de 2 a 4 por cento das
varredura
linhas,da
emtabela
seguida,
seráuma
maiscompleta
rápido. Um caso especial é se o valor especificado na cláusula
WHERE
Nulos nãoé entram
NULL.em índices de árvore B *, então uma consulta como a seguinte será sempre
resultar em de
verificação umatabela:
completa

Há pouco valor na criação de um índice B * Árvore em uma coluna com alguns valores exclusivos
porque
não ser ele vai
suficientemente selectivo; a proporção da tabela que será recuperada para cada chave
valor será muito alto. Em geral, os índices de árvore B * deve ser usado se os seguintes itens forem
diferente
verdadeiras:
• A cardinalidade (o número de valores distintos) na coluna é alta.
• O número de linhas na tabela é alta.
• A coluna é usado em WHERE ou condições de junção.

Os índices bitmap
Em muitas aplicações de negócio, a natureza dos dados e das consultas é tal que os índices B * de
árvores
não é desão
muito uso. Considere uma tabela de vendas de uma cadeia de supermercados que armazena
um anohistóricos,
dados de que podem ser analisadas de várias dimensões. A Figura 5-8 mostra um entity-
diagrama de relação, com apenas quatro das dimensões.
simples
Figura 5-8 Uma tabela de verdade com quatro dimensões

A cardinalidade de cada dimensão pode ser bastante baixa. Faça essas premissas:

Assumindo que uma distribuição uniforme de dados, apenas duas das dimensões (PRODUTO e
umaDATA)
selectividade
têm que é melhor do que o critério utilizada de 2 por cento a 4 por cento, o que faz
com que
índice deum
valor. Mas se as consultas usar predicados de intervalo (tais como a contagem de vendas
emdez
de um ou
mêsmais
ou de
produtos),
uma classe
então nem mesmo estes irão qualificar. Este é um fato simples: índices de
árvore B
muitas * sãoinútil em um ambiente de data warehouse. Uma consulta típica pode querer comparar
vezes
as vendas
duas lojas entre
por clientes walk-in de uma certa classe de produto em um mês. Não poderia muito bem
ser B * nas
índices Árvore
colunas relevantes, mas a Oracle iria ignorá-los como sendo insuficientemente seletivo.
é o que índices de bitmap são projetados para.
este
Um índice de bitmap armazena os rowids associados a cada valor de chave como um bitmap. Os
Channel
bitmaps
Indexpara
pode
o ter esta aparência:

Isso indica que as duas primeiras linhas foram as vendas para clientes walk-in, a terceira venda
era um
entrega, a quarta venda foi um walk-in, e assim por diante.
Os bitmaps para o índice SHOP pode ser a seguinte:

Isso indica que as duas primeiras vendas foram na loja de Londres, o terceiro estava em Oxford,
em Reading,
a quarta e assim por diante. Agora, se essa consulta é recebida:

Oracle pode recuperar os dois bitmaps relevantes e adicioná-los em conjunto com uma operação
booleana AND.

O resultado da operação AND mostra que apenas as linhas sétima e XVI qualificar
para a seleção. Esta fusão de bitmaps é rápido e pode ser usado para implementar booleana
operações com muitas condições em muitas colunas usando qualquer combinação de AND, OR e
complexo
NOT
operadores. Uma vantagem particular que os índices bitmap têm sobre índices de árvore B * é que
eles incluem
Nulos. Quanto ao índice de bitmap está em causa, NULL é apenas mais um valor distinto, que terá
seu próprio bitmap.
Em geral, os índices de bitmap deve ser usado se a seguir forem verdadeiras:

• A cardinalidade (o número de valores distintos) na coluna é baixo.


• O número de linhas na tabela é alta.
• A coluna é usado em operações de álgebra booleana.
DICA Se você soubesse de antemão o que as consultas seriam, então você pode construir índices de
iria funcionar,
árvore B * quecomo um índice composto na loja e CHANNEL. Mas normalmente você não sabe, o
é onde a fusão dinâmica de bitmaps oferece uma grande flexibilidade.
que

Opções Índice de Tipo


Há seis opções comumente usados que podem ser aplicadas ao criar índices:

• exclusivo ou não exclusivo


• chave reversa
• comprimido
• Composite
• Função base
• ascendente ou descendente

Todos os seis variações se aplicam a índices de árvore B *, mas apenas os três últimos podem ser
aplicadas
Um únicoa índices
índicedenão
bitmap.
permitirá valores duplicados. Não exclusivo é o padrão. O atributo único de
o índice opera independentemente de uma restrição de chave única ou principal; a presença de um
único
não iráíndice
permitir a inserção de um valor duplicado mesmo que não existe tal limitação definida. A
única ou chave primária pode usar um índice não exclusivo; ela só vai acontecer não ter valores
restrição
Este é na verdade um requisito para uma restrição que é deferrable porque pode haver um período
duplicados.
(antes
as transações são confirmadas), quando existem valores duplicados. As restrições são discutidas na
seção.
próxima
Uma chave inversa índice é construído sobre uma versão da coluna da chave com os seus bytes
indexação
invertidas.
JohnAo, ele
invés
irá indexar
de nhoJ . Quando um SELECT é feito, a Oracle irá reverter
automaticamente
valor da cadeia deopesquisa. Esta é uma técnica poderosa para evitar contenção em sistemas multi-
Por exemplo, se muitos usuários estão simultaneamente inserir linhas com chaves primárias com
utilizador.
base em crescente,
número uma sequencialmente
todas as suas inserções de índice irá concentrar-se na extremidade alta do índice.
as chaves, as inserções de índice de chave consecutiva tenderá a ser distribuídos por toda a gama de
revertendo
Mesmo que John e Jules estão juntos, nhoJ e seluJ será muito separadas.
índice.

Um comprimido índice armazena valores repetidos chave apenas uma vez. O padrão não é para
comprimir,
o que significa que se um valor de chave não é único, ele será armazenado uma vez para cada
ocorrência,
ponteiro único
cadaidlinha.
um tendo
Umumaíndice comprimido irá armazenar a tecla uma vez, seguido por uma
seqüência de rowids.
combinando toda a
Um composto indicador é construído sobre a concatenação de duas ou mais colunas. Não há
em misturar
restriçõestipos de dados. Se uma seqüência de pesquisa não inclui todas as colunas, o índice ainda
podese
mas sereleusado,
não incluir a coluna mais à esquerda, a Oracle terá que usar um método skip-digitalização
que é menos eficiente do que se a coluna mais à esquerda está incluído.
muito
Um baseado em função de índice é construída sobre o resultado de uma função aplicada a uma
comoouSUPERIOR
mais colunas, tais
(ultimo_nome) ou TO_CHAR (startdate, '-CCYY mm dd'). A consulta terá que
aplicar opara
função mesmo
a cadeia de pesquisa, ou a Oracle pode não ser capaz de usar o índice.
Por padrão, um índice é ascendente , o que significa que as chaves são classificados em ordem
maisdealta.
valorUm mais
índice
baixo
descendente
para inverte este. Na verdade, a diferença muitas vezes não é
importante.
um índice são Asarmazenados
entradas como uma lista duplamente ligada, por isso, é possível navegar para
cima ou para
celeridade, masbaixo
issocom
vai afetar
igual a ordem em que as linhas são devolvidas se forem recuperados com
um índice completa.
verificação

Criação e Utilização de Índices


Os índices são criados implicitamente quando restrições de chave e únicas primários são definidos se
um índice
colunas relevantes
na ainda não existir. A sintaxe básica para a criação de um índice explicitamente é
seguinte maneira:
tão

O tipo padrão de índice é um, noncompressed não inverter-chave B * índice não exclusivo, da
árvore.
possível Não
criar umé índice de bitmap único (e você não iria querer se você pudesse-pensar sobre o
questão cardinalidade). Os índices são objetos de esquema, e é possível criar um índice em um
uma tabela
esquema noem outra, mas a maioria das pessoas iria encontrar esta um pouco confuso. Um composto
indicador
índice em évárias
uma colunas. índices compostos podem ser em colunas de diferentes tipos de dados, e o
colunas não tem que ser adjacentes na tabela.

DICA Muitos administradores de banco de dados não consideram boa prática de contar com índice
criação. Se os índices são criados de forma explícita, o criador tem total controle sobre as
implícito
características
o índice, o quede
pode tornar mais fácil para o administrador de banco de dados (DBA) para gerenciar
posteriormente.
Considere este exemplo de criação de tabelas e índices e, em seguida, definir restrições:

Os dois primeiros índices criados são sinalizadas como único, o que significa que não será
inserir
possível
valores duplicados. Esta não é definido como uma restrição neste momento, mas é verdade,
no entanto.
terceiro índice
o não é definida como única e, por conseguinte, irá aceitar valores duplicados; este é
um compósito
índice em duas colunas. O quarto índice é definida como um índice de mapa de bits, porque a
cardinalidade
coluna é susceptível
do de ser reduzido proporcionalmente ao número de linhas da tabela.
Quando os dois principais constrangimentos primários são definidos, Oracle irá detectar os
usá-los
índices
paraefazer
preexistentes
cumprir as restrições. Note-se que o índice de DEPT.DEPTNO não tem nenhum
propósito para
desempenho porque a tabela vai com toda a probabilidade ser tão pequena que o índice nunca será
usado paralinhas (uma varredura será mais rápido), mas ainda é essencial ter um índice para fazer
recuperar
cumprir
restriçãoadeprimária
chave.
Uma vez criados, os índices são utilizados de forma completamente transparente e
automaticamente.
instrução Antes
SQL, o servidor de executar
Oracle um todas as possíveis formas de executá-lo. Alguns desses
irá avaliar
maneiras podem envolver usando qualquer índices estão disponíveis; outros não. Oracle vai fazer
uso do
informações que recolhe sobre as mesas e o ambiente para tomar uma decisão inteligente sobre qual
(Se houver) índices de usar.

DICA O servidor Oracle deve tomar a melhor decisão sobre o uso de índice, mas se ele está
começando
É possível para
errado,
um ele
programador para incorporar instruções, conhecidas como sugestões de
optimização
o uso (ou não)
, no
decódigo
certos índices.
que irá forçar

Modificar e remover um índice


O comando ALTER INDEX não pode ser usada para alterar qualquer uma das características
descritas incluindo
capítulo, neste o tipo (B * árvore ou bitmap) do índice, as colunas, e se é ou única
não exclusivo. O comando ALTER INDEX situa-se no domínio da administração do banco de dados
e é tipicamente
utilizado para ajustar as propriedades físicas do índice, não as propriedades lógicos que são de seu
interesse
desenvolvedores. Se for necessário alterar qualquer uma destas propriedades, o índice deve ser
eliminada
criada. Continuando
e re- o exemplo na secção anterior, para alterar o índice EMP_I2 para incluir o
aniversários dos empregados, você usa o seguinte:

Este índice compósito agora inclui colunas com diferentes tipos de dados. As colunas que ser
listados na mesma ordem em que são definidas na tabela, mas esta é de forma alguma necessário.
Quando uma tabela é descartado, todos os índices e restrições definidas para a tabela são
Se umdescartados
índice foitambém.
criado implicitamente através da criação de uma restrição, em seguida, deixando
cair
o índice.
a restrição
Se o índice
também havia
vaisido
cair criado de forma explícita e a restrição criada mais tarde, em seguida,
se a restrição
foram retiradas, o índice iria sobreviver.

Exercício 5-5: criar índices Neste exercício, criar, preencher e adicionar alguns índices para o
tabela CLIENTES.

1. Conecte-se ao esquema HR e criar os clientes, pedidos, ORDER_ITEMS, e


PRODUTOS tabelas como segue:

2. Criar um composto B índice * Árvore sobre os nomes dos clientes e status.

3. Criar índices de bitmap em uma coluna de baixa cardinalidade.

4. Determine o nome e algumas outras características dos índices criados apenas executando
esteinquerir:

restrições
As restrições de tabela são um meio pelo qual o banco de dados pode impor regras de negócio e
garantir
dados emque o
conformidade com o modelo de entidade-relação determinada pela análise de sistemas que
define o de dados de aplicação. Por exemplo, os analistas de negócios de sua organização pode ter
estruturas
que cada cliente e cada ordem deve ser unicamente identificável por número, que nenhuma ordem
decidido
pode serpara um cliente antes que o cliente foi criado, e que toda a ordem deve ter um válido
emitido
data e um valor maior que zero. Estes seriam implementados através da criação de restrições de
chave
na coluna
primária
CUSTOMER_ID da tabela CLIENTES e a coluna do ORDER_ID
mesa de ordens, uma restrição de chave estrangeira na tabela Pedidos referenciando a tabela
CLIENTES,
restrição de não
um nulo na coluna DATA da tabela de encomendas (o tipo de dados DATA vai si só,
garantir
que quaisquer datas são válidas automaticamente-não vai aceitar datas inválidos), e uma restrição de
verificação
coluna na
ORDER_AMOUNT na tabela de encomendas.
Se qualquer DML executada contra uma tabela com restrições definidas viola uma restrição, o
conjuntoserá revertida automaticamente. Lembre-se que uma instrução DML que afeta muitas
declaração
pode parcialmente bem sucedido antes que bata um problema de restrição com uma linha particular.
linhas
Se a declaração
parte de uma transação
é várias instruções, então as declarações que já tiveram sucesso permanecerão
mas não confirmada.
intactos
EXAME TIP uma violação de restrição irá forçar uma reversão automática de toda a instrução que
o problema, não apenas a única ação dentro da instrução e não toda a transação.
atingiu

Os tipos de restrições
Os tipos de restrição suportados pela Oracle Database são os seguintes:

• ÚNICO
• NÃO NULO
• CHAVE PRIMÁRIA
• FOREIGN KEY
• VERIFICA
• REF

Restrições têm nomes. É uma boa prática para especificar os nomes com uma nomenclatura
convenção,
padrão mas se eles não estão explicitamente nomeado, a Oracle irá gerar nomes. Uma discussão
sobre REF que são tipicamente utilizados em interacções objeto-relacional está fora do âmbito desta
limitações
guia.
Restrições exclusivas
A única restrição nomeia uma coluna (ou combinação de colunas) para o qual o valor deve ser
diferente para cada linha na tabela. Se a restrição é baseada numa única coluna, esta é conhecida
como acoluna. Se a restrição é composto por mais do que uma coluna (conhecida como uma chave
chave
composta única
restrição), as colunas não tem que ser o mesmo tipo de dados ou ser adjacente na definição da tabela.
Uma singularidade de restrições exclusivas é que é possível inserir um valor NULL para as
é realmente
colunas de
possível
chave;ter
isto
qualquer número de linhas com valores nulos em suas colunas de chave. Isto
éporque NULL não é igual a nada, nem mesmo para outro NULL. Assim, a seleção de linhas em uma
coluna vai garantir que apenas uma linha é devolvida a menos que você procurar NULL, caso em
chave
quelinhas
as todosonde as colunas de chave são NULL será retornado.

EXAME DICA É possível inserir muitas linhas com NULLs em uma coluna com uma restrição
Isso não é possível para uma coluna com uma restrição de chave primária.
exclusiva.

restrições exclusivas são impostas por um índice. Quando uma restrição exclusiva é definida, a
procurar
Oracleum índice sobre as colunas de chave, e se não existir, ele será criado. Então, sempre que um
linha é inserida, a Oracle irá procurar o índice para ver se os valores das colunas de chave já estão
presente; se forem, ele irá rejeitar a inserção. A estrutura destes índices (conhecidos como índices de
árvore
não B *valores
inclui ) nulos, razão pela qual são permitidas muitas linhas com NULL; eles simplesmente
não fazer
existe no índice. Enquanto o primeiro objectivo do índice é para aplicar a restrição, ele tem uma
efeito: melhorar o desempenho se as colunas de chave são usadas nas cláusulas WHERE das
secundário
instruções
No entanto,SQL.
selecionando ONDE KEY_COLUMN IS NULL não pode usar o índice (porque ele não
inclui
os nulos) e, portanto, sempre resulta em uma varredura de toda a tabela.

As restrições de não-nulo
Os não-nulos valores forças de restrição a ser celebrado a coluna de chave. Restrições não-nulos são
definidos por colunas e às vezes são chamados colunas obrigatórias ; se o requisito de negócio é que
um grupo de colunas devem ter todos os valores, você não pode definir uma restrição de não nulo
para o mas
grupo conjunto
deve definir uma restrição de não nulo para cada coluna.
Qualquer
em um erro. Étentativa
possívelpara inserir
ignorar uma linha sem
a necessidade especificarum
de especificar valores
valorpara as colunas
através resultados
da inclusão de umanão-
cláusula
coluna
constrangido
aopadrão
criar ano
tabela,
nulos como discutido na seção anterior “Criando tabelas com a coluna
Especificações."

Restrições de chave primária


A chave principal é o meio de localização de uma única linha em uma tabela. O paradigma banco de
dados uma
inclui relacional
exigência que cada tabela deve ter uma chave primária, ou seja, uma coluna (ou
de colunas) que pode ser usado para distinguir cada linha. Oracle Database desvia do paradigma
combinação
(Como fazem algumas outras implementações de RDBMS), permitindo tabelas sem chaves
primárias.
A implementação de uma restrição de chave primária está em vigor a união de uma restrição
exclusiva
restrição e uma
de não nulo. As colunas de chave deve ter valores únicos, e eles podem não ser nulo. Como
restrições exclusivas, um índice deve existir nas colunas com restrição. Se um já não existe, um
com
índice será criado quando a restrição está definida. Uma tabela pode ter apenas uma chave primária.
criar uma segunda, e você obterá um erro. Uma tabela pode, no entanto, ter qualquer número de
Tente
única
restrições e colunas não-nulo, por isso, se há várias colunas que os analistas de negócios têm
decidiu deve ser único e povoada, um deles pode ser designado a chave primária e os outros
feita única e não nulo. Um exemplo poderia ser uma tabela de funcionários, onde endereço de e-
mail, Sociais
número de segurança e número de empregados são todas necessárias e único.

EXAME TIP original e restrições de chave primária precisa de um índice. Se não existir, um será
criado automaticamente.

Restrições de chave estrangeira


Uma chave estrangeira restrição é definido na tabela a criança numa relação pai e filho. a restrição
designa uma coluna (ou colunas) na tabela a criança que corresponde às colunas chave primária na
tabela pai. As colunas não precisam ter os mesmos nomes, mas eles devem ser do mesmo tipo de
dados.
restrições de chave estrangeira definir a estrutura relacional da base de dados, isto é, a um de muitos
relações que ligam a mesa, em sua forma normal do terceiro.
para
Se a tabela pai tem restrições exclusivas, bem como (ou em vez de) uma restrição de chave
colunas
primária,
podemestes
ser usadas como base de restrições de chave estrangeira, mesmo se eles são
anuláveis.

TIP EXAME A restrição de chave estrangeira é definida na mesa de criança, mas uma chave única
ou primária
restrição já deve existir em tabela pai.

Assim como uma restrição exclusiva permite valores nulos na coluna restrito, o mesmo acontece
limitação.
com uma Vocêchave
podeestrangeira
inserir linhas na tabela de criança com nulos colunas de mesmo de chave
estrangeira
uma linha na
setabela
não houver
pai com um valor nulo. Isso cria órfãos linhas e pode causar terrível
confusão. Como regra geral, todas as colunas em uma restrição exclusiva e todas as colunas em uma
restrição de chave são melhor definidas com restrições de não-nulo, bem; esta será muitas vezes um
estrangeira
requerimento.
negócio
A tentativa de inserir uma linha na tabela filho para o qual não há nenhuma linha correspondente
daránaumtabela
erro.pai
Da mesma forma, excluir uma linha na tabela pai vai dar um erro se já existem
linhas referentes a ele na tabela filho. Existem duas técnicas para alterar esse comportamento.
Primeiro,pode
restrição o ser criado como ON DELETE CASCADE. Isto significa que se uma linha na tabela
pai é
excluída, a Oracle irá procurar tabela filho para todas as linhas correspondentes e excluí-los também.
Isso vai automaticamente. Uma técnica menos drástica é para criar a restrição como ON DELETE
acontecer
SET NULL.
Neste caso, se uma linha na tabela pai é excluído, a Oracle irá procurar tabela filho para toda a
combinando linhas
órfãs, mas ainda vaieexistir.
definirSe
as as
colunas de na
colunas chave estrangeira
tabela para null.
filho também Isto restrição
têm uma significa de
quenão-nulo,
as linhas
criançao seráda tabela pai irá falhar.
então
eliminação
Não é possível deixar cair ou truncar a tabela pai em um relacionamento de chave estrangeira,
nenhuma
mesmolinha
se houver
na tabela filho. Isto aplica-se ainda se o ON DELETE SET NULL ou ON DELETE
foi usado cláusula CASCADE.
Uma variação sobre a restrição de chave estrangeira é a auto-referência restrição de chave
define
estrangeira.
uma condição
este onde existem as linhas pai e filho na mesma tabela. Um exemplo é uma tabela
de
funcionários, que inclui uma coluna para o gerente do funcionário. O gerente é um empregado e
obrigação
existem na tabela. Então, se a chave primária é a coluna EMPLOYEE_ID eo gerente é identificado
por um MANAGER_ID coluna, em seguida, a restrição de chave estrangeira irá indicar que o valor
coluna MANAGER_ID deve remeter para um EMPLOYEE_ID válido. Se um empregado é o seu
do
gerente, em seguida, a linha remete para si mesmo.
próprio

Restrições de verificação
A verificação de restrição pode ser usado para impor regras simples, como que o valor inserido em
uma coluna
deve estar dentro de uma gama de valores. A regra deve ser uma expressão que irá avaliar como
VERDADEIRO
FALSO. As regras
oupodem referir-se a valores absolutos inseridos como literais ou para outras
ecolunas na mesma
eles podem fazer linha,
uso de algumas funções. Como muitas restrições de verificação que você quer
podecoluna,
uma ser aplicado
mas não
a é possível usar uma subconsulta para avaliar se um valor é permitido ou
uso de funções, tais como SYSDATE.

DICA A restrição de não nulo é de fato implementado como uma restrição de verificação pré-
configurado.
definindo Restrições
As restrições podem ser definidos durante a criação de uma tabela ou adicionado à tabela
posteriormente.
restrições na criação
ao definir
da tabela, a restrição pode ser definida em linha com a coluna à qual ele
refere-se ou no final da definição da tabela. Há uma maior flexibilidade para usar a última técnica.
Para
exemplo, é impossível definir uma chave estrangeira que refere-se a duas colunas ou um cheque
restrição que se refere a qualquer coluna diferente daquele ser constrangido se a restrição é definida
em linha,
mas ambos estes são possíveis se a restrição é definida na extremidade da mesa.
Para as restrições que exigem um índice (as restrições de chave únicas e primários), o índice
ser criado com a tabela se a restrição é definida no momento da criação da tabela.
Considere estas instruções de criação de dois mesa (ao qual foram adicionados números de
linha):

Tomando estas declarações linha por linha, aqui está o processo:

1. A primeira tabela criada é DEPT, a intenção de ter uma linha para cada departamento.
2. DEPTNO é numérico, dois dígitos, sem casas decimais. Esta é a chave primária da tabela. a
restrição
é nomeado DEPT_DEPTNO_PK.
3. Uma segunda restrição aplicada a DEPTNO é uma verificação de se limitar a números na
gama
90.de
A 10
restrição
a é nomeado DEPT_DEPTNO_CK.
4. A coluna é DNAME caracteres de comprimento variável, com uma restrição
DEPT_DNAME_NN
tornando-se não anulável.
5. A segunda tabela criada é EMP, a intenção de ter uma linha para cada funcionário.
6. EMPNO é numérico, até quatro dígitos sem decimais. Marcas EMP_EMPNO_PK restrição
isso como chave primária da tabela.
7. ENAME consiste de caracteres de comprimento variável, com uma tomada de restrição
EMP_ENAME_NN
não anuláveis.
8. MGR é gerente do funcionário, que se deve ser um funcionário. A coluna é definida
da mesma forma como coluna de chave primária da tabela de EMPNO. a restrição
EMP_MGR_FK define esta coluna como uma chave externa de auto-referência, portanto,
qualquer
deve se referir
valor adigitado
uma linha já existente no EMP (apesar de não ser constrangido a não ser
nulo, ser
pode pordeixado
isso em branco).
9. DOB, aniversário do empregado, é uma data e não restrita.
10. HireDate é a data em que o empregado foi contratado e não é limitado. Pelo menos ainda
não.
11. DEPTNO é o departamento com o qual o empregado está associado. A coluna é definida em
da mesma forma como coluna de chave primária da tabela DEPT de DEPTNO, ea restrição
EMP_DEPTNO_FK impõe uma relação de chave estrangeira; não é possível atribuir um
empregado a um departamento que não existe. Esta é anulável, no entanto.
12. O EMP_DEPTO_FK restrição é ainda definida como ON DELETE SET NULL, por isso, se
o linha pai em DEPT é excluído, todas as linhas filho correspondente em EMPNO terá
DEPTNO
para NULL.
set
13. EMAIL é dados de caracteres de comprimento variável e deve ser exclusivo se inserido
(embora
vazio).
ele pode ser deixado
14. Isto define um EMP_HIREDATE_CK adicional de restrição de nível de tabela. a restrição
cheques para uso de trabalho infantil, rejeitando quaisquer linhas onde a data da contratação
não é,mais
anos pelotarde
menos, 16 o aniversário. Esta restrição não pode ser definido em linha com
do que
porque a sintaxe não permite referências a outras colunas nesse ponto.
HireDate
15. Um EMP_EMAIL_CK restrição adicional é adicionado à coluna EMAIL, que faz com que
doiscontrolo do endereço de e-mail. A busca funções Instr para o sinal de arroba (@) e ponto (.)
caracteres (que estará sempre presente em um endereço de e-mail válido); se não pode
encontrar
eles, tanto de
a condição de verificação irá retornar FALSE, ea linha será rejeitada.

Os exemplos anteriores mostram diversas possibilidades para definir restrições na criação da


tabela.
Outras possibilidades não abrangidas incluem o seguinte:

• Controlar a criação do índice para as restrições de chave únicas e primários


• Definir se a restrição deve ser verificada no momento da inserção (que é por padrão) ou
mais tarde, quando a transação é confirmada
• indicando se a restrição é de fato sendo aplicadas em tudo (que é o padrão) ou é
Desativado

É possível criar tabelas sem restrições e, em seguida, adicioná-los mais tarde com um ALTER
comando TABLE. O resultado final será o mesmo, mas esta técnica não tornar o código menos auto-
documentando porque a definição da tabela completa, então, ser repartido por várias declarações
bastante
do que estar em um.

Estado restrição
A qualquer momento, cada restrição é ativado ou desativado e validado ou não validado. Qualquer
combinação destes é possível sintacticamente:

• ATIVAR VALIDATE Não é possível inserir linhas que violam a restrição, e


todas as linhas na tabela em conformidade com a restrição.
• DISABLE NOVALIDATE Quaisquer dados (em conformidade ou não) pode ser inserido, e
pode
já haver dados não-conformes na tabela.
• ATIVAR NOVALIDATE Não pode já estar de dados não-conformes na tabela, mas todos
dados inseridos agora deve estar em conformidade.
• DISABLE VALIDATE Todos os dados na tabela está em conformidade com a restrição, mas
novas
não. linhas
O índice
precisam
também é lançada sobre a restrição.

A situação ideal (e o padrão quando uma restrição é definida) é ATIVAR VALIDATE. este
irá garantir que todos os dados são válidos, e há dados inválidos podem ser inseridos. O outro
DISABLE NOVALIDATE, pode ser útil ao transferir grandes quantidades de dados para uma tabela.
extremo,
bem ser que os dados que estão sendo enviados não está em conformidade com as regras de
Pode
negócios,
grande carregamento
mas em vezfalhar
de terpor
umcausa de algumas linhas ruins, colocando a restrição neste estado irá
permitir o carregamento
ter sucesso. Imediatamente após o carregamento, a transição da restrição para o ACTIVAR
Estado NOVALIDATE. Isso vai evitar que a situação se deteriore ainda mais, enquanto os dados são
verificadas para conformidade antes da transição a restrição para o estado ideal.
Como exemplo, considere este script, que lê dados de uma tabela fonte de dados em tempo real
de dados
em umade tabela
arquivo. A suposição é de que existe uma restrição NOT NULL em uma coluna da
tabela
que podem
de destino
não ter sido imposta na tabela de origem.

Verificação restrição
As restrições podem ser verificados como uma instrução é executada (uma restrição IMEDIATA) ou
quando
transaçãoumé confirmada (a restrição diferido). Por padrão, todas as restrições são imediatos e
não postergáveis. Uma abordagem alternativa para o exemplo anterior teria sido possível se a
restrição foi criado como deferrable.

Para a restrição a ser deferrable, ele deve ter sido criado com a sintaxe apropriada.

Não é possível fazer uma deferrable restrição mais tarde, se ele não foi criado dessa forma. o
restrição SA_NN1 irá, por padrão, ser aplicada quando uma linha é inserida (ou atualizado), mas a
verificação
pode ser adiada até que a transação seja confirmada. Um uso comum para constrangimentos
postergáveis
chaves estrangeiras.
é com Se um processo insere ou atualiza linhas em ambas as tabelas pai e filho, em
seguida, se
restrição deochave estrangeira não é diferido, o processo pode falhar se as linhas não são processados
na correta
ordem.
Alterar o status de uma restrição entre ativado / desativado e
VALIDATE / NOVALIDATE é uma operação que afetará todas as sessões. A mudança de status é
um dos dadosdo Dicionário. Alternar uma restrição deferrable entre imediato e diferido é
Atualização
sessão específica, embora o estado inicial será aplicada a todas as sessões.

EXAME DICA Por padrão, as restrições estão habilitadas e validados, e eles não estão postergáveis.
Exercício 5-6: Gerenciar restrições Neste exercício, definir e ajustar algumas restrições sobre a
criado no Exercício 5-5 .
mesa

1. No SQL Developer, navegue para o esquema HR e clique na tabela clientes.


2. Vá para a guia Restrições para ver as quatro restrições NOT NULL que foram criados com o
mesa. Note-se que os seus nomes não são úteis, isso será corrigido na etapa 8.
3. Clique no botão Ações e escolha Restrições: Adicionar chave primária.
4. Na janela de chave primária Adicionar, nomeie a restrição PK_CUSTOMER_ID, escolha o
Customer_id coluna e clique em Aplicar.
5. Escolha a guia Mostrar SQL para ver a instrução de criação restrição e clique em Aplicar

botão para executar a instrução.


6. Ligue para o seu banco de dados como usuário HR com o SQL * Plus.
7. Execute esta consulta para encontrar os nomes das restrições:

8. Renomeie os constrangimentos para algo mais significativo usando os nomes de restrição


originais
recuperado no passo 7, com comandos ALTER TABLE.

9. Adicione as seguintes restrições no esquema HR:

Visualizações
Para o usuário, uma vista parece uma tabela, em outras palavras, uma estrutura bidimensional de
linhas decontra o qual o usuário pode executar SELECT e DML. O programador sabe o
colunas
Verdade: A vista é apenas uma instrução SELECT nomeado. Qualquer instrução SELECT retorna
um dois-dimensional
conjunto de linhas. Se a instrução SELECT é guardada como um ponto de vista, então sempre que os
utilizadores
linhas na vista
consultar
(sob a impressão
ou atualização
de que é uma tabela), a declaração é executado, eo resultado é
apresentadas aos usuários como se fosse uma tabela. A instrução SELECT em que a visão é baseada
pode ser coisa. Pode associar tabelas, executar agregações, ou os tipos; absolutamente qualquer
qualquer
comando
pode ser usado
legal SELECIONAR
como a base para um ponto de vista.

EXAME TIP Visualizações compartilham o mesmo espaço de nomes como tabelas. Em qualquer
lugar que
Nome do ponto
um nome
de vista
de tabela
também
podem
é sintaticamente
ser usados, uma
correto.

Por que usar exibições em tudo?


As possíveis razões incluem o fornecimento de segurança, simplificando a instrução SQL do
usuário, evitando
melhorar o desempenho,
erros, e tornando compreensível dados. nomes de tabelas e colunas são muitas
vezes longo
muito e O ponto de vista e suas colunas podem ser muito mais óbvio.
sentido.

Visualizações para reforçar a segurança


Pode ser que os usuários devem ver apenas determinadas linhas ou colunas de uma tabela. Existem
várias maneiras de
impor esta, mas uma visão muitas vezes é o mais simples. Considere a tabela HR.EMPLOYEES.
Isso inclui
detalhes pessoais que não devem ser visíveis para o pessoal fora do departamento de pessoal. Mas a
terá de ser capaz de ver a informação de custeio. Essa visão vai despersonalizar os dados.
equipe de finanças

Observe o uso de qualificadores de esquema para a tabela como a fonte dos dados (muitas vezes
referida
a base de oucomo quer tabela) e o ponto de vista; vistas são objetos de esquema e pode desenhar seus
o detalhe
dados de
tabelas no mesmo esquema ou em outros esquemas. Se o esquema não é especificado, ele irá,
naturalmente,
o esquema atual.
estar em
equipe financeira pode então ser dada permissão para ver a vista, mas não a tabela e pode emitir
declarações como esta:

Eles vão ver apenas os cinco colunas que constituem o ponto de vista, não as colunas restantes do
Funcionários com as informações pessoais. A visão pode ser unida a outras tabelas ou agregadas
se fosse uma mesa.
como

Um conjunto bem construído de pontos de vista pode implementar uma estrutura de segurança
dando
inteiro
aos usuários
no bancoacesso
de dados,
aos dados que eles precisam para ver enquanto ocultando dados que não
precisam de ver.
Visualizações para simplificar SQL Usuário
Será muito mais fácil para os usuários a consultar dados se o trabalho duro (tais como associações ou
agregações)
para eles, o código
é feito que define a vista. No exemplo anterior, o usuário tinha que escrever código que
juntou-se à vista EMP_FIN à mesa de departamentos e resumiu os salários por departamento.
Isto tudo pode ser feito em uma exibição.

Em seguida, os usuários podem selecionar a partir DEPT_SAL sem precisar saber nada sobre se
como
junta
classificar
ou mesmoos resultados.

Em particular, eles não precisam saber como ter certeza de que todos os departamentos estão
aqueles
listados,
sem mesmo
empregados. O exemplo na seção anterior teria perdido estes.

Visualizações para evitar erros

É impossível evitar que os usuários de cometer erros, mas vistas bem construídos podem impedir
que alguns
erros decorrentes de uma falta de compreensão de como os dados devem ser interpretados. A secção
já introduziu este conceito através da construção de uma visão que irá listar todos os departamentos,
precedente
ou não
eles têm atualmente a equipe atribuídos a eles.
Uma visão pode ajudar a apresentar os dados de uma forma que não é ambíguo. Por exemplo,
nunca
muitas
realmente
aplicações
excluir linhas. Considere esta tabela:

A coluna ACTIVE é uma bandeira indicando que o funcionário está empregado atualmente e
paraserá
Y quando
o padrão
uma linha é inserida. Quando um usuário, por meio da interface do usuário, “apaga”
um empregado, o
subjacente a instrução SQL será uma atualização que define ACTIVE para N. Se os usuários que não
estão cientes
consultar a tabela,
deste eles podem interpretar mal severamente os resultados. Muitas vezes é melhor dar-
alhes
vista.
acesso
Consultas dirigidas a este ponto de vista não pode possivelmente ver “excluído” membros da
equipe.
Visualizações para tornar os dados Compreensível
As estruturas de dados em um banco de dados será tabelas normalizadas. Não é razoável esperar que
os usuários
entender as estruturas normalizadas. Para dar um exemplo do Oracle E-Business Suite, um “cliente”
no módulo Contas a Receber é, de fato, uma entidade constituída por informação distribuída através
as tabelas HZ_PARTIES, HZ_PARTY_SITES, HZ_CUST_ACCTS_ALL, e muitos mais. Todos
mesas estão ligados por relações de chave chave-de-estrangeiras primárias, mas estes não são
estes
definidos em qualquer
identificadores visíveis aos usuários (como um número de cliente). Eles são baseados em colunas os
usuários
ver nunca
que têm valores internos gerados pelas sequências. Os formulários e relatórios usados para
cliente informação nunca abordar diretamente essas tabelas; todos eles funcionam através de pontos
recuperar
de vista.
, Bem como a apresentação de dados para os utilizadores de uma forma compreensível, a
de abstração
utilizaçãoentre
de pontos
os objetos
de vista
vistos
de proporcionar
pelos usuáriosuma
e oscamada
objetos armazenados no banco de dados pode
inestimável para trabalhos de manutenção. Torna-se possível redesenhar as estruturas de dados sem
ser
recodificar a aplicação. Se as tabelas são alterados, em seguida, ajustar as definições de visualização
ter
podem fazer
alterações qualquer
para o SQL e PL / código SQL desnecessária. Esta pode ser uma técnica poderosa para
aplicações portáveis entre bases de dados diferentes.
fazer

Visualizações de Desempenho
A instrução SELECT atrás de um ponto de vista pode ser otimizado por programadores para que os
usuários não precisam
se preocupar com código de tuning. Pode haver muitas possibilidades para obter o mesmo resultado,
mas alguns
técnicas podem ser muito mais lento do que outros. Por exemplo, ao se juntar duas mesas,
geralmente
escolha entre
háouma
loop aninhado aderir e o hash de participar. Um loop aninhado usa um índice para
chegarindividuais;
linhas ao uma associação de hash lê a tabela inteira na memória. A escolha entre os dois
será
dependente do estado dos dados e os recursos de hardware disponíveis.
Teoricamente, você pode sempre contar com o otimizador Oracle para trabalhar a melhor
maneira mas
declaração, de executar
há casosum
emSQL
que o otimizador começa errado. Se os programadores sabem que

técnica é melhor, eles podem instruir o otimizador. Este exemplo forças uso da técnica de hash:

Sempre que os usuários consultar a exibição DEPT_EMP, a junção será realizada varrendo o
tabelas
detalhe
na memória. Os usuários não precisam saber a sintaxe para forçar o uso deste método
participar.
Não é necessário
Você conhecê-lo, qualquer um; isso está além do alcance da Oracle Certified
Professional
exame, mas o(OCP)
conceito de sintonia com o projeto vista deve ser conhecido.

Visualizações simples e complexas


Para fins práticos, a classificação de uma visão tão simples ou complexo está relacionada à
possibilidadepodem
declarações DML ser executados contra ela. views simples pode (normalmente) aceitar instruções
DML; complexo
pontos de vista não pode. As definições estritas são as seguintes:

• A visão simples desenha dados de uma tabela detalhe, não usa funções, e não faz nenhum
agregação.
• A visão complexa pode se juntar tabelas de detalhes, funções de uso, e realizar agregações.

Aplicando estas definições que mostra um dos quatro pontos de vista usados como exemplos na
o primeiro
secção anterior,
e o terceiro são simples, e a segunda e quarta são complexas.
Não é possível executar INSERT, UPDATE ou DELETE contra uma vista complexo.
O mapeamento das linhas na vista de volta para as linhas nas tabelas de detalhes não podem ser
estabelecida em uma base one-to-one, que é necessário para operações DML. Normalmente, é
sempre
possível
executar DML contra uma visão simples, mas nem sempre. Por exemplo, se a visão não inclui um
coluna que tenha uma restrição NOT NULL, em seguida, um INSERT através do ponto de vista não
pode sertem
coluna bem
umsucedido
valor padrão).
(a menos
Issoque
pode
o produzir um efeito desconcertante, porque a mensagem de
referem-se a uma mesa e uma coluna que não são mencionadas na instrução, tal como demonstrado
erro
no primeiro
exemplo na Figura 5-9 .
Figura 5-9 DML vistas simples e complexos

A primeira vista na figura, RNAME_V, está em conformidade com a definição de uma visão
INSERT
simples,
nãomas
podeumser realizada através dele porque está faltando uma coluna obrigatória. O segundo
ponto de vista,
RUPPERNAME_V, é uma vista complexo porque inclui uma função. Isso faz com que um INSERT
impossível porque não há nenhuma maneira o banco de dados pode descobrir o que realmente deve
ser inserido.
não istoengenharia reversa do efeito da função UPPER em uma forma determinista. Mas
pode fazer
sucede porque isso não depende da função.
DELETE

CREATE VIEW, ALTER VIEW, e DROP VIEW


A sintaxe para criar uma visão é a seguinte:

Note-se que vistas são objetos de esquema. Não há razão para não ter uma vista de propriedade
referenciando
de um usuário
tabelas de detalhes de propriedade de outro usuário. Por padrão, a visão será criada na
esquema. As palavras-chave opcionais, nenhum dos quais foram usados nos exemplos até agora, são
atual
as seguintes:
• OR REPLACE Se a vista já existir, ele será descartado antes de ser criado.
• FORCE ou NOFORCE palavra-chave a força irá criar a vista, mesmo se as tabelas de
detalhes
na subconsulta não existem. NOFORCE é o padrão e irá causar um erro se o detalhe
tabela não existe.
• WITH CHECK OPTION Isso tem a ver com DML. Se a subconsulta inclui um WHERE

cláusula, então esta opção irá evitar a inserção de linhas que não seria visto na vista ou
atualizações que poderiam causar uma fila para desaparecer da vista. Por padrão, esta opção
não está o que pode dar resultados desconcertantes.
ativado,
• WITH READ ONLY Isso impede que qualquer DML através da view.
• CONSTRAINT constraintName Isso pode ser usado para nomear o WITH CHECK
OPTION
COM lidoe apenas restrições para que as mensagens de erro quando as restrições causar
a falhar será mais compreensível.
declarações

Além disso, um conjunto de nomes de alias pode ser fornecido para os nomes das colunas da
desdevisão.
que,Seas não
colunas será nomeado após colunas da tabela ou com aliases especificados no
subconsulta.
O principal uso do comando ALTER VIEW é compilar a vista. A vista deve ser compilado
com sucesso antes que possa ser usado. Quando uma exibição é criado, a Oracle irá verificar se as
etabelas
as colunas
de detalhes
necessárias em que a visão se baseia existem. Se não o fizerem, a compilação falhar,
ea vista não será criado, a menos que você usar a opção FORCE. Nesse caso, a vista será
criado mas não poderá ser usado até que as tabelas ou colunas a que se refere são criados e a vista
compilado com sucesso. Quando uma vista inválida é consultado, a Oracle vai tentar compilá-lo
está
automaticamente. Se a compilação for bem-sucedido porque o problema foi corrigido, os usuários
nãofoisaberão
lá sempre um problema, exceto que a sua consulta pode demorar um pouco mais do que o
habitual.você
falando, Geralmente
deve compilar manualmente pontos de vista para se certificar de que eles compilar
com êxito,
tendo os usuários
ao invésa descobrir
de erros.
Não é possível ajustar definições de coluna de uma vista após a criação da mesma forma que
colunas
uma pode
tabelaser alterado. A visão deve ser descartado e recriado. O comando DROP é tão
seguinte maneira:

Ao utilizar o OR REPLACE palavras-chave com o comando CREATE VIEW, a exibição será


caiu automaticamente (se é que existe) antes de ser criado.

Exercício 5-7: Criar Visualizações Neste exercício, você irá criar alguns pontos de vista simples e
complexos
usando dados no esquema HR. De qualquer SQL * Plus ou SQL Developer pode ser usado.

1. Ligue para o seu banco de dados como usuário HR.


2. Criar pontos de vista sobre os funcionários e mesas departamento que remover todo o
pessoal
em formação.

3. Criar uma visão complexa que irá juntar e agregar os dois pontos de vista simples. Note que
nãonenhuma
há razão que você não pode ter vistas de pontos de vista.

4. Confirmar que a visão funciona consultando-lo.

sinônimos
Um sinónimo é um nome alternativo para um objecto. Se existirem sinónimos para objetos, então
qualquer
pode abordar
instrução
o objeto
SQL quer pelo seu nome real ou pelo seu sinónimo. Isto pode parecer trivial. Não é.
de sinônimos
Usar
os pontos significa
de vista que ou
e mesas ummesmo
aplicativo podebanco
em qual funcionar para qualquer
de dados usuário,
residem as tabelas.independentemente
Considere a
de qual esquema é dono
seguinte declaração:

O usuário que emitiu a declaração deve saber que a tabela de funcionários é de propriedade do
o banco
esquema
de dados
HR emidentificada pelo link de banco de dados PROD (não se preocupe com banco de
dados de links
meios acessodeaque eles em
objetos sãoum
umdiferente daquele no qual você está conectado banco de dados). Se
um público
sinônimo foi criado com esta declaração:

então tudo o que o usuário (! qualquer usuário) precisa entrar é o seguinte:

Isto dá tanto a independência de dados e transparência de localização. O usuário deve ter


privilégios
acessar o objetopara
subjacente para que a referência à base sinônimo de sucesso. Tabelas e vistas
pode ser renomeado ou realocados sem ter que alterar o código; única os sinônimos precisa ser
ajustado.
Bem como instruções SELECT, DML pode resolver sinônimos como se fossem o
objeto a que se referem.
Sinônimos privadas são objetos de esquema. Ou eles devem estar no seu próprio esquema ou
qualificado
eles devem
comser
o nome do esquema. sinônimos públicos existir independentemente de um esquema.
Um sinônimo
pode ser referido
público
por qualquer usuário a quem foi concedida a permissão para vê-lo sem a
necessidade de
qualificá-lo com um nome de esquema. Sinônimos privadas devem ter nomes exclusivos dentro de
seu esquema.
Sinônimos pode
Público
ter o mesmo nome de objetos de esquema. Ao executar declarações que abordam
sem um qualificador de esquema, a Oracle vai olhar primeiro para o objeto no esquema do local, e
objetos
somente
não podese,
ser encontrado será que vai procurar um sinônimo público. Assim, no exemplo anterior, se
o utilizador
aconteceu de possuir uma tabela chamada EMP, seria isso que iria ser visto, não a tabela apontada
o sinônimo público.
pelo
A sintaxe para criar um sinônimo é a seguinte:

Um usuário terá que foram permissão para criar sinônimos particulares e mais concedido
permissão para criar sinônimos públicos. Normalmente, apenas o administrador de banco de dados
pode criar (ou gota)
sinônimos públicos. Isto é porque a sua presença (ou ausência) afetará todos os usuários.

EXAME TIP O público em sinônimo público significa que não é um objeto de esquema e não pode,
ser prefixado com um nome de esquema. Isso não significa que todo mundo tem permissões contra
portanto,
ele.
Para retirar um sinônimo, faça o seguinte:

Se o objecto para o qual um sinónimo refere-se (a tabela ou vista) é descartada, o sinónimo


existir.
continua
Qualquer tentativa de usar ele retornará um erro. A este respeito, sinônimos comportar-se da
mesma de
pontos forma que
vista. Se o objeto é recriado, o sinônimo devem ser recompilados antes de usar. Tal como
acontece com
acontecerá automaticamente
vistas, este na próxima vez que o sinônimo é dirigida, ou pode ser feito
esta:
explicitamente

Exercício 5-8: Criar e usar sinônimos Neste exercício, você irá criar e usar privado
Sinônimos usando objetos no esquema HR. Você pode usar o SQL * Plus ou SQL Developer.

1. Ligue para o seu banco de dados como usuário HR.


2. Criar sinônimos para as três exibições criadas no Exercício 5-7 .
3. Confirme se os sinônimos são idênticos aos objetos subjacentes.

4. Confirmar que os sinônimos de trabalho (mesmo ao ponto de produzir os mesmos erros),


executando
as declarações em Exercício 5-7 contra os sinônimos em vez dos pontos de vista.

5. Gota dois dos pontos de vista.

6. Consulta a visão complexa que é baseada nos pontos de vista caiu.

Note-se que a consulta falha.

7. Tentativa de recompilar o vista quebrada.

Esta falha também.


8. Gota a vista DEP_SUM_V.

9. Consultar o sinónimo de uma visão caiu.

Esta falha.
10. Recompile o sinônimo quebrado.

Note que isso não dá um erro, mas executar novamente a consulta a partir do passo 9. É
definitivamente ainda
partido.
11. arrumado-se por deixar cair os sinónimos.

seqüências
Uma sequência é uma estrutura para a gerao de valores de número inteiro exclusivo. Apenas uma
sessão pode
valorizar ler o próximo
e, assim, forçá-lo a incrementar. Este é um ponto de serialização, de modo que cada valor
gerado será
único.
Sequências são uma ferramenta inestimável para a geração de chaves primárias. Muitas
gerado
aplicações
automaticamente
terá valores de chaves primárias. Exemplos de processamento de dados de
negóciosdetodos
número clientes
os dias
e números
são de pedido. Os analistas de negócios vai afirmaram que todos os
pedidos
ter um número
devem único, que deve continuamente incrementar. Outras aplicações podem não ter um tal
exigência em termos de negócios, mas serão necessários para impor a integridade relacional.
considere
sistema deumfaturamento telefone. Em termos empresariais, o identificador único de um telefone é o
número (que é uma string), e o identificador exclusivo de uma chamada será o número de telefone
telefone
detempo
o origem daechamada começou (que é um timestamp). Estes tipos de dados sejam desnecessariamente
complexos
chaves para usar
primárias paracomo
os volumes altos que passam por um sistema de comutação telefônica.
Enquanto isso
informação será gravada, ela será muito mais rápido de usar colunas numéricas simples para definir
chaves primárias e estrangeiras. Os valores nestas colunas pode ser sequencial, com base.
o
O mecanismo de sequência é independente de tabelas, o mecanismo de bloqueio de linha, e
processamento
cometer ou de reversão. Isto significa que uma sequência pode emitir milhares de valores
exclusivos
mais rápidodedoum queminuto-far
qualquer método que envolve selecionando uma coluna de uma tabela, atualizá-
lo eAcometer
Figura o5-10 mostra duas sessões de selecção de valores a partir de uma sequência de chamada
mudança.
SEQ1.

Figura 5-10 Utilização de uma sequência de duas sessões concorrentemente

Note-se que na figura cada seleção de SEQ1.NEXTVAL gera um número único. o


os números são emitidos consecutivamente, a fim do tempo a selecção foi feita, e o número
incrementa a nível mundial, não apenas dentro de uma sessão.

criação de seqüências
A sintaxe completa para a criação de uma sequência é a seguinte:

Você pode ver que a criação de uma seqüência pode ser simples. Por exemplo, a sequência
foi criado
utilizada
comnaesta:
Figura 5-6

As opções são mostradas na tabela a seguir:


configurações apropriadas para INCREMENT BY, começar, e MAXVALUE ou MINVALUE
virão de seus analistas de negócios.
É raro para o ciclo para ser usado porque permite que os valores duplicados questão sequência.
sequência
Se o está a ser utilizada para gerar valores de chaves primárias, CICLO só faz sentido se existe
umabanco
no rotinade dados que irá excluir linhas antigas mais rápido do que a seqüência irá reeditar
números.
O cache de valores de sequência é vital para um desempenho. Seleccionando a partir de uma
sequêncianoé código
serialização um ponto de
de aplicação; apenas uma sessão pode fazer isso ao mesmo tempo. O
mecanismo
É muito mais é eficiente.
rápido do bloqueio uma fileira, atualizar a linha, e, em seguida, desbloquear com um
COMMIT.
mesmo assim,
Masa selecção de uma sequência pode ser uma causa de contenção entre as sessões. a
chave instrui Oracle para pregenerate números de sequência em lotes. Isso significa que eles podem
CACHE
ser
emitido mais rápido do que se tivessem de ser gerado por demanda.

DICA O número padrão de valores para armazenar em cache é de apenas 20. A experiência mostra
que este não
suficiente. Seéogeralmente
seu aplicativo seleciona a partir da sequência 10 vezes por segundo, em seguida,
definir oNão
50.000. valor dotímido
seja cache para
sobre isso.

usando Seqüências
Para usar uma seqüência, uma sessão pode selecionar o próximo valor com o pseudocoluna
o que obriga a seqüência para incrementar, ou o último (ou “corrente”) valor emitido para a sessão
NEXTVAL,
com o
pseudocoluna CURRVAL. O NEXTVAL será globalmente único. Cada sessão que seleciona ele vai

obter um valor diferente, incrementado para cada SELECT. O CURRVAL será constante para uma
sessão
até que selecciona NEXTVAL novamente. Não há nenhuma maneira de descobrir o que o último
valor emitido
estava. Você sempre
por uma
pode
seqüência
obter o próximo valor de incrementá-lo com NEXTVAL, e você pode
recordar o último valor emitido para sua sessão com CURRVAL, mas você não consegue encontrar o
sempre
último valor emitido.

EXAME TIP O CURRVAL de uma sequência é o último valor emitido para a sessão atual, não
necessariamente o último valor emitido. Você não pode selecionar o CURRVAL até depois de
selecionar o
NEXTVAL.

Um uso típico de sequências é para valores de chaves primárias. Este exemplo utiliza uma
parasequência de CUST_SEQ
gerar o número de clientes únicos, ORDER_SEQ para gerar números de pedidos únicos, e
LINE_SEQ para gerar números de linhas exclusivas para os itens de linha da ordem. Primeiro criar
asqual
o sequências,
é uma única operação de fora.

Em seguida, insira as ordens com as suas linhas como uma única transação.
A primeira instrução INSERT levanta uma ordem com um número de ordem original desenhado
ORDER_SEQ
a partir da sequência
para o número de cliente 1000. O segundo e terceiro demonstrações inserir as duas
linhas do
ordem, usando o número do pedido anteriormente emitidos a partir de ORDER_SEQ como a chave
estrangeira
itens de linha
para
para
conectar
a ordem,
o e os próximos valores de LINE_SEQ para gerar um identificador único
para cada
linha. Finalmente, a transação é confirmada.
Uma sequência não está ligado a qualquer uma mesa. No exemplo anterior, não haveria técnico
razão para não utilizar uma sequência para gerar valores para as chaves primárias da ordem e das
linhas.
Um COMMIT não é necessário fazer o incremento de uma seqüência permanente. É permanente
e visível para o resto do mundo no momento em que acontece. Ele não pode ser revertida,
tornada
também. Seqüência
atualizações ocorrem de forma independente do sistema de gerenciamento de transações. Por esta
razão,
ser lacunas
haverá
nasempre
série. As lacunas será maior se o banco de dados foi reiniciado anormalmente eo
foi usado cláusula CACHE. Todos os números que foram gerados e armazenados em cache, mas
ainda não
perdido emitidas
quando serãode dados é abortada. Na próxima reinicialização, o valor atual da seqüência
o banco
será a última
número gerado, não o último emitido. Assim, com o cache padrão de 20, cada desligamento abortar
falha da instância vai perder até 20 números.
ou
Se os analistas de negócios têm afirmado que não deve haver lacunas em uma seqüência, em
seguida, um outro meio de
gerando números únicos devem ser usadas. Para o exemplo anterior de levantar encomendas, a
corrente
número de ordem pode ser armazenado nesta tabela e inicializado a 10:

Em seguida, o código para criar uma ordem teria de se tornar o seguinte:

Isso vai certamente funcionar como um meio de gerar números de pedidos únicos, e porque o
incremento do número de ordem está dentro da transação que insere a ordem, ele pode ser revertida
com o inserto se necessário. Não haverá lacunas em números de ordem, a menos que uma ordem é
excluída. Mas é muito menos eficiente do que usar uma seqüência, e um código como este é famosa
deliberadamente
por causar de contenção terríveis. Se muitas sessões de tentar bloquear e incrementar a linha que
problemas
contém oatual, toda a aplicação irá pendurar como as sessões fila para ter sua vez.
número
Depois de criar e usar uma seqüência, você pode modificá-lo. A sintaxe é como se segue:

Este comando ALTER é o mesmo que o comando CREATE, com uma exceção: Não há
maneira de definir o valor inicial. Se você deseja reiniciar a seqüência, o único caminho é para soltá-
lo e re- Para ajustar o valor do cache do padrão para melhorar o desempenho do anterior
criá-lo.
encomendar um exemplo de entrada, faça o seguinte:

No entanto, se você deseja redefinir a seqüência para o seu valor inicial, o único caminho é para
soltá-lo e criar
isso de novo.
Exercício 5-9: Criar e usar seqüências Neste exercício, você irá criar e usar algum
sequências. Você vai precisar de duas sessões simultâneas, o SQL Developer ou SQL * Plus.

1. Inicie a sessão no seu banco de dados duas vezes mais HR em sessões separadas. Considere
umeapara
outra
serpara
sua sessão
ser suaAsessão B.
2. Na sua sessão de A, criar uma seqüência como segue:

O uso de NOCACHE é deletério para o desempenho. Se MAXVALUE for especificado,


CICLO será necessário para evitar erros quando MAXVALUE é atingido.
3. Execute os seguintes comandos na sessão apropriada na ordem correta para observar
o uso de NEXTVAL e CURRVAL e o ciclo da sequência:

4. Criar uma tabela com uma chave primária.

5. Criar uma sequência para gerar valores de chaves primárias.

6. Na sua sessão de A, inserir uma linha para a nova tabela e se comprometer.

7. Na sua sessão B, inserir uma linha para a nova tabela e não cometê-lo.

8. Na sua sessão de A, inserir uma terceira linha e cometer.

9. Na sua sessão B, reverter a segunda inserção.

10. Em sua sessão B, ver o conteúdo da tabela.

Isso demonstra que as sequências são incrementados eo próximo valor é publicado


imediatamente, fora do mecanismo de controlo da transacção.
11. arrumado acima.
12. Conecte-se ao esquema HR com o SQL Developer ou SQL * Plus e criar três
sequências que irão ser utilizados em exercícios posteriores.

Broca Two-Minute
Categorizar banco de dados principal Objects
• Alguns objetos contêm dados, principalmente tabelas e índices.
• Objetos de programação, tais como procedimentos armazenados e funções são códigos
executáveis.
• exibições e sinônimos são objetos que dão acesso a outros objetos.
• As tabelas são estruturas bidimensionais, armazenar linhas definidas com colunas.
• existir Tabelas dentro de um esquema. O nome do esquema, juntamente com o nome da tabela
fazidentificar.
uma única

Listar os tipos de dados que estão disponíveis para Columns


• Os tipos de dados de caracteres mais comuns são VARCHAR2, NUMBER e DATE.
• Existem muitos outros tipos de dados.

Criar uma tabela simples


• As tabelas podem ser criadas a partir do nada ou com uma subconsulta.
• Após a criação, definições de coluna podem ser adicionados, caiu, ou modificado.
• A definição da tabela pode incluir valores padrão para colunas.

Criar e usar tabelas temporárias


• linhas em uma tabela temporária são visíveis apenas para a sessão que eles inserido.
• DML em tabelas temporárias não gera redo.
• existem tabelas temporárias somente em sessões Programa Global Áreas (PGAs) ou
temporária
segmentos.
• Uma tabela temporária pode manter linhas para a duração de uma sessão ou de uma transação,
dependendo
sobre a forma como ele foi criado.

índices
• Os índices são necessários para impor restrições de chave únicas e primários.

• nulos não são incluídos em índices de árvore B *, mas são incluídos em índices bitmap.
• índices B * árvore pode ser única ou não exclusivo, que determina se eles podem aceitar
duplicar os valores da chave.
• índices B * árvore são adequados para as colunas de alta cardinalidade; índices de bitmap são
para
colunas
baixode cardinalidade.
• índices de mapa de bits pode ser composto, baseado função, ou descendente; índices de árvore
B única,
* também
comprimido,
pode ser e a chave de inverter.

restrições
• As restrições podem ser definidas na criação da tabela ou adicionado mais tarde.
• A restrição pode ser definida em linha com a sua coluna ou no nível da tabela após as colunas.
• restrições de nível de tabela pode ser mais complexa do que os definidos em linha.
• Uma tabela pode ter apenas uma chave primária, mas pode ter muitas chaves únicas.
• Uma chave primária é funcionalmente equivalente a única além de não nulo.
• A única restrição não impede a inserção de muitos valores nulos.
• Restrições de chave estrangeira definir as relações entre tabelas.

Visualizações
• Uma visão simples tem mesa de um detalhe (ou base) e usa nem funções nem agregação.
• A visão complexa pode ser baseada em qualquer instrução SELECT, não importa quão
complicada.
• As vistas são objetos de esquema. Para usar uma vista em outro esquema, o nome da visão
deve
comsero qualificado
nome do esquema.
• Uma visão pode ser consultado exatamente como se fosse uma tabela.
• Visualizações podem ser unidos a outros pontos de vista ou para mesas, eles podem ser
agregados
eles podem
e, em
aceitar
algunsinstruções
casos DML.
• Visualizações só existem como construções de dicionário de dados. Sempre que você
consultar
instrução
uma
SELECT
vista, odeve
subjacente
ser executado.

sinônimos
• Um sinônimo é um nome alternativo para uma vista ou uma tabela.
• sinônimos privados são objetos de esquema; sinônimos públicos existem esquemas do usuário
fora e pode
usado semser
especificar um nome de esquema como um qualificador.
• sinônimos compartilham o mesmo espaço de nomes como vistas e tabelas e, portanto, pode
serintercambiável
usado com eles.

seqüências
• Uma sequência gera valores a menos únicas quer MAXVALUE ou MINVALUE e CICLO

foram especificados.
• Incrementar uma seqüência não precisa ser comprometido e não pode ser revertida.
• Qualquer sessão pode incrementar a seqüência, lendo o seu valor seguinte. É possível obter o
último valor emitido para a sessão, mas não o último valor emitido.

Auto teste
1 . Se uma tabela é criada sem especificar um esquema, no qual esquema será? (Escolha o
melhor resposta.)
A. Será um órfão mesa, sem um esquema.
B. A criação irá falhar.
C. Será no esquema SYS.
D. Será no esquema do usuário criá-la.
E. Será no esquema PUBLIC.
2 . Vários tipos de objetos compartilham o mesmo espaço de nomes e, portanto, não pode ter o
mesmo nomeesquema.
o mesmo em Qual dos seguintes tipos de objeto não está no mesmo espaço de nomes
como o (Escolha a melhor resposta.)
outras?
A. Índice
B. PL procedimento / SQL armazenado
C. Sinônimo
D. Tabela
E. Ver
3 . Qual destas afirmações falhará porque o nome da tabela não é legal? (Escolha dois
respostas.)
A. criar a tabela "SELECT" (data col1);
B. criar a tabela "minúscula" (data col1);
C. criar número1 mesa (data COL1);
D. criar 1Número mesa (data COL1);
E. criar atualização da tabela (data col1);
4 . Quais são distinguindo características de tabelas de heap? (Escolha duas respostas.)
A. Uma tabela de pilha pode armazenar linhas de comprimento variável.
B. Mais de uma tabela pode armazenar linhas em uma única pilha.
C. Linhas em uma pilha estão em ordem aleatória.
D. tabelas de heap não podem ser indexados.
E. Tabelas em uma pilha não tem uma chave primária.

5 . Qual dos seguintes tipos de dados são de comprimento variável? (Escolha todos os que se
aplicam.)
A. BLOB
B. CHAR
C. LONG
D. NÚMERO
E. RAW
F. VARCHAR2
6 . Estudar estas declarações:

Será que a inserção ter sucesso? (Escolha a melhor resposta.)


A. A inserção falhará porque o 1.1 é muito longo.
B. A inserção falhará porque o '31 -01-07' é uma string, não uma data.
C. O inserto irá falhar por razões tanto A e B.
D. A inserção terá êxito.
7 . Qual das seguintes não é suportada pela Oracle como um tipo de dados interno? (Escolha o
melhor
responda.)
A. CHAR
B. FLOAT
C. INTEIRO
D. STRING
8 . Considere a seguinte declaração:

Qual será o resultado? (Escolha a melhor resposta.)


A. Haverá um erro por causa da condição impossível.
B. Nenhuma tabela será criado porque a condição retorna FALSE.
C. A tabela T1 vai ser criado, mas vai ser inserido nenhuma linha porque a circunstância
retorna
FALSO.
D. A tabela T1 vai ser criada, e a cada fileira em regiões irá ser inserido porque a
condição retorna um NULL como um filtro de linha.
9 . Quando uma tabela é criada com uma declaração como a seguinte:

haverá quaisquer restrições sobre a nova tabela? (Escolha a melhor resposta.)


A. A nova tabela não terá restrições porque as restrições não são copiados ao criar
tabelas com uma subconsulta.
B. Todas as restrições sobre TAB serão copiados para newtab.
C. chave primária e únicas restrições, mas não verificar e restrições não-nulos, será
copiado.
D. Verifique e restrições não-nulos, mas não único ou chaves primárias, serão copiados.
E. Todas as restrições serão copiados, exceto restrições de chave estrangeira.
10 . Quais os tipos de restrições requer um índice? (Escolha todos os que se aplicam.)
A. VERIFICAÇÃO
B. NOT NULL
C. PRIMÁRIA CHAVE
D. UNIQUE
11 . A transação consiste em duas declarações. O primeiro bem-sucedido, mas o segundo (que
atualizações
várias linhas) falhar a meio por causa de uma violação de restrição. O que vai acontecer?
(Escolha a melhor resposta.)
A. Toda a transação será revertida.
B. A segunda instrução será revertida completamente, eo primeiro será comprometida.
C. A segunda instrução será revertida completamente, eo primeiro permanecerá
descompromissado.
D. Apenas a atualização que causou a violação será revertida; tudo o resto será
comprometido.
E. Apenas a atualização que causou a violação será revertida; tudo o resto vai
permanecem não confirmadas.
12 . Qual das seguintes afirmações está correta sobre índices? (Escolha a melhor resposta.)
A. Um índice pode ser baseada em várias colunas de uma tabela, mas as colunas devem ser
do mesmo tipo de dados.
B. Um índice pode basear-se em várias colunas de uma mesa, mas as colunas devem ser
adjacentes
e especificados na ordem em que eles são definidos na tabela.
C. Um índice não podem ter o mesmo nome de uma tabela, a menos que o índice e a tabela
estão em
esquemas separados.
D. Nenhuma dessas afirmações é correta.
13 . Qual das seguintes opções pode ser aplicado a índices de árvore B *, mas não para bitmap
índices?
(Escolha todas as respostas corretas.)
A. compressão
B. ordem decrescente
C. baseada em função expressões-chave

D. reverso indexação chave


E. Unicidade
F. Utilização de chaves compostos
14 . Dados em tabelas temporárias restringiu visibilidade. Se um usuário faz logon como RH e
insere
emlinhas
uma tabela temporária, para quem vai as linhas sejam visíveis?
A. Para nenhuma sessão diferente daquele que fez a inserção
B. Para todas as sessões conectadas como HR
C. Para todas as sessões, até que a sessão que lhes inserido termina
D. Para todas as sessões, até que a sessão que lhes inserido confirma a transação
15 . Onde é queé os
A. Nunca dados no
gravado emdisco.
uma tabela temporária são escritos para o disco? (Escolha a melhor
resposta.)
B. Para tabela temporário do usuário.
C. Para a tabela temporário do usuário em cujo esquema reside a tabela.
D. Para um disco local para o processo de usuário da sessão.
16 . Qual destes é uma característica definidora de uma visão complexa, ao invés de uma visão
simples?
(Escolha todas as respostas corretas.)
A. A restrição da projecção, seleccionando apenas algumas das colunas da tabela
B. Naming colunas da visão com alias de colunas
C. Restringir a seleção de linhas com uma cláusula WHERE
D. Realizando uma agregação
E. junção de duas tabelas
17 . Considere estas três afirmações:

Por que a primeira consulta ser mais rápido do que o segundo? (Escolha a melhor resposta.)
A. A vista já fez o trabalho de unir as tabelas.
B. A vista utiliza a norma ISO sintaxe de associação, que é mais rápido do que o do Oracle
aderir
na sintaxe
segundautilizada
consulta.
C. O ponto de vista é pré-compilado, então a primeira consulta requer compilação menos
dinâmico
segunda
doconsulta.
que o
D. Não há nenhuma razão para a primeira consulta para ser mais rápido.
18 . Estudar esta declaração criação da vista:

O que pode fazer a seguinte declaração falhar? (Escolha a melhor resposta.)

A. A menos que especificado em contrário, vistas será criada como WITH READ ONLY.
B. A vista é complexa demais para permitir operações DML.
C. O WITH CHECK OPTION irá rejeitar qualquer declaração que muda a
DEPARTMENT_ID.
D. A declaração terá sucesso.
19 . Há uma visão simples SCOTT.DEPT_VIEW na SCOTT.DEPT mesa. Esta inserção falha
com um erro:

O que poderia ser o problema? (Escolha a melhor resposta.)


A. A INSERÇÃO viola uma restrição na tabela de detalhes.
B. A INSERÇÃO viola uma restrição na view.
C. O ponto de vista foi criado como WITH READ ONLY.
D. O ponto de vista foi criado como WITH CHECK OPTION.
20 . Quais são as características distintivas de um sinônimo público, em vez de um privado
sinônimo? (Escolha duas respostas corretas.)
A. sinônimos públicos são sempre visível para todos os usuários.
B. sinônimos públicos podem ser acessados por nome sem um qualificador de nome do
esquema.
C. sinônimos públicos podem ser selecionados sem a necessidade de quaisquer permissões.
D. sinônimos públicos pode ter os mesmos nomes de tabelas ou exibições.
21 . Considere estas três afirmações:

Qual das seguintes afirmações é correta? (Escolha a melhor resposta.)


A. A segunda instrução irá falhar porque um objeto S1 já existe.
B. A terceira declaração irá mostrar o conteúdo de empregados.
C. A terceira declaração irá mostrar o conteúdo dos departamentos.
D. A terceira comunicação irá mostrar o conteúdo da tabela S1, se uma tal tabela no existe
esquema atual.

22 . Uma visão e um sinônimo são criados da seguinte forma:

Posteriormente, o DEPT tabela é descartado. O que vai acontecer se você consultar o


DEPT_S? (Escolha a melhor resposta.)
sinônimo
A. Não haverá um erro porque o sinônimo aborda a vista, que ainda existe,
mas não haverá linhas retornadas.
B. Não haverá um erro se você primeiro recompilar o ponto de vista com o comando
ALTER
VISTA DEPT_V COMPILE FORCE ;.
C. Haverá um erro porque o sinônimo será inválido.
D. Haverá um erro porque a vista será inválido.
E. Haverá um erro porque a vista terá sido caiu implicitamente quando o
mesa foi descartado.
23 . Uma sequência é criado como se segue:

Se o valor atual já é de 50, quando você tentar selecionar SEQ1.NEXTVAL, o que será
acontecer? (Escolha a melhor resposta.)
A. dará um ciclo A sequência e edição 0.
B. dará um ciclo A sequência e um problema.
C. A sequência vai reemitir 50.
D. Haverá um erro.
24 . Você cria uma seqüência como segue:

Depois de selecionar a partir dele algumas vezes, você quer reinicializar-lo para refazer os
númerosComo
gerado. já você pode fazer isso? (Escolha a melhor resposta.)
A. Você deve soltar e recriar a seqüência.
B. Você não pode. Sob nenhuma circunstância pode números de uma sequência ser
reeditado
foi usado.
uma vez que eles
C. Use o comando ALTER seqüência de partida SEQ1 COM 1; para redefinir o próximo
valor
1. a
D. Use o comando ALTER SEQUENCE SEQ1 CICLO; para repor a sequência para a sua
valor inicial.
Respostas
1. D . O de auto-teste
esquema será o padrão para o usuário atual.
A , B , C , e E são incorrectas. A está incorreta porque todas as tabelas devem estar em
um esquema.
incorreto porque aBcriação
é terá sucesso. C está incorreta porque o esquema SYS não é um

esquema padrão. E é incorreta porque enquanto há um público usuário nocional, ele não faz
tem um esquema em tudo.
2. Um . Índices têm o seu próprio namespace.
B , C , D , e E são incorrectas. Existem procedimentos armazenados, sinônimos, tabelas
e visualizações
mesmo namespace. no
3. D e E . D viola a regra de que um nome de tabela deve começar com uma letra, e E
determinar
viola a que um nome de tabela não pode ser uma palavra reservada. Ambas as regras
pode ser contornado usando dupla
citações.
A , B , e C são incorrectas. Estes são incorretas porque todos terão sucesso (embora A e
não são
B exatamente sensível).
4. A e C . Uma pilha é uma tabela de linhas de comprimento variável em ordem aleatória.
B , D , e E são incorrectas. B está incorreta porque uma tabela pilha pode ser apenas
umaincorrecta
e E são tabela. D porque uma tabela pilha pode (e, geralmente, irá) têm índices e um
primário
chave.
5. A , C , D , E , e F . Todos estes são tipos de dados de comprimento variável.
B é incorrecta. Colunas CHAR têm comprimento fixo.
6. D . O número será arredondado para um dígito, ea cadeia será lançado como uma data.
A , B , e C são incorrectas. Arredondamento automático e typecasting vai corrigir os
embora
“erros”
idealmente eles não iria ocorrer.
7. D . STRING não é um tipo de dados internos.
A , B , e C são incorrectas. CHAR, FLOAT, e INTEIRO são todos os tipos de dados
embora
internos,
não tão amplamente utilizado como alguns outros.
8. C . A condição se aplica apenas às linhas selecionadas para a inserção, não para a
criação
A , B , eda
D tabela.
são incorrectas. A está incorreta porque a declaração é sintaticamente
está correto.
incorretaBporque a condição não se aplica ao DDL, apenas para o DML. D é incorrecta
porque a condição irá excluir todas as linhas de seleção.
9. D . Verifique e restrições não-nulos não são dependentes de quaisquer outros do que a
a quetabela estruturas
se aplicam e assim pode seguramente ser copiado para uma nova tabela.
A , B , C , e E são incorrectas. A está incorreta porque não-nula e restrições de
verificação
ser aplicado paraserá
a nova tabela. B , C , e E são incorrecta porque estes constrangimentos
precisa outra
objetos (índices ou uma tabela pai) e por isso não são copiados.
10. C e D . Restrições de chave únicas e primários são aplicadas com os índices.
A e B são incorrectas. Verifique e restrições não-nulos não contam com índices.
11. C . A violação de restrição irá forçar uma reversão da declaração atual, mas nada mais.
A , B , D , e E são incorrectas. A está incorreta porque todas as declarações que foram
bem sucedidos
permanecem intactos. B e D são incorretas porque não há confirmação de nada até que seja
especificamente requerido. E é incorreta porque toda a declaração, não apenas a linha
será revertida.
falhou,
12. D . Todas as declarações são incorretas.
A , B , e C são incorrectas. Um é incorrecta porque índices compostos não necessitam
de ser em
colunas do mesmo tipo de dados. B é incorrecta porque as colunas em uma necessidade
índice composto
não estar fisicamente adjacente. C está incorreta porque índices e tabelas não compartilham
o mesmo
namespace.
13. A , D , e E . Compressão, chave inversa, e única pode ser aplicada apenas a B * Árvore
índices.
B , C , e F são incorrectas. Descendente, com sede em função, e índices compostos
querpodem
B * árvore
ser ou bitmap.
14. Um . Linhas em uma tabela temporária são visíveis apenas para a sessão de inserção.
B , C , e D estão incorrectos. Todos estes incorretamente descrever o escopo da
em uma tabela temporária.
visibilidade das linhas
15. B . Se uma tabela temporária não pode caber no PGA de uma sessão, ele será gravado
tabela
para
temporário.
a sessão de
A , C , e D estão incorrectos. A está incorreta porque as tabelas temporárias podem ser
escritostemporários.
segmentos para C é incorrecta porque a localização do segmento temporário é
sessão
específico, não tabela específica. D está incorreta porque é o processo do servidor sessão
quedados,
os escreve
não o processo de utilizador.
16. D e E . Agregações e junta-se fazer um complexo vista e fazer DML impossível.
A , B , e C são incorrectas. Seleção e projeção ou renomear colunas não faz
a vista complexo.
17. D . Triste mas verdadeiro. Visualizações não vai ajudar o desempenho, a menos que
Aincluem
, B , e dicas
C sãode afinação. A está incorreta porque a vista é apenas uma instrução
incorrectas.
SELECT; isto
não prerun a consulta. B está incorreta porque o otimizador Oracle vai resolver qualquer
diferenças de sintaxe. C está incorreta porque embora vistas são pré-compilados, isso não
afetar a velocidade de compilar declaração de um usuário.
18. C . O WITH CHECK OPTION irá impedir DML que causaria uma linha de desaparecer
a partir da vista.
A , B , e D são incorrectas. A está incorreta porque opiniões são, por padrão, criado
leitura
Escreva. B está incorreta porque a vista é uma visão simples. D está incorreta porque a
instrução
não pode ter sucesso porque a opção de verificação irá rejeitá-la.
19. Um . Existe uma restrição de chave NOT NULL ou primária em DEPT.DEPTNO.
B , C , e D estão incorrectos. B está incorreta porque as restrições são aplicadas no
detalhe
tabelas, e não em opiniões. C e D são incorrecta porque a mensagem de erro seria diferente.
20. B e D . Sinônimos públicos não são objetos de esquema e por isso pode ser abordado
Elesdiretamente
podem ter osúnica.
mesmos nomes de objetos de esquema.
A e C são incorrectas. Estes são incorretas porque os usuários devem ser concedidos
sinônimo
privilégios
público
sobre
antes
umque eles possam vê-lo ou selecione a partir dele.
21. B . A ordem de prioridade é a busca do namespace do esquema antes do namespace
por isso
público,
vai ser o sinônimo privado (para empregados) que será encontrado.
A , C , e D estão incorrectos. A está incorreta porque um sinônimo pode existir tanto no
sector público
namespace eo namespace do esquema. C está incorreta porque a ordem de prioridade vai
encontrar
o sinônimo privado em primeiro lugar. D está incorreta porque não seria possível ter uma
mesa e
um sinônimo privado no mesmo esquema com o mesmo nome.
22. D . O sinônimo vai ficar bem, mas a vista será inválido. Oracle vai tentar
recompilar o ponto de vista, mas isso vai falhar.
A , B , C , e E são incorrectas. A está incorreta porque a vista será inválido. B é
incorreto, pois a palavra-chave FORCE só pode ser aplicado quando se cria uma visão (e
ainda seria inválida, mesmo assim). C está incorreta porque o sinônimo vai ficar bem. E é
incorreto porque opiniões não são descartados de forma implícita (ao contrário de índices e
23. restrições).
D . O padrão é NOCYCLE, ea sequência não pode avançar ainda mais.
A , B , e C são incorrectas. A e B estão incorretas porque CICLO está desativado por
Se fosse
padrão.
ativado, o próximo número emitido seria 1 (não 0), porque 1 é o padrão para
COMEÇAR COM. C é incorrecta porque, em nenhuma circunstância, um problema
sequência
repetindo valores.
24. Um . Não é possível alterar o valor seguinte de uma sequência, então você deve recriá-
lo., C , e D estão incorrectos. B é incorrecta porque, enquanto uma sequência
B
NuncaNOCYCLE
reeditar números,
pode não há nenhuma razão para que uma nova sequência (com o
mesmo
faça nome)
isso. não
C está pode porque START WITH só pode ser especificado no momento da
incorreta
criação. D porque
incorrecta é isso não vai forçar um ciclo instante; ele irá afetar o que acontece apenas
a sequência atinge o seu MAXVALUE ou MINVALUE.
quando
CAPÍTULO 6

DML e simultaneidade

Objetivos do exame
Neste capítulo, você vai aprender a
• 061.9.1 descrever cada Data Manipulation Language (DML)
• Linhas 061.9.2 inserir em uma tabela
• Linhas 061.9.3 Atualização em uma tabela
• 061.9.4 excluir linhas de uma tabela
• Transações de Controle 061.9.5
• 062.9.1 Explique DML e Undo geração de dados
• Monitor de 062.9.2 e administrar Undo Dados
• 062.9.3 descrever a diferença entre Undo Dados e Dados Redo
• 062.9.4 Configurar Undo Retenção
• 062.10.1 descrever o mecanismo de bloqueio e gerenciamento de concorrência Dados
• Monitor de 062.10.2 e resolver conflitos Trava

Dados em um banco de dados relacional é gerido com o Data Manipulation Language (DML)
comandos
SQL. Estesdesão INSERT, UPDATE, DELETE e, com versões mais recentes do SQL, MERGE. este
capítulo discute o que acontece na memória e no disco quando você executar instruções INSERT,
UPDATE oua exclusão maneira pela qual os dados alterados são escritas
declarações
aos blocos de segmentos de mesa e de índice e a versão antiga dos dados é escrito para blocos de um
desfazer segmento. A teoria por trás disso, resumido como o teste ACID, que cada banco de dados
deve passar, é explorado, e você vai ver os aspectos práticos de como os dados undo é gerenciado.
relacional

A transação instruções de controle COMMIT e ROLLBACK, que estão intimamente associados


DML comandos, também são explicados. O capítulo termina com uma análise detalhada dos dados
simultânea
O acesso e a tabela e bloqueio de linha.

Descreva Cada Manipulação de Dados Declaração


Idioma falando, há cinco comandos DML:
Estritamente

• SELECIONAR
• INSERIR
• ATUALIZAÇÃO
• APAGAR
• MERGE

Na prática, a maioria dos profissionais de banco de dados não incluem SELECT como parte do
umaDML.
línguaÉseparada
considerado
em seu próprio direito, que não é razoável quando se considera que os
próximos são
capítulos cinco
dedicados
anos a descrevê-la. O comando MERGE é muitas vezes caiu bem, não porque
não é claramente um comando de manipulação de dados, mas porque não fazer qualquer coisa que
não pode
com outros
sercomandos.
feito Você pode pensar em MERGE como um atalho para a execução de qualquer
um INSERT
UPDATE ou ou
umumDELETE, dependendo de alguma condição. Um comando muitas vezes
considerado com
TRUNCAR. Este DML
é realmente
é um comando (DDL) Data Definition Language, mas porque o efeito
usuários finais é o mesmo que para um DELETE (embora a sua implementação é totalmente
de
diferente), ele se encaixa com
DML.

INSERIR
Oracle armazena dados na forma de linhas em tabelas. As tabelas são preenchidos com linhas
(apenas como
povoada com asumpessoas)
país é de várias maneiras, mas o método mais comum é com a instrução
SQL é uma linguagem orientada a conjunto, de modo que qualquer um comando pode afetar uma
INSERT.
linhadeclaração
essa ou um conjunto
uma pastilha
de linhas.
pode
Segue-se
inserir uma linha individual em uma tabela ou muitas linhas em
muitas
As mesas.
versões básicas da declaração que inserir apenas uma linha, mas as variações mais complexas
pode, cominserir
comando, um várias linhas em várias tabelas.

DICA Existem técnicas muito mais rápidas do que de inserção para preencher uma tabela com um
grande O
linhas. número
utilitário
de SQL * Loader pode carregar dados de arquivos produzidos por um sistema de
alimentação
Bomba de dados podee transferir dados em massa a partir de um banco de dados Oracle para outro,
externa,
quer através
através de umdelink
arquivos
de rede.
de disco ou

EXAME TIP Um comando INSERT pode inserir uma linha, com valores de coluna especificado na
de comando, ou pode inserir um conjunto de linhas criados por uma instrução SELECT.

A forma mais simples da instrução INSERT insere uma linha em uma tabela, usando valores
em linha
fornecidos
como parte do comando. A sintaxe é como se segue:
Aqui está um exemplo:

O primeiro dos comandos anteriores fornece valores para ambas as colunas da tabela de
a mesa
REGIÕES.
tinha umaE se
terceira coluna, a declaração seria um fracasso porque depende de notação
posicional .não
declaração o diz que o valor deve ser inserido no qual coluna; ele depende da posição do
os valores, a saber, a sua ordem no comando. Quando o banco de dados recebe uma declaração
usando
notação posicional, ele irá corresponder a ordem dos valores para a ordem em que as colunas da
São definidos. A declaração também falharia se a ordem das colunas estava errado; o banco de dados
tabela
a inserção, mas seria um fracasso por causa da incompatibilidade de tipos de dados.
tentaria
O segundo comando nomeia as colunas a serem povoadas e os valores com os quais a
preenchê-los. Note que a ordem em que as colunas são mencionados agora torna-se irrelevante,
como a ordem das colunas é a mesma que a ordem dos valores.
contanto
O terceiro exemplo lista uma coluna e, portanto, apenas um valor. Todas as outras colunas serão
nulo.
deixadas
Esta declaração irá falhar se a coluna REGION_NAME não é anulável. O quarto exemplo vai
produzir o mesmo resultado, mas porque não há nenhuma lista de colunas, algum valor (mesmo um
NULL) deve
fornecida paraser
cada coluna.

DICA Muitas vezes, é considerada uma boa prática para não confiar em notação posicional e, em
vez sempre para listar
as colunas. Esta é mais trabalho, mas faz com que o código de auto-documentado (sempre uma boa
idéia!)o Ecódigo
torna tambémmais resistente contra mudanças na estrutura da tabela. Por exemplo, se uma coluna é
adicionado
mesa, todasaasuma
instruções INSERT que dependem de notação posicional irá falhar até que sejam
reescritosum
incluem para
nulo para a nova coluna. código INSERT que nomeia as colunas continuará a funcionar.

Para inserir muitas linhas com um comando INSERT, os valores para as linhas devem vir de uma
inquerir. A sintaxe é como se segue:

Note-se que esta sintaxe não usa a palavra-chave VALUES. Se a lista de coluna for omitido,
então o deve fornecer valores para cada coluna na tabela. Para copiar todas as linhas de uma
subconsulta
tabela se
outro, para
as tabelas têm a mesma estrutura de coluna, um comando como este é tudo que é
necessário:

Isso pressupõe que o REGIONS_COPY tabela existe. A subconsulta SELECIONAR lê cada


linha da tabela de origem, que é REGIÕES, e o INSERT insere-os na tabela de destino,
que é REGIONS_COPY.

EXAME TIP Qualquer instrução SELECT, especificado como uma subconsulta, pode ser usado
como fonte
passado paradeuma
linhas
inserção. Isto permite a inserção de várias linhas. Alternativamente, utilizando a
cláusula
irá inserirVALUES
uma linha. Os valores podem ser literais ou solicitadas durante a variáveis de substituição.

Para concluir a descrição do comando INSERT, deve ser mencionado que é possível
inserir linhas em várias tabelas com uma instrução. Isso não faz parte do Oracle Certified
Professional (OCP) exame, mas para ser completo, aqui está um exemplo:
Para ler esta declaração, começa na parte inferior. A subconsulta recupera todos os funcionários
últimos
recrutados
30 dias.noEm seguida, ir para o topo. A palavra-chave ALL significa que cada linha
selecionada
para inserçãoserá
emconsiderada
todas as tabelas seguintes, não apenas para a primeira tabela para a qual a condição
se primeira
A aplica. condição é 1 = 1, que é sempre verdadeira, então cada linha de origem irá criar uma linha
na
EMP_NO_NAME. Esta é uma cópia da tabela Empregados com os identificadores pessoais
removidos.
A segunda condição é DEPARTMENT_ID <> 80, que irá gerar uma linha na
EMP_NON_SALES para cada funcionário que não é no departamento de vendas; não há
necessidade
tabela a ter apara
coluna
issoCOMMISSION_PCT. A terceira condição gera uma linha em EMP_SALES
para todos os vendedores; não há necessidade para a coluna DEPARTMENT_ID porque tudo será
no departamento 80.
Este é um exemplo simples de uma inserção multitable, mas deve ficar claro que, com uma
instrução,
e, portanto, apenas uma passagem através dos dados de origem, é possível preencher muitas tabelas
de destino.
pode tomar este
uma enorme quantidade de tensão fora o banco de dados.

Exercício 6-1: Use o comando Inserir Neste exercício, usam várias técnicas para inserir linhas
em uma tabela.

1. Conecte-se ao esquema HR com o SQL Developer ou SQL * Plus.


2. Consulta dos produtos, encomendas e tabelas ORDER_ITEMS criados no Exercício 5-5 para
confirmar os dados que são armazenados atualmente.

3. Insira duas linhas na tabela de produtos, oferecendo a linha valores.

4. Insira duas linhas na tabela de ordens, fornecendo explicitamente os nomes das colunas.

5. Insira três linhas na tabela de ORDER_ITEMS, utilizando variáveis de substituição.

Quando solicitado, fornecem os seguintes valores: {1, 1, 2,5}, {2,1,1,3} e {1,2,2,4}.


6. Insira uma linha na tabela produtos, cálculo do PRODUCT_ID ser maior do que 100
o valor corrente alta. Isto terá uma subconsulta escalar.

7. Confirmar a inserção das linhas.

8. Commit as inserções.
A ilustração a seguir mostra os resultados do exercício, usando o SQL * Plus:

ATUALIZAR
O comando UPDATE é usado para alterar as linhas que já existem-linhas que foram criados por um
Inserir comando ou, eventualmente, por uma ferramenta como o Data Pump. Tal como acontece com
qualquer outro comando
ATUALIZAÇÃO SQL,uma
pode afetar um linha ou um conjunto de linhas. O tamanho do conjunto afectado
por uma actualização
determinada por uma está
cláusula WHERE, exatamente da mesma maneira que o conjunto de linhas
recuperadasé por
declaração definida
um SELECT
por uma cláusula WHERE. A sintaxe é idêntica. Todas as linhas atualizadas
estarãonão
mesa; eméum possível para um único comando UPDATE para afetar as linhas em várias tabelas.
Ao atualizar uma linha ou um conjunto de linhas, especifica comando de atualização quais
linhas
colunas
para atualizar.
da Não é necessário (ou mesmo comum) para atualizar a cada coluna da linha. Se
o
coluna já a ser actualizado tem um valor, então este valor é substituído pelo novo valor especificado
o comando UPDATE. Se a coluna não foi povoada-que anteriormente seja, seu valor era
pelo
NULL-então será preenchida após a atualização com o novo valor.
Um uso típico de UPDATE é para recuperar uma linha e atualizar uma ou mais colunas da linha.
recuperação
o irá ser feito usando uma cláusula WHERE que seleciona uma linha por sua chave
primária, queexclusivo
identificador éa que irá garantir que apenas uma linha é recuperada. Em seguida, as colunas
que sãoquaisquer
haverá atualizadosoutras do que a coluna primária chave colunas. É incomum para alterar o valor do
chave primária. O tempo de vida de uma linha começa quando é inserido e, em seguida, pode
continuar através
atualizações, até que
de várias
seja excluído. Ao longo deste tempo de vida, que não costumam mudar sua
chave
Paraprimária.
atualizar um conjunto de linhas, use uma menos restritiva cláusula WHERE que a chave
cadaprimária.
linha de Atualizar
uma tabela, não use qualquer cláusula WHERE em tudo. Este comportamento
conjuntoisso
quando pode
acontece
ser desconcertante
por acidente. Se você selecionar as linhas a serem atualizados com qualquer
coluna que não seja a
chave primária, você pode atualizar várias linhas, não apenas um. Se você omitir a cláusula WHERE
completamente,
você irá atualizar as inteiro de mesa talvez milhões de linhas atualizadas com apenas uma
declaração,
você quis mudar
quandoapenas um.

EXAME TIP declaração Uma atualização pode alterar linhas em apenas uma mesa, mas pode
alterar qualquer
número de linhas na tabela.

Um comando UPDATE deve honrar quaisquer restrições definidas para a tabela, assim como o
INSERÇÃO
original teria. Por exemplo, não será possível atualizar uma coluna que foi marcada como
obrigatória para um valor nulo ou atualizar uma coluna de chave primária para que ele não será mais
exclusivo.
sintaxe o é a seguinte:
básica
A forma mais complexa do comando utiliza subconsultas para um ou mais dos valores de coluna
e para a condição ONDE. Figura 6-1 mostra as atualizações de complexidade variável, executado a
partir*dePlus.
SQL

Figura 6-1 Exemplos de uso da instrução UPDATE


O primeiro exemplo é o mais simples. Uma coluna de uma linha é ajustado para um valor literal.
é escolhido
Porque acomlinha
uma cláusula WHERE que usa o predicado de igualdade na chave primária da
tabela,
uma há
garantia absoluta de que, no máximo, apenas uma linha será afetado. Nenhuma linha será
alterado se
Cláusula WHERE
o não conseguir encontrar todas as linhas em tudo.
O segundo exemplo mostra a utilização de aritmética e uma coluna existente para definir o novo
seleção
valor,
deelinha
o não é feito na coluna de chave primária. Se a seleção não for feito na chave primária
se um predicado nonequality (tais como ENTRE) é utilizado, em seguida, o número de linhas pode
ou
ser actualizados
mais de um. Se a cláusula WHERE é totalmente omitido, a atualização será aplicada a cada linha
a mesa.
O terceiro exemplo na Figura 6-1 apresenta a utilização de um subconsulta para definir o
conjuntoUma
Atualizada. de linhas a ser adicional menor é o uso de uma variável de substituição para solicitar
complicação
ao usuário
um valor a ser usado na cláusula WHERE da subconsulta. Neste exemplo, a subconsulta (linhas 3 e
irá selecionar cada funcionário que está em um departamento cujo nome inclui a string 'TI' e vontade
4)
incrementar seu salário atual em 10 por cento (improvável de acontecer na prática).
É também possível usar subconsultas para determinar o valor para o qual uma coluna irá ser
definido, como no

quarto exemplo. Neste caso, um empregado (identificado por chave primária em linha 5) é
transferido para
departamento 80 (departamento de vendas), e depois a subconsulta nas linhas 3 e 4 define sua taxa
de comissão
para qualquer que seja a taxa de comissão menor no departamento passa a ser.
A sintaxe de uma atualização que usa subconsultas é a seguinte:

Não existe uma restrição rígida sobre as subconsultas utilizando colunas de actualização na
subconsulta
cláusula deve
SET. retornar
o um escalar de valor. Um valor escalar é um valor único de qualquer tipo
adeconsulta
dados é deve
necessária;
retornar uma linha, com uma coluna. Se a consulta retornar vários valores, a
atualização
falhou. Considere estes dois exemplos:

O primeiro exemplo, usando um predicado de igualdade na chave primária, sempre terá êxito.
a subconsulta
Mesmo se não recuperar uma linha (como seria o caso se não houvesse empregado com
EMPLOYEE_ID igual a 206), a consulta ainda irá retornar um valor escalar: um nulo. Nesse caso,
todo
linhaso em funcionários teriam seu conjunto salário para NULL, que não pode ser desejado, mas não
éum erro na medida em que SQL está em causa. O segundo exemplo utiliza um predicado de
igualdade em o que não é garantido para ser único. A declaração terá êxito se existe apenas uma
LAST_NAME,
funcionário com esse nome, mas se houvesse mais de um, seria falhar com o erro “ORA-01427:
Única linha subconsulta retorna mais de uma linha.”Para código que irá trabalhar de forma
confiável,
estado dosnão
dados,
importa
que éovital
que assegurar
a que as subconsultas utilizados para definir os valores da
coluna são escalar.

DICA Uma correção comum para certificar-se de que as consultas são escalares é usar MAX ou
aMIN. Esta versão
declaração do terá êxito:
sempre
atualizar os funcionários definir salário = (select max (salário) dos empregados
ultimo_nome = 'Abel');
onde
No entanto, só porque ele vai trabalhar não significa necessariamente que ele faz o que é desejado.

As subconsultas na cláusula WHERE também deve ser escalar se estiver usando o predicado de
nos igualdade
exemplos (como
anteriores) ou a maior / menor do que predicados. Se ele está usando o predicado IN,
em seguida, o
consulta pode retornar várias linhas, como neste exemplo que usa IN:
Isto irá aplicar a atualização a todos os funcionários em um departamento cujo nome inclui a
string 'TI'.

Existem vários destes. Mas mesmo que a consulta pode retornar várias linhas, ele ainda deve
retornar apenas
uma coluna.

Exercício 6-2: Use o comando update Neste exercício, usam várias técnicas para atualizar
linhas em uma tabela. Supõe-se que a tabela de HR.PRODUCTS é como mostrado na ilustração na
de Exercício 6-1 . Se não, ajustar os valores conforme necessário.
extremidade

1. Conecte-se ao esquema HR usando SQL Developer ou SQL * Plus.


2. Atualize uma única linha, identificado por chave primária.

Esta declaração deve retornar a mensagem “1 linha atualizada.”


3. Atualizar um conjunto de linhas, usando uma subconsulta para selecionar as linhas e
fornecer valores.

Esta declaração deve retornar a mensagem “1 linha atualizada.”


4. Confirmar o estado das linhas.

5. Confirme as alterações feitas.

EXCLUIR
Anteriormente linhas inseridas podem ser removidos a partir de uma tabela com o comando
DELETE.
irá removerOuma
comando
linha ou um conjunto de linhas da tabela, dependendo de uma cláusula WHERE. Se
não há WHERE, todas as linhas na tabela serão removidos (que pode ser um pouco desconcertante
Cláusula
se vocêde fora a cláusula WHERE por engano).
deixou

DICA Não há “aviso” solicita quaisquer comandos SQL. Se você instruir o banco de dados para
um milhão de linhas, ele vai fazê-lo. Imediatamente. Não é nada disso “Tem certeza?” Negócio que
eliminar
alguns
ambientes oferecer.

A eliminação é tudo ou nada. Não é possível nomear colunas. Quando linhas são inseridas, você
pode escolher quais colunas para preencher. Quando as linhas são atualizadas, você pode escolher
quais colunas
atualizar. Mas uma exclusão se aplica a toda linha, a única escolha é que as linhas em que mesa. este
faz com que o comando DELETE sintaticamente mais simples do que comanda o outro DML. A
sintaxe é maneira:
seguinte tão

Este é o mais simples dos comandos DML, especialmente se a condição é omitido. Nesse caso,
cada linha na tabela serão removidos sem aviso. A única complicação está na condição.
Este pode ser um jogo simples de uma coluna para um literal.

A primeira declaração identifica um registro pela chave primária. Apenas uma linha será
tudo,
removida-ou
se o valor dado
nenhuma
não encontrar
linha na uma correspondência. A segunda instrução usa um predicado
nonequality que
poderia resultar na exclusão de várias linhas, ou seja, cada funcionário cujo sobrenome começa com
maiúscula S . A terceira declaração usa um predicado de igualdade, mas não na chave primária. Ele
uma
um número de departamentos com uma variável de substituição, e todos os funcionários nesse
pede
departamento
declaração final
vai.
remove
o todos os empregados que não estão atualmente atribuídos a um
departamento.
A condição pode também ser um subconsulta.

Este exemplo usa uma subconsulta para a seleção de linha que navega a árvore geográfica HR
mais(com
subconsultas) para apagar cada funcionário que trabalha para qualquer departamento que se
baseia
A mesmana Europa.
regra para o número de valores devolvidos pela subconsulta aplica-se para uma
comando: Se a selecção de linha baseia-se um predicado de igualdade (como no exemplo anterior), o
actualização
subconsulta deve ser escalar, mas se ele usa IN, a subconsulta pode retornar várias linhas.
Se o comando DELETE não encontrar linhas para apagar, isso não é um erro. O comando irá
a mensagem
retornar “0 linhas excluído” em vez de uma mensagem de erro porque a instrução foi concluída
com sucesso, ele simplesmente não encontrar nada para fazer.

Exercício 6-3: Utilize o comando delete Neste exercício, usam várias técnicas para excluir linhas
em uma tabela. Supõe-se que a tabela de HR.PRODUCTS foi modificada durante os dois anteriores
exercícios. Se não, ajustar os valores conforme necessário.

1. Conecte-se ao esquema HR usando SQL Developer ou SQL * Plus.


2. Remover uma linha, utilizando o predicado de igualdade na chave primária.

Isso deve retornar a mensagem “1 linha excluída.”


3. Tentativa de remover todas as linhas na tabela, omitindo uma cláusula WHERE.

Isto irá falhar devido a uma violação de restrição, porque há registros filho na
ORDER_ITEMS tabela que os valores de referência product_id na tabela de produtos
através da
FK_PRODUCT_ID restrição de chave estrangeira.
4. Cometer a eliminação.

Para remover linhas de uma tabela, há duas opções: o comando DELETE e TRUNCATE
comando. APAGAR é menos drástica, em que uma exclusão pode ser revertida, enquanto um
truncamento
APAGAR também
não pode.
é mais controlável em que é possível escolher quais linhas para excluir, enquanto
que um
truncamento sempre afeta toda a tabela. APAGAR é, no entanto, muito mais lento e pode colocar um
monte de
tensão sobre a base de dados. TRUNCAMENTO é virtualmente instantânea e sem esforço.

TRUNCAR
O comando TRUNCATE não é um comando DML; é um comando DDL. A diferença é
enorme. Quando os comandos DML afeta os dados, eles inserir, atualizar e excluir linhas como parte
transações. Transações são definidos mais adiante neste capítulo, na seção “Operações de Controle”.
de
agora, diga-se que uma transação pode ser controlada, no sentido de que o usuário tem a opção de
Para
se a fazer o trabalho feito em uma transação permanente ou se para revertê-la. Isso é útil, mas
obriga o banco de dados para fazer o trabalho adicional nos bastidores que o usuário não está ciente.
comandos não são transações do usuário (embora dentro do banco de dados, eles são, de fato,
DDL
implementadas
transações, mascomo
os desenvolvedores não podem controlá-los), e não há nenhuma escolha sobre se
para torná-los
permanente ou para invertê-los. Uma vez executado, eles são feitos. No entanto, em comparação
commuito
são o DML,
rápidos.
eles
EXAME TIP Transações, consistindo de INSERT, UPDATE e DELETE (ou mesmo MERGE)
comandos, podem ser feitas permanente (com um COMMIT) ou revertida (com um ROLLBACK).
TRUNCATE comando, como qualquer outro comando DDL, é imediatamente permanente. Ela
UMA
nunca pode ser
revertida.

Do ponto de vista do usuário, um truncamento de uma tabela é equivalente a executar um


cadaDELETE de comando DELETE sem uma cláusula WHERE. Mas, enquanto um apagamento
linha; é um
poderátempo
algum levar (possivelmente horas, se houver muitas linhas na tabela), um truncamento vai passar
Não faz diferença se a tabela contém uma linha ou mil milhões; um TRUNCAMENTO será
instantaneamente.
instantâneo. A tabela ainda existirá, mas ele vai estar vazio.
praticamente

DICA comandos DDL, como TRUNCATE, irá falhar se houver qualquer comando DML ativo no
mesa. A transação irá bloquear o comando DDL até que o comando DML é encerrado com um
COMMIT ou um ROLLBACK.

EXAME TIP TRUNCATE esvazia completamente a mesa. Não existe o conceito de seleção de
linha como
existe com um DELETE.

Uma parte da definição de uma tabela como armazenado no dicionário de dados é a tabela de
localização.
física Quando criado, uma mesa é atribuído uma única área de espaço de tamanho fixo na
arquivos de dados do banco de dados. Isso é conhecido como uma extensão e estará vazia. Então,
como linhas
medida enche.sãoUma
inseridas,
vez queo ele está cheio, mais extensões serão alocados para a mesa
automaticamente.
portanto, Umaum
consiste em mesa
ou mais extensões, que detêm as linhas. Bem como o acompanhamento da
alocação, o dicionário de dados rastreia quanto do espaço alocado para a tabela tenha sido usado.
extensão
é feito com a marca de água elevado . A marca d'água alta é a última posição na última medida em
este
que tem
sido usado; todo o espaço abaixo da marca de água alta foi utilizada para as linhas de uma só vez ou
outra, e do espaço acima da marca de água alta foi ainda usado.
nenhum
Note que é possível para que haja bastante espaço abaixo da marca de água de alta que não está
sendono momento; isto é por causa de linhas de ter sido removido com um comando DELETE.
utilizado
linhas em uma tabela empurra para cima a marca de água de alta. Excluí-los deixa a marca de água
inserindo
deoalta
é; espaço
ondeque ocupavam permanece atribuído à mesa, mas é liberado para inserir mais linhas.
Truncar uma tabela repõe a marca d'água alta. Dentro do dicionário de dados, a posição
a marca
registrada
d'água alta é movido para o início do primeiro ponto da tabela. Porque a Oracle assume que
não pode haver linhas acima da marca d'água alta, isso tem o efeito de remover todas as linhas do
mesa. A tabela é esvaziado e permanece vazio até que as inserções subsequentes começar a empurrar
a água de
marcar novamente
alta para cima. Desta forma, um comando DDL, que faz pouco mais do que fazer uma
no dicionário de dados, pode aniquilar milhares de milhões de linhas em uma tabela.
atualização
A sintaxe para truncar uma tabela não poderia ser mais simples.

MERGE
Há muitas ocasiões em que você deseja tomar um conjunto de dados (a origem) e integrá-lo em uma
tabela existente (o alvo). Se uma linha nos dados de origem já existe na tabela de destino, você pode
querer
para atualizar a linha de destino, você pode querer substituí-lo completamente, ou você pode querer
deixarinalterada.
linha o alvo Se uma linha na fonte não existe no destino, você vai querer para inseri-lo. o
comando MERGE permite que você faça isso. Uma mala passa através dos dados de base para cada
tentar localizar uma linha correspondente no alvo. Se nenhuma correspondência for encontrada, uma
fileira
linha pode ser inserido;
correspondência se um a linha correspondente pode ser atualizado. A liberação de 10 g de
for encontrada,
reforço
linha pode
significa
até serque
excluído
o alvodepois de ser acompanhado e atualizado. O resultado final é uma tabela
os
de dados
destinonapara
fonte foi fundida.
a qual
Uma operação MERGE não faz nada que não poderia ser feito com INSERT, UPDATE e
declarações,
DELETEmas com uma passagem através os dados de origem, ele pode fazer todos os três.
código alternativo
MERGE exigiria três
sempassagens
uma pelos dados, um para cada comando.
Os dados de origem para a instrução MERGE pode ser uma mesa ou qualquer subconsulta. A
encontrar
condição
linhas
usado
correspondentes
para no alvo é semelhante a uma cláusula WHERE. As cláusulas que
atualização ou inserção
linhas são tão complexo como uma atualização ou um comando INSERT. Segue-se que MERGE é o
mais
complicada dos comandos DML, que não é razoável, porque é (discutivelmente) o mais
poderoso. Usando MERGE não está no currículo OCP, mas para ser completo, aqui está um exemplo
simples:

A declaração anterior usa o conteúdo de um NEW_EMPLOYEES tabela de atualizar ou inserir


em funcionários.
linhas A situação poderia ser que os empregados é uma tabela de todos os funcionários, e
NEW_EMPLOYEES é uma tabela com linhas para novos funcionários e para alterações salariais
para o pessoal
comando vai passar
existente.
por NEW_EMPLOYEES
o e, para cada linha, tentar encontrar uma linha em
Funcionários com o mesmo EMPLOYEE_ID. Se houver uma linha encontrada, sua coluna de salário
atualizado com o valor da linha na NEW_EMPLOYEES. Se não houver tal linha, um será
será
inserido. Variações sobre a sintaxe permitir o uso de uma subconsulta para selecionar as linhas de
origem, eapagar
possível é aindalinhas correspondentes.

Falhas instrução DML


Os comandos podem falhar por muitas razões, incluindo o seguinte:

• Os erros de sintaxe
• As referências a objetos inexistentes ou colunas
• As permissões de acesso
• violações de restrição
• Questões Espaciais

Figura 6-2 mostra várias tentativas de execução de uma declaração com o SQL * Plus.
Figura 6-2 Alguns exemplos de falha de declaração

Na Figura 6-2 , um utilizador se liga como SUE (senha, Sue-não um exemplo de boa segurança)
consulta
e a tabela EMPREGADOS. A declaração falhar devido a um erro de sintaxe simples,
identificado por SQL * Plus. Observe que o SQL * Plus nunca tenta corrigir esses erros, mesmo
corretamente
quando
sabe exatamente o que você quis escrever. Algumas ferramentas de terceiros pode ser mais útil,
oferecendo
correção de automática
erros.
A segunda tentativa de executar a instrução falha com um erro informando que o objeto não
Issoexiste.
é porque ele não existe no esquema do usuário atual; que existe no esquema HR. Tendo
corrigida isso, a terceira corrida da declaração sucede, mas apenas por enquanto. O valor passado na
cláusula é uma string, “07-JUN-2002”, mas o HIRE_DATE coluna não está definida na tabela como
ONDE
uma string;como uma data. Para executar a instrução, o banco de dados teve que trabalhar para fora o
é definido
que o usuário
significava e lançou
realmente
a corda como uma data. No último exemplo, o elenco tipo falhar.
Se uma declaração é sintaticamente correto e não tem erros com os objetos a que se refere, pode
ainda falhar por causa de permissões de acesso. Se o usuário tentar executar a instrução não tem
as permissões relevantes nas tabelas a que se refere, o banco de dados retornará um erro idêntico ao
o que seria devolvido se o objeto não existia. Na medida em que o usuário está em causa, não
existir.
Erros causados por permissões de acesso são um caso em que SELECT e DML declarações
podemresultados.
diferentes retornar É possível que um usuário tem permissão para ver as linhas em uma tabela,
mas nãoatualizar
inserir, para ou apagar. Uma tal disposição não é incomum; muitas vezes faz sentido para os
Talvez mais confusa, permissões pode ser configurado de tal maneira que é possível inserir
negócios.
linhas que não estão autorizados a ver. E, talvez o pior de tudo, é possível excluir linhas que você
não pode ver nem atualização. No entanto, tais acordos não são comuns.

A violação de restrição pode causar uma instrução DML falhar. Por exemplo, um comando
INSERT
inserir váriaspode
linhas em uma tabela, e para cada linha no banco de dados irá verificar se uma linha já
existe com a mesma chave primária. Isto ocorre à medida que cada linha é inserida. Pode ser que os
linhas (ou os primeiros milhões de linhas) entrar sem um problema, e em seguida, a declaração
primeiros
atingeduplicado.
valor uma linha Neste
com umponto, ele retornará um erro, e a instrução irá falhar. Esta falha será
desencadear uma reversão de todas as inserções que já tinham conseguido. Esta é parte do padrão
SQL; uma deve ser bem sucedido no total ou não em todos. A reversão do trabalho é um rollback .
declaração
os mecanismos
de um rollback está descrito na próxima seção deste capítulo, “Operações de Controle”.
Se uma declaração falhar devido a problemas de espaço, o efeito é semelhante. Uma parte da
conseguiram
declaraçãoantes
podede o banco de dados ficou sem espaço. A parte que teve sucesso será
revertida. Rollback de uma instrução é um assunto sério. Ele força o banco de dados para fazer um
automaticamente
monte de eextras
trabalhar normalmente irá demorar pelo menos enquanto a declaração já tomou (às vezes muito
mais longo).

Transações de controle
Os conceitos por trás de uma transação são parte do paradigma de banco de dados relacional. Uma
consiste de uma ou mais instruções DML, seguido quer por um ROLLBACK ou um comando
transação
COMMIT.
É possível usar o comando SAVEPOINT para dar um grau de controle dentro da transação.
Antes de ir para a sintaxe, é necessário rever o conceito de uma transação. Um tópico relacionado é
consistência de leitura; este é automaticamente implementado pelo servidor Oracle, mas até certo
programadores pode controlá-lo pela forma como eles usam a instrução SELECT.
ponto,

Transações de banco de dados


mecanismo da Oracle para assegurar a integridade da transação é a combinação de segmentos de
desfazer ederefazer
arquivos log. Este mecanismo é sem dúvida o melhor de qualquer banco de dados ainda
desenvolvido ecom
perfeitamente estáasem
normas
conformidade
internacionais de processamento de dados. Outros fornecedores de
banco
os mesmos
de dados
padrões
em conformidade
com seus próprios
com mecanismos, mas com diferentes níveis de eficácia. Em
resumo, qualquer
banco de dados relacional deve ser capaz de passar no teste ACID; deve garantir atomicidade,
isolamento, e durabilidade.
consistência,

A é para Atomicity
O princípio da atomicidade afirma que ou todas as partes de uma transação deve completar ou
nenhum deles
completo. Por exemplo, se os seus analistas de negócios têm dito que cada vez que mudar de um
salário, você também deve mudar seu grau, então a transação atômica será composto de duas
funcionário
atualizações.
banco de dados
o deve garantir que tanto passar ou não fazer. Se apenas uma das atualizações eram
para ter
você teria
sucesso,
um empregado com um salário que era incompatível com seu grau, que é um conjunto de
dados
corrupção em termos de negócios. Se alguma coisa (qualquer coisa!) Vai mal antes que a transação é
completa, o próprio banco de dados deve garantir que todas as peças que se passam por são
invertidos;automaticamente.
acontecer esta obrigação Mas, apesar de uma transação atômica soa pequena (como um átomo),
que poderia
enorme. Paraser
dar outro exemplo, é logicamente impossível em termos de contabilidade para o
nominal
contabilidade de um pacote de contabilidade para ser metade em agosto e metade em setembro. O
capotamento
portanto (em de
termos
fim de
de mês
negócios)
é uma transação atômica, o que pode afetar milhões de linhas em
de tabelas, bem como levar horas para ser concluído (ou reverter, se alguma coisa der errado). A
milhares
reversão de
uma transação incompleta é o processo de reversão e pode ser manual (como quando você emitir o
comando ROLLBACK), mas deve ser automático e inevitável no caso de um erro.

C é para Consistência
O princípio da coerência afirma que os resultados de uma consulta deve ser consistente com o estado
banco de dados no momento da consulta começou. Imagine uma consulta simples que calcula a
da
média Se
mesa. do avalor defor
tabela uma colunavai
grande, dedemorar
um muitos minutos para passar pela mesa. Se outros usuários
atualizar a coluna enquanto a consulta está em andamento, deve a consulta incluem os valores novos
ou velhos?
Deve incluir linhas que foram inseridas ou excluídas após a consulta começou? O princípio de
consistência exige que a base de dados de garantir que os valores alterados não são vistos pela
consulta;
dar-lhe serámédia de coluna como era quando a consulta começou, não importa quanto tempo a
uma
toma ou o que outra atividade está ocorrendo nas tabelas em questão.
consulta
Através do uso de segmentos de desfazer, a Oracle garante que se a consulta for bem sucedido, o
consistente.
resultadoNo seráentanto, se os seus segmentos de desfazer está configurado incorretamente, a
consulta
O erro dopode
Oracle
nãofamoso
ter êxito.
“ORA-1555: instantâneo muito antigo” é levantada. Isto costumava ser um
problema
para fixar difícil
com versões anteriores do banco de dados, mas de liberação 9 i em diante, você deve
sempre
Evite ser capaz de
isso.

I é para Isolamento
O princípio do isolamento afirma que um incompleta (isto é, não confirmada) de transação deve ser
invisível para o resto do mundo. Enquanto a transação está em andamento, apenas o uma sessão que
éexecutar a operação é permitida para ver as alterações. Todas as outras sessões devem ver a
dados, não os novos valores. A lógica por trás disso é, em primeiro lugar, que a transação completa
inalterada
pode não passar
(Lembre-se o princípio da atomicidade?), E, portanto, nenhum outro usuário deve ser autorizado a
alterações que possam ser revertida. E, segundo, durante o progresso de uma transação, os dados são
ver
(em
termos de negócios) inconsistente; há um curto período de tempo quando o empregado teve seu
salário
não a sua
mudado,
série. isolamento
mas da transação requer que o banco de dados deve esconder operações em
de outros usuários. Eles vão ver a versão pré-atualização dos dados até que a transação for
andamento
quando eles vão ver todas as alterações como um conjunto consistente.
concluída,
A Oracle garante isolamento da transação, consistência e atomicidade através do uso de undo
segmentos.
D é paradaDurabilidade
O princípio durabilidade afirma que uma vez que uma transação for concluída, ele deve ser
impossível
banco de dados
para para
o perdê-lo. Durante o tempo em que a transação está em andamento, o princípio
do isolamento
exige que ninguém (excepto a sessão em questão) pode ver as mudanças que fez até agora. Mas o
instante em que a transação for concluída, ele deve ser transmitido para o mundo, eo banco de dados
deveagarantir
que mudança nunca é perdido porque um banco de dados relacional não é permitido perder dados.
cumpre
esta exigência
o oracle
através do uso de arquivos de log. Os arquivos de log vêm em arquivos de log redo
duas formas-on-line
arquivar arquivos de elog refazer-que armazenam um registro de todas as alterações aplicadas ao
bancoser
pode deperdido
dados. Claro,
atravésosdedados
erro do usuário, como o uso inapropriado DML e soltando objetos. Mas,
tanto quanto
Oracle e o administrador de banco de dados (DBA) estão em causa, esses eventos são transações
como
de outros.
qualquer
De acordo com o princípio de durabilidade, eles são absolutamente não reversível.

Executar instruções SQL


A linguagem SQL inteira consiste de apenas uma dúzia de comandos. As que estão preocupados
com
aqui estão SELECT, INSERT, UPDATE e DELETE.

Executar uma instrução SELECT


O comando SELECT recupera dados. A execução de uma instrução SELECT é um processo
faseado. odo servidor de executar a instrução irá primeiro verificar se os blocos contendo os dados
processo
necessários
já estão na memória no cache de buffer do banco de dados. Se eles são, em seguida, a execução pode
imediatamente. Se não estiverem, o processo servidor deve localizá-los no disco e copiá-los para o
prosseguir
cache do buffer do banco de dados.

EXAME DICA Lembre-se sempre que os processos de servidor ler blocos de arquivos de dados no
banco dededados
tampão cache; DBW n escreve quarteirões do cache de buffer do banco de dados para os arquivos
de dados.
Uma vez que os blocos de dados necessários para a consulta estão na memória cache do banco
processamento
de dados, qualquer
(como classificação
outra ou agregação) é realizada na Global Area o Programa (PGA) do
sessão. Quando a execução for concluída, o conjunto de resultados é retornado para o processo do
usuário.
Como isso se relaciona com o teste ACID acabamos de descrever? Para consistência, se a
blococonsulta
que foiencontra
alteradoum
desde o tempo da consulta iniciado, o processo servidor irá para o undo
segmento que protegia a mudança, localize a versão antiga dos dados, e, para os fins da
consulta atual, reverter a mudança. Assim, quaisquer alterações iniciada após a consulta começou
não ser visto. Um mecanismo semelhante garante isolamento da transação, embora este é baseado
vontade
também
se em foi cometido, não apenas sobre se os dados foram alterados. Claramente, se o
a mudança
dados necessários para fazer isso rollback não nos segmentos de desfazer é, este mecanismo não vai
éfuncionar.
quando você
que obter o “instantâneo muito antigo” erro.
A Figura 6-3 mostra uma representação da forma de um comando SELECT é processada.
Figura 6-3 As fases de execução de um SELECT

Na figura, o passo 1 é a transmissão da instrução SELECT do processo do usuário para o


processo do servidor. O servidor irá procurar o cache de buffer do banco de dados para determinar se
o necessário
blocos já estão na memória e, se forem, vá para a etapa 4. Se não forem, o passo 2 é localizar o
blocos nos arquivos de dados, e o passo 3 é copiar-los para a memória cache do banco de dados.
Passo
os dados
4 transfere
para o processo
a de servidor, onde pode haver algum processamento adicional antes do
passo
da consulta
5 devolve
para oo resultado
processo do usuário.

A execução de uma instrução UPDATE


Para qualquer operação DML, é necessário trabalhar em ambos os blocos de dados e desfazer blocos
e também
gerar redo:para
a A, C, e I do teste ÁCIDO requerem a geração de desfazer; a D exige geração
de refazer.

EXAME TIP Undo não é o oposto de refazer! Refazer protege todas as alterações de bloco, não
éimporta
uma mudança
se ele para um bloco de um segmento de mesa, um segmento de índice, ou um segmento
de desfazer.
em causa, um Tanto
segmento
quantoderedo
undoé é apenas mais um segmento, e quaisquer alterações devem ser
feitas durável.
O primeiro passo na execução DML é o mesmo que a execução SELECCIONAR; os blocos
necessários
encontrado devem
no cache ser do banco ou copiado para a memória cache do banco de dados de
buffer
arquivos
única alteração
de dados.
queoé um vazio (ou expirado bloco) de um segmento de desfazer é necessário
também.
as coisas Asãopartir
um pouco
de então,
mais complicado.
Primeiro, travas devem ser colocados em quaisquer linhas e chaves de índice associados que vão
a operação.
ser afetados
Isso por
é abordado mais adiante neste capítulo.
Em seguida, o redo é gerado; o processo servidor grava no log buffer os vetores de mudança que
são
vai ser aplicado aos blocos de dados. Esta geração de refazer é aplicado tanto a mudanças de bloco
edeparamesadesfazer as alterações bloco. Se uma coluna de uma linha é para ser atualizado, então o rowid
aeocoluna
novo valor de
são escritos para a memória intermédia de registo (que é a variação que vai ser aplicada ao
ebloco
também
de mesa)
o valor antigo (que é a variação que vai ser aplicada ao bloco de desfazer). Se a coluna
parte de uma chave de índice, em seguida, as mudanças a ser aplicada para o índice também são
estiver
escritos
em conjunto
para com
a memória
uma alteração
intermédia
a ser
deaplicado
registo, a um bloco de desfazer a proteger a mudança de
índice.
Tendo gerado o refazer, a actualização é efectuada na cache de memória intermédia base de
dadosdados;
tabela
o bloco
é atualizada
de com a nova versão da coluna alterada, e a versão antiga do mudado
coluna está escrito para o bloco do segmento de desfazer. Deste ponto até que a atualização está
comprometida,
consultas de outras
todossessões abordando a linha alterada será redirecionado para os dados de desfazer.
Apenasque
sessão o está fazendo a atualização verá a versão atual da linha no bloco de tabela. o
mesmo princípio se aplica a todas as mudanças de índice associados.

Executar instruções INSERT e DELETE


Conceitualmente, inserir e excluir são geridos da mesma forma como uma atualização. O primeiro
é para localizar os blocos relevantes no cache de buffer do banco de dados ou para copiá-los para
passo
há.
que se não forem
geração de redo é o mesmo. Todos os vetores de mudanças a serem aplicadas aos dados e
escrita
desfazer
para ablocos
memória
são intermédia
de primeirade registo. Para uma inserção, o vector de alteração a ser aplicada
ao bloco de tabela (e
possivelmente blocos de índice) é constituído pelos bytes que compõem a nova linha (e
possivelmente
chaves). O vector
o novo
paraíndice
ser aplicada ao bloco de desfazer é o idlinha da nova linha. Para um
DELETE,
change vector
o a serem gravados para o bloco de desfazer é a linha inteira.
Uma diferença fundamental entre a inserção e eliminação está na quantidade de desfazer gerado.
linhaQuando
é inserida,
um a única undo gerado é escrever a nova rowid para o bloco de desfazer. Isto é
porque para reverter uma INSERT, a única informação Oracle requer é o rowid para que este
declaração pode ser construído:

Executar essa instrução vai inverter a alteração originais.


Para um DELETE, toda a linha (que pode ter várias kilobytes) deve ser escrito para o undo
bloco de modo que a exclusão pode ser revertida se necessário através da construção de uma
declaração
linha completa
de que
de volta
irá inserir
para oa mesa.

O início eo fim de uma Operação


A sessão começa uma transação no momento em que emite qualquer DML. A transação continua
através de
número dequalquer
mais DML comandos até que as questões de sessão ou um COMMIT ou um
declaração. Apenas as modificações efetivadas serão feitas permanente e tornar-se visível para
ROLLBACK
outras
É impossível
sessões.aninhar
isto transações. O padrão SQL não permite que um usuário para iniciar uma
transação
e, em seguida, iniciar outra antes de terminar o primeiro. Isso pode ser feito com PL / SQL (Oracle
linguagem proprietária de terceira geração), mas não com o SQL padrão da indústria.
As instruções de controle de transação explícita são COMMIT, ROLLBACK, e SAVEPOINT. Lá
também são diferentes circunstâncias, um emitido pelo usuário COMMIT ou ROLLBACK que irá
terminar uma transação.
implicitamente

• Emissão de um DDL ou Data Control Language declaração (DCL)


• Sair da ferramenta de usuário (SQL * Plus ou SQL Developer ou qualquer outra coisa)
• Se a sessão do cliente morre
• Se o sistema falhar

Se um usuário emite uma DDL (CREATE, ALTER ou DROP) ou DCL (concessão ou


revogação)
a transação em de comando,(se houver) será comprometida; será tornada permanente e se tornam
andamento
para todos os outros usuários. Isso ocorre porque os comandos DDL e DCL são elas mesmas
visíveis
transações.
não é possível
Comoaninhar
isso transações
é em SQL, se o usuário já tem uma transação em execução, as
o usuário foi executado será comprometida implicitamente antes da instrução que compõe o DDL ou
demonstrações
DCL
comando executa.
Se você iniciar uma transação emitindo um comando DML e depois sair da ferramenta que você
semestá usando
emitir explicitamente ou um COMMIT ou um ROLLBACK, a transação irá terminar, mas
se ele termina com um COMMIT ou um ROLLBACK é totalmente dependente da forma como a
ferramenta
escrito. Muitas
é ferramentas terão um comportamento diferente, dependendo de como a ferramenta é
encerrado.
no ambiente(Por
Microsoft
exemplo,Windows, é comum para ser capaz de terminar um programa, quer por
selecionando Arquivo | Sair de um menu no canto superior esquerdo da janela ou clicando em um X
no canto
canto. Ossuperior
programadores
direito que escreveram a ferramenta pode muito bem ter codificado lógica
diferente para
funções.) Em ambos
estes os casos, será uma saída controlada, de modo que os programadores devem
emitir querou
COMMIT umum ROLLBACK, mas a escolha é com eles.
Se a sessão de um cliente falhar por algum motivo, o banco de dados será sempre reverter a
falhatransação.
poderia ser
Talpara uma série de razões. O processo de usuário pode morrer ou ser morto no
sistema
nível, operacional
a conexão de rede para o servidor de banco de dados pode ir para baixo, ou a máquina onde o
ferramenta está em execução pode falhar. Em qualquer destes casos, não há nenhum problema
cliente
ordenada de ume cabe
ROLLBACK, COMMIT
ao banco
ou de dados para detectar o que aconteceu. O comportamento é que
a sessão é morto e uma transação ativa é revertida. O comportamento é o mesmo se a falha é
no lado do servidor. Se o servidor de banco de dados falhar, por qualquer motivo, quando se próxima
inicia, todosde todas as sessões que estavam em curso será revertida.
transações
Controle de Transação: COMMIT, ROLLBACK, SAVEPOINT, SELECT FOR
ATUALIZAR
implementação do paradigma banco de dados relacional da Oracle começa uma transação
implicitamente
primeira com DML.
declaração o A transação continua até que uma instrução COMMIT ou ROLLBACK.
comando SAVEPOINT não é parte do padrão SQL e é realmente apenas uma maneira fácil para
o
programadores para voltar com algumas declarações na ordem inversa. Ele não precisa ser
considerada
porque não terminar
separadamente
uma transação.

COMMIT
processamento de cometer é o lugar onde muitas pessoas (e até mesmo alguns DBAs experientes)
mostram
ou mesmoumacompletamente
incompleta, imprecisas, compreensão da arquitetura Oracle. Quando você diz
tudo o que acontece fisicamente é que LGWR libera o buffer de log para o disco. DBW n faz
COMMIT,
absolutamente
nada. Esta é uma das características de desempenho mais importantes de um banco de dados Oracle.

EXAME TIP O que DBW n faz quando você emitir um comando COMMIT? Resposta:
nada.
Absolutamente

Para fazer uma operação durável, tudo o que é necessário é que as mudanças que compõem a
estão transação
no disco; não há necessidade alguma dos dados da tabela mudado para ser no disco nos
arquivos deestão
mudanças dados.
no Se o na forma de arquivos de log refazer multiplexados, em seguida, em caso de
disco
danos ao
banco de dados, a transação pode ser reinstantiated por restaurar os arquivos de dados de um backup
feito antes
ocorreu o dano e aplicando as alterações dos logs. Este processo é coberto em detalhe mais tarde
capítulos-por agora, apenas ficar com o fato de que um COMMIT nada mais do que lavar o envolve
log buffer para o disco e sinalizar a transação como concluída. É por isso que uma transacção que
milhões de atualizações em milhares de mesas ao longo de muitos minutos ou horas podem ser
envolva
cometidos
de um segundo.
em umaPorque
fração
LGWR escreve em tempo quase real, praticamente todas as alterações da
transação
disco já. Quando
estão emvocê diz COMMIT, LGWR realmente faz escrever em tempo real; sua sessão
pendurar até que a gravação está completa. Este atraso será o comprimento de tempo que leva para
limpar
redo doobuffer
últimodepedaço
log para
de o disco, que terá milissegundos. Sua sessão é livre para continuar,
e desde então todas as outras sessões não serão mais redirecionados para os blocos de desfazer
aquando
tabela eles
alterada,
abordam
a menos que o princípio da coerência exige.
Os vetores de mudança gravados no log de redo são todos os vetores de mudança: as aplicadas
(tabelas
aos blocos
e índices)
de dados
e os aplicados para desfazer segmentos.

EXAME TIP O fluxo de log refazer inclui todas as modificações, incluindo as aplicadas aos
segmentos
para desfazer
de segmentos,
dados e para ambas as transações confirmadas e não confirmadas.

Onde muitas vezes há confusão é que o fluxo de redo escrita para os arquivos de log por LGWR
contêm alterações para ambas as transações confirmadas e não confirmadas. Além disso, em
qualquer
DBW n podem
dado momento,
ou não podem ter escrito blocos alterados de segmentos de dados ou desfazer
segmentos
arquivos depara
dados
o para ambas as transações confirmadas e não confirmadas. Assim, em princípio, o
seu banco deOs
corrompido. dados
arquivos
no discode dados
é pode muito bem ser o armazenamento de trabalho não
consolidada
Mas no casoedeestar
um faltando
acidente,alterações
o fluxo decomprometidos.
redo no disco sempre tem informações suficientes para
quaisquer transações confirmadas que não estão nos arquivos de dados (pelo uso das mudanças
reinstantiate
eaplicadas
para reinstantiate
aos blocososdesegmentos
dados) de desfazer (por utilização das mudanças aplicado para desfazer
blocos)asnecessária
apoiar transaçõespara
nãorolar
confirmadas que estão nos arquivos de dados.
EXAME TIP Qualquer comando DDL, ou uma concessão ou revogação, irá confirmar a transação
atual.
ROLLBACK
Enquanto uma transação está em andamento, a Oracle mantém uma imagem dos dados como era
antesimagem
Esta da transação.
é apresentado a outras sessões que consultam os dados enquanto a transação está em
andamento.
também usado
Istopara
é reverter a transação automaticamente se alguma coisa der errado ou
deliberadamente
sessão solicita. Asesintaxe
o para solicitar uma reversão é a seguinte:

O uso opcional de pontos de salvamento é detalhado na seção seguinte.


O estado dos dados antes da reversão é que os dados foi alterado, mas a informação
necessária para inverter as alterações está disponível. Esta informação é apresentada para todas as
outrasimplementar
Para sessões em o princípio de isolamento. A reversão irá descartar todas as alterações de
restauração
a imagem prechange dos dados; todas as linhas da transação inseridos será eliminado, todas as linhas
transação excluída serão inseridos de volta para a mesa, e as linhas que foram atualizados será
do
retornou ao seu estado original. Outras sessões não estará ciente de que qualquer coisa que
aconteceu
eles nunca em
viram
tudo;
as mudanças. A sessão que fez a transação agora ver os dados como era
antes que a transação começou.

SAVEPOINT
Savepoints permitir que um marcador para ser definido em uma operação que pode ser utilizada para
controlar oROLLBACK.
comando efeito do Ao invés de rolar para trás toda a transação e que encerra-lo, torna-se
possível reverter todas as alterações feitas depois de um determinado ponto, mas deixam as
alterações
intacta. A transação
feitas antesemdesse
si permanece
ponto em andamento: não autorizadas, ainda capaz de ser revertida, e
ainda invisível para outras sessões.
A sintaxe é como se segue:

Isso cria um ponto chamado na transação que pode ser usado em um posterior grupamento
comando. Quadro 6-1 ilustra o número de linhas de uma tabela em várias fases de uma transacção. o
tabela é uma tabela simples chamado TAB, com uma coluna.
Tabela 6-1 consistência de leitura e Savepoints

O exemplo na tabela mostra duas operações: a primeira foi finalizado com um COMMIT, a
comsegunda
um ROLLBACK. Pode ser visto que o uso de pontos de salvamento é visível somente dentro da
outras sessões ver nada que não seja comprometida.
transação;

SELECIONE FOR UPDATE


Uma declaração último controle de transação é SELECT FOR UPDATE. Oracle, por padrão, fornece
amais elevado nível de concorrência. Leitores não bloqueiam escritores e escritores não bloquear
leitores. Ou, em linguagem simples, não há nenhum problema com uma sessão de dados de consulta
que uma
está atualizando
outra sessão
ou uma sessão de atualização de dados que uma outra sessão está consultando. No
entanto,você
quando há momentos
pode querer mudar este comportamento e evitar alterações de dados que está sendo
consultado.
Não é incomum para um aplicativo para recuperar um conjunto de linhas com um comando
-losSELECT,
para um usuário
presentepara leitura, e levá-los para quaisquer alterações. Porque a Oracle é um banco
de dados
não multiusuário,
é impossível que uma outra sessão também recuperou as mesmas linhas. Se ambas as sessões
fazer alterações, pode haver alguns efeitos bastante estranhos. A tabela a seguir ilustra tal situação.
tentar

Isto é o que o primeiro usuário verá a partir de um SQL * Plus prompt:

Isto é um pouco desconcertante. Uma maneira de contornar este problema é para bloquear as
interessado.
linhas em que um é

A cláusula FOR UPDATE irá colocar um bloqueio em todas as linhas recuperadas. Não
-losocorreram
por qualquer sessão diferente
alterações podem ser dofeitas
que emitiu
para o comando, e, portanto, as actualizações
terá sucesso; não é possível para as linhas que foram alteradas. Isto significa que uma sessão
subsequentes
ter uma visão consistente dos dados (isso não vai mudar), mas o preço a ser pago é que outras
irá travar se tentarem atualizar qualquer das linhas bloqueadas (eles podem, naturalmente, consultá-
sessões
los).Os bloqueios colocados por uma cláusula UPDATE será realizado até que a sessão de emitir o
emitecomando
um COMMIT ou ROLLBACK. Isso deve ser feito para liberar os bloqueios, mesmo se
nenhum DML
comandos foram executados.

O Autocommit So-Called
Para concluir esta discussão sobre o processamento de consolidação, é necessário remover qualquer
éconfusão
muitas vezes
sobre chamado
o que autocommit ou às vezes implícita cometer . Muitas vezes você vai ouvir-se
dizer que,ade
situações Oracle
algumavai AutoCommit. Uma dessas situações é quando se faz DDL, que é descrito em
a secção anterior; outra é quando você sair de um processo de usuário, como SQL * Plus.
Pura e simplesmente, não existe tal coisa como cometer um automático. Quando você executar
umaperfeitamente
há um instrução DDL,
normal COMMIT incluído no código fonte que implementa o comando DDL.
Mas o que dizer quando você sair do seu processo de usuário? Se você estiver usando SQL * Plus no
terminal e você emitir uma instrução DML seguido por uma saída, a sua transação ser cometido.
Windows

Isso ocorre porque embutido no comando SQL * Plus SAIR há uma instrução COMMIT. Mas o que
se
clicar no canto superior direito do SQL * Plus janela? A janela será fechada, e se você fizer login
novamente, você verá que a transação foi revertida. Isso ocorre porque os programadores que
escreveu SQL * Plus para Microsoft Windows incluiu uma declaração ROLLBACK no código que é
executada quando você fechar a janela. O comportamento do SQL * Plus em outras plataformas
pode muitoa única
diferente; bem ser
maneira de ter certeza é testá-lo. Então, se você receber um “autocommit” quando
de um programa de várias maneiras é totalmente dependente da forma como seus programadores
sair
escreveu oOusuário
processo. servidor Oracle vai simplesmente fazer o que é dito para fazer.
O comando SQL * Plus SET AUTOCOMMIT ON fará com que SQL * Plus para modificar seu
irá adicionar
comportamento;
um COMMIT para cada instrução DML emitidas. Assim, todas as declarações são
imediatamente, logo que eles são executados e não pode ser revertida. Mas isso está acontecendo
cometidos
puramente em de utilizador; ainda não há confirmação automática no banco de dados, e as
lado o processo
mudanças feitas
declaração em execução
por um longo
será isolada de outras sessões até que a instrução seja concluída. Claro, um
saída desordenada do SQL * Plus nestas circunstâncias, tais como matá-lo com um sistema
utilidade enquanto a instrução está em execução, será detectado pelo PMON, ea transação ativa vai
operacional
sempre ser revertida.

Exercício 6-4: Explique DML e Undo Geração de Dados Neste exercício, você vai demonstrar
isolamento da transação e controle. Use duas sessões SQL * Plus (ou SQL Developer, se você
preferir), cada
conectados como usuário SYSTEM. Executar os comandos nos passos que se seguem nas duas
sessõescorreta.
ordem do

Os resultados são os mesmos em ambas as sessões.

Os resultados diferem porque isolamento da transação esconde as alterações.

Os resultados são os mesmos em ambas as sessões.


Oh céus! A declaração DDL comprometida DELETE, por isso não pode ser revertida.

Explique DML e Undo geração de dados


dados desfazer é a informação necessária para reverter os efeitos do DML. É muitas vezes referido
reversão de dados , mas tentar evitar esse termo. Em versões anteriores do Oracle, os termos
como
reversão dados
desfazer de dados e utilizados indistintamente, mas a partir de 9 i em diante eles são diferentes.
foram
Sua função
mesmo, masé aa sua gestão não é. O velho mecanismo de segmentos de reversão é longo ultrapassado,
e todade dados deve usar o gerenciamento de undo automático , que utiliza segmentos de undo para
bases
armazenar
Revertendodesfazer
umade dados. significa que a utilização de dados a partir dos segmentos de
transacção
dados
desfazer
como era
a construir
antes queumaa transação
imagem do ocorreu. Isso geralmente é feito automaticamente para
satisfazer ado teste ACID, mas a capacidade de Flashback Query (detalhados na seção “Flashback
requisitos
Consulta e Undo Retenção”) aproveita o poder do mecanismo de desfazer, dando-lhe a opção de
consultando o banco de dados, uma vez que foi em algum momento no passado. E, claro, qualquer
usuário pode
comando ROLLBACK
usar o interativamente para desfazer quaisquer instruções DML que foram emitidos
e não
comprometido.
O teste ACID requer, em primeiro lugar, que o banco de dados deve manter versões PreUpdate
que de
as dados,
transações
a fimincompletas pode ser revertida, seja automaticamente no caso de um erro ou em
exigir, através da utilização do comando ROLLBACK. Este tipo de reversão é permanente e
publicado para todos os usuários. Em segundo lugar, por razões de coerência, o banco de dados deve
ser capaz
versão do de
banco
apresentar
de dadosumacomo
consulta
era nocom
momento
um da consulta começou. O processo do servidor de
executar
vai para osa consulta
segmentos de desfazer e construir o que é chamado de leitura consistente imagem dos
blocos sendose eles foram alterados após a consulta começou. Este tipo de reversão é temporária e
consultado,
apenas para a sessão de executar a consulta. Em terceiro lugar, desfazer segmentos também são
visível
usados
Este é talvez
para ooisolamento
uso mais complexo
de transação.
de dados de desfazer. O princípio do isolamento exige que
transação pode ser de alguma forma dependente de outra transação incompleta. Com efeito, mesmo
nenhum
que
bancoumde dados multiusuário terá muitas transações em andamento ao mesmo tempo, o resultado
final
as transações
deve ser estavam
como se executando uma após a outra. A utilização de dados de desfazer combinado
com fileira garante
fechaduras e mesa isolamento da transação, o que significa a impossibilidade de transações
Mesmo que várias operações podem ser executadas simultaneamente, o isolamento requer que o
incompatíveis.
resultado
deve final se as transações foram serializados.
ser como

EXAME TIP O uso de segmentos de desfazer é incompatível com a utilização de segmentos de


reversão;
outra, dependendo
é um ou oda configuração do parâmetro UNDO_MANAGEMENT.

Exercício 6-5: monitorar e administrar Undo Dados Neste exercício, você vai investigar o undo
configuração e uso em seu banco de dados. Use o SQL * Plus ou SQL Developer.
1. Conecte-se ao banco de dados como usuário SYSTEM.
2. Determine se o banco de dados está usando segmentos de undo ou segmentos de rollback
com esta consulta:
Isso deve retornar o valor AUTO. Se isso não acontecer, emita este comando e reinicie o
instância:

3. Determine o que desfazer espaços de tabela foram criados e qual deles está sendo usado com
estes
duas consultas:

4. Determinar o que desfazer segmentos estão em uso no banco de dados e como eles são
grandes.

Note-se que o número de identificação para um segmento tem um nome da coluna diferente
nos dois
5. Saiba pontos
quanto de vista.
desfazer os dados estavam sendo gerados em seu banco de dados no passado
recente.

Monitorar e administrar Undo Dados


Uma das principais características dos segmentos de desfazer é que eles são gerenciados
automaticamente,
dentro do qual a Oracle
mas você
vai fazer
deve adefinir
sua gestão.
os limites
Depois de considerar a natureza eo volume de
actividade em
seu banco de dados, defina determinados parâmetros de instância e ajustar o tamanho de sua tabela
adefim
undo
de em
atingir seus objetivos.

Condições de erro relacionadas à Desfazer


Os princípios são simples. Em primeiro lugar, deve sempre haver espaço de undo suficiente
disponível para continuar.
transações permitir que Emtodo
segundo lugar, deve haver sempre suficiente desfazer de dados
disponíveis
ter sucesso. para todas asprincípio
O primeiro consultas
exige que a sua tabela de undo deve ser grande o suficiente para
acomodar o pior caso para a demanda de desfazer. Ele deve ter espaço suficiente alocado para o pico
uso de dados de desfazer ativos gerados por sua carga de trabalho transação. Note que isso pode não
sermaior
o durante
número de transações simultâneas; pode ser que durante o funcionamento normal você tem
muitos
transações pequenas, mas o desfazer total que geram pode ser menor do que o gerado por um único
final
de de trabalho em lotes. O segundo princípio exige que haja espaço adicional no undo
meses
espaço de tabela para armazenar dados de desfazer unexpired que possa ser necessária para a
consistência de leitura.é executado fora do espaço de undo, ele irá falhar com o erro “ORA-30036:
Se uma transação
segmento
não é possível
na tabelaestender
de undo.”A afirmação de que bater o problema é revertida, mas o resto do
transação permanece intacta e não confirmadas. O algoritmo que atribui espaço dentro do undo
tablespace desfazer segmentos significa que esta condição de erro surgirá apenas se a tabela de undo
éabsolutamente completo de dados undo ativo.

EXAME TIP Se uma instrução DML é executado fora do espaço de undo, a parte dele que já havia
será revertida. O restante da transação permanece intacta e não confirmadas.
sucedido

Se uma consulta encontra um bloco que foi alterado desde a consulta iniciado, ele irá para o
segmento
undo para encontrar a versão de pré-atualização dos dados. Se, quando ele vai para o segmento
de undo, de
desfazer quedados
poucofoidesubstituído, a consulta falhará com o famoso erro Oracle “ORA-1555:
instantâneo muito antigo.”
Se a tabela de undo está subdimensionado para o volume de transações eo comprimento de
temconsultas,
uma escolha:
a Oracle
ou deixar transações sucesso e consultas de risco falhando com ORA-1555 ou
deixar
ter consultas
sucesso
sucesso, eque
operações de riscosubstituir
lhes permitam de falha com ORA-30036.
desfazer a decorrer.O comportamento padrão é permitir que
as transações
Parâmetros para a Gestão de Undo
Os quatro parâmetros seguintes controlar desfazer:

• UNDO_MANAGEMENT
• UNDO_TABLESPACE
• UNDO_RETENTION (discutido na seção “Configure Undo Retenção”)
• TEMP_UNDO_ENABLED (discutido na seção “Temporary Undo”)

defaults UNDO_MANAGEMENT para Auto. É possível definir esta como MANUAL, o que
significa
Oracle que
não vai usar segmentos de undo em tudo. Isto é para compatibilidade com versões anteriores,
e se que
terá vocêfazer
usar uma
isso,grande
você quantidade de geração de trabalho e segmentos de reversão de ajuste. Não
fazê-lo. Oráculo
Corporação aconselha fortemente definindo este parâmetro para AUTO para permitir a utilização de
segmentos édeestático,
parâmetro desfazer.
o que
estesignifica que se for alterado, a alteração não entrará em vigor até que a
instância
é reiniciado. Os outros parâmetros são dinâmicos, eles podem ser alterados enquanto a instância está
em execução.
Se você estiver usando UNDO_MANAGEMENT = AUTO (como deveria), você também deve
especificar
UNDO_TABLESPACE. Este parâmetro nomeia um espaço de tabela, o que deve ter sido criado
como umtabela, como a tabela de undo activo. Todos os segmentos de desfazer dentro dele será
desfazer
colocado
(Isto é, disponível
online para uso) automaticamente.

Dimensionamento e Acompanhamento da tabela de undo


A tabela de undo deve ser grande o suficiente para armazenar o pior caso de todo o undo gerado pelo
transações concorrentes, que serão undo ativo além de desfazer a decorrer o suficiente para satisfazer
a maior duração
executar consulta. Em um ambiente avançado, você também pode ter de adicionar espaço para
permitir a de
consultas. O algoritmo
flashback é simples: Calcule a taxa em que desfazer está sendo gerado em seu pico
carga de trabalho e multiplicar pelo comprimento de sua consulta mais longa. Há uma visão, V $
UNDOSTAT,
dizer-lhe tudo que
o queirávocê precisa saber.
Fazendo o seu arquivos de dados de desfazer autoextensible irá garantir que as transações nunca
vai ficar
espaço, mas fora de não vai estendê-los apenas para cumprir a meta UNDO_RETENTION; é,
a Oracle
ainda é possível para uma consulta a falhar com “instantâneo muito antigo.” No entanto, você não
portanto
deve contar autoextend;
capacidade com o seu espaço de tabela deve ser o tamanho correto para começar.
Figura 6-4 mostra a configuração desfazer e utilização usando o SQL * Plus. A mesma
disponível
informação
em formato
é gráfico no banco de dados Express. Na home page do banco de dados,
selecione
link Gerenciamento
o Undo no menu drop-down de armazenamento.

Figura 6-4 configuração e actividade Anular


A primeira declaração na figura configura o formato de exibição da data da sessão para mostrar
as horas,
segundos. Emminutos
seguida,e o comando SQL * Plus MOSTRA mostra as configurações para os quatro
parâmetros
incluir a string
de instância
“desfazer”que
em seu nome. Todos os quatro estão definidas para o seu padrão: desfazer
temporária
desfazer gestão
é desativado,
é automática (utilizando desfazer segmentos, não antiquadas segmentos de reversão),
a retenção
alvo é de 900 segundos, e a tabela de undo é UNDOTBS1, que é o espaço de tabela criada quando
usando DBCA para criar um banco de dados. Uma consulta contra V $ UNDOSTAT mostra desfazer
actividade de
intervalos capturado
10 minutos.
em Durante a meia-hora mostrado, desfazer geração atingiu um pico de
281,117 blocos em um
intervalo de 10 minutos e gerou 908 operações. A consulta mais longa foi 1.393 segundos.
Finalmente,
consultando DBA_DATA_FILES mostra que o arquivo de dados de tabela de desfazer é 540,800
blocos,
cerca deque
4GB,é assumindo que o banco de dados foi criada usando o tamanho padrão do bloco de 8
KB.Fazendo um pouco de aritmética simples mostra que os picos de taxa de geração de desfazer a
segundo,
cerca por
de 500
isso,blocos
se a consulta
de um mais longa é de cerca de 1.000 segundos (que é bastante próximo ao
configuração), você precisaria de uma tabela de undo de cerca de meio milhão de blocos para
undo_retention
garantirser
sempre quemantido
desfazerdurante
pode o tempo que a consulta mais longa. Esta base de dados parece ter undo
configuração que está bem adaptado à carga de trabalho.
A visão V $ UNDOSTAT é muitas vezes referido como o conselheiro de desfazer , porque
permite
longa prever
desfazer comopodem ser mantidos por um determinado volume de trabalho. Banco de
os dados
dados
na Figura
expresso
6-5 . representa isso muito bem, como mostrado

Figura 6-5 configuração Undo no banco de dados Expresso

A curva na janela de desfazer orientador mostra que, se a tabela de undo foram 5GB, seria
capaz de armazenar desfazer de dados para entre cerca de 1.500 e 4.000 segundos (dependendo da
atividade).menores
tamanhos maior ouiria aumentar ou diminuir o tempo para o qual desfazer seria mantida.

Undo temporária
segmentos de desfazer temporários são utilizados para armazenar dados gerados por desfazer DML
temporária
mesas. A tabela
global
temporária global é uma tabela cuja definição pode ser visível em todas as sessões (
mundial
mas cujas) linhas são privados para a sessão que eles inserido. A duração das linhas ou é até

COMMIT ou até que os sessão termine ( temporária ).


tabelas temporárias globais são muitas vezes úteis para os desenvolvedores. Eles oferecem um
podelocal
ser útil
de armazenamento
para conjuntos de
de resultados
dados que provisórios, sem qualquer necessidade de se preocupar
sobre como eliminar os dados quando não é não irá interferir com (ou mesmo ver) os dados criados
mais necessário ou a assegurar que as sessões
sessão.
por Do criado
outra
segmentos ponto de vista do
(e caiu) banco de dados,emtabelas
automaticamente temporárias
um espaço globais
de tabela são fáceis de gerir. Eles
temporário.
existem como
O desempenho em tabelas temporárias é normalmente superior ao desempenho de tabelas
Istopermanentes.
por duas razões.

• A / S é direta . A sessão lê e escreve seu segmento temporário, sem passar por


o cache de buffer e sem envolver o escritor banco de dados.
• Não redo é gerado em tabelas temporárias globais . Não haveria razão. O propósito de
redo é fazer alterações persistentes e tabelas temporárias globais não armazenar dados
persistentes.
Desfazer dados é gerado pelo DML contra tabelas temporárias. Isso é necessário porque o
habitual
regras transacionais aplicar. E segue-se que refazer é gerado porque mesmo que a tabela pode ser
um segmento temporária, o segmento de desfazer não é. Em versões anteriores, isso causou estes
dois problemas:
• Uma batida por causa da entrada segmento de undo / saída (I / O) desempenho indo através do
cache
geradora
de buffer
de redo
e associado
• A impossibilidade de transações contra tabelas temporárias em um banco de dados somente
leitura;
pode não
a mesa
existir em um espaço de tabela de leitura / gravação, mas o segmento de desfazer
faz
Release 12 c tem uma facilidade que permite a criação de segmentos de desfazer temporários em
tablespace.
uma temporária
Isso pode melhorar significativamente o desempenho de transações contra tabelas
temporárias
sem comprometer a integridade transacional, e isso também significa que as transações podem ser
em bancos de dados somente leitura, como um banco de dados standby físicos Data Guard.
executados

Criando e Gerenciando Undo Tablespaces


Quanto à gestão arquivo de dados está em causa, uma tabela de undo é o mesmo que qualquer outro
espaço depodem
arquivos tabela;ser adicionados, redimensionada, feitos online e offline, e movido ou renomeado.
Mas não é possível
especificar quaisquer opções em relação ao armazenamento. Você não pode especificar o
gerenciamento
você não pode especificar
automáticoum do espaço
tamanhosegmento
uniformee medida. Para criar uma tabela de undo, use a
palavra-chave UNDO.

Por padrão, o espaço de tabela não garante a retenção de undo. Esta característica pode ser
no momento
especificado
da criação de tabela ou definir mais tarde.

TIP EXAME A menos que especificado no momento da criação na cláusula de arquivo de dados, os
arquivosdedetabela
espaço dadosnão
de será
um undo
definido com autoextend. Mas se o seu banco de dados é criado com o
Banco de Dados
Assistente de Configuração (DBCA), vai permitir a extensão automática para arquivo de dados da
tabelatamanho
com de undomáximo ilimitado. extensão automática pode ser ativado ou desativado a qualquer
momento,
ser para qualquer
como searquivo
pode de dados.

Não é possível criar segmentos em uma tabela de undo, além dos segmentos de desfazer que irá
ser criado automaticamente. Inicialmente, haverá um conjunto de dez segmentos de desfazer criados
em uma undo
tablespace. Mais será criado se houver mais de dez transações concorrentes. oracle
monitorar a taxa de transação simultânea e ajustar o número de segmentos, conforme necessário.
Não importa quantas desfazer espaços de tabela não pode estar em um banco de dados, em geral,
vai estar
apenasemumuso ao mesmo tempo. Os segmentos de desfazer neste espaço de tabela terá um status
de on-line
que estão disponíveis
(ou seja, para uso); os segmentos em qualquer outro desfazer espaços de tabela terá um
status de indicando que eles não serão usados. Se a tabela de undo é alterado, todos os segmentos
desligada,
de antiga
na desfazertabela de undo será colocado offline e aqueles na nova tabela de undo será levado
conectados. Há duas excepções a esta:
• Em um banco de dados Real Application Cluster (RAC), cada instância de abrir o banco de
dados
a suadeve ter tabela de undo. Isto pode ser controlado ajustando o UNDO_TABLESPACE
própria
parâmetro para um valor diferente para cada instância. Cada instância irá trazer o seu próprio
segmentos online.
desfazer
• Se a tabela de undo é alterado alterando o parâmetro UNDO_TABLESPACE, qualquer
segmentos no espaço de tabela previamente indicado que foram suportando uma transação no
da mudança permanecerá on-line até que a transação termina.
momento

Exercício 6-6: Trabalhar com Undo Tablespaces Neste exercício, você irá criar uma tabela de
e trazê-lo para uso. Aqui estão os passos a seguir:
undo

1. Conecte-se à instância como SYSTEM usuário com SQL * Plus.


2. Criar uma tabela de undo.

Para o caminho eo nome do arquivo de dados, use nada adequado para o seu ambiente.
3. Execute a seguinte consulta, que irá retornar uma linha para cada tabela em seu banco de
dados.
Note-se que o seu novo espaço de tabela tem conteúdo desfazer, o que significa que ele pode
ser usado apenas
segmentos e que apara
retenção
desfazer
é NOGUARANTEE.
4. Execute a seguinte consulta, que irá retornar uma linha para cada reversão ou desfazer
segmento
seu banco
no de dados:

Note-se que dez segmentos de undo ter sido criado automaticamente em sua nova tabela de
mas todos eles são offline.
undo,
5. Ajuste o seu exemplo para usar a nova tabela de undo. Use uma cláusula SCOPE para
garantir que onão será permanente.
mudança

6. Execute novamente a consulta a partir do passo 4. Você verá que os segmentos de desfazer
na nova
sido colocado
tabela tem
online e aqueles na tabela de undo ativo anteriormente estão offline.
7. Arrume definindo o parâmetro undo_tablespace volta para seu valor original e, em seguida,
deixar cair a nova tabela de undo. Lembre-se de usar o conteúdo INCLUINDO E
cláusula de arquivos de dados.

Descrever a diferença entre Undo Dados e Redo


Dados
Este tópico recebe uma menção especial porque muitos erros são feitos por muitas pessoas ao
desfazer e refazer. Aqui é um conjunto de contrastes:
descrever

• Undo é transitório, enquanto que refazer é permanente . Desfazer dados persiste por pelo
menos
a transação
a duração
quede
gera, mas possivelmente não para. Eventualmente, será sempre
sobrescrito. Refazer persistir indefinidamente, pela primeira vez nos arquivos de log on-line
e, em seguida, o arquivo de log
arquivos.
• Undo opera no nível lógico, enquanto refazer opera no nível físico . Desfazer dados é
fila orientada; mudanças são agrupadas de acordo com a transação que eles fizeram, e dentro
de uma segmento todas as entradas estão relacionados com as linhas da mesma transação.
desfazer
Refazer é fisicamente
orientado. vetores de mudança estão relacionados com locais físicos em blocos pelo ponteiro
de linha
Não ID.
há qualquer relação entre vectores de mudança consecutivos no buffer de log ou os
ficheiros
• Undo podedereverter
registo.as alterações, ao passo que refazer pode repetir mudanças . Dados
desfazer
para reverter
fornecetransações
a capacidade
confirmadas. Refazer fornece a capacidade de reproduzir obra que foi
perdido.
• Undo
dentroreside em espaços
do banco de Refazer
de dados. tabela, enquanto refazer
é escrito para residedo
arquivos emsistema
arquivos . Desfazer de dados é
operacional.
uma estrutura de segmento
• Undo são redo não são opostos . Eles têm funções diferentes. Undo é sobre transacional
integridade, enquanto que é de cerca de refazer prevenir a perda de dados.

Configurar Anular Retenção


gerenciamento automático de desfazer sempre manter os dados desfazer para o maior tempo
possível.
que Este é geralmente
é necessário. tudo
No entanto, existem dois casos em que sejam necessárias medidas DBA: se for
para garantir que as consultas sempre terá êxito, mesmo se isso significa que DML pode falhar, e se
necessário
de flashback
consultas estão a ser amplamente utilizadas.

Configurando Undo Retenção de Apoio às consultas de longa duração


UNDO_RETENTION, definido em segundos, é geralmente opcional. Ele especifica um alvo para
manter
desfazerinativa
de dados e determina quando se torna classificadas como expirou em vez de unexpired. Se,
exemplo, sua consulta mais longa duração é de 30 minutos, você deve definir este parâmetro para
por
1800.
em seguida,
A Oracletentar manter todos desfazer de dados para pelo menos 1.800 segundos depois de
COMMIT,nunca
portanto, e suafalhar
consulta
comdeve
ORA-1555. Se, entretanto, você não definir esse parâmetro ou configurá-
lo para zero,
A Oracle continuará a manter os dados durante o tempo que ele pode de qualquer maneira. O
controle algoritmo
desfazer os dados são
quesubstituídos
expirou primeiro será sempre optar por substituir a pouco mais velho dos
dados; assim sendo, é sempre no máximo permitido pelo tamanho da tabela.
UNDO_RETENTION

DICA Algumas consultas podem ser muito longa duração, de fato. Consultas de vários dias não são
Você vai precisar de uma tabela de undo do tamanho de Júpiter, se você está indo para executar essas
desconhecidos.
consultaso com
durante processamento
sucesso normal transação. Você pode querer considerar limitar a carga de trabalho
DML durante
longo relato corre ou ajustar o SQL para reduzir o tempo necessário.

Onde o parâmetro UNDO_RETENTION não é opcional é se você tiver configurado garantida


anular de retenção. O modo padrão de operação para desfazer é que a Oracle irá favorecer as
transacçõesSesobre
consultas. o dimensionamento da tabela de undo é tal que uma escolha tem que ser feita entre o
possibilidade de uma falha consulta com ORA-1555 e a certeza de uma transação falhando com
ORA
30036, a Oracle vai optar por deixar a transação continuar sobrescrevendo desfazer dados que uma
consulta podeEm outras palavras, a retenção de undo é apenas uma meta que a Oracle vai tentar
necessidade.
alcançar.
haver circunstâncias
Mas pode quando consultas bem-sucedidas são considerados mais importantes do que
bem sucedida
transações. Um exemplo pode ser o fim do mês de faturamento prazo para uma empresa utilitários,
quando
ser poderia
aceitável para operações de risco a ser bloqueados por um curto tempo, enquanto os relatórios
estão gerando.
Outro caso é se você estiver fazendo uso de consultas de flashback, que dependem de dados de
desfazer.
retenção de undo garantida, significado que desfazer dados nunca serão substituídos até o
especificado
momentopela retenção de undo passou, é activada ao nível da tabela. Este atributo pode ser
especificada no momento da criação de tabela, ou um espaço de tabela undo pode ser alterado mais
tarde ativar
você para ativá-la.
uma tabelaUmadevez
undo para o qual foi especificada garantia de retenção, todas as consultas
serão
completar com sucesso, desde que terminar dentro do tempo de retenção de undo; você nunca terá
“Instantâneo muito velho” erros novamente. A desvantagem é que as transações podem falhar por
faltaSedeoespaço de desfazer.
parâmetro UNDO_RETENTION tabela foi definido e o arquivo de dados (ou arquivos de
tornando-se
dados) a tabela de undo está definido para autoextend, o Oracle irá aumentar o tamanho do
arquivo de dados se for necessário para manter a meta de retenção de undo. Esta combinação de
automaticamente
desfazer garantida
retenção e arquivos de dados autoextending significa que ambas as consultas e transações será
sempre sucesso
supondo que vocêterátenha espaço em disco suficiente. Se não o fizer, a extensão automática irá falhar.

Flashback Query e Anular Retenção


Flashback Query pode colocar exigências adicionais sobre o sistema de desfazer. Flashback Query é
uma facilidade
permite aos usuários
que ver o banco de dados, uma vez que foi em um momento no passado. Existem
vários métodos de fazer
consultas
Aqui está de
umflashback,
exemplo: mas a mais simples é uma instrução SELECT simples com um AS DE
cláusula.

Esta declaração vai retornar todas as linhas na tabela SCOTT.EMP que estavam lá 10 minutos
As linhas
atrás. que foram excluídos será visto, linhas que foram inseridas não será visto e linhas
que foram atualizados será visto com seus valores antigos. Este é o caso ou não o DML
declarações foram cometidos. Para executar consultas de flashback, desfazer de dados é usada para
reverterAs
alterar. todo
linhas
o que foram excluídos são extraídos a partir dos segmentos de desfazer e inserido em
o conjunto de resultados; linhas que foram inseridas são excluídos do conjunto de resultados. A
volta
consulta, como
precedendo um oque tenta voltar 10 minutos, provavelmente terá sucesso. Uma consulta que tenta ir
de volta uma semana quase certamente falhará porque os dados de desfazer necessário para
reconstruir
mesa como umafoi há
versão
uma semana
do terá sido substituído.
Flashback Query pode ser uma ferramenta valiosa. Por exemplo, se por causa de algum erro uma
ocorreu
deleção
(e tem
temsido comprometida) em algum momento na última hora, este comando irá inverter-lo
inserção de todas as linhas excluídas de volta para a tabela:

Se Flashback Query é susceptível de ser usado, então você deve configurar o sistema de desfazer
definindo
para segurá-lo
o parâmetro
por UNDO_RETENTION para um valor adequado. Se você quer a capacidade de
de volta um dia, ele deve ser definido para 86.400 segundos. A tabela de undo deve ser
piscar
apropriadamente
para ter certeza dedimensionada.
sucesso, quer Então
permitir a extensão automática de arquivos de dados da tabela de
undo ou
permitir a garantia de retenção para o espaço de tabela.

Exercício 6-7: Trabalhar com Transações e Flashback Query Neste exercício, você vai
a maneira pela qual desfazer dados é utilizado para proporcionar isolamento de transação e reversão,
demonstrar
bem como a Flashback Query. Use a tabela de regiões no esquema HR demonstração. Aqui está o
implementar
passos a seguir:

1. Conecte-se ao esquema HR com duas sessões simultaneamente. Estes podem ser de dois
SQL * Plus duas sessões SQL Developer, ou um de cada. A tabela a seguir lista os passos
sessões,
a seguir em cada sessão:
2. Demonstrar o uso de Flashback Query usando uma sessão conectados como usuário HR.
A. Ajuste o formato de exibição de tempo para incluir segundos.

B. Consulta e registrar o tempo atual.

C. Eliminar a linha inserida anteriormente e, em seguida, cometer a eliminação.

D. consultar a tabela como foi antes da linha foi excluída.

A linha eliminada para a região 100 serão listados, tendo sido recuperados a partir de um
segmento anular.
Descrever o mecanismo de bloqueio e simultaneidade de
dados
Gestão
Existem muitos tipos de fechaduras. A maioria são internos ao servidor, como bloqueios necessários
para a serialização
execução de determinadas seções críticas do código ou para proteger certas estruturas de memória. O
Certified Associate (OCA) exame não cobre estes, embora eles são muitas vezes importantes para o
oraculo
Os tópicos são cobertos fechaduras que são utilizadas na camada de aplicação, tais como fechaduras
ajuste.
tomado
como e libertado
instruções SQL executar. Esses bloqueios são aplicados tanto para linhas ou tabelas inteiras,
ou manualmente (se os desenvolvedores realmente precisa fazer isso).
automaticamente
Serialização do acesso simultâneo é realizado por meio de mecanismos de registos e tabela-
Travando
bloqueio.
em um banco de dados Oracle é completamente automático. De um modo geral, os
problemas surgem somente se
software tenta interferir com o mecanismo de travamento automático com o código escrito mal ou se
o
análise de negócios está com defeito e, portanto, resulta em um modelo de negócios onde as sessões
vão colidir.
Bloqueios exclusivos compartilhada e
O nível padrão de bloqueio em um banco de dados Oracle garante o mais alto nível possível de
simultaneidade. Isto significa que se uma sessão está atualizando uma linha, a linha é bloqueada e
nada mais.
Além disso, a linha é bloqueada apenas para prevenir outras sessões de atualizá-lo; outras sessões
podem
lê-lo em qualquer momento. O bloqueio é mantido até que a transação for completada, ou com um
COMMIT ou com
ROLLBACK. Esteum
é um bloqueio exclusivo; a primeira sessão para solicitar o bloqueio na linha
recebe-lo,
outras sessões
e qualquer
solicitando acesso de gravação deve esperar. acesso de leitura é permitido, embora se
a linha
foi atualizado
tem pela sessão de bloqueio, como normalmente será o caso, então qualquer lê vai
envolver
de o uso
desfazer de dados para se certificar de que as sessões de leitura não vêem quaisquer alterações
não confirmadas.

EXAME TIP linhas bloqueadas não pode ser atualizado ou excluído por outra sessão, mas qualquer
outra sessão
ainda pode lê-los.

Apenas uma sessão pode ter um bloqueio exclusivo em uma linha ou uma tabela inteira, em um
bloqueios
momento,
podemmasser
compartilhada
tomadas no mesmo objeto por várias sessões. Não faria qualquer sentido ter um
bloquear em uma linha, porque o único propósito de um bloqueio de linha é ganhar o acesso
compartilhada
exclusivo necessário
modifique a linha. bloqueios
para compartilhados são tomadas em tabelas inteiras, e muitas sessões pode
àtermesma
um bloqueio
mesa. Ocompartilhado na
propósito de tomar um bloqueio compartilhado sobre uma mesa é para evitar outra
sessão deum bloqueio exclusivo na tabela. Você não pode obter um bloqueio exclusivo se alguém já
adquirir
um bloqueio compartilhado. bloqueios exclusivos em tabelas são necessários para executar
tem
instruções DDL.
declaração de queVocê
vai modificar
não pode emitir
um objeto
uma(por exemplo, soltando uma coluna de uma tabela), se
qualquer
já tem umoutra sessão
bloqueio compartilhado sobre a mesa.
Para executar DML em linhas, uma sessão deve adquirir bloqueios exclusivos sobre as linhas a
bemser mudado,
como fechaduras nas tabelas contendo as linhas compartilhadas. Se outra sessão já tem
bloqueios
nas linhas,exclusivos
a sessão irá travar até que os bloqueios sejam liberados por um COMMIT ou um
ROLLBACK.
outra sessão já Etem
se um bloqueio compartilhado na mesa e bloqueios exclusivos em outras linhas, que
não é um Um bloqueio exclusivo sobre a mesa poderia ser um problema, mas o mecanismo de
problema.
bloqueio
não padrão
bloquear não faz
tabelas inteiras a menos que isso seja necessário para instruções DDL.

DICA É possível exigir um bloqueio exclusivo em uma tabela inteira, mas isso tem que ser
solicitadas, e programadores seria necessário uma boa razão para fazê-lo.
especificamente

Todas as declarações DML exigem pelo menos dois bloqueios: um bloqueio exclusivo em cada
bloqueio
linha afetada
compartilhado
e uma na tabela que contém a linha. O bloqueio exclusivo impede outra sessão de

interferindo com a linha, e o bloqueio compartilhado impede outra sessão de alterar a tabela
definição com uma declaração DDL. Esses bloqueios são solicitadas automaticamente. Se uma
instruçãoosDML
adquirir bloqueios
não pode
de linha exclusivos que necessita, ele irá esperar até que ele recebe-los.
Executar comandos DDL requer um bloqueio exclusivo no objeto em questão. Isto não pode ser
obtida até que todas as transacções DML contra a mesa tiver terminado, libertando, desse modo,
tanto os seus
bloqueios de linhas exclusivas e seus bloqueios de tabela compartilhados. O bloqueio exclusivo
éexigido
solicitada
por automaticamente,
qualquer instruçãomas,
DDLse não puder ser obtido-normalmente porque outra sessão já
tem o bloqueio compartilhado concedida para DML-em seguida, a declaração será encerrado com
um erro imediatamente.

EXAME TIP Qualquer inserção não confirmadas, atualizar ou excluir de uma linha fará com que
aqualquer
tabela atentativa
falhar imediatamente.
de DDL em

O Mecanismo Enqueue
Os pedidos de fechaduras são colocadas em fila. Se uma sessão solicita um bloqueio e não pode
obtê-lo
já tem aporque
linha ououtra
objeto
sessão
bloqueado, a sessão vai esperar. Pode ser que várias sessões são
à espera de acesso à mesma linha ou objeto, nesse caso, a Oracle vai manter o controle da ordem em
que as sessões solicitado o bloqueio. Quando a sessão com o bloqueio libera-lo, a próxima sessão
será concedido o bloqueio, e assim por diante. Isto é conhecido como o mecanismo de
enfileiramento
Se você não. quer uma sessão de fila se não for possível obter um bloqueio, a única maneira de
evitar ou
a esperar isso é usar cláusula do SELECT ... FOR comando UPDATE. Um irá selecionar normais
NOWAIT
sempre bem sucedidos porque SELECT não necessita de quaisquer bloqueios, mas uma instrução
DML irá travar.
SELECT ... FORo comando UPDATE irá selecionar linhas e trancá-los em modo exclusivo. Se
qualquer
linhas já estão
um dos bloqueadas, o SELECT ... FOR UPDATE serão enfileirados, ea sessão
vai travar até que os bloqueios sejam liberados, assim como uma declaração DML faria. Para evitar
sessões
usar SELECT
de enforcamento,
... FOR UPDATE NOWAIT ou SELECT ... FOR ESPERA ATUALIZAÇÃO <n>,
éonde
um <n>
número de segundos. Tendo obtido as fechaduras com qualquer um o SELECT ... FOR
opções, você pode emitir comandos do DML, sem possibilidade do enforcamento sessão.
UPDATE

DICA É possível anexar as palavras-chave SKIP bloqueado para um SELECT FOR UPDATE,
que irá retornar e bloquear somente as linhas que ainda não estão bloqueados por outra sessão.

Bloqueio Automático e Manual


Sempre que qualquer instrução DML é executada, como parte da execução, a sessão será
automaticamente
tomar um bloqueio compartilhado na mesa e bloqueios exclusivos sobre as linhas afetadas. Este é de
perfeito
bloqueiopara praticamente todas as operações. Ele oferece o mais elevado nível de concorrência
automático
possibilidades
(minimizando ode contenção) e não requer nenhuma entrada programador qualquer. Estes bloqueios
são libertados,
Também automaticamente, quando a transação for concluída com qualquer confirmação ou
anulação.
Sempre que qualquer instrução DDL é executado, a sessão terá automaticamente um bloqueio
em todo
exclusivo
o objeto. Esse bloqueio persistir para a duração da instrução DDL e é liberado
automaticamente quando a instrução seja concluída. Internamente, o que está acontecendo é que o
DDL é, de DML
instruções fato, contra linhas em tabelas no dicionário de dados. Se alguém pudesse ver o código
fonte de, por
exemplo, o comando DROP TABLE, este seria clara. Vai (entre outras coisas) ser a exclusão de um
número de linhas da tabela SYS.COL $, que tem uma linha para cada coluna no banco de dados, e
uma linha de US $ mesa de SYS.TAB, que tem uma linha para cada mesa, seguido por COMMIT. A
instruções DDL são rápidos para executar, de modo que os bloqueios de tabela que necessitam
maioria
geralmente não ser notado por
Comercial.
Manualmente objetos de bloqueio pode ser feito. A sintaxe é como se segue:

Cinco modos são possíveis, cada uma das quais pode ou não ser compatível com outro pedido de
bloqueio
de um certo modo de outra sessão:

• AÇÃO ROW
• ROW EXCLUSIVE
• COMPARTILHAR
• SHARE ROW EXCLUSIVE
• EXCLUSIVO

A tabela a seguir mostra as compatibilidades de bloqueio. Se uma sessão tomou o tipo de


através
bloqueio
da parte
listada
superior da tabela, uma outra sessão (Y) ou não vai (N) ser capaz de tomar o tipo de
fechadura
listada na primeira coluna.

Por exemplo, se uma sessão tomou um bloqueio SHARE ROW sobre uma mesa, outras sessões
tipopode
de bloqueio
tomar qualquer
excepto EXCLUSIVO. Por outro lado, se uma sessão tem um bloqueio exclusivo no
objeto, nenhuma outra sessão pode tomar qualquer bloqueio em tudo. Um bloqueio de linha quota-
parte permitir
sessões, mas impedirá
LMG porque outra
qualquer outra sessão de tomar um bloqueio exclusivo na tabela. A
bloqueio exclusivo é necessário (e solicitado automaticamente), a fim de remover a tabela.
COMPARTILHE
será, portanto, assegurar
ROW que a tabela não é descartado por outra sessão. Na prática, o único tipo de
bloqueio
que é sempre susceptível de ser tomada é manualmente o bloqueio EXCLUSIVE. Isto irá prevenir
quaisquer
de executaroutras
qualquer
sessões
DML contra a mesa.

Sempre que uma sessão faz qualquer DML contra uma tabela, ele irá (automaticamente) tomar
um bloqueio
o modo de tabela em Porque este não é incompatível com outras sessões, tendo uma ROW
ROW EXCLUSIVE.
EXCLUSIVO bloqueio modo, muitas sessões pode executar DML simultaneamente, contanto que
eles não
tentar atualizar as mesmas linhas.

Monitorar e resolver conflitos Trava


Quando uma sessão solicita um bloqueio em uma linha ou objeto e não pode obtê-lo porque outra
sessão tem
bloqueio um
exclusivo sobre a linha ou objeto, ele irá travar. Este é contenção de bloqueio , e isso pode
fazer
o desempenho
com que odo banco de dados a deteriorar-se espantosamente como sessões fila à espera de
bloqueios. podem
contenção alguns bloqueio
ser inevitáveis, como resultado da actividade normal; a natureza da aplicação pode
quetal
ser diferentes usuários exigirá acesso aos mesmos dados. Mas em muitos casos, contenção de
bloqueio é causado
por programa e projeto do sistema.
A base de dados Oracle fornece utilitários para a detecção de contenção de bloqueio, e também é
possível
resolver o problema em caso de emergência. Um caso especial de contenção de bloqueio é o impasse
, que é resolvidos automaticamente pelo banco de dados.
sempre

TIP contenção de bloqueio é um motivo comum para uma aplicação que tem um bom desempenho
sob teste paraquando
um impasse moer aele vai produção e do número de usuários simultâneos aumenta.

As causas da disputa do bloqueio


Pode ser que a natureza do negócio é tal que os usuários exigem acesso de gravação para as mesmas
linhas
o mesmoemtempo. Se este é um fator limitante no desempenho do sistema, a única solução é negócio
processo de reengenharia para desenvolver um modelo de negócio mais eficiente. No entanto,
éembora alguns
uma parte travamento
necessária de processamento de dados de negócios, algumas falhas no design do
aplicativo pode exacerbar a
problema.
transações de longa duração vai causar problemas. Um caso óbvio é onde um usuário atualiza
e depois
uma linha
não confirmar a alteração. Talvez eles ainda vão para o almoço, deixando a transação
inacabado. Você não pode impedir que isso aconteça, se os usuários têm acesso ao banco de dados
com ferramentas
como SQL * Plus,tais
mas nunca deve ocorrer com software bem escrito. A aplicação deve tomar
cuidado
que um bloqueio é imposta apenas antes de ocorrer uma atualização e em seguida liberado (com um
COMMIT ou imediatamente depois.
ROLLBACK)
processos batch mal escrito também pode causar problemas se eles são codificados como
Considere
transações
o caso
longas.
de um razão nominal contabilidade suíte. É uma impossibilidade lógica em
termos para o razão de ser, em parte, em um período e, em parte, em outro, de modo que o rollover
contabilidade
depróximo
o fim de mês
período
para é uma transação comercial. Esta transação pode envolver a atualização milhões
de linhas de
milhares emmesas e levar horas para ser concluído. Se a rotina rollover é codificado como uma
transação
um COMMIT com no final, milhões de linhas será bloqueado durante horas, mas em termos de
contabilidade,
o que deve acontecer.
este é Bom design programa evitaria o problema atualizando as linhas em grupos,
com commits regular, mas os programadores também terá que cuidar de simular a consistência ler
das transacções e lidar com a situação em que o processo falhar a meio. Se fosse um

transação, isso não seria um problema; o banco de dados seria revertê-lo. Se ela envolve muitos
pequenos
transações, eles terão de gerir um livro que é a metade em um período e metade em outra. Estes
considerações não deve ser um problema. Seus programadores devem ter em transações longas
impacto sobre a usabilidade do sistema e projetar seus sistemas em conformidade.
mente
De terceiros produtos de processo de usuário pode impor níveis de bloqueio excessivamente
algumas
elevados.
ferramentas
Por exemplo,
de desenvolvimento de aplicações sempre fazer um SELECT ... FOR UPDATE
para evitar aosnecessidade
requerying dados e verificação
de de alterações. Alguns outros produtos não pode fazer bloqueio em
nível dedeseja
usuário linha. atualizar
Se um uma linha, a ferramenta bloqueia um grupo de linhas, talvez dezenas ou
mesmo
seu software
centenas.
aplicativo
E se é escrito com ferramentas como estes, o banco de dados Oracle irá
simplesmente
o que é dito para
fazer
fazer; vai impor várias fechaduras que são desnecessários em termos de negócios.
Se vocês que o software está aplicando mais bloqueios do que o necessário, investigar se ele tem
suspeitar
opções de configuração para alterar esse comportamento.
Por último, certifique-se seus programadores estão cientes das capacidades do banco de dados.
Um comum
problema é repetíveis. Veja este exemplo:
Como isso pode ser possível? A primeira consulta (detalhe do relatório) mostra quatro linhas,
query (relatório de síntese) mostra cinco. O problema é que, durante o curso da primeira consulta,
mas, em seguida, o segundo
outra sessão inseridos e comprometidos a quinta linha. Uma saída para isso seria bloquear a tabela
durante a execução dos relatórios, causando outras sessões para pendurar. Uma maneira mais
sofisticada
Utilize a transação
seria SET LEITURA comunicado. Isso irá garantir (sem impor qualquer
bloqueios) que a sessão não ver qualquer DML em qualquer tabela, comprometida ou não, até que
termina o transação com um COMMIT ou ROLLBACK. O mecanismo baseia-se no uso de desfazer
read-only
segmentos.

Detectando a disputa do bloqueio


Certos pontos de vista irá dizer-lhe o que está acontecendo com bloqueio no banco de dados e banco
de dadosuma
oferece expresso
interface gráfica para o monitoramento de bloqueio. contenção de bloqueio é uma
consequência
usuários natural de
que acessam os muitos
mesmos dados simultaneamente. O problema pode ser exacerbado por mal
software, mas, em princípio, contenção de bloqueio faz parte da atividade de banco de dados normal.
projetado
Portanto,para
possível não DBAs
é para resolvê-lo completamente; eles podem identificar apenas que é um
problema
sistema e de
e sugerir
aplicativos
a estilistas que ter em mente o impacto da contenção de bloqueio ao projetar
estruturas de dados e programas.
contenção de bloqueio pode ser visto na visão V $ SESSION. Esta visão tem uma linha para
cada
sessão momento
iniciada sessão. O identificador exclusivo é o identificador da sessão coluna (SID). Se uma
sessão
por outro
estásessão,
bloqueada
o SID da sessão de bloqueio é mostrado na BLOCKING_SESSION coluna.

A Figura 6-6 mostra uma consulta que associa V $ SESSÃO a si mesmo, utilizando o SID e
BLOCKING_SESSION
colunas. As únicas sessões listadas são aquelas que são bloqueadas; todas as outras sessões terão
BLOCKING_SESSION = NULL e não serão incluídos.

Figura 6-6 Localizando e sessões de matança bloqueando

Na figura, o usuário MILLER está bloqueando outras duas sessões: JW e rei. Usuário SCOTT é
bloqueando SISTEMA usuário. Para identificar disputa pelo bloqueio na base de dados Express,
clique no
na guia
link para
Desempenho,
Hub Performance, e em seguida, clique na guia atual Achados ADDM. Isto irá
problemas detectados atuais, com detalhes visíveis se você clique na barra de impacto. A Figura 6-7
mostrar
mostra
onde uma
uma situação
sessão, SID = 256, está bloqueando outras duas sessões (SID = 15 e SID = 251) com
bloqueio de
enfileira. Também
linha é possível compreender a fila: Sessão SID = 15 é bloqueado por ambas as sessões
251 e 256, assim matando 256 (que é sugerido como Recomendação 1) não será suficiente para
No entanto, matando sessão 256 irá liberar sessão 251. Isso permitirá que 251 a concluir os seus
libertá-la.
trabalhos,
que pode então liberar sessão 15. Todas as sessões são identificados por um ID sessão de três
que consiste no número exemplo (que é sempre 1 porque esta não é uma base de dados em cluster),
facetada,
SID, eo SERIAL #.
o
Figura 6-7 Bloqueio de contenção tal como apresentado no banco de dados Expresso

Resolver contenção de bloqueio


Na maioria dos casos, esses blocos serão muito curta. As sessões de bloqueio irá comprometer a sua
transações, e as sessões bloqueadas, então, ser capaz de trabalhar. Em caso de emergência, no
entanto,
possível épara o DBA para resolver o problema-terminando a sessão (ou sessões) segurando demais
muitos bloqueios por muito tempo. Quando uma sessão é finalizada à força, os bloqueios que detém
serátransação
sua lançado como
ativa é revertida. As sessões bloqueadas, então, tornar-se livre e pode continuar.
Para terminar uma sessão, use o comando SESSION ALTER SYSTEM matar. Leva o SID e
SERIAL # da sessão para identificar qual sessão de matar. O SID é exclusivo a qualquer momento,
como fazer logon e logoff usuários, SIDs serão reutilizados. O SID mais SERIAL # é garantido para
mas
sertempo
o exclusivo para
de vida da instância, e ambos devem ser especificados quando uma sessão é morto.

Impasses: um caso especial


É possível construir uma posição em duas sessões de bloquear um ao outro de tal forma que tanto
vai travar, cada um esperando o outro para liberar seu bloqueio. Este é um impasse . Impasses são
causados por
concepção do programa ruim e são resolvidos automaticamente pelo banco de dados. Informações
ésobre
escrito
bloqueios
para o log de alerta, com detalhes completos em um arquivo-parte traço de seu
acompanhamento
-se a ocorrência dediário vai pegar
impasses e informar seus desenvolvedores que estão acontecendo.
Se ocorrer um impasse, ambas as sessões irá travar, mas apenas por um breve momento. Uma
das sessões

irá detectar o impasse em poucos segundos, e vai reverter a declaração que causou o problema.
Isto irá liberar a outra sessão, retornando a mensagem “ORA-00060 Deadlock detectado.” Este
mensagem deve ser preso por seus programadores em suas cláusulas de exceções, que deverá ter
ação apropriada.
EXAME DICA Você não pode fazer nada sobre outros do que relatá-los impasses; eles são
automaticamente pelo banco de dados.
resolvidos

Deve ser enfatizado que os impasses são uma falha de design do programa. Eles ocorrem porque
tentao fazer
códigoalgo que é logicamente impossível. código bem escrito sempre solicitar bloqueios no
uma sequência que não pode causar bloqueios de ocorrer ou vai testar se os bloqueios incompatíveis
já existem
antes de solicitar-los.

Exercício 6-8: descrever o mecanismo de bloqueio e gerenciamento de concorrência Dados No


primeira parte deste exercício, você vai usar o SQL * Plus para causar um problema e, em seguida,
adetectar
segunda e resolver
parte, você
isso.
vaiDentro
aprender a lidar com os impasses.
Aqui estão os passos a seguir para demonstrar contenção de bloqueio:

1. Usando o SQL * Plus, se conectar ao seu banco de dados com três sessões como o sistema
do usuário.
2. Na primeira sessão, criar uma tabela.

3. Na segunda sessão, atualizar uma linha.

4. Na terceira sessão, emitir a mesma declaração como no passo 2. A sessão irá travar.
5. Na primeira sessão, executar esta consulta para identificar qual sessão está bloqueada:

Em seguida, execute esta consulta para recuperar os detalhes necessários da sessão de


bloqueio:

Quando solicitado, digite o SID do sessão de bloqueio.


6. Na primeira sessão, matar a sessão de bloqueio.

Quando solicitado, digite da sessão bloqueando SID e SERIAL #.


7. até Tidy.
A. Na segunda sessão, tentar executar qualquer instrução SQL. Você receberá a mensagem
“ORA-00028: a sua sessão foi morto.”

B. Na terceira sessão, a actualização irá agora tiveram sucesso e completou. rescindir o


transação com COMMIT ou ROLLBACK.

Aqui estão os passos a seguir para demonstrar impasses:

1. Em sua primeira sessão, atualizar uma linha.

2. Em sua terceira sessão, atualizar uma segunda linha.

3. Em sua primeira sessão, tentar atualizar a segunda fila.

Isto irá travar porque a linha já está bloqueado.


4. Configure o impasse, atualizando a primeira linha na terceira sessão.

Isto irá travar, mas dentro de três segundos a primeira sessão vai se tornar livre com a
“ORA-00060: impasse solicitado enquanto espera por recursos.”
mensagem
5. Recuperar informações sobre o impasse do registro de alertas e arquivos de rastreamento.
A. A partir de um prompt do sistema operacional, abra o log de alerta no diretório de
A localização
rastreamento pode de
do banco serdados.
encontrado com esta consulta:

eo arquivo será chamado alert_ SID .ora. A última entrada no arquivo será algo como
este (a exemplo Windows):

B. Abra o arquivo de rastreamento com um editor. Em direção ao topo do arquivo será esta
crítica
mensagem:

Note-se que esta mensagem coloca a responsabilidade firmemente sobre os


desenvolvedores.
no arquivo, e vocêOlhe
vai encontrar
mais paraos
baixo
SID das sessões envolvidos e as declarações que
executado que causou o impasse.
6. até Tidy. Na primeira sessão, emitir um ROLLBACK para reverter a atualização teve êxito.
Isto irá liberar a terceira sessão, onde agora você pode também emitir um ROLLBACK.
Largue
mesa LOCKDEMO.
o

Broca Two-Minute
Descreva Cada Manipulação de Dados Declaração Idioma
• INSERIR entra linhas em uma tabela.
• ATUALIZAÇÃO ajusta os valores em linhas existentes.
• APAGAR remove linhas.
• MERGE pode combinar as funções de INSERT, UPDATE e DELETE.
• Mesmo que TRUNCATE não é DML, ele faz remover todas as linhas em uma tabela.
• É possível para um INSERT para inserir linhas em várias tabelas.
• Subqueries pode ser usado para gerar as linhas a serem inseridos, atualizados ou excluídos.
• Um INSERT, UPDATE, ou DELETE não é permanente até que seja cometido.
• TRUNCATE remove todas as linhas de uma tabela.
• A TRUNCATE é imediatamente permanente; ele não pode ser revertida.

Transações de controle
• A transação é uma unidade lógica de trabalho, possivelmente compreendendo várias
instruções DML.
• Transações são invisíveis para outras sessões até comprometida.
• Até cometido, as transações podem ser revertidas.
• um ponto de salvamento permite que um rolo sessão de volta parte de uma transação.

Explique DML e Undo geração de dados


• Todos os comandos DML gerar desfazer e refazer.
• Refazer protege todas as alterações a segmentos de segmentos de undo, bem como segmentos
de dados. de servidor Lê de arquivos de dados; DBW n grava arquivos de dados.
• Processos

Monitorar e administrar Undo Dados


• Uma instância usará segmentos de undo em uma tabela de undo nomeado.
• Mais desfazer podem existir espaços de tabela, mas apenas um será utilizado de cada vez.
• A tabela de undo deve ser grande o suficiente para ter em conta a taxa máxima de undo
geração e a consulta mais longa.
• Undo arquivos de dados de espaços de tabelas são arquivos de dados como quaisquer outros.

Descrever a diferença entre Undo Dados e Dados Redo


• Undo protege transações, enquanto refazer protege mudanças de bloco. Eles não são opostos;
eles
são complementares.

Configurar Anular Retenção


• Dados Undo será sempre mantido até que a transação que gerou ele conclui com um
COMMIT ou um ROLLBACK. Esta é undo ativo.
• Dados Undo serão mantidos por um período depois que ele se torna inativo para satisfazer
qualquer
requisitos
leitura
de consistência de consultas de longa duração; este é desfazer a decorrer.
• desfazer expirado é de dados não é mais necessário para a consistência de leitura e podem ser
substituídos
tempo como a qualquer
espaço em segmentos de desfazer é reutilizado.
• Configurar desfazer retenção, definindo uma meta com o parâmetro undo_retention. Este é
apenas
alvo, um
e se a tabela de undo tem espaço suficiente, não vai ser alcançada a menos que você
o espaço de tabela para garantia de retenção, que corre o risco de transações não por falta de
definir
desfazer espaço.

Descrever o mecanismo de bloqueio e gerenciamento de concorrência Dados


• O nível padrão de bloqueio é nível de linha.
• Os bloqueios são necessários para todos os comandos DML e são opcionais para SELECT.
• Uma declaração DML requer bloqueios compartilhados sobre os objetos envolvidos e
bloqueios exclusivos no
linhas envolvidos.
• Um bloqueio DDL requer um bloqueio exclusivo no objeto que afeta.

Monitorar e resolver conflitos Trava


• O bloqueio causado por bloqueios de linha podem ser identificadas consultando a V $ vista
SESSÃO
Banco de
oudados
através
Express.
• contenção de bloqueio Resolve quer por terminar transações bloqueio ou matando o bloqueio
sessão.
• Deadlocks são resolvidos automaticamente.

Auto teste
1 . Qual dos seguintes comandos podem ser revertida? (Escolha todos os que se aplicam.)
A. COMMIT
B. APAGAR
C. INSERIR
D. MERGE
E. TRUNCATE
F. ATUALIZAÇÃO
2 . Se um UPDATE ou comando APAGAR tem uma cláusula WHERE que lhe dá um alcance
de várias
linhas, o que vai acontecer se houver um erro a meio da execução? O comando é um

de diversos em uma transação de várias instruções. (Escolha a melhor resposta.)


A. O comando irá ignorar a linha que causou o erro e continuar.
B. O comando vai parar no erro, e as linhas que foram atualizados ou excluídos vai
permanecer atualizado ou excluído.
C. O que quer trabalhar o comando tinha feito antes de bater o erro será revertida, mas
trabalho já realizado pela transação permanecerá.
D. Toda a transação será revertida.
3 . Estudar o resultado dessa instrução SELECT:

Se você emitir a seguinte declaração:

porque ele irá falhar? (Escolha a melhor resposta.)


A. Porque os valores não são fornecidos para todas as colunas da tabela. Deve haver nulos
paraC3 e C4.
B. Como a subconsulta retorna várias linhas. Ela exige uma cláusula WHERE para
restringir
número a de linhas retornadas para um.
C. Como a subconsulta não é escalar. Deve usar MAX ou MIN para gerar valores escalares.
D. Porque a palavra-chave VALUES não é usado com uma subconsulta.
E. Ele terá sucesso, inserindo duas fileiras com nulos para C3 e C4.
4 . Você deseja inserir uma linha e, em seguida, atualizá-lo. Que seqüência de passos que você
deve(Escolha
seguir?a melhor resposta.)
A. INSERT, UPDATE, COMMIT
B. INSERT, COMMIT, UPDATE, COMMIT
C. INSERT, SELECT FOR UPDATE, UPDATE, COMMIT
D. INSERT, COMMIT, SELECT FOR UPDATE, UPDATE, COMMIT
5 . Qual destes comandos irá remover todas as linhas em uma tabela? (Escolha todas as
respostas
A. Umcorretas.)
comando DELETE sem cláusula WHERE
B. comando TABELA UMA GOTA
C. comando Um TRUNCAMENTO
D. Um comando UPDATE, definindo cada coluna como NULL e sem cláusula WHERE
6 . Usuário JOHN atualiza algumas linhas e pede Roopesh usuário logar e verificar as
mudanças
antes que ele comete-los. Qual das seguintes afirmações é verdadeira? (Escolha o melhor
responda.)

A. Roopesh pode ver as mudanças, mas não pode alterar-los, porque JOHN vai ter trancado
a linhas.
B. Roopesh não será capaz de ver as alterações.
C. JOHN deve confirmar as alterações para que Roopesh pode vê-los e, se necessário, rolo
-los de volta.
D. JOHN deve confirmar as alterações para que Roopesh pode vê-los, mas apenas JOHN
pode
-los
rolar
de volta.
7 . Há várias etapas envolvidas na execução de uma instrução DML. Coloque estes na correta
ordem:
A. Aplicar os vetores de mudança para o cache de buffer do banco de dados.
B. blocos de cópia de arquivos de dados nos buffers.
C. Pesquisa para os blocos relevantes no cache de buffer do banco de dados.
D. Escrever os vectores de mudança para o tampão de registo.
8 . Quando um COMMIT é emitido, o que vai acontecer? (Escolha a melhor resposta.)
A. Todos os vetores de mudança que compõem a transação são gravados no disco.
B. DBW n escreve os blocos de mudança para o disco.
C. LGWR escreve da memória intermédia de registo no disco.
D. A desfazer os dados são excluídos para que as alterações não podem mais ser revertida.
9 . Que tipos de segmentos são protegidos por refazer? (Escolha todos os que se aplicam.)
A. segmentos de índice
B. segmentos Tabela
C. Segmentos temporários
D. segmentos Undo
10 . Qual destes comandos irá encerrar uma transação? (Escolha todos os que se aplicam.)
A. CRIAR
B. GRANT
C. SAVEPOINT
D. SET AUTOCOMMIT
11 . Os bloqueios são necessários para parar sessões de trabalho sobre os mesmos dados ao
mesmousuário
tempo.
atualiza
Se umuma linha sem especificar qualquer bloqueio, qual será o efeito sobre outras
sessões?
A. Outros serão capazes de ler e escrever outras linhas, mas não as linhas afetadas.
B. Outros serão capazes de ler as linhas afetadas, mas não escrever para eles.
C. Outros serão capazes de ler e escrever as linhas afetadas, mas um COMMIT irá travar
até a primeira sessão foi confirmada ou revertida.

D. Outros não poderão escrever nenhuma linha porque, por padrão, a primeira sessão terá
tomado um bloqueio em toda a tabela.
12 . Qual destes comandos irá impedir que outras sessões de leitura de linhas na tabela?
(Escolha a melhor resposta.)
A. BLOQUEIO TABELA SCOTT.EMP no modo exclusivo;
B. LOCK TABLE SCOTT.EMP IN ROW MODO EXCLUSIVO;
C. SELECT * DE SCOTT.EMP FOR UPDATE;
D. DELETE FROM SCOTT.EMP;
E. Oracle não fornece um bloqueio que irá evitar que outras pessoas lendo uma mesa.
13 . Se várias sessões de solicitar um bloqueio exclusivo na mesma linha, o que vai acontecer?
(Escolher
a melhor resposta.)
A. A primeira sessão terá a fechadura; depois que ele libera o bloqueio, há uma seleção
aleatória
da próxima sessão para obter o bloqueio.
B. A primeira sessão terá um bloqueio exclusivo, e as outras sessões vai ficar bloqueios
compartilhados.
C. As sessões será dado um bloqueio exclusivo na sequência em que o solicitou.
D. Oracle vai detectar o conflito e reverter as declarações que, de outra forma pendurar.
14 . Se um programador não solicitar um tipo de bloqueio ao atualizar muitas linhas em uma
tabela,
bloquear
o que ou que será dada fechaduras? (Escolha a melhor resposta.)
A. Não há bloqueios em todos. O nível padrão de bloqueio é NONE, a fim de maximizar a
simultaneidade.
B. Um bloqueio exclusivo na tabela. Este é o método mais rápido quando muitas linhas
estão sendo
Atualizada.
C. Compartilhada bloqueia sobre a mesa e em cada fileira. Este é o mais seguro (embora
nãométodo.
seja o mais rápido)
D. Um bloqueio exclusivo em cada linha e um bloqueio compartilhado sobre a mesa. Isso
simultaneidade com segurança.
maximiza
15 . O que acontece se duas sessões impasse uns contra os outros? (Escolha a melhor resposta.)
A. Oracle vai reverter a declaração de uma sessão.
B. Oracle vai reverter declarações de ambas as sessões.
C. Ambos sessões irá travar indefinidamente.
D. Oracle vai terminar uma sessão.
E. Oracle vai terminar ambas as sessões.
16 . Quando uma instrução DML é executada, o que acontece? (Escolha a melhor resposta.)
A. Ambos os dados e os blocos de desfazer no disco são atualizados, e as alterações são
gravadas
o fluxopara
de refazer.
B. A versão antiga dos dados é escrito para um segmento desfazer, ea nova versão está
escrito
para os segmentos de dados e o buffer de redo log.
C. Ambos os dados e desfazer blocos são atualizados no cache de buffer do banco de dados,
e asiratualizações
para o buffertambém
de log.
D. O buffer de redo log é atualizado com as informações necessárias para refazer a
transação,
desfazereoblocos são atualizados com informações necessárias para reverter a transação.
17 . Se você suspeitar que desfazer geração é um problema de desempenho, o que pode fazer
paraquantidade
reduzir o de dados de desfazer gerado? (Escolha a melhor resposta.)
A. Converter do uso de segmentos de reversão para o gerenciamento automático de
desfazer.
B. Defina o parâmetro UNDO_MANAGEMENT para NONE.
C. Reduzir o tamanho dos segmentos de desfazer.
D. Não há nada que você pode fazer, porque todas as instruções DML deve gerar desfazer.
18 . Primeiro, o usuário JOHN inicia uma consulta. Em segundo lugar, o usuário Roopesh
atualiza
incluídos
uma linha
na consulta.
que seráEm terceiro lugar, consulta de JOHN concluída. Em quarto lugar,
Roopesh comete
mudança. Quinto,seu
JOHN dirige sua consulta novamente. Qual das seguintes afirmações são
(Escolha todos os que se aplicam.)
corretas?
A. O princípio da consistência significa que ambas as consultas de John retornará o mesmo
resultar definido.
B. Quando Roopesh comete, os dados de desfazer é descarregado para o disco.
C. Quando Roopesh compromete, a desfazer torna-se inativo.
D. primeira consulta de JOHN usará desfazer de dados.
E. segunda consulta de JOHN usará desfazer de dados.
F. As duas consultas serão inconsistentes entre si.
19 . Se um segmento de desfazer enche, o que vai acontecer? (Escolha a melhor resposta.)
A. Outro segmento desfazer será criado automaticamente.
B. O segmento anular vai aumentar de tamanho.
C. O undo tablespace estenderá se seus arquivos de dados estão definidas para autoextend.
D. Transações irá continuar em um segmento de desfazer diferente.
20 . Qual das seguintes afirmações são corretas sobre desfazer? (Escolha todos os que se
aplicam.)
A. segmento Uma desfazer pode proteger muitas transações.
B. Uma transação pode usar muitos segmentos de undo.
C. Um banco de dados pode ter muitos desfazer espaços de tabela.
D. Uma instância pode ter muitos desfazer espaços de tabela.
E. segmento Uma desfazer pode ser cortado em vários arquivos de dados.
F. Desfazer segmentos e os segmentos de reversão não pode coexistir.
21 . Sua tabela de undo tem 10 segmentos de desfazer, mas durante uma súbita explosão de
atividade
20 transações
que vocêconcorrentes.
tem O que vai acontecer? (Escolha a melhor resposta.)
A. A Oracle irá criar mais dez segmentos de undo.
B. As transações serão equilibradas automaticamente em dez segmentos de undo.
C. Dez transações será bloqueado até que os dez primeiros cometer.
D. O que acontece vai depender de sua configuração UNDO_RETENTION.
22 . Seus usuários estão relatando “ORA-1555: instantâneo muito antigo” erros. O que poderia
ser aesta?
causa(Escolha
de a melhor resposta.)
A. Você não está gerando instantâneos com freqüência suficiente.
B. A desfazer de dados é muito antiga.
C. Não há o suficiente desfazer de dados.
D. Sua tabela de undo é reter os dados por muito tempo.
23 . Examine essa consulta e conjunto de resultados:

O tamanho do bloco da tabela de undo é 4KB. Qual dos seguintes seria o ideal
tamanho para a tabela de undo? (Escolha a melhor resposta.)
A. 1GB
B. 2GB
C. 3GB
D. 4GB
24 . Quando alterações são escritas para o buffer de log? (Escolha todos os que se aplicam.)
A. Quando um bloco de tabela é atualizada
B. Quando um bloco de índice é atualizado
C. Quando um bloco de desfazer é atualizado
D. Durante as operações de reversão
E. ON COMMIT
F. Quando as consultas são executadas que bloqueia o acesso com alterações não
confirmadas

25 . Mesmo que você esteja usando segmentos de desfazer automáticos, os usuários ainda estão
recebendo
erros. O
“instantâneo
que você poderia
muito antigo”
fazer? (Escolha todos os que se aplicam.)
A. Aumente o parâmetro UNDO_RETENTION.
B. Defina o parâmetro RETENTION_GUARANTEE.
C. Tune as consultas para fazê-los correr mais rápido.
D. Aumento do tamanho da tabela de undo.
E. Ativar retenção de garantia.
F. Aumentar o tamanho de seus segmentos de desfazer.
Respostas
1.
de auto-teste
B , C , D , e F . Estes são os comandos DML; todos eles podem ser revertidas.
A e E são incorrectas. COMMIT termina uma transação, que pode, então, nunca será
revertida. TRUNCATE é um comando DDL e inclui um built-in COMMIT.
2. C . Este é o comportamento esperado: A declaração é revertida, e o resto do
transação permanece não confirmada.
A , B , e D são incorrectas. A está incorreta porque enquanto este comportamento é, de
fato,
configurável, ele não está habilitado por padrão. B está incorreta porque, enquanto esta é, de
fato,
possível em caso de erros de espaço, não é ativado por padrão. D é incorrecta porque
a declaração será revertida, não toda a transação.
somente
3. D . A sintaxe está incorrecta; usar a palavra-chave VALUES ou uma subconsulta, mas
Remova
não ambos.
a palavra-chave VALUES, e ele será executado. C3 e C4 seria preenchida com
nulos.
A , B , C , e E são incorrectas. A está incorreta porque não há necessidade de fornecer
paravalores
as colunas não listados. B e C são incorrecta porque um INSERT pode inserir um
conjunto
não de linhas, de modo
há necessidade limitar o número com um cláusula ONDE ou usando máximo ou
mínimo de
retornar apenas uma linha. E está incorreta porque a instrução não é sintaticamente correto.
4. Um . Este é o mais simples (e, portanto, o melhor) maneira.
B , C , e D estão incorrectos. Todos estes irão funcionar, mas todos eles são
Nenhum
desnecessariamente
programador devecomplicado.
usar declarações desnecessárias.
5. A e C . O TRUNCATE será mais rápido, mas DELETE vai chegar lá também.
B e D são incorrectas. B está incorreta porque isso irá remover a mesa, bem como a
linhas dentro dele. D está incorreta porque as linhas ainda estará lá, mesmo que eles sejam
preenchida com nulos.
6. B . O princípio de isolamento significa que apenas JOHN pode ver sua transação não
confirmada.
A , C , e D estão incorrectos. A está incorreta porque isolamento da transação significa
outraque não será capaz de ver as alterações. C e D são incorrecta porque um comprometido
sessão
transação não pode ser revertida.
7. C , B , D , e A . Esta é a sequência. Todos os outros estão incorretas.
8. C . Um COMMIT é implementado colocando um registro COMMIT no buffer de log e

LGWR liberar o buffer de log para o disco.


A , B , e D são incorrectas. A está incorreta porque muitos dos vetores de mudança
todos(talvez
eles) estará no disco já. B está incorreta porque DBW n não participa
processamento de confirmação. D é incorrecta porque os dados de desfazer pode muito bem
persistir durante
COMMIT não é algum tempo;
relevante para uma
esta.
9. A , B , e D . Alterações a qualquer um destes irá gerar refazer.
C é incorrecta. Alterações aos segmentos temporários não geram refazer.
10. A e B . Ambos os comandos de controle de DDL e de acesso incluem um COMMIT.
C e D são incorrectas. C é incorrecta porque um ponto de salvamento é apenas um
marcador
transação. dentro
D está de uma
incorreta porque este é um comando SQL * Plus que age localmente no
processo; ele não tem efeito sobre uma transação ativa.
usuário
11. B . Por padrão, um bloqueio exclusivo fileira irá proteger a linha contra a gravação, mas
não
A , Cler.
, e D estão incorrectos. A está incorreta porque lendo a linha atualizada (na sua
pré
atualização formulário) será sempre possível. C está incorreta porque é DML que será
bloqueado,
não COMMIT. D está incorreta porque o bloqueio exclusivo padrão é somente na linha
12. afetada.
E . Os leitores nunca são bloqueadas.
A , B , C , e D estão incorrectos. A está incorreta porque vai bloquear todas as linhas
contra
e B está a atualização,
incorreta porque vai bloquear quaisquer linhas atualizadas. Nem irá bloquear
leitores.
D Ce
estão incorretas porque eles vão ter bloqueios compartilhados sobre a mesa e bloqueios
exclusivos
linhas. Maisnouma vez, não pode impedir que lê.
13. C . Esta descreve correctamente o funcionamento do mecanismo de enfileiramento.
A , B , e D são incorrectas. Um é incorrecta porque fechaduras são concedidos
sequencialmente,
aleatoriamente. não
B é incorrecta porque os bloqueios compartilhados aplicar ao objecto;
bloqueios de
exclusivo. linhas
D está deve serporque este é mais como uma descrição de como os impasses são
incorreta
gerenciou.
14. D . Este descreve corretamente o mecanismo de bloqueio DML: um bloqueio
compartilhado
definição de tabela para protegerexclusivos
e bloqueios a para proteger as linhas.
A , B , e C são incorrectas. A está incorreta porque os bloqueios são sempre imposta. B
é
incorreto porque bloqueios de tabela exclusivos são aplicadas apenas se o programador
ésolicita-los.
incorreta porque
C bloqueios exclusivos devem ser sempre tomados em linhas.
15. Um . Uma das declarações será lançado automaticamente para trás, permitindo que a
continuar.
sessão
B , C , D , e E são incorrectas. B está incorreta porque apenas uma instrução será
lançado
costas. A outra permanecerá em vigor, bloqueando a sua sessão. C é incorrecta porque este é
exatamente o efeito que é evitado. D e E são incorrecta porque a resolução impasse
mecanismo não terminar sessões, apenas declarações.
16. C . Todos DML ocorre no cache de buffer do banco de dados, e mudanças para ambos
os blocos
desfazer blocosdeestão
dados e
protegidos por refazer.
A , B , e D são incorrectas. A está incorreta porque a escrita para o disco é independente
executar a instrução. B e D são incorrecta porque elas são incompletas: redo protege
mudanças para ambos os blocos de dados e desfazer blocos.

17. D . Todos DML gera desfazer, por isso a única maneira de reduzir a geração de undo
recriar
seria
o aplicativo.
A , B , e C são incorrectas. A está incorreta porque, apesar de undo automático é mais
eficiente, não pode reduzir desfazer. B está incorreta porque não há nenhuma definição de
parâmetros que podem
desligar desfazer. C está incorreta porque o tamanho dos segmentos irá afetar somente a
rapidez
eles são reutilizados, não quanto undo é gerado.
18. C , D , e F . C é correto porque desfazer torna-se inativo em cometer (embora não
necessariamente expiram). D está correcto porque a consulta será necessário desfazer dados
para construir
consistente com umo resultado
estado dos dados no início da consulta. F está correto porque a Oracle
garante a consistência dentro de uma consulta, não entre consultas.
A , B , e E são incorrectas. A está incorreta porque a Oracle garante a consistência
dentronão
consulta, de entre
um consultas. B é incorrecta porque não há nenhuma correlação entre um
COMMIT
e uma gravação para os arquivos de dados. E é incorreto porque a segunda consulta é contra
umamudou
não tabela que
durante
é o curso da consulta.
19. B . Desfazer segmentos estender como uma transação gera mais desfazer dados.
A , C , e D estão incorrectos. A está incorreta porque outro segmento de undo será
criado
somente se houver mais transações simultâneas que segmentos. C confunde o efeito de um
segmento enchendo-se com que a tabela de encher. D é impossível porque um
transação pode ser protegida por apenas um segmento de desfazer.
20. A , C , E . Um está correta, embora a Oracle vai tentar evitar isso. C é correcta, embora
apenas
um vai ser feita activo em qualquer momento pelo exemplo. E é correto porque quando se
trata de
armazenamento, um segmento de desfazer é como qualquer outro segmento de: A tabela
abstrai a física do armazenamento lógico.
armazenamento
B , D , e F são incorrectas. B está incorreta porque uma transação está protegido por
uma segmento. D é incorrecta porque um exemplo pode utilizar apenas uma tabela de
desfazer
desfazer. Fporque
incorrecto é undo e reversão segmentos podem coexistir, uma base de dados, mas pode
utilizar
o outro.apenas um ou
21. Um . Desfazer segmentos são gerados de acordo com a demanda.
B , C , e D estão incorrectos. B é incorrecta porque mais segmentos vai ser criado. C é
incorreto, pois não há limite imposto pelo número de segmentos de desfazer. D é incorrecta
porque este parâmetro não é relevante para as operações, apenas para consultas.
22. C . Um “ORA-1555: instantâneo muito antigo” erro é uma indicação clara de que
sendodesfazer
mantidodepor
dados
tempo
nãosuficiente
é para satisfazer a carga de trabalho de consulta. Não é o
suficiente desfazer de dados
acessível.
A , B , e D são incorrectas. A está incorreta porque ele não se refere a desfazer de todo-
parase
Instantâneos,
refere que existiam em versões anteriores do banco de dados, mas agora são
chamados
visualizações materializadas. B e D são ambos incorrecta porque descrevem a situação
oposta,
em que os dados de desfazer está sendo retida durante mais tempo do que o necessário. Este
ser
nãoum desperdício
é um problema,de espaço.
mas pode
23. C . Para calcular isso, tomar o maior valor para UNDBLKS, que é para a 10 minutos
período. Dividir por 600 para obter a taxa de geração de desfazer em blocos por segundo, e
pelo tamanho do bloco para obter o valor em bytes. Multiplique pelo maior valor para
multiplicar

MAXQUERYLEN para encontrar o espaço necessário se a maior taxa de geração de


desfazer coincidiu
com a consulta mais longa, e depois dividir por um bilhão de obter a resposta em gigabytes:
237014/600 * 4096 * 1740 = 2,6 GB (aproximadamente).
A , B , e D são incorrectas. Esses números são derivados de uma compreensão incorreta
de
a aritmética desfazer (detalhado para C ).
24. A , B , C , e D . Alterações em todos os blocos de dados são protegidos por refazer.
mudaUmade blocos
operação
e, por
de reversão
conseguinte, também gera refazer.
E e F são incorrectas. COMMIT não escreve mudanças, porque eles já têm sido
escrito. Consultas não ler ou escrever refazer, embora possam também ler desfazer.
25. C , D , e E . Resposta C está correta porque fazer as consultas completas mais rápido
vai a probabilidade de “instantâneo muito antigo.” D está correta porque vai permitir
reduzir
mais
undo unexpired para ser armazenado. E vai resolver o problema completamente, embora
possa causar
problemas com transações.
A , B , e M são incorrectas. A está incorreta porque ele não vai ajudar, por si só, é
alvo,apenas
a menosumaque combinada com a de E . B está incorreta porque não existe tal parâmetro
(embora
é uma cláusula de que pode ser aplicado a uma tabela de undo). F está incorreta porque isso
não pode
feito manualmente
ser em Oracle já estará fazendo o seu melhor automaticamente.
CAPÍTULO 7

Apanhar, Restringindo e classificando dados


usando SQL

Objetivos do exame
Neste capítulo, você vai aprender a
• 061.1.1 Explique as capacidades de instruções SQL SELECT
• 061.1.2 Executar uma instrução SELECT Básica
• 061.2.1 limitar as linhas recuperadas por uma consulta
• 061.2.2 classificar as linhas recuperadas por uma consulta
• 061.2.3 Use Ampersand Substituição para restringir e classificar a saída em tempo de execução
Este capítulo discute o paradigma relacional, normalizando dados em estruturas relacionais e
recuperação de dados armazenados em tabelas relacionais usando a instrução SELECT. A declaração
é introduzido
sua forma básica
no e é construído progressivamente, a alargar a sua funcionalidade núcleo. Este
capítuloatambém
discute cláusula WHERE, que especifica uma ou mais condições que o servidor Oracle
avalia para restringir as linhas retornadas pela instrução. O capítulo examina a cláusula ORDER BY,
que fornece capacidades de classificação de dados, eo novo SQL-fila limitar a cláusula; o capítulo
fecha pela substituição e comercial, que é um mecanismo que fornece uma maneira de reutilizar a
discutindo
mesma
declaração para executar consultas diferentes substituindo elementos de consulta em tempo de
execução.
Explique as capacidades de instruções SQL SELECT
Sabendo como recuperar dados em um formato definido utilizando uma linguagem de consulta é o
primeiro passoaspara
compreender capacidades de instruções SELECT. Descreve as relações envolvidos proporciona
ligação física entre a teoria de como os dados são armazenados em tabelas e a visualização prática
uma
do
estrutura dessas tabelas. Estes tópicos formar um precursor importante para a discussão do
capacidades da instrução SELECT. As três áreas primárias explorado são os seguintes:

• Apresentando a instrução SQL SELECT


• Apresentando o comando mesa DESCREVER
• Explorando as capacidades da instrução SELECT

Apresentando a instrução SQL SELECT


A instrução SELECT do Structured Query Language (SQL) tem que ser a mais poderosa
construção de linguagem nonspoken. É um mecanismo elegante, flexível e altamente extensível
criado parainformações de uma tabela de banco de dados. Um banco de dados de pouco serviria se
recuperar
não poderiapara
consultado ser responder a todos os tipos de questões interessantes. Por exemplo, você pode ter um
banco deregistros
contém dados quefinanceiros pessoais, como seus extratos bancários, as suas contas, e seu salário
afirmações. Você poderia facilmente pedir ao banco de dados para uma lista ordenada-data de suas
contas
Nos últimos
de serviços
seis meses
públicos
ou consultar
elétricos seu
paraextrato bancário para uma lista de pagamentos feitos para
uma
o determinada
mesmo período.conta sobre
A beleza da instrução SELECT é encapsulado em sua simples, Inglês-like
formato que permite perguntas a serem feitas do banco de dados de uma forma natural.

A Tabela de Comando DESCREVER


Para obter as respostas que você procura, você deve fazer as perguntas corretas. Uma compreensão
referência,
dos termos que
de neste caso são tabelas relacionais, é essencial para a formulação da correcta
questões. A descrição estrutural de uma tabela é útil para estabelecer o que perguntas podem ser
feitasOracle
The do mesmo.
servidor armazena informações sobre todas as tabelas em um conjunto especial de
tabelas relacionais
dicionário de dadoschamado
, a fim de gerenciá-los. O dicionário de dados é bastante semelhante a uma
linguagem regular
dicionário. Ele armazena as definições dos objetos de banco de dados em um formato centralizado,
ordenada
O e estruturada.
dicionário de dados foi descrito no Capítulo 2 .
Uma distinção clara deve ser feita entre a definição e armazenar o conteúdo de uma tabela. o
definição de uma tabela inclui informações como o nome da tabela, proprietário da tabela, detalhes
sobre o
colunas que compõem a mesa, e o seu tamanho físico de armazenamento em disco. Esta informação
está também
referido como metadados . O conteúdo de uma tabela são armazenadas em filas e são referidos como
dados
Você. pode obter os metadados estrutural de uma tabela, consultando o banco de dados para a
que lista de colunas
o compõem usando o comando DESCRIBE. A forma geral da sintaxe para este comando é a
seguinte maneira:

Este comando irá ser sistematicamente descompactado. A palavra-chave DESCREVER pode ser
DESC.encurtado
Todas as
para
tabelas pertencem a um esquema ou proprietário. Se você está descrevendo uma
tabela queaopertence
esquema qual vocêà se conectou, você pode omitir o <SCHEMA> parte do comando. Figura
7-1 mostra como a tabela de funcionários é descrito a partir do SQL * Plus após a conexão com o
banco odeusuário
como dados HR com o comando FUNCIONÁRIOS descrever e como a tabela de departamentos
édescrito usando a notação abreviada: DESC HR.DEPARTMENTS. O HR. prefixo notação podia
ser omitida desde tabela DEPARTMENTS pertence ao esquema HR. O esquema HR (e cada
outro esquema) tem acesso a uma tabela especial chamada DUAL, que pertence ao esquema SYS.
tabela pode ser estruturalmente descrito com o comando descrever SYS.DUAL.
este

Figura 7-1 Descrevendo os funcionários, departamentos e mesas DUAL

Descrevendo tabelas produz resultados interessantes e úteis. Você sabe quais colunas de uma
tabela pode ser
seleccionada uma vez que seus nomes estão expostos. Você também conhecer a natureza dos dados
contidosdesde
colunas nesteso tipo de dados da coluna está exposta. Capítulo 5 tipos de colunas detalhado.
colunas obrigatórias, que são obrigados a armazenar dados para cada linha, estão expostos pela
Null?
saída coluna produzido pelo comando DESCREVER tendo o valor não nulo. Tu es
anotar
garantia de que tem
que NULL qualquer coluna restringido
um significado especial pela
para restrição
o servidorNOT NULL
Oracle. contém
NULL alguns
refere-se dados. É
a uma
importante
ausência
Os espaçosde em
dados.
branco não contam como NULL, pois estão presentes na linha e ter algum
comprimento
embora mesmo
eles não são visíveis.

Capacidades da instrução SELECT


Tabelas de banco de dados relacionais são construídos sobre uma base matemática chamado teoria
relacional
teoria, as relações
. Nisso ou tabelas são operados por uma linguagem formal chamado de álgebra
relacional
álgebra usa. alguns
relacional
termos especializados: Relações loja tuplas, que têm atributos. Ou em Oracle-
falar, tabelas fileiras de lojas, que têm colunas. SQL é uma interpretação comercial do relacional
construções álgebra. Três conceitos da teoria relacional abranger as capacidades do SELECIONAR
declaração: projeção, seleção e adesão.
Projecção refere-se a restrição das colunas seleccionadas a partir de uma tabela. Ao solicitar
de uma
informações
tabela, você pode pedir para ver todas as colunas. É possível recuperar todos os dados do
mesa HR.DEPARTMENTS com uma instrução SELECT simples. Essa consulta retornará
DEPARTMENT_ID, department_name, MANAGER_ID e LOCATION_ID informações para
cada registro departamento armazenados na tabela. E se você queria uma lista contendo apenas o
colunas department_name e manager_id? Bem, você teria pedido apenas aqueles dois
colunas da tabela. Esta restrição de colunas é chamado de projecção .
Selecção refere-se a restrição das linhas seleccionadas a partir de uma tabela. Muitas vezes não é
recuperar
desejável
todas as linhas de uma tabela. Tabelas podem conter muitas linhas, e, em vez de solicitar
todos eles,
seleção fornece um meio para restringir as linhas retornadas. Talvez você foi convidado apenas para
os funcionários que pertencem ao departamento de 30. Com a seleção , é possível limitar os
identificar
resultados
essas linhasdefinidos
de dadospara
com um valor DEPARTMENT_ID de 30.
Juntando-se , como um conceito relacional, refere-se à interacção de tabelas com o outro em
Forma
umanormal
consulta.
terceira apresenta a noção de separar diferentes tipos de dados em tabelas autônomas
evitar a duplicação e manutenção anomalias e associar dados relacionados usando primária e
para
estrangeira
relações de chave. Estas relações fornecem o mecanismo para unir tabelas uns com os outros
(discutido em Capítulo 10 ).
Suponha que há uma necessidade de recuperar os endereços de e-mail para os funcionários que
departamento.
trabalham nas A coluna
VendasEMAIL pertence à tabela de trabalhadores, enquanto o
Coluna department_name pertence à tabela de SERVIÇOS. Projeção e seleção
da tabela de departamentos podem ser usadas para obter o valor que DEPARTMENT_ID
corresponde ao departamento de vendas. As linhas correspondentes na tabela Funcionários podem
ser juntou-se
tabela DEPARTMENTS
a com base neste valor DEPARTMENT_ID comum. A coluna EMAIL
pode, então, ser projectada a partir deste conjunto de resultados.
A instrução SQL SELECT é matematicamente regidos por estes três princípios. um ilimitado
combinação de projeções, seleções, e junta-se fornece a linguagem para extrair os dados relacional
requeridos.

EXAME TIP Os três conceitos de projecção, selecção, e juntando-se, que formam a base subjacente
base para as capacidades da instrução SELECT, são geralmente medidos no exame. Você deve ser
solicitado a escolher as corretas três conceitos fundamentais ou para escolher uma declaração que
demonstra
ou mais desses
uma conceitos.

Normalização de dados
Esta seção apresenta várias do mundo real cenários de organização de dados para discutir o
paradigma e introduzir algumas técnicas de modelagem práticas. Fundamental para uma
relacional
compreensão
uma de SQL
compreensão é
do paradigma relacional e a capacidade de normalizar os dados em relacional
estruturas. A normalização é o trabalho de analistas de sistemas, porque eles modelar dados de
negócios
formar adequado
em um para armazenar em tabelas relacionais. É uma ciência que pode ser estudado há
anos, e escolas
muitas há de pensamento que se desenvolveram os seus próprios métodos e notações.
Cenários do mundo
Este guia usa vários real
cenários hipotéticos, incluindo os dois cenários enlatados chamados HR e OE
fornecido pela Oracle e freqüentemente usado como o contexto para questões do exame para ilustrar
vários SQLOs seguintes cenários evoluir ainda mais à medida que novos conceitos são discutidos.
conceitos.

Concessionária de carros Sid funciona uma concessionária de carros e precisa de um sistema para
acompanhar
e vende. Ela os carros
notou que ela
negócio compra
tomar um mergulho e quer se mudar para o século 21 e criar um
web site que anuncia estoque disponível. Ela precisa de um sistema para manter registros dos carros
que ela teme vendidos e os detalhes dessas transações.
comprados

Geological Cores amostras de núcleo da Terra foram coletadas pelo seu levantamento geológico
agência. Para garantir o rigor científico, os desenvolvedores da GeoCore ter determinado que o
local,
sistema adeve
rastrear localização exata geográfica, o conteúdo elementar das amostras de núcleo, e as datas de
coleção.

Entrada de Pedidos A entrada de pedidos cenário (OE) fornecido como um exemplo pela Oracle
contém
para uminformações
sistema comercial fictício que acompanha os produtos, os clientes e as ordens de venda que
ter sido colocado.

Recursos Humanos Os recursos humanos cenário (HR) fornecido como um exemplo de registros de
Oracle
funcionários, departamentos, escritórios locais e informações relacionadas com o trabalho para um
departamento
Embora osde RH típico.
cenários hipotéticos descritos variam em complexidade, eles compartilham vários
características, incluindo um crescimento de dados potencial que pode eventualmente sobrecarregar
um baseado
solução organização
em papeldeoudados à base de folha de cálculo, bem como uma exigência para que os
dados sejam
(Inserido, actualizado,
manipuladose suprimido) e recuperados de forma eficiente. O desafio de produzir um
desenho organização de dados eficiente (também conhecido como um modelo de dados ) podem ser
superados comdeum
compreensão tanto
como os dados sendo organizado é susceptível de ser utilizado e alguns modelagem
de dados básicos
técnicas. O objectivo é conseguir um equilíbrio óptimo entre o armazenamento de dados e de acesso
airádados, o qual
fornecer a jusante benefícios de economia de custos a longo prazo.

Modelagem de dados
Várias abordagens de modelagem de dados formalizados estão disponíveis, tais como o quadro
ZachmanUnified
Rational eo Process, que, finalmente, procuramos fornecer uma sistemática, abordagem
baseada em padrões
representando objetos
para
em uma empresa. Há uma infinidade de notações disponíveis para modelar
entidades
e seus relacionamentos. Uma notação populares adotada pela Oracle em seu software assistida por
engenharia (CASE) ferramentas e, mais recentemente, no SQL Developer é notação pé do corvo,
computador
serão discutidos neste capítulo. Outras notações, como a notação Relacional esquema e Universal
que
Markup Language (UML), também são populares, mas você deve escolher uma notação que é
confortável
sensato paraevocê.
Modelagem lógica baseia-se conceituar objetos de interesse como entidades e suas interações
uns com os outros como relacionamentos . Existem muitas abordagens para diagramas entidade-
relacionamento,
com seus benefícios
cadae limitações. Uma breve discussão sobre diagramas entidade-relacionamento e
notação segue.
sua

Entidades e Relações
Muitos profissionais da Oracle adotam uma estrutura que consiste em três etapas de modelagem para
modelagem de banco de dados relacional. Um modelo lógico é concebido quando construções de
alto nível chamada
entidades , compreendendo vários atributos e as suas relações , são tipicamente representados em
conjunto numa
diagrama. Entidades em modelos lógicos são geralmente representadas como rectângulos com
cantos arredondados,
compreendem atributos
queou identificadores, por vezes, indicado por um símbolo “o”. Atributos que
exclusivamente
identificar uma instância de uma entidade são designados como chaves primárias e às vezes são
indicados
"#*" personagens.
pelo Dados de digitação os atributos podem ser feitas nesta fase, mas geralmente não
sedesign.
o reflecte em
O modelo lógico é então transformado em um modelo relacional, traduzindo as entidades em
comumente
relações referido
, como tabelas. A idéia aqui é que conjuntos de instâncias das entidades são
modelado como uma mesa. Os atributos são transformados em tabela colunas . Cada instância de
colectivamente
uma entidade
reflectido como é um tuplo ou linha de dados, tendo cada um valores para as suas diferentes atributos
ou colunas.
número de “linhas
o na tabela” é o “cardinalidade das tuplas.” Normalmente os atributos que são
para
(que cada
exclusivos linha são mais
será discutido chamados
tarde).deAs
chaves únicas
relações entre, e,asnormalmente,
entidades sãouma chave
muitas única
vezes é escolhido
modelado comopara
ser a
chaveschave primária
estrangeiras
que também ,
serão exploradas neste capítulo.
Relações em modelos relacionais são geralmente representados como retângulos. Nesta fase não
maisé detalhes
tipicamente
em termos de digitação de dados para os atributos e atributos chave primária e
estrangeiracom
reflectido também
um Psãoe um F , respectivamente, no modelo relacional. Finalmente, o modelo
relacional éem um modelo físico através da implementação do projeto em um banco de dados
projetados
relacional.
notação pé-de-galinha é frequentemente usado para descrever relacionamentos em modelos de
As relações
dados lógicos
entre as
e relacionais.
entidades podem ser um dos seguintes procedimentos e serão exploradas no
do cenário concessionária de carros:
contexto

• 1: N de um-para-muitos

• N: 1 -to Many-um
• 1: 1 Um-um para-
• M: N muitos-para-muitos

Considere o cenário de negócio do carro de Sid introduzido anteriormente. Você pode modelar os
comodados
umaprovável
entidade composta pelas seguintes atributos relacionados a carros: Marca, Modelo,
cilindrada
Cor. Tambémdo motor,
é necessário
e informações sobre a compra e venda de carros, assim você pode adicionar
Data de compra, data de venda, vendedores Nome, os vendedores SSN (por número de Segurança
Social), Sellers
Companhia, os mesmos detalhes para o comprador e, finalmente, Preço de Compra e preço de
venda, como na Figura 7
2.

Figura 7-2 A entidade concessionária de carros única

Dados transacionais de amostras armazenadas em uma tabela com base nesta entidade pode
mostra
parecer
três linhas
Figurade7-3dados
, quenuma tabela compreendendo 14 colunas chamadas CAR_DEALERSHIP.
comandos para criar tabelas e preenchê-los com dados será discutido mais tarde neste livro. Para
o
agora,
há várias coisas mais fundamentais importantes de aviso. armazenar as tabelas dados em linhas,
também chamado
registros. Cada elemento de dados encontra-se na intersecção de uma linha, e uma coluna, também
chamadaintuitiva
bastante uma célula.
e muito
Isto parecido
é com uma planilha.
Figura 7-3 Dados de exemplo na tabela CAR_DEALERSHIP

Os dois primeiros registros na tabela CAR_DEALERSHIP incluir as seguintes informações:

• A prata A160 Mercedes com uma cilindrada de 1600cc que pertencia a Coda, uma empresa
privada
seller com SSN 12345, foi comprado por Sid com SSN 12346 de Carros de Sid, por US $
10.000
01 de junho
em de 2013.
• A prata A160 Mercedes com uma cilindrada de 1600cc que pertencia a Sid, com SSN
12346, de carros de Sid, foi comprado por Wags, com SSN 12347, de Wags Auto, por US $
12.000
de 1 de Agosto de 2013.

Observe a repetição de dados. Cada registro contém informações duplicadas para os carros sendo
ou vendidos
comprados e para o cliente fazer a compra ou venda. duplicação desnecessária de dados
indica má concepção, uma vez que é um desperdício e muitas vezes requer manutenção
normalmente
desnecessária.
não é feito comSecuidado,
esta manutenção
este projeto permite que os erros (por vezes referido como atualização de
inserção e exclusão
anomalias ) para entrar e reduz a integridade global dos dados.
normalização de dados refere-se a modelagem de dados usando várias entidades com as relações
-los,entre
o que pode reduzir ou eliminar totalmente a redundância de dados. Existem muitos tipos de
formas
que foram
normais
definidas teoricamente, mas o projeto de banco de dados relacional se concentra
principalmente na seguinte
três:

• Primeira forma normal (1NF) lida com a questão de eliminar grupos de repetição
desnecessária
dados. Um exemplo
de de um grupo de repetição na Figura 7-3 seriam as primeiras quatro
colunas daduas linhas onde a informação descritiva sobre o carro é repetido. Você poderia
primeiras
definirentidade
nova um Carros que identifica exclusivamente um carro específico usando o atributo
chavecomo
bem primária Car ID
a marca, como Motor Capacidade e Cor atributos. O identificador ID Car é,
modelo,
utilizado na entidade transações relacionadas para evitar grupos de dados repetir.
então,
• forma normal Segundo remove atributos da entidade (1NF) que não são dependentes do
chave primária. Na entidade Carros proposta descrito anteriormente, o atributo cor não é
dependente
em um carro específico. Você pode definir uma nova entidade cores que identifica
exclusivamente
colorir usando oum
atributo
específico
chave primária cores ID. A ID A cor pode ser referenciado pela
Carros entidade.
• forma normal Terceiro remove todos os atributos interdependentes de uma entidade 2NF. Os
compradores
vendedoresede carros, cada um tem um número de Segurança Social identificação exclusiva
(SSN).
no entanto,
Os nomes
são interdependentes
deles, no atributo SSN. Você pode definir uma nova entidade
que identifica exclusivamente um cliente usando o cliente ID atributo chave primária onde
Clientes
informações interdependentes como nome e empresa do cliente são armazenadas.

NOTA Muitas vezes há vários modelos normalizados possíveis para um aplicativo. É importante
o mais apropriado. Se o analista de sistemas recebe esta errado, as implicações podem ser sérias para
usar
desempenho, necessidades de armazenamento e esforço de desenvolvimento.

Note-se que no contexto de ajuste de desempenho é intencional e aceitável para duplicar os


entidades.
dados emQuando os dados são normalizados entre várias entidades instanciado como várias tabelas
que devem
unidas, os processos
estar servidor Oracle precisa buscar fisicamente os dados de várias tabelas e
juntar a eles em buffers de memória para produzir o resultado conjunto necessário. A entrada
adicional
para consultar
/ saída
ou(IO)
manipular
requerido
dados normalizados às vezes justifica desnormalizar modelos de dados
para reduzir
operações dedisco
IO e, consequentemente, aumentar o desempenho. Isto é comum em armazéns de
dados (DWHs)
sistemas de apoioe à decisão (DSSS), mas é uma exceção e não a regra em transações on-line
de processamento (OLTP) sistemas.
Considere o modelo lógico de dados na Figura 7-4 . Os dados relacionados com o carro foi
modelado
entidade. como os carros
A informação do cliente (compradores e vendedores) é essencialmente o mesmo, para que
modelado
os clientescomo
têmAs
e vendedores. acompras
entidadeeClientes
sido comregistrados
vendas são o atributo Tipo de cliente
na entidade para diferenciar
Transações, enquantoentre
uma pesquisa
compradores
de entidadede cores mantém o controle de cores diferentes.
chamadas
Figura 7-4 O carro concessionário entidade-relacionamento diagrama
Existem várias vantagens para conceituar este projeto como quatro entidades inter-relacionadas.
Primeiro,
dados o
foram normalizados, e não existe duplicação de dados. Um benefício prático de várias
cada rastreamento de um único construto como automóveis, clientes, cores e até mesmo Transações,
entidades,
é a manutenção
de facilidade de dados. Novas cores podem ser adicionados, cada um com um código único e,
como carros
compra, estasnovos
cores,são
definidos e mantidos em um lugar, pode ser usado para descrever vários carros
com a mesma cor. Você poderia melhorar a sofisticação deste modelo, definindo entidades para
sistemas de segurança, dispositivos de rastreamento, ou audiovisual add-ons. Você poderia
pneus,
igualmentepara
recolhido melhorar
cada carro,
os detalhes
tais como os números de identificação de veículos (VINs) e números de
motor,
cada cliente,
ou paracomo endereço e dados bancários, mas este cenário hipotético serve para ilustrar
vários conceitos e, obviamente, não pode ser usado em um cenário de aplicativo de produção sem
melhorias.
mais

Chaves primárias
Cada entidade Figura 7-4 tem um atributo chave primária que identifica unicamente uma tupla ou
linha de dados
denotado por “# *” ao lado do nome do atributo. Cada valor da chave primária Car ID é único no
entidade. Várias linhas não podem compartilhar o mesmo valor da chave primária. Da mesma forma,
cores ID exclusiva
identifica cada linha na entidade cores, assim como ID do cliente e ID da transação nos clientes e
Transações entidades, respectivamente.

relações
As linhas na Figura 7-4 que ligam os vários entidades são conhecidos como relações . Notação pé do
expressa a cardinalidade das relações entre as entidades-um-para-um, um-para-muitos, muitos-
corvo
para-um e muitos-para-muitos. Notação pé do corvo ilustra explicitamente a entidade com a muitos
da relação com vários “pés”, enquanto a entidade no um lado tem um pé. Atributos em um
lados
um-para-um são idênticos, enquanto muitos-para-muitos relacionamentos indicam que várias tuplas
na entidade A têm os mesmos valores de atributos como muitos tuplas em entidade B. Ambos um-
para-umrelacionamentos
muitos e muitos-para- não são comuns e, às vezes apontam para falhas no modelo relacional. Um
muitos e relacionamentos many-to-one ocorrem com freqüência na modelagem de entidades
para-
relacionais.
atributos emEles
duasestão atrasados
entidades em um mestre-detalhe relação. Do ponto de vista da relação
entre as entidades carros e de cores (a ordem é significativa), por exemplo, muitos registros nos
entidade será um Color. Muitos carros poderia ter o mesmo atributo ID única cor, indicando que eles
carros
da mesma cor. A entidade Cores é o mestre ou lookup entidade, enquanto a entidade Cars é o detalhe
são
entidade nesta relação. Do ponto de vista da relação entre Cores e Cars, um
A cor pode ser associado com muitos carros. Então, é apenas uma questão de perspectiva se um
é um-para-muitos ou muitos-para-um; tudo depende de qual direção da relação que você considerar.
relacionamento
As outras relações indicados por pés de galinha mostram que um único carro pode ser comprado e
vendido
várias vezes, o que é a razão para a relação de um-para-muitos e entre os carros
Transações entidades e que um cliente pode realizar muitas transações (tais como compra e venda
muitos carros).

Integridade Referencial e chaves estrangeiras


Estas relações introduzir o conceito de integridade referencial, que garante a consistência dos dados
eintegridade, garantindo que um atributo (por exemplo, um atributo) pertencente à entidade no um
a relação deve ser único, enquanto o atributo (digamos atribuem B) sobre a entidade sobre a muitos
lado
deve ter um valor que está no conjunto de valores exclusivos descritos por atributo A. Atributo B é
lados
chamado
chave de
estrangeira, uma vez que tem uma dependência referencial em atributo A. considerar as cores-
relacionamento com base no atributo cor ID. integridade referencial garante que o atributo de cor ID
Cars
cada tupla na entidade Carros deve ter um valor que é idêntico a exatamente uma instância da ID a
em
atributo na entidade Cores. Esta garantia é central para a modelagem relacional desde o juntar do
cores
Carros e de cores entidades sobre o atributo de cor ID permite que as cores. Cor (esta é a notação de
ponto ) para ser combinado com uma tupla relacionadas na entidade Cars. O atributo cor ID na
atributo
éentidade
a chaveCars
estrangeira que está relacionada com a chave única, que é o atributo de cor ID na entidade
onde também acontece a ser a chave primária. É comum que as chaves estrangeiras em uma entidade
Cores,
são baseados
chaves em em uma entidade relacionada, mas isso não é a regra.
primárias
DICA As chaves estrangeiras em uma entidade são baseados em chaves únicas em uma entidade
relacionada,
não tem que mas
ser aessas
chavechaves
primária;
únicas
elesfazer
só têm de ser único.

O modelo lógico na Figura 7-4 seria tipicamente evoluir para um modelo relacional com mais
digitando
dados detalhes e chaves primárias e externas mais claros, como se mostra na Figura 7-5 .

Figura 7-5 Modelo relacional da concessionária de carros

O modelo relacional pode ser projetado em um modelo físico onde tabelas reais e outros
construções de banco de dados (discutidas mais adiante neste capítulo) são criados. Os dados da
amostra empara
transferido Figura
o modelo
7-3 físico construído a partir do modelo relacional descrito anteriormente
produziria

quatro conjuntos de dados, como na Figura 7-6 .


Figura 7-6 Os dados de amostra, usando o modelo relacional carro concessionário

As duas primeiras linhas de dados no conjunto de dados Transações pode ser interpretado da
seguinte forma:
• A transação com TX ID 100 descreve a compra de um carro com ID Car 1 por Sid
concessionária de um cliente com o ID do cliente 2 por US $ 10.000 em 1º de junho de 2013.
Você
ID doolhar
cliente
para
2 e cima
ver que era uma venda de Coda, um vendedor privado com SSN 12345. É
olhar
ID Carpara cima
1 e determinar que era um 2001-A160 Mercedes com ID Cor 1, o que você mais
resolver ser prata.
• A transação com TX ID 101 descreve a venda de ID Car 1 a ID do cliente 4, que você
resolver ser um negociante chamado Wags de Wags Auto com SSN 12347, por R $ 12.000,
em2013.
1, agosto

Com base nas descrições anteriores oferecidos em um design única entidade, nada foi perdido
organizar
por os dados de exemplo em todo o projeto de quatro entidade. No entanto, muito já foi
adquirida. Não
duplicação de dados.
há Há uma clareza e elegância que irá facilitar a facilidade de manutenção desses
dados

carros como novos são comprados e vendidos e novos clientes transaccionar com concessionária de
Sid.
Linhas e Tabelas
Os modelos de paradigma relacional dados como tabelas bidimensionais. Uma tabela consiste de um
númeroconsistindo
linhas, de cada uma de um conjunto de colunas. Dentro de uma tabela, todas as linhas têm a
mesma estrutura
embora seja possível
de coluna,
que, em algumas linhas algumas colunas pode não ter nada neles. Um exemplo
de umseria uma lista dos próprios funcionários, cada funcionário que está sendo representado por
mesa
uma linha.
pode ser umasnúmero
colunasde funcionário, um nome e um código para o departamento em que o
empregadofuncionários
Quaisquer trabalha. não atualmente atribuídas a um departamento teria que coluna em branco.
outra mesarepresentar os departamentos, com uma linha por departamento e com colunas para o
poderiam
departamento
código e nomededo departamento.
tabelas relacionais obedecer a certas regras que limitam e definem os dados. Ao nível da coluna,
cada coluna deve ser de um certo tipo de dados, tais como numérico, data e hora, ou personagem. O
personagem
tipo de dados é o mais geral, na medida em que pode aceitar qualquer tipo de dados. No nível de
linha,ter
deve geralmente
alguma característica
cada linha de identificação única. Este pode ser o valor de uma coluna, tal como
número do empregado e número do departamento nos exemplos anteriores, a qual não pode ser
o
repetido
linhas diferentes.
em Também pode haver regras que definem as ligações entre as tabelas, como uma
regra que todos
empregado deveosser atribuído um código de departamento que pode ser combinado a uma linha na
tabela de7-1
Tabelas departamentos.
através 7-4 são exemplos das definições de dados tabulados (um subconjunto de dados e
a partir do esquema de exemplo conhecido como SCOTT fornecida pela Oracle).
estruturas
Olhando para o layout das tabelas DEPT e EMP em Tabelas 7-1 e 7-2 , o bidimensional
estrutura é clara. Cada linha é de comprimento fixo, cada coluna é de comprimento fixo (preenchido
com espaços
quando necessário), e as linhas são delimitados por uma nova linha. Quadro 7-3 mostra as linhas de
DEPT
tabela armazenada em ordem DEPTNO, mas esta é uma questão de oportunidade, não projetar:
impor
tabelasqualquer ordenação
relacionais não particular sobre suas linhas. A Tabela 7-4 demonstra que departamento
empregado,
número 10 teme douma
departamento de número 40 não tem nenhum. Alterações de dados são geralmente
muito eficiente
modelo relacional.
comNovos
o funcionários podem ser anexado para a tabela de empregados, ou eles
podem
de ser movidos para outro simplesmente alterando o valor DEPTNO em sua linha.
um departamento

Tabela 7-1 O Quadro DEPT

Tabela 7-2 O Quadro EMP

Tabela 7-3 de linha de dados a partir da tabela DEPT

Tabela 7-4 de linha de dados a partir da tabela EMP

Considere-se uma estrutura alternativa, onde os dados são armazenados de acordo com o
O modelo
paradigmahierárquico
hierárquico.
foi desenvolvido antes do modelo relacional, por razões tecnológicas. No
primórdios da computação, dispositivos de armazenamento não tinha a capacidade para manter os
muitos
que eramarquivos
necessárias
separados
para as muitas tabelas relacionais. Observe que esse problema é evitado em
Oracle
banco de dados abstraindo o armazenamento físico (arquivos) do armazenamento lógico (tabelas);
não há direto
conexão entre mesas e arquivos e certamente não um mapeamento um-para-um. Com efeito, muitas
tabelas
ser armazenados
pode em alguns arquivos.
A hierárquicos lojas estrutura todos os dados relacionados em uma unidade. Por exemplo, o
departamento
recorde para incluiria
um todos os funcionários desse departamento. O paradigma hierárquico pode ser
rápido e muito eficiente do espaço. Um acesso de arquivo pode ser tudo o que é necessário para
muito
recuperar
para todosuma
satisfazer os dados necessários
consulta. Os funcionários e departamentos listados anteriormente podem ser
armazenadas
seguinte maneira:
hierarquicamente como
Neste exemplo de configurao, as linhas e colunas são de comprimento variável. As colunas são
delimitadas com um
vírgulas e linhas são delimitados por uma nova linha. recuperação de dados é normalmente muito
eficiente
pode se a consulta
navegar pela hierarquia. Se você sabe departamento de um empregado, você pode encontrar o
empregado
Se não o fizer,
rapidamente.
a recuperação pode ser lenta. Alterações de dados pode ser um problema se a
mudança necessita
movimento. Por exemplo, para mover empregado 7566, JONES da pesquisa para a VENDAS faria
envolver um esforço considerável por parte do banco de dados porque a mudança tem de ser
implementado
remoção de uma como
linhaume uma inserção para outro. Note-se que, neste exemplo, embora seja possível
tem um departamento sem empregados (o Departamento de Operações), é absolutamente impossível
tem um funcionário sem um departamento. Há nenhum lugar para colocá-la. Isto é excelente se
é uma regra de negócio afirmando que todos os funcionários devem estar em um departamento, mas
houver
não tão bom se isso não é o
caso.
O paradigma relacional é altamente eficiente em muitos aspectos, para muitos tipos de dados,
mas nãopara
apropriada é todas as aplicações. Como regra geral, uma análise relacional deve ser a primeira
tirada quando a modelagem de um sistema. Apenas se provar inadequada você deve recorrer a
abordagem
estruturas. Aplicações onde o modelo relacional tem se mostrado altamente eficaz incluem
nonrelational
praticamente
sistemas OLTP todos
e DSS. O paradigma relacional pode ser exigente em seus requisitos de hardware e
na habilidade necessária para desenvolver aplicações em torno dele, mas se os dados se encaixa, ele
provou ser
modelo versátil.
o maisNão pode ser, por exemplo, os problemas causados pela necessidade de manter os
manter as ligações entre as tabelas e os requisitos de espaço de manter várias cópias do
índices
dados indexados nos índices de si mesmos e nas tabelas em que as colunas residem. Não obstante,
projeto relacional é, na maioria das circunstâncias, o modelo ideal.
Um número de editores de software têm produzido sistemas de gerenciamento de banco de dados
que estejam
diferentes graus em conformidade
de precisão) para o(com
paradigma relacional; Oracle é único. IBM foi talvez o
primeira empresa a comprometer grandes recursos para isso, mas seu produto (que mais tarde
evoluiu
Não portado
para DB2)
para plataformas
foi não-IBM por muitos anos. Microsoft SQL Server é um outro banco de
dados
que temrelacional
sido limitado pelas plataformas em que é executado. bancos de dados Oracle, por outro
lado, tem sempre
foi portado para cada grande plataforma a partir da primeira versão. Pode ser isso que deu a Oracle a
vantagem
o sistema deemgerenciamento de banco de dados relacional (RDBMS) de mercado.
Uma nota sobre terminologia: Confusão pode surgir quando se discute bancos de dados
acostumado
relacionaisa trabalhar
com as pessoas
com os produtos da Microsoft. SQL é uma linguagem, e SQL Server é um
banco de dados,
Microsoft mundo, maso termo
no SQL é usado frequentemente para se referir a qualquer um.

Criar os esquemas de demonstração


Ao longo deste livro, há exemplos de código SQL. Para a maior parte, os exemplos usam tabelas em
dois esquemas de demonstração fornecidos pelo Oracle: o esquema HR, que são dados exemplo que
uma simples aplicação de recursos humanos, eo esquema OE, que simula uma ordem mais
simula
aplicação de entrada.
complicada
Estes esquemas pode ser criado quando o banco de dados é criado; é uma opção apresentada pela
Assistente de Configuração de banco de dados (DBCA). Se eles não existem, eles podem ser criados
mais tarde,
alguns scripts
executando
que existem no banco de dados Oracle Home.

DICA Um esquema de demonstração anterior era SCOTT (tigre senha). Este esquema é mais
simples do que
RH ou OE. Muitas pessoas com vasta experiência com a Oracle ainda preferem usar isso. A criação
script ainda é fornecido; é utlsampl.sql.

Usuários e Esquemas
No Oracle linguagem, uma base de dados do usuário é uma pessoa que pode fazer logon no banco
de dados.
todos os objetos
Um banco
no banco
de dados
de dados
esquema
de propriedade
é de um usuário. Os dois termos muitas vezes
porque
podem sernãousados
há umaindistintamente
relação de um-para-um entre os utilizadores e esquemas. Note-se que enquanto
verdade,
há, em um comando CREATE SCHEMA, isso não realmente criar um esquema é apenas uma
maneira
de rápida em um esquema. Um esquema é criado inicialmente vazio quando um usuário é
criar objetos
criado com
CRIAR USUÁRIO
o comando.
Os esquemas são utilizados para o armazenamento de objectos. Estes dados objetos podem ser
objetos
tais como tabelas
procedimentos
ou programático
PL / SQL armazenado. logons de usuário são usados para conectar ao
banco deesses
acessar dados objetos.
e Por padrão, os usuários têm acesso aos objetos em seu próprio esquema e que
para nada
outros, mas a maioria das aplicações mudar isso. Tipicamente, um esquema pode ser utilizado para o
armazenamento
acessados de dados
por outros que éque têm permissão para usar os objetos, mesmo que não fazer
usuários
possuí-los. Na prática, alguns usuários nunca vai ter objetos no seu próprio esquema ou permissão
para criar
eles. Eles terão direitos de acesso (que será estritamente controlada) apenas a objetos em outra
esquema. Esses objetos serão utilizados por todos os usuários que executam o aplicativo cujos dados
de esquema
lojas. Por outro lado, os usuários que possuem os esquemas de armazenamento de dados nunca
podem, dede
propósito fato,
seusfazer
esquemas
logon; éoconter
único dados utilizados por outros.
É impossível para um objeto de dados para existir independentemente de um esquema. Em
deveoutras
ter umpalavras,
dono. Otodasproprietário
as tabelas
é o usuário em cujo esquema reside a tabela. O identificador
por uma mesa (ou qualquer outro objecto de esquema) é o nome de usuário, seguido pelo nome do
exclusivo
objecto.
não é possível
Seguepara
que duas tabelas com o mesmo nome existir no mesmo esquema, mas que duas
tabelas
com o mesmo nome (embora possivelmente diferentes estruturas ou conteúdos) podem existir em
diferentes
um objeto esquemas.
não existe no E seseu próprio esquema, para acessá-lo o usuário deve qualificar seu nome com
o nome
do esquema em que ele reside. Por exemplo, HR.EMPLOYEES é a tabela chamada
em esquema de usuário de RH. A não ser sinônimos estão disponíveis apenas um usuário conectado
FUNCIONÁRIOS
como
mesa, HR poderia chegar
referindo-se ao sem um qualificador de nome do esquema. Um sinónimo é uma
empregados
construção
torna um objeto
que acessível a outros usuários sem a necessidade de seu nome do esquema como
prefixo.
O HR e OE Esquemas
O esquema HR demonstração consiste em sete mesas, ligados pela chave key-to-estrangeira primária
relacionamentos. A Figura 7-7 mostra as relações entre as tabelas como uma entidade-
relacionamento
diagrama.
Figura 7-7 O AR entidade-relacionamento diagrama

Dois dos relacionamentos mostrados na Figura 7-7 pode não ser imediatamente compreensíveis.
Primeiro,
existe uma relação muitos-para-um dos empregados aos empregados. Isto é o que é conhecido como
auto-referência de chave estrangeira . Isto significa que muitos funcionários pode ser conectado a
um
eumé baseado
funcionário,
no fato de que muitos funcionários pode ter um gerente, mas o gerente é também um
empregado. A relação é implementado pelo manager_id coluna sendo uma chave estrangeira para
employee_id, que é a chave primária da tabela.
A segunda relação que pode exigir explicação é entre departamentos e
EMPREGADOS, que é bidirecional. A relação de um departamento-to-many-funcionários
afirma que pode haver muitos membros da equipe em cada departamento, com base nos
simplesmente
FUNCIONÁRIOS
sendo uma chave estrangeira
dept_id para a coluna dept_id chave primária SERVIÇOS coluna. A um
to-many-departamentos relação mostra que um empregado poderia ser o gerente de várias
funcionário-
departamentos e é implementado pela coluna manager_id nos departamentos de ser uma chave
para a coluna employee_id chave primária nos empregados.
estrangeira
Quadro 7-5 mostra as colunas de cada tabela no esquema HR, usando a notação descrito no
seção anterior “Normalização de dados” para indicar as chaves primárias (#), chaves estrangeiras (\),
e se
columns are optional (o) or mandatory (*).
Tabela 7-5 Os tabelas e colunas no esquema HR

As tabelas são as seguintes:

• REGIÕES tem linhas para as principais áreas geográficas.


• países tem linhas para cada país, que são opcionalmente atribuídos a uma região.
• Locais inclui endereços individuais, que são opcionalmente atribuídos a um país.
• DEPARTAMENTOS tem uma linha para cada departamento, opcionalmente atribuído a um
local e
opcionalmente com um gerente (que deve existir como um empregado).
• Os funcionários tem uma linha para cada funcionário, cada um dos quais deve ser atribuído a
umopcionalmente
trabalho e a um departamento e um gerente. Os gestores devem ser eles próprios
funcionários.
• lista trabalhos de todos os postos de trabalho possíveis na organização. É possível que muitos
empregados para ter a
mesmo trabalho.
• listas JOB_HISTORY trabalhos anteriores realizadas pelos funcionários, identificado
exclusivamente
e Data_inicial;por
nãoemployee_id
é possível para um empregado para manter dois empregos ao mesmo
tempo. cada trabalho

registro histórico irá se referir a um funcionário, que terá tido um trabalho naquela época e
pode
ter sido um membro de um departamento.
Este esquema HR é utilizado para a maioria dos exercícios e muitos dos exemplos embutido no
capítulos deste livro e não precisam estar disponíveis.

CUIDADO Há linhas em funcionários que não têm uma linha pai correspondente na
Departamentos. Isto poderia ser por design, mas poderia muito bem ser um erro de design que é
porque a coluna DEPARTMENT_ID em funcionários não é obrigatória. Não são semelhantes
possível
possíveis erros na hierarquia regiões de países de localidades, o que realmente não faz
um monte de sentido.

O esquema OE é consideravelmente mais complexo do que o esquema HR. As estruturas de


maistabela
complicado;
são muito
eles incluem colunas definidas como tabelas aninhadas, tipos de dados definidos
pelo usuário,
Extensible Markup
e Language (XML) tipos de dados. Os objectos referidos são descritos como eles
são
usava.

Demonstração criação de esquema


Se o banco de dados que você está usando foi criado especificamente para estudar para o exame de
SQL, o de demonstração deveria ter sido já criado. Eles são uma opção apresentada pela
esquemas
Banco de dados Assistente de Configuração quando se cria um banco de dados. Após a criação do
bancoter
pode deque
dados, os esquemas e suas senhas definido; por padrão, as contas estão bloqueadas, o que
ser desbloqueado
você não pode fazer logon para eles. Estes comandos, que poderiam ser emitidos a partir de SQL *
significa
Plus ou SQLserá possível fazer logon como usuários HR e OE usando o hr senhas e oe:
Developer,

Estes comandos do utilizador alter pode ser emitido apenas quando ligado à base de dados como um
utilizador comde banco de dados (DBA) privilégios, tais como o sistema do usuário.
administrador
Se os esquemas não foram criados no momento da criação do banco de dados, eles podem ser
scripts
criados
instalados
mais tarde,
no Oracle
executando
Home do banco de dados. Se esses scripts não estão presentes, você
pode
baixar e instalar o software de banco de dados Exemplos Oracle da Oracle. Esses scripts precisará
ser executado a partir do SQL * Plus ou SQL Developer como um usuário com privilégios
SYSDBA.
para certos Ovalores
script como
solicitará
ele é executado. Por exemplo, no Linux, primeiro SQL lançamento * Plus a
partir de um sistema operacional
pronto.

Existem várias opções para esta conexão, mas a sintaxe anterior normalmente irá funcionar se o
banco de dados está sendo executado na mesma máquina em que você está executando o SQL *
Plus.
do SQL>
Em seguida,
prompt. chamar o script

O ? personagem é uma variável que SQL * Plus vai expandir-se para o caminho para o Início do
OracleO script irá pedir a senha do HR, tabelas padrão e tabela temporário;
diretório.
a senha SYS; e um destino para um arquivo de log do script que está sendo executado. Os valores
típicos para
espaço de tabela
o padrão e tabela temporário são usuários e TEMP, mas estes terão de ter sido
já criado. Após a conclusão, você será conectado ao banco de dados como o novo usuário HR. Para
verificar isso, executar estas instruções:

Você vai ver que você está conectado como HR; em seguida, execute o seguinte:

Você verá uma lista dos sete tabelas no esquema HR.


Para criar o esquema OE, siga o mesmo processo, nomeando o script.
O processo para criar os esquemas no Windows é idêntico, exceto para o caminho delimiters-
onde a maioria dos sistemas operacionais utilizam barras, o Windows usa barras invertidas. Assim, o
caminho
script para o de RH do Windows torna-se o seguinte:
de criação

Note que a execução desses scripts de criação de esquema vai soltar os esquemas primeiro se
Soltando
eles jáum
existem.
esquema significa remover todos os itens nele e, em seguida, remover o usuário. Este
não deve ser
problema, a menos
um que o esquema foi usado para algum trabalho de desenvolvimento que precisa ser
mantido.

CUIDADO Os esquemas de demonstração não deveria existir em bancos de dados de produção.


Não é bom,
razões de segurança,
por para ter esquemas desnecessários em um banco de dados que têm nomes bem
capacidades e (possivelmente) senhas.
conhecidos,

Executar uma instrução SELECT Básica


As capacidades práticas da instrução SELECT são realizados na sua execução. A chave para a
qualquer declaração linguagem de consulta é uma compreensão completa de sua sintaxe e as regras
execução
que regem
uso. Você vai
a sua
aprender mais sobre esse assunto em primeiro lugar, em seguida, sobre a execução de
uma consulta
cerca de expressões
básica,ee,operadores,
finalmente,que aumentam exponencialmente a utilidade dos dados
armazenados em relacional
mesas. Em seguida, o conceito de um valor nulo é desmistificado, como suas armadilhas estão
expostos.
coberta nas
Estes
quatro
tópicos
secções
são seguintes:

• A sintaxe da instrução SELECT primitiva

• As regras destinam a ser seguido


• expressões SQL e operadores
• NULL, significando nada

Sintaxe da instrução SELECT Primitive


Na sua forma mais primitiva, a instrução SELECT suporta a projeção de colunas e a criação
da aritmética, caráter e expressões de data. Além disso, facilita a eliminação de valores duplicados
a partir dos resultados estabelecidos. A sintaxe básica instrução SELECT é a seguinte:

As palavras-chave especiais ou palavras reservadas da sintaxe instrução SELECT aparecem em


maiúsculas.
Ao usar os comandos, no entanto, o caso das palavras reservadas em sua declaração de consulta não
importam. As palavras reservadas não podem ser usados como nomes de coluna ou outros nomes de
objetos de banco
DISTINCT, e FROM
de dados.
são três
SELECT,
palavras-chave. Uma instrução SELECT sempre contém dois ou mais
cláusulas. As duas cláusulas obrigatórias são a cláusula SELECT ea cláusula FROM. O símbolo pipe
(|) É usado para denotar OR. Assim, você pode ler a primeira forma da instrução SELECT anterior
seguinte maneira:
como

Neste formato, o asterisco (*) é utilizado para designar todas as colunas. SELECT * é uma forma
sucinta
pedindo Oracle para retornar todas as colunas possíveis. Ele é usado como um atalho, símbolo de
economia SELECIONAR
digitando de tempo, em vezcolumn1,
de column2, column3, column4, ..., columnx , para selecionar todas
as cláusula
A colunas. FROM especifica qual tabela de consulta para buscar os colunas solicitadas no SELECT
cláusula.
Você pode emitir o seguinte comando SQL para recuperar todas as colunas e todas as linhas da
mesa REGIÕES no esquema HR:
Quando este comando é executado, ele retorna todas as linhas de dados e todas as colunas
pertencentes
mesa. O uso do
a esta
asterisco em uma instrução SELECT é por vezes referido como um cego consulta
porque
as colunas exatas de ser obtida não são especificados.
A segunda forma da instrução SELECT básica tem a mesma cláusula FROM como a primeira
forma,
cláusula mas é diferente.
SELECT

Esta cláusula SELECT pode ser simplificada em dois formatos. Aqui está a primeira:

Aqui está a segunda:

Um nome alternativo é um nome alternativo para fazer referência a uma coluna ou expressão.
paraAliases
a exibição
são normalmente
de saída de uma
utilizados
maneira user-friendly. Eles também servem como abreviação
quando se
colunas ourefere a
expressões para reduzir a digitação. Aliases será discutido em detalhe mais tarde neste
capítulo.explicitamente
listando De somente as colunas relevantes na cláusula SELECT, você, na verdade,
projecto a exata
subconjunto dos resultados que você deseja recuperar. A seguinte declaração retornará apenas o
coluna REGION_NAME da tabela de REGIÕES:

Você pode ser solicitado para obter todos os cargos na organização que os funcionários têm
realizada. Para isso, você pode emitir o SELECT * comando do JOB_HISTORY. No entanto, em
historicamente
Adicionalmente, a construo * SELECT retorna o EMPLOYEE_ID, START_DATE, e END_DATE
colunas. Os resultados despojados conjunto contendo apenas as colunas JOB_ID e
pode ser obtido com a seguinte declaração:
DEPARTMENT_ID

Usando a palavra-chave DISTINCT permite linhas duplicadas para ser eliminado do conjunto de
inúmeras
resultados.
situações
Dentro
um único conjunto de linhas é necessária. É importante notar que o critério
empregada pelo servidor Oracle para determinar se uma linha é único ou distinto depende
o que é especificado após a palavra-chave DISTINCT na cláusula SELECT. Selecionando JOB_ID
inteiramente
Os valores da tabela JOB_HISTORY com a seguinte consulta retornará o trabalho distinto oito
distinta
tipos:

Uma característica importante da palavra-chave DISTINCT é a eliminação de valores duplicados


combinações
de de colunas.

Regras são destinadas a ser Seguido


SQL é uma linguagem bastante rigorosa em termos de regras de sintaxe, mas continua a ser simples
e flexíveluma
suportar o suficiente
variedadepara
de estilos de programação. Esta seção discute alguns dos governantes regras
básicas
instruções SQL.

Maiúsculas ou minúsculas
É uma questão de gosto pessoal sobre o caso em que instruções SQL são enviados para o banco de
Muitos desenvolvedores, incluindo os autores deste livro, prefiro escrever suas instruções SQL em
dados.
minúsculas. Há também um equívoco comum que o SQL palavras reservadas precisa ser
especificadoNovamente,
maiúsculas. em isso é com você. Aderindo a um formato consistente e padronizada é
aconselhada.
Há uma advertência sobre a sensibilidade caso. Ao interagir com valores literais, caso faz
importam. Considere a coluna JOB_ID da tabela JOB_HISTORY. Esta coluna contém linhas de
dados que acontecer para ser armazenado no banco de dados em letras maiúsculas, como em
SA_REP e ST_CLERK.
solicitando que o conjunto
Quando
de resultados ser restringido por uma coluna literal, o caso é crítica. O
servidor Oracle
trata o pedido para as linhas na tabela de JOB_HISTORY que contêm um valor de St_Clerk na
coluna JOB_ID diferentemente do pedido de linhas que têm um valor de ST_CLERK na JOB_ID
coluna.
Metadados sobre diferentes objetos de banco de dados são armazenados por padrão em
Se você
maiúsculas
consultar
no adicionário
tabela de de
dicionário
dados. de banco de dados para retornar uma lista de tabelas de
propriedade
que os nomesdodeesquema
tabela devolvidos
HR, é provável
serão armazenados em maiúsculas. Isso não significa que uma
tabela não
criado compode
um nome
ser em minúsculas; pode ser. É apenas mais comum e é o comportamento padrão
do
servidor Oracle para criar e armazenar tabelas, colunas e outros metadados de objeto de banco de
dados
o dicionário
em letras
de dados.
maiúsculas em

EXAME TIP Você pode enviar instruções SQL para o banco de dados em qualquer caso. Você deve
prestar cuidadosa
atenção ao caso quando interagindo com caracteres dados literais e aliases. Solicitando uma coluna
JOB_ID ou job_id retorna a mesma coluna, mas pedindo linhas onde o valor JOB_ID é
chamada
PRESIDENTE é diferente de pedir para as linhas onde o valor é presidente.

Exterminadores Declaração
Ponto e vírgula são geralmente usados como terminadores de instrução SQL. SQL * Plus requer
sempre umae,declaração
terminador, geralmente, um ponto e vírgula é usado. Uma única instrução SQL, ou mesmo grupos
de associadosmuitas vezes são salvos como arquivos de script para uso futuro. instruções individuais
declarações,
em scripts SQL
normalmente terminada
são por uma quebra de linha (ou retorno do carro) e uma barra diagonal na
próxima linha, em vez
de um ponto e vírgula. Você pode criar uma instrução SELECT, terminá-lo com uma quebra de
linha, incluem
cortar para executar
um atacante
a instrução, e guardá-lo em um arquivo script. O arquivo de script pode então
ser chamado
dentro do SQL de* Plus. Note-se que SQL Developer não requer um terminador de instrução, se
apenas um único
declaração está presente, mas não vai se opor se este for usado. É uma boa prática para sempre
terminar o SQL
instruções seu com um ponto e vírgula. Vários exemplos de SQL * Plus declarações seguir:

O primeiro exemplo demonstra duas regras importantes. Primeiro, a declaração é terminada por
ponto
ume vírgula. Em segundo lugar, a declaração inteira é escrita em uma linha. É totalmente
aceitável para
declaração sejaum SQL
para ser escrito em uma linha ou para abranger várias linhas, desde que não seja no
declaração abranger várias linhas. A segunda amostra de código demonstra uma declaração que se
estendeque
linhas poré três
encerrada por uma nova linha e executados com uma barra.

Recuo, legibilidade e Boas Práticas


Considere a seguinte consulta:

Este exemplo destaca os benefícios de recuo de sua instrução SQL para melhorar a legibilidade da
seu código. O servidor Oracle não opor-se toda a instrução está escrito em uma linha sem
recuo. No entanto, é uma boa prática para separar diferentes cláusulas da instrução SELECT para
diferentes linhas. Quando uma expressão em uma cláusula é particularmente complexa, que muitas
vezesseparar
para melhora esse
a legibilidade
termo da declaração em uma nova linha. Ao desenvolver SQL para atender a sua
precisa, o processo muitas vezes é iterativo. O intérprete SQL é muito mais útil durante o
comunicação
desenvolvimento
expressões complexas
se são isolados em linhas separadas já que os erros são geralmente jogado no
formato na
“ERRO de linha X:” Isso faz com que o processo de depuração muito mais simples.
Exercício 7-1: responder à sua primeira Perguntas com SQL Neste exercício passo-a-passo, você
faz uma usando SQL * Plus como o usuário HR responder a duas perguntas usando a instrução
conexão
SELECT.
Pergunta 1: Quantos departamentos única ter funcionários trabalhando atualmente em-los?

1. Inicie o SQL * Plus e ligar para o esquema HR.


2. Você pode inicialmente ser tentados a encontrar a resposta na tabela DEPARTMENTS. Uma
cuidadosa
exame revela que a questão pede informações sobre funcionários. Essa informação
está contido na tabela de PESSOAL.
3. A palavra única deve guiá-lo para usar a palavra-chave DISTINCT.
4. passos Combinando 2 e 3, você pode construir a seguinte instrução SQL:

5. Esta consulta retorna 12 linhas. Note-se que a terceira fila está vazia. Este é um valor nulo na
coluna DEPARTMENT_ID.
6. A resposta à primeira pergunta é então a seguinte: Onze departamentos únicos têm
empregados que trabalham neles, mas pelo menos um funcionário não tenha sido atribuído a
um departamento.
Pergunta 2: Quantos países existem na região da Europa?

1. Esta questão compreende duas partes. Considere a tabela de regiões, que contém quatro
regiões, cada uma delas identificada de forma única por um valor REGION_ID, e a tabela
de países,
tem uma coluna
o que REGION_ID indicando que a região um país pertence.
2. A primeira consulta deve identificar o valor REGION_ID da região da Europa. Isto é
realizado pela instrução SQL, o que mostra que a região da Europa tem uma REGION_ID
valor de 1.

3. Para identificar quais países têm 1 como seu valor REGION_ID, você pode executar o
seguinte consulta SQL:

4. contando manualmente as linhas de campo com um REGION_ID de 1 voltou mostra que há


oito países da região da Europa, tanto quanto o modelo de dados HR está em causa.

SQL Expressões e Operadores


A forma geral da instrução SELECT introduziu a noção de que as colunas e expressões podem
ser projetada. Uma expressão geralmente consiste de uma operação a ser realizada em um ou mais
valores ou expressões. Os operadores que podem actuar sobre os valores de modo a formar uma
coluna
expressão
Tipo de dados
dependerá
subjacente.
da Eles são os operadores aritméticos quatro cardeais (adição, subtração,
multiplicação e divisão) para colunas numéricas, o operador de concatenação para o personagem ou
colunas, e os operadores de adição e subtração para data e timestamp colunas. Como em comum
string
aritmética, existe uma ordem predefinida de avaliação (precedência operador) quando mais do que
operador ocorre numa expressão. Parênteses têm a mais alta prioridade. divisão e
um
operações de multiplicação estão próximos na hierarquia e são avaliados antes da adição e subtração,
que têm menor precedência.
Os operadores com o mesmo nível de precedência são avaliados da esquerda para a direita.
por Parênteses
conseguinte,
podem
ser utilizada para impor a precedência operador não padrão. Usando suportes
generosamente
construir expressões
quando
complexas é uma boa prática e é incentivada. Isso leva a código legível que é
menos propenso a erros. Expressões expor um grande número de possibilidades de manipulação de
dados úteis.
Operadores aritméticos
Considere a tabela JOB_HISTORY, que armazena a data de data de início e fim do mandato de um
empregado
um papel trabalho
em anterior. Pode ser útil para fins fiscais ou de pensão para calcular quanto tempo
um empregado
trabalhou nesse papel. Esta informação pode ser obtida usando uma expressão aritmética. De várias
elementos de ambos a instrução SQL e os resultados retornados da Figura 7-8 mandado mais
discussão.
Figura 7-8 expressão aritmético para calcular o número de dias de trabalho

A cláusula SELECT especifica cinco elementos. Os quatro primeiros são colunas regulares do
mesa JOB_HISTORY, enquanto o segundo fornece a informação da fonte necessário para calcular o
número de dias que um empregado enchidos numa posição particular. Considere o funcionário
número
nona linha
176denasaída. Esse funcionário começou como gerente de vendas em 1 de janeiro de 2007, e
terminou
emprego em 31 de dezembro de 2007. Portanto, este empregado trabalhou para exatamente um ano,
o que, consistia
2007, em de 365 dias.
O número de dias em que foi empregue pode ser calculada utilizando um empregado pelo quinto
elemento na cláusula SELECT, que é uma expressão. Esta expressão demonstra que a aritmética
realizado em colunas que contêm a informação data devolve valores numéricos que representam
uma determinada
número de dias.
Para impor a precedência do operador da operação de subtração, a subexpressão end_date-
start_date está entre colchetes redondas. Adicionando 1 faz com que o resultado inclusive do
primeiro dia.

DICA Como você pratica SQL em seu ambiente de banco de dados de teste, você pode encontrar
erros Oracle: “ORA-00923: DA palavra-chave não encontrado onde esperado” e “ORA-00942:
dois infame
tabelanão
vista ou existe.”Estes, muitas vezes indicam ortografia ou de pontuação erros, como delimitador em
falta
cita torno literais de caracteres.

Expressão e Coluna Aliasing


Figura 7-8 introduziu um novo conceito chamado aliasing coluna. Observe que a expressão tem um
significativas título denominado Dias Employed. Esta posição é um apelido. Um apelido é um nome
para uma coluna ou uma expressão. Se esta expressão não fazer uso de um alias, o título da coluna
alternativo
seria (END_DATE-START_DATE) +1, o que não é muito amigável. Aliases são especialmente
útil com expressões ou cálculos e pode ser implementado de várias maneiras. Há alguns
regras que regem o uso de aliases de coluna em instruções SELECT. O alias “Dias Empregado” em
Figura 7-8 foi especificado, deixando um espaço e introduzir o alias entre aspas duplas. Estes
aspas são necessárias por duas razões. Em primeiro lugar, este alias é composto por mais de uma
palavra.
Em segundo lugar, a preservação caso de um alias só é possível se o alias é dupla citado. Se um
apelido separados por espaço é especificado, um “ORA-00923: DA palavra-chave não encontrado
multiworded,
ondeéesperado”
erro retornado se não é o dobro citado. SQL oferece uma maneira mais formal de inserir aliases por
inserindo o AS palavra-chave entre a coluna ou expressão e o alias, como mostrado na primeira linha
de
esta consulta:

Operador caráter e concatenação de string


Os símbolos de tubulação dupla (||) representar o caractere concatenação operador. Este operador é
utilizado expressões
juntar-se para de caráter ou colunas em conjunto para criar uma expressão de caracteres maior.
Colunas
tabela podem
de umser ligados um ao outro ou para cadeias de caracteres correspondentes para criar uma
personagem resultante
expressão.
O operador de concatenação é flexível o suficiente para ser usado várias vezes e quase qualquer
expressão
lugar em
de um
caracteres. Considere a seguinte consulta:

Aqui, o personagem literal A é concatenado com o conteúdo da coluna REGION_NAME. este


nova cadeia de caracteres é ainda concatenado com o caractere literal região é no Planeta Terra , e
a expressão inteira é alias com o amigável indo Localização planetária .

Literais e a Tabela DUAL


Literais são comumente usados em expressões e referem-se a numérico, personagem ou data e
valores de tempo
encontrado em cláusulas SELECT que não são originárias de qualquer objeto de banco de dados.
caracteres
literais paraconcatenando
dados da coluna existente pode ser útil, mas que sobre literais de processamento que
nada têm
fazer comadados da coluna existente? Para garantir a consistência relacional, a Oracle oferece uma
solução inteligente
problema de usar o para
banco
o de dados para avaliar expressões que não têm nada a ver com nenhuma
tabela ouPara obter o banco de dados para avaliar uma expressão, uma instrução SELECT
colunas.
sintaticamente
seja submetido.legal
E se deve
você queria saber a soma de dois literais numéricos? A Oracle resolve o
de interação relacional com o banco de dados operando em expressões literais, fornecendo uma
problema
especial
single-remou, única tabela com colunas chamado DUAL.
Lembre-se que a tabela DUAL descrito anteriormente contém uma coluna chamada
TipoMANEQUIM
de dados de caracteres.
do Você pode executar a consulta SELECT * FROM DUAL, eo valor de
dados “X”como
devolvida é os conteúdos da coluna MANEQUIM. Testando expressões complexas durante o
desenvolvimento
consultando a tabela
pordupla é um método eficaz para avaliar se estas expressões estão corretas.
expressões literais podem ser consultados a partir de qualquer mesa, mas lembre-se que a expressão
processados para cada linha na tabela, ao consultar a tabela DUAL retorna apenas uma linha.
será
A primeira declaração retornará quatro linhas no conjunto de resultados desde há quatro linhas de
dados na mesa, enquanto o segundo retorna apenas uma linha.
REGIÕES

Duas aspas simples ou o Operador Citar Alternativa


As cadeias de caracteres literais concatenado até agora têm sido palavras singulares prefixado e
a expressões de coluna. Esses caracteres literais são especificados usando aspas simples. Aqui está
anexado
exemplo:
um

E sobre literais de caracteres que contêm aspas simples? Plurais representam um determinado
problema para o processamento literal personagem. Considere a seguinte declaração:

Executar essa instrução faz com que um erro do Oracle a ser gerado. Então, como são palavras
aspas
que
simples
contêmtratado? Existem essencialmente dois mecanismos disponíveis. O mais popular
destes é adicionar uma aspa simples adicional ao lado de cada ocorrência natural única citação
marcar na sequência de caracteres. A declaração a seguir demonstra como o erro anterior é evitado
substituindo o caráter literal 'Plural de com o literal 'Plural' de :

Usando duas aspas simples para lidar com cada ocorrência natural aspas simples em que um
tornar-se
personagem
confusopode
e propenso
literal a erros como o número de literais afetadas aumenta. A Oracle oferece
uma lidar
para maneira
comelegante
esse tipo de personagem literal na forma da citação operador alternativo (q). o
problema é que a Oracle escolheu o caractere de aspas simples como o símbolo especial com o qual
se encerram
ou envolva outros caracteres literais. Estes símbolos-encerrando personagem poderia ter sido outra
de aspas simples.
coisa
Tendo isso em mente, considere o operador apóstrofo alternativa (q). O operador q permite-lhe
escolher entre um conjunto de possíveis pares de símbolos de embrulho para literais de caracteres
como alternativas
símbolos de aspas para
simples.
o As opções são qualquer de byte único ou caractere de vários bytes ou os
quatroparênteses),
(entre suportes: {chaves}, [colchetes] ou <> colchetes. Usando o operador q, o

delimitador personagem pode efetivamente ser alterado a partir de uma aspa simples para qualquer
outro personagem,
mostrado aqui: como

A sintaxe do operador apóstrofo alternativa é a seguinte, onde delimitador pode ser qualquer
caractere
ou suporte:

Os primeiro e segundo exemplos mostram a utilização de ângulo e colchetes como delimitadores de


caracteres,
enquanto o terceiro exemplo demonstra como um maiúscula X tem sido usado como o caractere
símbolo delimitador através do operador apóstrofo alternativa. Note que o X personagem pode ser
especial
ele próprio
incluída na string-contanto que não é seguido por uma aspa.

NULL é nada
Nulo refere-se a uma ausência de dados. Uma fileira que contém um valor nulo não tem dados para
essa coluna. Null
formalmente é como um valor que não está disponível, não atribuído, desconhecido ou
definida
o tratamento
inaplicável.
resposta Oespecial queseção
os valores
não cumprimento
imprecisa. Esta nulos requerem
concentra-se quasecom
em interação certamente
dados dairá levar nulos
coluna a um erro
com ou,
o pior,
uma
declaração e seu impacto sobre expressões.
SELECT

Nem colunas nulos e anuláveis


Tabelas armazenar linhas de dados que são divididos em uma ou mais colunas. Estas colunas têm
nomesdee dados que lhes estão associados. Alguns deles são limitados por regras de banco de dados a
tipos
ser obrigatória
colunas. É obrigatório para alguns dados a serem armazenados nas colunas NOT NULL em cada
linha. Quando
colunas de uma tabela, no entanto, não são obrigados pelas restrições de banco de dados para
armazenar
estas colunas
dados
correr
para
o risco
uma linha,
de ser vazio.

CUIDADO Qualquer cálculo aritmético com um valor NULL sempre retorna NULL.

A Oracle oferece um mecanismo para interagir aritmeticamente com valores nulos utilizando o
funções
geraldiscutidas no Capítulo 8 . Divisão por um valor nulo resulta em nulo, ao contrário de divisão
por
o que
zero,
resulta em um erro. Quando um nulo é encontrado pelo operador de caracteres de
no entanto, ele é simplesmente ignorado. Os operadores de caracteres de concatenação ignorar nula,
concatenação,
enquanto acom
operações aritmética
valores nulos sempre resultam em nulo.

Chaves estrangeiras e colunas anuláveis


design do modelo de dados, por vezes, leva a situações problemáticas quando as tabelas são
relacionados
através de umaunsrelação
aos outros
de chave primária e externa, mas a coluna que a chave estrangeira baseia-se é
nulo.A tabela SERVIÇOS tem, como seu principal chave, a coluna DEPARTMENT_ID. o
funcionários tabela tem uma coluna DEPARTMENT_ID que é limitada por sua chave estrangeira
relação à coluna DEPARTMENT_ID na tabela SERVIÇOS. Isto significa que não
registo na tabela empregados é permitido ter na sua coluna DEPARTMENT_ID um valor que é
Não na tabela DEPARTMENTS. Esta integridade referencial constitui a base para a terceira forma
énormal
críticoepara a integridade global do banco de dados.
Mas o que acontece com valores nulos? Pode a coluna DEPARTMENT_ID na tabela
conter
DEPARTAMENTOS
nulos? A resposta é não . A Oracle insiste em que qualquer coluna que é uma chave primária
ser implicitamente
constrangido a ser obrigatória. Mas o que dizer de restrições implícitas em colunas de chave
estrangeira?
dilema para Oracle
Isto é um
desde a fim de permanecer flexível e atender ao público mais vasto, não pode
insistir
que as colunas relacionadas através de restrições de integridade referencial deve ser obrigatória.
Além disso,
situações exigem
nem todos
essa funcionalidade.
A coluna DEPARTMENT_ID na tabela empregados é efectivamente nula. Portanto, o
existe risco de que há registos com valores nulos DEPARTMENT_ID presentes nesta tabela. De
há tais registros na tabela EMPREGADOS. O modelo de dados HR permite que os funcionários,
fato,
corretamente
não, pertencerou a nenhum departamento. Quando relacional realização de junções entre tabelas, é
inteiramente
possível perder ou excluir determinados registros que contêm valores nulos na coluna de junção.
Capítulo 10
maneiras de discute
lidar com esse desafio.

Exercício 7-2: construir expressões Neste exercício, você vai construir uma consulta usando
e aliases para exibir os resultados do esquema HR de uma forma mais user-friendly.
expressões

1. consulta a tabela de HR.JOBS e retornar uma única expressão da forma A ID de trabalho


para
<job_title
o de> trabalho é : <job_id>. Tome nota que a job_title deve ter um apóstrofo e um
s adicionados a ele para ler mais naturalmente. Uma amostra deste saída para o presidente
é a seguinte: O ID de trabalho para o trabalho do presidente é: AD_PRES . Alias esta
organização
expressão: descrição do trabalho usando a palavra-chave AS. Existem várias soluções para
coluna
problema. A abordagem adoptada aqui é para lidar com a aspa que ocorre naturalmente
este
com uma cotação individual adicional. Você poderia fazer uso do operador apóstrofo
alternativaa para
delimitar citação que ocorre naturalmente com outro personagem.
2. Um único expressão alias como Descrição de trabalho é necessária; você pode construí-lo
porconcatenando o literal 'O ID de tarefa do' à JOB_TITLE coluna. Essa seqüência é seguida
concatenado com o literal '' 's trabalho é:', o que é ainda mais concatenadas para a coluna
JOB_ID.
Uma aspa simples adicional é adicionado para produzir a instrução SELECT que se segue:

Limitar as linhas recuperadas por uma consulta


Um dos princípios basilares da teoria relacional é seleção. A seleção é atualizado usando o
Cláusula WHERE da instrução SELECT, por vezes referido como o predicado . condições que

restringir o conjunto de dados retornado assumir muitas formas e operar em colunas, bem como
expressões.
linhas Somenteessas condições são devolvidos. Condições restringir linhas usando comparação
que cumprem
operadores em conjunto com colunas e os valores literal. operadores booleanos fornecer um
mecanismovárias
especificar para condições para restringir as linhas retornadas. Booleano, condicional,
concatenação,
operadores aritméticos
e são discutidas para estabelecer a sua ordem de precedência quando eles são
encontrados
em uma instrução SELECT.

A cláusula WHERE
A cláusula WHERE se estende a instrução SELECT, fornecendo a capacidade de restringir linhas
com base em uma ou mais condições. Consultando uma tabela com apenas a cláusulas SELECT e
retornadas
FROM
em cadaresultados
linha de dados armazenados na tabela que estão sendo devolvidos. Usando a palavra-chave
DISTINCT,
Os valores sãoduplicar
excluídas, e as linhas resultantes são restritas a um certo grau. E se muito específico
informação é requerida a partir de uma tabela, por exemplo, somente os dados em que uma coluna
contémComo
valor? um específico
você recuperar os países que pertencem à região da Europa dos países
mesa? O que sobre como recuperar apenas aqueles empregados que trabalham como representantes
de vendas?são
perguntas Estes
respondidas usando a cláusula WHERE para especificar exatamente quais linhas
devem
O formato
ser devolvidos.
da instrução SQL SELECT que inclui a cláusula WHERE é a seguinte:

A cláusula WHERE sempre segue a cláusula FROM. Os colchetes indicam que o


Cláusula WHERE é opcional. Uma ou mais condições podem ser aplicados simultaneamente para
restringir odefinido. Uma condição é especificado por comparação de duas condições usando um
resultados
operador condicional.
termos podem Estes
ser valores da coluna, literais, ou expressões. A igualdade operador é mais
comumente
para restringir
usado
conjuntos de resultados. Um exemplo da utilização de uma cláusula WHERE é
mostrado a seguir:

Este exemplo projecta a coluna COUNTRY_NAME da tabela de países. Ao invés de


seleccionando cada linha, a cláusula ONDE restringe as linhas devolvido para apenas aqueles que
contémREGION_ID.
coluna um 3 na

Condições numéricos baseados


Condições devem ser formuladas de forma adequada para diferentes tipos de dados de coluna. As
restringindo linhas com base em colunas numéricas pode ser especificado de várias maneiras
condições
diferentes.
coluna SALÁRIO
considere
na otabela empregados. Esta coluna tem um tipo de dados de NUMBER (8,2). o
coluna salário pode ser restringido como se segue:

Os valores LAST_NAME e salários dos empregados que ganham US $ 10.000 são recuperados
desde o dados em ambos os lados da partida operador e são compatíveis.
tipos de

Uma coluna numérica pode ser comparada com uma outra coluna numérica na mesma linha para
a construção
WHERE condiçãodecláusula,
um como a consulta a seguir demonstra:
Esta cláusula WHERE é demasiado restritiva e resulta em nenhuma linha sendo selecionados por
causa dosalário
valores intervalo
é 2100-24000,
de e a gama de valores é de 10 a DEPARTMENT_ID 110. Desde
Não existe sobreposição da gama de valores DEPARTMENT_ID e salário, não existem linhas que
satisfazer esta condição e, portanto, nada é devolvido.
ONDE condições cláusula também pode ser usado para comparar colunas e expressões
comparar
numéricas
expressões
ou a para outras expressões.

O primeiro exemplo compara a coluna SALÁRIO com DEPARTMENT_ID * 100 para cada
O segundo
linha. exemplo compara duas expressões. Note-se que as condições em ambos os exemplos são
algebricamente idênticas, e o mesmo conjunto de dados é recuperada quando ambos são executados.

Condições baseadas em caracteres


Condições que determinam quais linhas são selecionados com base em dados de caracteres são
especificados
caracteres literais
colocando
na cláusula condicional, dentro de aspas simples. A coluna no JOB_ID
funcionários tabela tem um tipo de dados de VARCHAR2 (10). Suponha que você queira uma lista
valores LAST_NAME desses funcionários atualmente empregados como representantes de vendas.
do
o JOB_ID
valor para um representante de vendas é SA_REP. A declaração a seguir produz uma lista desse tipo:

Se você tentou especificando o caráter literal sem as aspas, um erro do Oracle seriam levantadas.
Lembre-se que o caráter de dados literal é case sensitive, então o seguinte cláusulas WHERE não são
equivalente:

Cláusula 1 gera um “ORA-00904: 'SA_REP': identificador inválido” erro desde o SA_REP literal é
não envolvido em aspas simples. Cláusula 2 e 3 são cláusula sintacticamente correcta mas não
equivalente.
Além disso, nenhuma dessas cláusulas produz quaisquer dados, pois não existem linhas na tabela
tendo valores de coluna JOB_ID que são ou Sa_Rep ou sa_rep.
EMPREGADOS
condições baseados em caracteres não estão limitados a comparar os valores da coluna com
também
literais.
ser Eles
especificados
podem usando outras colunas de caracteres e expressões. expressões baseados em
caracteres
formar umapode
ou ambas as partes de uma condição separada por um operador condicional. estas
podem ser formados através do encadeamento valores literais com uma ou mais colunas de
expressões
caracteres. Os seguintes
quatro cláusulas demonstrar algumas das opções para condições baseados em caracteres:

Cláusula 1 concatena a string literal A às colunas ultimo_nome e primeiro_nome. este


expressão é comparado com o literal Um rei . Cláusula 2 demonstra que as expressões personagem
ser colocado em ambos os lados do operador condicional. Cláusula 3 ilustra que as expressões
pode
literais pode
também ser colocado à esquerda do operador condicional. É logicamente equivalente a cláusula 4,
que temos operandos na cláusula 3 ao redor. Ambas as cláusulas 3 e 4 identicamente restringir os
trocou
resultados.
Condições Baseada em Data
colunas DATE são úteis para armazenar data e hora. literais de data devem ser colocados entre
aspas simples assim como dados de caracteres. Quando usado em condicional cláusulas WHERE,
colunas pode ser comparado a outras colunas de data, literais ou expressões. Os literais são
data
automaticamente convertidos em valores de data baseada no formato de data padrão, que é DD-
Se ocorre um literal em uma expressão envolvendo uma coluna DATA, que é automaticamente
MON-RR.
valor usando
convertido a máscara
num data de formato padrão. DD representa dias, seg representa as três primeiras
mês,
letrasede
RRumrepresenta um 2000-compliant ano (isto é, se a TR for entre 50 e 99, então o
servidor Oracle retorna o século anterior, senão ele retorna do século atual). O completo de quatro
ano, AAAA, também pode ser especificado. Considere as seguintes quatro cláusulas WHERE:
dígitos

A primeira cláusula de testes de igualdade entre duas colunas data. As linhas que contêm os
suasmesmos
colunasvalores em
START_DATE e END_DATE será devolvido. Note, no entanto, que os valores DATA
são iguais a única entre si se existe uma correspondência exacta entre todos os seus componentes,
incluindo
mês, ano, os
horas,
dias,minutos e segundos. Capítulo 8 discute os detalhes de armazenar valores de data.
Até então, não se preocupe com as horas, os minutos e os componentes segundos. Na segunda
ONDE
cláusula, a coluna START_DATE é comparado a este personagem literal: '01 -Jan-2001' . a inteira
componente ano com quatro dígitos (AAAA) foi especificado. Isto é aceitável para o servidor
Oracle. ocondição é equivalente para a segunda, desde o literal '01 -Jan-01' é convertido para o valor
terceira
de data
01-JAN-2001. Isto é devido ao componente RR sendo inferior a 50, de modo que o século atual (21),
20, é prefixado para o componente ano RR para fornecer um valor século. O componente de século
para o '01 -Jan-99' torna-se o século anterior (19) e é convertido para um valor de data de 01-Jan-
literal
1999 para a quarta condição uma vez que o componente RR, 99, é maior do que 50.
Data aritmética usando os operadores de adição e subtração é suportado. Uma expressão como
END_DATE - START_DATE retorna o número de dias entre START_DATE e END_DATE.
START_DATE + 30 retorna uma data 30 dias depois de START_DATE.

EXAME TIP cláusulas condicionais comparar dois termos usando operadores de comparação.
Sabendo
tipos de termos
os dados
é importante para que eles possam ser colocados entre aspas simples, se necessário.

Operadores de comparação
A igualdade operador é geralmente usado para ilustrar o conceito de linhas restringem usando um
cláusula. Existem vários operadores alternativos que também podem ser utilizados. Os desigualdade
ONDE
operadores
“Menos do como
que” ou “maior ou igual a” pode ser usado para retornar linhas em conformidade com a
condições. O operador BETWEEN facilita a comparação à base de gama para testar se uma coluna
desigualdade
valor situa-se entre dois valores. Os testes de operação no conjunto de associação, assim que uma
linha écoluna
valor retornada
testado
se oem que a condição é um membro de um conjunto de literais. A comparação
correspondência
operador LIKE éde extremamente
padrão poderoso, permitindo que os componentes de dados da coluna de
caracteres
para literaisa ser
em correspondido
conformidade com um padrão específico. O último operador de comparação
discutido nesta
É o operador seção que
NULL, é retorna as linhas em que o valor de coluna contém um valor nulo. Estes
os operadores podem ser utilizados em qualquer combinação na cláusula WHERE.

Igualdade e Desigualdade
Limitando as linhas retornadas por uma consulta envolve especificar uma cláusula adequada
WHERE. Se
demasiado a cláusula
restritiva, emé seguida, poucos ou nenhuns linhas são retornadas. Se a cláusula
condicional
em seguida, émais
demasiado
linhas do
ampla
que são
especificado,
necessários são devolvidos. Explorando os diferentes operadores
disponíveis
equipá-lo com
devem
a língua para solicitar exatamente as linhas que você está interessado. O teste para a
numa condição é natural e intuitiva. Tal condição é formado utilizando o “é igual a” (=)
igualdade
operador. Uma linha é devolvido se a condição de igualdade é verdade para essa linha. Considere o
inquerir:
seguinte

A coluna JOB_ID de cada linha da tabela empregados é testado pela igualdade com a
caráter SA_REP literal. Para obter informações de caráter para ser igual, deve haver um caso- exata
match sensível. Quando tal correspondência é encontrada, os valores para as colunas projetadas,
LAST_NAME e salário, são retornados para essa linha. Note que, embora a cláusula condicional é
com base na coluna JOB_ID, não é necessário para esta coluna a ser projetada pela consulta.
Desigualdade baseados em condições de melhorar a especificação cláusula ONDE. Gama e
comparações
padrão correspondentes são possíveis usando operadores de desigualdade e igualdade, mas
muitas
usar os vezes é preferível
operadores ENTRE E como para essas comparações. Tabela 7-6 descreve a desigualdade
operadores.

Tabela 7-6 operadores de desigualdade

operadores de desigualdade permitem consultas à base de gama para ser cumprida. Você pode ser
um obrigado
conjunto de
a fornecer
resultados,
umaem que um valor de coluna é maior do que um outro valor. A consulta a
seguirobter
para podeuma
ser lista
emitido
de valores LAST_NAME e salário para funcionários que ganham mais de US $
5.000:

Os operadores de desigualdade compósitos (constituída por mais do que um símbolo) são


seguintes
utilizados
cláusulas:
na

Cláusula 1 retorna as linhas que contêm um valor de salário que é inferior a ou igual a 3,000.
Cláusula 2 demonstra uma das duas formas da “não é igual a” operadores. Cláusula 2 retorna as
linhas
que têm valores da coluna salário que não são iguais aos valores DEPARTMENT_ID.
desigualdade numérico é naturalmente intuitiva. A comparação dos termos de caráter e data, no
maisentanto, é desigualdade caráter de teste é interessante porque as cordas que estão sendo
complexo.
comparados
cada lado doemoperador de desigualdade são convertidas para uma representação numérica dos seus
Com base no conjunto de caracteres de banco de dados e suporte ao idioma nacional configurações
caracteres.
(NLS),é cada
string atribuído
personagem
um valor numérico. Estes valores numéricos formar a base para a avaliação da
comparação de desigualdade. Considere a seguinte declaração:

O caráter literal 'King' é convertido para uma representação numérica. Assumindo um


caracteres
US7ASCII
banco de dados definida com configurações NLS americano, o literal 'King' é convertido
em seu ordinal
valores de caracteres: K (75), i (105), N (110), e g (103). Para cada linha na tabela de funcionários, a
dados coluna LAST_NAME é similarmente convertidos em valores numéricos para cada carácter,
queseguida,
em são em comparação, por sua vez com os valores numéricos dos caracteres na literal 'King'.
Por exemplo,
linha com LAST_NAME
a = 'Kaufling' é comparada como se segue: O primeiro caracter em ambas as
cadeias
com umévalor
'K' igual ordinal de 75. Assim, o segundo carácter de (i = 105) é comparado com (a = 97).
Desde
(97 <105)
a ou (a <i), 'Kaufling' < 'rei', e a linha é seleccionada. O mesmo processo para comparar
os dados numéricos usando os operadores de desigualdade se aplica a dados de caracteres. A única
diferença é que
dados de caracteres
configurações é convertido
de banco de dados.implicitamente pelo servidor Oracle para um valor numérico com
base em determinadas
comparações de desigualdade que operam em valores de data seguir um processo semelhante ao
lojasdados de caracteres.
servidor Oracle datao em um formato numérico interno, e estes valores são comparados dentro
condições.
do

Gama Comparação com o entre o operador


O ENTRE testes operador se um valor de coluna ou expressão cai dentro de um intervalo de dois
valores de limite. O item deve ser pelo menos o mesmo que o valor limite inferior ou 'no máximo' o
mesmo que o valor limite superior ou queda dentro do intervalo para a condição para ser verdade.
Suponha que você queira os sobrenomes dos funcionários que ganham um salário na faixa de US
US $ 3.400
4.000.eUma solução possível, utilizando o operador ENTRE é como se segue:

Condições especificadas com a ENTRE operador pode ser equivalentemente denotado usando
condições
dois à base de desigualdade.

É mais curto e mais simples para especificar a condição gama usando o operador BETWEEN.

Definir Comparação com o operador em


Os testes do operador em saber se um item é um membro de um conjunto de valores de literal. O
conjuntoseparando
vírgula é indicadoaspor
literais e colocando-os entre parênteses. Se os literais são de caráter ou
valores de data, em seguida, estes devem ser delimitados por aspas simples. Você pode incluir como
muitos literaisquiser.
definir como no Considere o seguinte exemplo:

O valor do salário em cada linha é comparada para a igualdade para os literais especificados no
valor
conjunto.
do salário
Seéoigual a 1,000; 4.000; ou 6000; o valor LAST_NAME para essa linha é retornada. o
seguindo dois demonstrações demonstrar o uso do operador IN com DATA DE CARACTERES e
dados:

Comparação padrão com o operador LIKE


O operador LIKE é projetado exclusivamente para dados de caracteres e fornece um mecanismo
àpoderoso
procura para
de letras ou palavras. LIKE é acompanhado por dois caracteres curinga: a percentagem
símbolo (%) e o caractere sublinhado (_). O símbolo de porcentagem é usado para especificar zero
ou mais curinga, enquanto o caractere sublinhado especifica um carácter universal. Um curinga
caracteres
pode representar qualquer caractere.

Você pode usar a seguinte consulta para fornecer uma lista de funcionários cujos nomes
letracomeçam
A: com a

O caráter literal que a coluna FIRST_NAME é comparado com está entre aspas simples
como um personagem regular, literal. Além disso, ele tem um símbolo de percentagem, que tem um
significado
no contextoespecial
do operador LIKE. O símbolo percentual substitui zero ou mais caracteres
apenso à carta Uma . Os caracteres curinga podem aparecer no início, no meio ou no final
do caráter literal. Eles podem até mesmo aparecer sozinho, como segue:

Neste caso, cada linha contendo um valor FIRST_NAME que não é nulo será retornado.
símbolos curinga não são obrigatórias quando se utiliza o operador LIKE. Em tais casos, como se
um teste de
comporta operador de igualdade para os jogos de caracteres exatos; assim, as duas seguintes
como
equivalente:
cláusulas são ONDE

O símbolo sublinhado curinga substitui exatamente um outro personagem em um literal.


à procura
Considerar
de funcionários cujos sobrenomes são quatro letras, começa com um K , tem um
segunda letra, e no final com uma ng . Você pode emitir a seguinte declaração:
desconhecido

Como a Figura 7-9 mostra, os dois símbolos de caracteres universais pode ser usado de forma
várias
independente,
vezes num único
em conjunto,
em que aoucondição.
mesmo A primeira consulta recupera os registros onde
COUNTRY_NAME começa com a letra I seguido por um ou mais caracteres, um dos quais deve
ser uma minúscula um .

Figura 7-9 Os símbolos de caracteres universais do operador LIKE


A segunda consulta recupera os países cujos nomes contêm a letra i como seu quinto
personagem.dos valores COUNTRY_NAME ea letra que começam com não são importantes. Os
O comprimento
sublinhado símbolos curinga anteriores à minúscula i na cláusula WHERE representar exatamente
quatro
caracteres (que podem consistir em quaisquer caracteres). A quinta carta deve ser um i , eo símbolo
quatro
de porcentagem
especifica que o COUNTRY_NAME pode ter zero ou mais caracteres do sexto caractere
em diante.
E quando você estiver procurando por um literal que contém uma porcentagem ou sublinhado
personagem? Um carácter de sublinhado que ocorre naturalmente pode ser escapou (ou tratada como
um regular
símbolo nonspecial) utilizando o identificador ESCAPE em conjunto com um caractere de escape.
seguinte exemplo, quaisquer valores JOB_ID que começam com os três personagens sa_ serão
No
devolvidos:

Tradicionalmente, o caractere de escape é o símbolo de barra invertida, mas ele não tem que ser.
seguinte
o declaração é equivalente ao anterior, mas usa um símbolo do dólar como o ESCAPE

caracteres em vez disso:

O símbolo percentagem pode ser semelhante escapou quando ele ocorre naturalmente como
dados de caracteres.
Exercício 7-3: Use o operador LIKE Construir uma consulta para recuperar uma lista de nomes de
esse fim com as letras ing da tabela DEPARTMENTS.
departamento

1. Inicie o SQL * Plus e ligar para o esquema HR.


2. O WHERE deve executar uma comparação entre a department_name
valores de coluna e um padrão começando com zero ou mais caracteres, mas terminando
com três específicos, ing . O operador permitindo correspondência padrão personagem é o
caracteres
operador. O padrão da coluna department_name deve conformar-se é '% ing'.
COMO
3. Assim, a consulta correcta é a seguinte:

Comparação NULL com o NULL operador é


valores NULL inevitavelmente encontrar seu caminho em tabelas de banco de dados. às vezes é
necessárioque
registros quecontêm
apenasum
aqueles
valor NULL em uma coluna específica são procurados. O IS operador
seleciona
apenas as NULL
linhas onde um valor de coluna específica é NULL. Testando os valores da coluna de
igualdade utilizando
efectuada para NULLo éoperador nulo é, em vez de a “é igual a” operador (=).
Considere a seguinte consulta, que busca a coluna LAST_NAME dos empregados
mesa para as linhas que têm valores nulos armazenados na coluna COMMISSION_PCT:

Esta cláusula WHERE lê naturalmente e recupera apenas os registros que contêm NULL
valores COMMISSION_PCT.

Operadores booleanos
Booleanas ou lógicas operadores permitem múltiplas condições de ser especificada na cláusula
WHERE da
instrução SELECT. Isto facilita uma capacidade de extracção de dados mais refinada. Considere
isolar aqueles
registros de funcionários com valores FIRST_NAME que começam com a letra J e que ganham um
COMMISSION_PCT maior do que 10 por cento. Primeiro, os dados na tabela funcionários devem
restrita a FIRST_NAME valores como J% e, segundo, os valores para o COMMISSION_PCT
estar
registros devem ser testados para determinar se eles são maiores do que 10 por cento. Estas duas
condições
pode estar distintas
associado com o operador booleano E e são aplicadas consecutivamente num ONDE
cláusula. Um conjunto de resultados em conformidade com qualquer uma ou todas as condições ou a
negação
pode ser de
especificado
uma ou mais
usando
condições
o OR, AND e NOT operadores booleanos, respectivamente.
O operador e
O operador AND funde condições em uma grande condição a que uma linha deve estar em
conformidade para serde resultados. Se duas condições especificadas em uma cláusula WHERE são
incluído no conjunto
unidas com
operador, emum
seguida,
AND uma linha é testado consecutivamente para a conformidade com ambas as
condições, antes
recuperado. Se ele
deestá
ser em conformidade com nenhuma ou apenas uma das condições, a linha é
excluída. com
registros Empregado
valores FIRST_NAME começam com a letra J e COMMISSION_PCT maior do que
10 por cento podem ser recuperadas usando a seguinte consulta:

Observe que a cláusula WHERE tem agora duas condições, mas apenas uma palavra-chave
WHERE.
operador O eas duas condições. Para especificar outras condições obrigatórias, simplesmente
separa
adicioná-los
garantir que eles
e estão separados por adicional e operadores. Você pode especificar quantas
condições
você quer. que
Lembre-se, porém, mais e condições especificadas, a mais restritiva a consulta
torna-se.

O operador OR
O operador OU separa várias condições, pelo menos um dos quais devem ser satisfeitas pela fileira
seleccionado para justificar a inclusão no conjunto de resultados. Se duas condições especificadas
em uma cláusula
juntou-se com umWHERE
operadorsão
ou, então, uma linha é testado consecutivamente para a conformidade
com cada um
condições oude
antes ambos
ser recuperado. Em conformidade com apenas uma das condições ou é suficiente
para o a ser retornado. Se ele está em conformidade com nenhuma das condições, a linha é
registro
excluída. de
registros Recuperando
funcionários que têm valores FIRST_NAME começam com a letra B ou aqueles com
COMMISSION_PCT superior a 35 por cento pode ser escrita como segue:
um

Note-se que as duas condições estão separados pela palavra-chave OR. Todos os registros de
Valores
empregados
FIRST_NAME
com começando com uma letra maiúscula B será devolvido, independentemente
da sua COMMISSION_PCT, mesmo que sejam nulos. Registros com valores COMMISSION_PCT
valores
superior a 35 por cento (independentemente do que carta sua FIRST_NAME começa com) também
são Além
devolvidos.
disso, ou as condições podem ser especificado, separando-os com um operador ou. Quanto
condições
mais ORespecificadas, a menos restritiva sua consulta se torna.

O operador não
O operador NOT nega operadores condicionais. A linha selecionada deve estar em conformidade
com a lógica
oposto da condição, a fim de ser incluído no conjunto de resultados. operadores condicionais podem
negado pelo operador não, como mostrado pelas cláusulas quando referidas na Tabela 7-7 .
ser

Tabela 7-7 Condições negada pelo operador não


O operador NOT nega o operador de comparação em uma condição, quer se trate de uma
desigualdade,,
igualdade, correspondência de padrão, a adesão à base de gama definida, ou operador do ensaio
nulo.
regras de precedência
Aritméticas, caráter, comparação e expressões booleanas foram examinados no contexto da
Cláusula WHERE. Mas como é que esses operadores interagir uns com os outros? A Tabela 7-8
apresenta ade prioridade para os operadores anteriormente mencionados.
hierarquia

Tabela 7-8 Precedência de Operadores Hierarquia

Operadores no mesmo nível de precedência são avaliados da esquerda para a direita, se eles são
encontrados
juntos em uma expressão. Quando o operador não modifica o LIKE, é NULL, e em comparação
operadores, o seu nível de precedência é o mesmo que a forma positiva destes operadores.
Considere a seguinte instrução SELECT que demonstra a interação de vários diferente
operadores:

Os LAST_NAME, salário, DEPARTMENT_ID, JOB_ID e colunas COMMISSION_PCT


são projectadas a partir da tabela funcionários com base em duas condições distintas. A primeira
recupera os registros contendo o personagem um no campo LAST_NAME E com um salário
condição
valor superior a 200 vezes o valor DEPARTMENT_ID. O produto de DEPARTMENT_ID e
200 é processada antes de o operador a desigualdade desde a precedência de multiplicação é maior
adocomparação
que de desigualdade.
A segunda condição obtém as linhas com valores JOB_ID de qualquer MK_MAN ou em
que MK_REP
valores COMMISSION_PCT não são nulos. Para uma linha a ser devolvido por esta consulta,
sejasegunda
ou o primeiro
condições precisam ser cumpridas. Alterando a ordem das condições na cláusula
muda seu significado por causa da diferente precedência dos operadores. Considere o seguinte
WHERE
inquerir:

Existem duas condições compostas nesta consulta. A primeira condição recupera os registos com
o personagem um no campo LAST_NAME e um valor de salário maior que 100 vezes os
valor DEPARTMENT_ID e onde o valor COMMISSION_PCT não é nulo. O segundo
condição vai buscar essas linhas com valores JOB_ID de MK_MAN. A linha é retornada por esta
consulta
está de acordo
se com uma ou outra circunstância uma condição OR 2, mas não necessariamente para
ambos.

EXAME TIP Os operadores booleanos OR e E permitem múltiplas condições WHERE cláusula


para ser
especificado, enquanto que o operador não nega um operador condicional que pode ser utilizado
várias vezes
dentro da mesma condição. Os igualdade, desigualdade, entre elas, de, e operadores de comparação
Like
testar dois termos dentro de um único estado. Apenas um operador de comparação é usado por
cláusula.
condicional

Classificar as linhas recuperadas por uma consulta


A possibilidade de utilização dos conjuntos de dados obtidos pode ser significativamente aumentada
com um mecanismo
classificar as informações.
para encomendar
As informações
ou podem ser classificados em ordem alfabética, numérica e
cronologicamente
ascendente em
ou descendente. Além disso, os dados podem ser classificadas por uma ou mais colunas,
colunas que não estão listados na cláusula SELECT. A ordenação é geralmente realizada uma vez
incluindo
que os resultados de um

instrução SELECT ter sido obtida. Os parâmetros de classificação não influenciam os registros
retornados
por uma consulta, apenas a apresentação dos resultados. Exatamente as mesmas linhas são
retornadasuma
incluindo por uma
cláusula
instrução
tipo como são devolvidos por uma instrução excluindo uma cláusula tipo.
Apenas
saída pode
a ordenação
ser diferente.
do Classificando os resultados de uma consulta é realizada utilizando a
cláusula ORDER BY.
A cláusula ORDER BY
A cláusula ORDER BY é geralmente a última cláusula em uma instrução SELECT. O formato do
ORDER
BY cláusula no contexto da instrução SQL SELECT é a seguinte:

Subindo e descendo Sorting


Ascendente ordem de classificação é natural para a maioria dos tipos de dados e, portanto, a ordem
de classificação
sempre que o ORDER
padrãoBY
usado
é especificado. Uma ordem de classificação ascendente para os números
é menor
mais alto,para
embora seja mais antiga para mais recente para datas e ordem alfabética para caracteres. A
primeira forma
ORDEM domostra resultados de uma consulta podem ser classificadas por uma ou mais
BY que
colunas ou
expressões.

Suponha que um relatório é solicitado que deve conter de um funcionário LAST_NAME,


e informação
HIRE_DATE,
do salário, ordenados alfabeticamente pela coluna LAST_NAME por todas as vendas
representantes e gerentes de marketing. Este relatório pode ser extraído com o seguinte:

Os dados seleccionados podem ser ordenados por qualquer uma das colunas das tabelas na
cláusula
incluindo FROM,
aqueles que não aparecem na lista SELECT. Anexando a palavra-chave DESC ao
ORDER BY cláusula, linhas são retornadas classificados em ordem decrescente. Os NULLS
opcionais LASTespecifica que, se a coluna de classificação contém valores nulos, em seguida, essas
palavras-chave
linhasa são
após triagem
coletados
os restantes
última valores não nulos. Para especificar que linhas com valores nulos no tipo
coluna deve ser apresentado em primeiro lugar, acrescentar as palavras-chave NULLS primeiro a
cláusula ORDER
conjunto de dadosBY.
podem
UMAser classificadas com base em uma expressão da seguinte forma:
O valor menor POSSE aparece pela primeira vez na saída desde o ORDER BY especifica
que cláusula
os resultados serão ordenados pelo apelido expressão. Note-se que os resultados poderiam ser
classificadas
expressão explícita
pela eo alias pode ser omitido, mas usando aliases torna a consulta mais fácil de ler.
Várias opções padrão implícitos são selecionados quando você usa a cláusula ORDER BY. A
importante
maioriadeles é que, a menos que seja especificado DESC, a ordem de classificação é assumida
para ser ascendente. Se nulo
valores ocorrer na coluna tipo, assume-se a ordem de classificação padrão a ser NULOS durar
ascendente
tipos e NULLS primeira vez para descer os tipos. Se nenhuma cláusula ORDER BY é especificada,
a mesma consulta
executados em momentos diferentes pode retornar o mesmo conjunto de resultados na ordem de
linha diferente,
devem ser feitaspor
a respeito
isso nãodasuposições
ordem de linha padrão.

posicional Sorting
A Oracle oferece uma alternativa, mais curto maneira de especificar a coluna de classificação ou
expressão. Ao oinvés
especificando nomededa coluna, a posição da coluna, uma vez que ocorre na lista SELECT é
aacrescentada
cláusula ORDER
ao BY. Considere o seguinte exemplo:

A ORDEM BY especifica o literal 2. numérico Isto é equivalente a especificando a ordem


POR HIRE_DATE uma vez que é a segunda coluna na cláusula SELECT. Ordenação posicional
apenas para colunas na lista SELECT.
aplica

Composite Sorting
Os resultados podem ser classificados em mais de uma coluna utilizando triagem compósito . Várias
colunas podem
especificado (ouser
literalmente ou posicionalmente) como a chave de classificação composto por
vírgula separando-los
ORDER BY cláusula. noPara buscar o JOB_ID, LAST_NAME, salário e valores HIRE_DATE de
a tabela de trabalhadores, tais que os resultados têm de ser ordenados por ordem alfabética inversa
por primeiro
em JOB_ID lugar, em seguida, por ordem alfabética ascendente por LAST_NAME, e, finalmente,
em
ordem com base na descendente
numericamente coluna SALÁRIO, você pode executar a seguinte consulta:

Exercício 7-4: Use a cláusula ORDER BY tabela de tarefas contém descrições de diferentes
tipos de trabalhos de um empregado na organização podem ocupar. Ele contém o JOB_ID,
JOB_TITLE,
MIN_SALARY e MAX_SALARY colunas. Você é obrigado a escrever uma consulta que extrai o
Job_title, MIN_SALARY e MAX_SALARY colunas, bem como uma expressão chamada
VARIANCE, que é a diferença entre os valores MAX_SALARY e para MIN_SALARY
cada fila. Os resultados devem incluir apenas os valores job_title que contêm a palavra o presidente
ou
Gerente . Ordenar a lista em ordem com base na expressão VARIANCE descendente. Se mais de um
fila tem o mesmo valor de variação, em seguida, em adição, classificar essas linhas por JOB_TITLE
em sentido
ordem alfabética.
inverso

1. Inicie o SQL Developer e conectar-se ao esquema HR.


2. A classificação é realizada com a ordem BY. Classificação Composite é necessário usar
tanto a expressão de variância e a coluna JOB_TITLE em ordem decrescente.
3. A execução dessa instrução retorna um conjunto de resultados que correspondam ao pedido:

A cláusula SQL Row-Limitando


Muitas consultas analíticas exigem apenas uma parte de um conjunto de dados, tais como os três
melhores vendedores
organização em um
ou os quatro membros da equipe mais recentemente empregadas. A cláusula limitativo
linha da SELECT permite que um conjunto de dados a ser segmentados de várias maneiras. O
instrução
formato da
cláusula no linha
contexto
limitativo
da instrução SQL SELECT é a seguinte:
A cláusula OFFSET especifica o número de linhas para passar para chegar à posição inicial em
conjunto.
um resultado
OFFSET padrão para 0 na ausência de uma cláusula OFFSET ou se um valor nulo,
énegativo,
maior doouque compensar
o total deessa
linhas em um conjunto de resultados é fornecido. A linha e linhas palavras-
chave têm
formas idênticas significado, e ambos singular e plural são fornecidos para tornar a sua cláusula
OFFSET
mais naturalmente.
ler
A cláusula FETCH Especifica um exatas number_of_rows ou um percentage_of_rows para
Na ausência
retornar. desta cláusula, todo o resultado é retornado, começando a partir do número de linha
aOFFSET
última linha.
+ 1 a As palavras-chave em primeiro lugar e PRÓXIMOS também servem para esclarecer a
semântica, mas
significado. têm idêntica
Baixando as 2 linhas de PRIMEIROS OFFSET 100 num conjunto de dados recupera as
mesmasosduas
buscar 2 linhas
linhas
seguinte
como a partir compensar 100.
O number_of_rows opção dos padrões cláusula FETCH para 0 se um NULL ou contagem de
é especificado.
linhas negativo Fracções mistas fornecidos como number_of_rows são truncados, e apenas o número
porção é utilizado como este parâmetro. Se o number_of_rows valor é maior do que o número de
inteiro
de partida remanescente a partir da posição OFFSET + 1, todas as linhas de um conjunto de
linhas
resultados são devolvidos.
percentage_of_rows opção odeve ser um número, e um NULL ou valor padrão negativos a 0. Este
opção especifica a porcentagem do conjunto de resultados para recuperar.
A linha ou linhas keywords novamente tem significado idêntico, e ambas as formas singular e
são plural
fornecidos para tornar a sua cláusula FETCH ler mais naturalmente.
As palavras-chave apenas, ou com laços devem ser lidas em conjunto com a linha / linhas
Apenas
palavras-chave.
linhas recupera o número exato ou a porcentagem de linhas especificado. Recuperando
linhasobtém
TIES com todas as linhas adicionais com a mesma chave de classificação como a última linha
recuperada,
somente se uma
mas cláusula
tem qualquer
ORDER efeito
BY é especificada.
Como a Figura 7-10 mostra, a primeira consulta obtém as 7 linhas depois de ele recupera todos
FUNCIONÁRIOS
os 107 linhas a mesapartir classificados
da em ordem crescente padrão de salário, salta 100 linhas por
causa do deslocamento
cláusula, e, finalmente, retorna os últimos nomes e salários dos top 7 funcionários mais bem pagos.
O segundo
ameixas consulta esta lista obtendo o primeiro destes cinco linhas 7 a partir de linha 101 (OFFSET +
1). Nota
como a consulta final retorna uma linha adicional para a segunda consulta desde empregados De
Haan e ambos ganham o mesmo salário ($ 17.000) e são, assim, amarrado com a mesma chave de
Kochhar
classificação.
A Figura 7-10 A cláusula limitativo linha SQL

Ampersand Substituição
Como você desenvolver e instruções SQL perfeito, você pode guardá-las para uso futuro. É, por
vezes,
desejável ter uma forma genérica de uma declaração de que tem uma variável ou espaço reservado
definido queem
substituído pode
tempo
ser de execução. SQL * Plus oferece essa funcionalidade na forma de substituição
e comercial
Cada elemento
. da instrução SELECT pode ser substituído, e a redução de consultas para seu núcleo
elementos para facilitar a reutilização pode poupar horas de trabalho tedioso e repetitivo. Esta seção
examina
variáveis de substituição e os comandos definir e confirmar.

Variáveis de substituição
As variáveis de substituição podem ser considerados como espaços reservados. Uma consulta SQL é
composta de
cláusulas. Cada
doiscláusula
ou maispode ser dividida em subseções, que são por sua vez, constituídas por texto
personagem.
texto, elemento
Qualquer
subseção, ou cláusula é um candidato para substituição.

Único Ampersand Substituição

A forma mais básica e popular de elemento de SQL é a substituição comercial única . o e comercial
caracteres (&) é o símbolo escolhido para designar uma variável de substituição em um comunicado
e precede
nome da variável
o sem espaços entre eles. Quando a instrução é executada, o SQL * cliente Além
processa a instrução, percebe uma variável de substituição, e tenta resolver o valor dessa variável
disso,
em uma das duas maneiras. Primeiro, ele verifica se a variável é definida na sessão do usuário. (A
DEFINIR
comando é discutido mais adiante neste capítulo.) Se a variável não está definida, as instruções do
processo
para um valor
do usuário
que vai ser substituído no lugar da variável. Uma vez que um valor é enviado, a
afirmaçãoeéé executado pelo servidor Oracle. A substituição e comercial variável é resolvida em
completa
tempo de execução e às vezes é conhecido como o tempo de execução de ligação ou de tempo de
execução de substituição
Você pode . a procurar informações de contato como dados phone_number dadas
ser obrigado
LAST_NAME
quer ou EMPLOYEE_ID valores. Esta consulta genérico pode ser escrito como segue:

Ao executar esta consulta, SQL * Plus pede-lhe para introduzir um valor para a variável
ÚLTIMO
chamadaNOME. Você entra o sobrenome de um empregado, se você sabe que, por exemplo, o rei.
Se não
sabe o fizer nome, mas saber o número de identificação do funcionário, você pode digitar qualquer
o último
valor epara
chave pressione
enviarooENTER
valor. A Oracle, em seguida, solicita que você digite um valor para a variável
EMPNO. Depois
digitando um valor,
de por exemplo, 0, e bater ENTER , não há variáveis de substituição restantes para
Oracle para resolver, e a seguinte declaração é executado:

As variáveis podem ser atribuídas qualquer nome alfanumérico que é um nome identificador
substituir
válido.quando
O literal
solicitado
você para uma variável deve ser um tipo de dados apropriado para esse
contexto;
um de outra identificador
“ORA-00904: forma, inválido” erro é retornado. Se a variável destina-se a substituir um
ou valor de data, as necessidades literais de ser colocados entre aspas simples. Uma técnica útil
personagem
consiste em colocar
substituição e comercial
o variável entre aspas simples quando se lida com valores de caractere e data.
forma, o usuário é obrigado a apresentar um valor literal sem se preocupar com colocando-o entre
Nisso
aspas.
Duplo Ampersand Substituição
Quando uma variável de substituição é referenciada várias vezes na mesma consulta, o Oracle irá
para entrar um valor para cada ocorrência da única variável de substituição e comercial. para
pedir-lhe
scripts,
complexa este pode ser ineficiente
dados LAST_NAME e tedioso. A declaração
da tabela EMPREGADOS para as alinhas
seguirque
recupera
contêmo oFIRST_NAME e de
mesmo conjunto
caracteres em ambos os campos:

As duas condições são idênticas, mas aplicam-se a diferentes colunas. Quando essa instrução é
Primeiro
executada,
você será solicitado a digitar um valor de substituição para a variável de pesquisa usado na
com a coluna LAST_NAME. Depois disso, você será solicitado a digitar um valor de substituição
comparação
para o
PESQUISA variável utilizada na comparação com a coluna FIRST_NAME. Isto coloca dois
problemas.

Em primeiro lugar, é ineficiente para introduzir o mesmo valor duas vezes, mas segundo e mais
importante,
erros podemtipográfica
confundir a consulta desde que a Oracle não verifica se o mesmo valor literal é inserido
variáveis de substituição tempo com o mesmo nome são usados. Neste exemplo, a assunção é lógico
cada
que o conteúdo das variáveis substituídos deve ser o mesmo, mas o facto de que as variáveis têm o
mesmo nome não tem significado para o servidor Oracle, e não faz tal suposição. O primeiro
exemplo
em A Figura 7-11 mostra os resultados da execução da consulta anterior e submetendo dois valores
adistintos
variáveldePESQUISA substituição. Neste exemplo particular, os resultados são incorrecta, dado que
aexigência era para recuperar FIRST_NAME e LAST_NAME pares que continham a idêntico
cadeia de caracteres.

Figura 7-11 Duplo substituição e comercial

Quando uma variável de substituição é referenciada várias vezes na mesma consulta e sua
que intenção
a variávelé deve ter o mesmo valor em cada ocorrência na declaração, é preferível fazer
uso de dupla substituição e comercial . Isto envolve a prefixação da primeira ocorrência da
variável que ocorre várias vezes em uma consulta com dois símbolos e comercial em vez de um.
substituição
A Oracle encontra uma variável dupla substituição e comercial, um valor de sessão é definido para
Quando
que
variável, e você não será solicitado a inserir um valor a ser substituído para esta variável no posterior
referências.

O segundo exemplo na Figura 7-11 demonstra como a variável PESQUISA é precedido por dois
ampersands na condição com a coluna LAST_NAME e, posteriormente, é precedido por uma
E comercial
solicitado na condição
a introduzir umcom a coluna
valor FIRST_NAME.
a ser substituído Quando PESQUISA
para a variável a instrução éapenas
executada,
uma você está o
vez para
aestado
coluna
comLAST_NAME. Este valor é então resolvido automaticamente a partir do valor da sessão do
variável em referências subsequentes a ela, como no estado com a coluna FIRST_NAME. Para
undefine a variável de busca, você precisará usar o comando UNDEFINE descrito posteriormente
capítulo.
neste

DICA Se você trabalha como um desenvolvedor, administrador de banco de dados ou usuário final
do negócio,
consultas quetudo
você
SQL
encontra podem ser classificados como ad hoc ou consultas repetidas. consultas
ad hoc
são geralmente declarações pontuais escritos durante algum exercício investigação de dados que não
são susceptíveis
reutilizados. As consultas
de ser repetidas são aquelas que são executados com frequência ou
periodicamente,
salvos que são
como arquivos de geralmente
script e executar com pouca ou nenhuma modificação sempre que
necessário.
tempo de reconstrução
Reutilizaçãoe impede
permite dispendiosa
que essas consultas consistentes para beneficiar potencialmente
nativo daautomáticos
recursos Oracle de ajuste voltado para melhorar o desempenho da consulta.

Substituindo nomes de coluna


elementos literais da cláusula WHERE têm sido o foco da discussão sobre a substituição, até agora,
mas praticamente qualquer elemento de uma instrução SQL é um candidato para substituição. Na
seguinte
as colunasinstrução,
FIRST_NAME e JOB_ID são estáticos e irá sempre ser recuperada, mas a terceira coluna
seleccionado é variável e especificada como uma variável de substituição chamado COL. O conjunto
de resultados por
classificados é ainda
esta mais
coluna variável na ORDEM BY.

Ao contrário de caracteres e data literais, referências de nome de coluna não necessitam de aspas
quando
simples,
explicitamente
quer especificado ou quando substituído por meio de substituição e comercial.

Substituindo Expressões e Texto


Quase qualquer elemento de uma instrução SQL pode ser substituído em tempo de execução. A
restrição
requer pelo
é que
menos
a Oracle
a primeira palavra a ser estática. No caso da instrução SELECT, no mínimo, a
chave SELECT é necessário, e o restante da instrução pode ser substituído como se segue:

Quando a instrução é executada, você será solicitado a apresentar um valor para a variável
REST_OF_STATEMENT,
chamada que, quando anexado à palavra-chave SELECT, é qualquer consulta
candidatos úteis para substituição e comercial são declarações que são executados várias vezes e
legítimo.
diferem
ligeiramente um do outro.

Definir e Verificar
substituição e comercial dupla é usado para evitar a entrada repetitivo quando o mesmo ocorre
várias vezes em um comunicado. Quando uma dupla substituição ocorre e comercial, a variável é
variável
armazenada
uma variávelcomo
de sessão. Como a instrução é executada, todas as outras ocorrências da variável são
resolvidas usando a variável de sessão armazenado. Quaisquer execuções subsequentes da
automaticamente
declaração
mesma dentro
sessão do automaticamente as variáveis de substituição de valores de sessão
resolver
armazenados.
sempre desejável
Issoe,não
na verdade
é limita a utilidade de variáveis de substituição. A Oracle, no entanto,
fornecer um mecanismo para cancele estas variáveis de sessão. O comando VERIFY é específico
SQL * Plus e controla se os elementos substituídos são ecoados na tela do usuário antes de
para
executar uma instrução SQL que usa variáveis de substituição.

O DEFINE e Comandos UNDEFINE


variáveis de nível de sessão são criados implicitamente quando eles são inicialmente referenciados
utilizando a substituição
em instruções SQL dupla e comercial. Eles persistem ou permanecem disponíveis para a
ou até que
duração dasejam
sessãoexplicitamente indefinido. A sessão termina quando o usuário sai a sua ferramenta
de cliente
SQL * Plus
como
ou quando o usuário processo é encerrado.
O problema com as variáveis de sessão persistentes é que eles tendem a desvirtuar a natureza
instruções
genérica
quedeusam variáveis de substituição e comercial. Felizmente, estas variáveis de sessão
pode ser com o comando UNDEFINE. Dentro de um script ou na linha de SQL * Plus ou SQL
removido
Developer, a sintaxe indefinir variáveis de sessão é a seguinte:
comando

Considere um exemplo genérico simples que seleciona uma coluna estática e variável da
TRABALHADORES mesa e classifica o de saída com base na coluna variável.

A primeira vez que esta declaração é executado, você será solicitado a fornecer um valor para o
variável.
ColName
Suponha que você digite salário. Este valor é substituído, e a instrução é executada. UMA
posterior execução desta declaração dentro da mesma sessão não solicita qualquer ColName
valores uma vez que já é definido como SALÁRIO no contexto desta sessão e só pode ser indefinido
com o comando UNDEFINE ColName. Uma vez que a variável foi indefinido, a próxima execução
da declaração solicita ao usuário um valor para a variável ColName.
O comando DEFINE serve dois propósitos. Ele pode ser usado para recuperar uma lista de todas
atualmente
as variáveis
definido em sua sessão de SQL; ele também pode ser usado para definir explicitamente
um valor paracomo
referenciada uma uma
variável
substituição variável por uma ou mais instruções durante o tempo de vida
dessa sessão.
sintaxes para as
o duas variantes do comando DEFINE são os seguintes:

Suporte de variáveis de sessão persistente pode ser desligado e ligado conforme necessário
usando o SET
DEFINE OFF comando. O comando SET não é um comando de linguagem SQL, mas sim um SQL
comando de controle de ambiente. Ao especificar SET DEFINE OFF, a ferramenta de cliente (por
O SQL * Plus) não salvar as variáveis de sessão ou anexar um significado especial para o símbolo e
exemplo,
comercial.
permite queeste
o símbolo E comercial para ser utilizado como um carácter literal ordinária, se
necessário.
DEFINE ONO |conjunto
OFF comando, portanto, determina se a substituição comercial está disponível no seu
sessão. A consulta a seguir usa o símbolo E comercial como um valor literal. Quando é executado,
é solicitado a enviar um valor para o SID variável bind.
você

Ao desligar a funcionalidade de substituição e comercial, esta consulta pode ser executado sem
solicita.

Uma vez que a instrução é executada, você pode usar o SET DEFINE ON comando para mudar
o
funcionalidade de substituição de volta. Se DEFINE é OFF eo contexto que um e comercial é usado
em uma não pode ser resolvido, literalmente, a Oracle retorna um erro.
declaração

O Comando VERIFICAR
Duas categorias de comandos estão disponíveis quando se lida com o servidor Oracle: linguagem
SQL
comandos e os comandos de controle de cliente SQL. A instrução SELECT é um comando de
enquanto o comando SET controla o ambiente do cliente SQL. Há muitos língua diferente e
linguagem,
comandos disponíveis controle, mas o controle comandos relevantes para a substituição são definir e
VERIFICAR.
A VERIFICAR controles de comando se a variável de substituição apresentado é exibido na tela
para que você possa verificar se a substituição correta ocorreu. Uma mensagem é exibida mostrando
o
idade cláusula seguido pelo novo cláusula contendo o valor substituído. O comando VERIFY é
ligadas e desligadas com o comando SET VERIFY ON | OFF. Se Verify é primeiro desligado
e uma
é, consulta
então, que utiliza
substituído, substituição
a declaração e comercial
é executado, é executado,
e seus resultados você será solicitado
são exibidos. para introduzir
Se VERIFICAR é
um valor.
eentão O
LIGADA
a mesma valor que
consulta é executado, uma vez que você introduzir um valor, mas antes da instrução
começa
A Oraclea exibe
execução,
a cláusula contendo a referência para a variável de substituição como a idade
cláusula
seu númerocomde linha, e, imediatamente abaixo deste, a nova cláusula mostra o extrato contendo a
valor substituído.

Exercício 7-5: Usando Ampersand Substituição Você é obrigado a escrever uma consulta
reutilizável
atual taxa deusando o eo número EMPLOYEE_ID como entradas e retornar o EMPLOYEE_ID,
imposto
FIRST_NAME, salário, salário anual (SALÁRIO * 12), TAX_RATE, e fiscais
(TAX_RATE * salário anual) informações para uso pelos funcionários do departamento de RH.

1. Inicie o SQL * Plus e ligar para o esquema HR.


2. A lista de seleção deve incluir as quatro colunas especificadas, bem como duas expressões.
O primeiro
expressão, como alias salário anual, é um cálculo simples, enquanto que o segundo

expressão, alias como TAX, depende do valor TAX_RATE. Desde ALÍQUOTA pode variar,
este valor tem de ser substituído em tempo de execução.
3. Uma solução possível é a seguinte:

4. A dupla comercial anterior EMPLOYEE_ID e TAX_RATE na cláusula SELECT


estipula a Oracle que quando a instrução é executada, o usuário deve ser solicitado a enviar
um valor para cada variável de substituição que será usado onde quer que estejam,
posteriormente,
referenciado como EMPLOYEE_ID & e & TAX_RATE, respectivamente.

Broca Two-Minute
Explique as capacidades de instruções SQL SELECT
• As três operações fundamentais que instruções SELECT são capazes de se projeção,
seleção, e juntando-se.
• A projecção refere-se a restrição das colunas seleccionadas a partir de uma tabela. Usando
projeção,
obter apenas
você as colunas de interesse e não cada coluna possível.
• Seleção refere-se à extração de linhas de uma tabela. Selecção inclui o mais
restrição das linhas extraídos com base em vários critérios ou condições. Isso permite que
obter apenas as linhas que são de interesse e não a cada linha na tabela.
você
• Juntando envolve a ligação de dois ou mais tabelas com base em atributos comuns. Juntando
permite
a ser armazenada
que os dadosna terceira forma normal em tabelas discretas, em vez de em um grande
mesa.
• A DESCREVER comando lista os nomes, tipos de dados e status anulável de todas as colunas
emmesa.
uma

Executar uma instrução SELECT Básica


• A cláusula SELECT determina a projeção de colunas. Em outras palavras, o SELECT
cláusula especifica quais as colunas são incluídos nos resultados retornados.
• A palavra-chave DISTINCT precedente itens na cláusula SELECT faz com que duplicado
combinações desses itens a serem excluídos do conjunto de resultados retornados.
• Expressões e colunas regulares podem ser alias usando a palavra-chave AS, ou deixando um
espaço entre a coluna ou expressão e o alias.
• Naturalmente ocorrendo aspas simples em um caractere literal pode ser selecionada, fazendo
uso
umdeapóstrofo
qualquer adicional por citação que ocorre naturalmente ou o operador apóstrofo
alternativa.
Limitar as linhas recuperadas por uma consulta
• Uma ou mais condições constituem uma cláusula WHERE. Estas condições especificar regras
para
os as
dados
quais
em uma linha deve estar em conformidade para ser elegível para a seleção.
• Para cada linha testada em uma condição, existem termos do lado esquerdo e direito de uma
comparação
operador. Termos em uma condição pode ser valores de colunas, literais ou expressões.
• Operadores de comparação pode testar dois termos em muitas maneiras. testes de igualdade e
desigualdade
comum, massãogama, SET e padrão comparações também estão disponíveis.
• operadores booleanos incluem AND, OR e NOT operadores. A operadores AND e OR
permitir que vários cláusulas condicionais para ser especificado. Estas são algumas vezes
referidos
várias cláusulas
como WHERE.
• O operador não nega o operador de comparação envolvido em uma condição.

Classificar as linhas recuperadas por uma consulta


• Os resultados são classificados usando a cláusula ORDER BY. Linhas recuperadas podem ser
ordenada
uma ou de acordo
mais comde especificando os nomes de coluna ou a sua posição numérica na
colunas
cláusula SELECT.
• A saída classificados podem ser dispostos em ordem crescente ou decrescente utilizando o
DESC
modificador
ou ASCapós os termos de classificação na cláusula ORDER BY.
• A cláusula de limitação de linha permite que uma parte de um conjunto de dados a ser obtida.
Umseropcional
fornecida
deslocamento
para indicar pode
que a posição inicial do conjunto limitado-linha. Quer um número
absoluto ou um
porcentagem de linhas podem ser solicitados. Se a opção com laços for especificado, todas as
linhas com
mesmas chaves
o de classificação como a última linha do conjunto limitado-fila,
adicionalmente, ser buscados.
Ampersand Substituição
• substituição Ampersand facilita a instrução SQL reutilização, fornecendo um meio para
substituir
elementos de uma declaração em tempo de execução. A mesma instrução SQL pode,
portanto,
vezes comser
diferentes
executadoparâmetros
múltipla de entrada.
• As variáveis de sessão persistente pode ser definida explicitamente usando o comando
DEFINE.
comandoo UNDEFINE pode ser usado para resetar tanto implícita (dupla substituição e
e explicitamente definidas as variáveis de sessão.
comercial)
• A VERIFICAR A configuração controla ambientais se o SQL * Plus exibe o velho eo novo
versões de linhas de instrução que contêm variáveis de substituição.

Auto teste
1 . Que consulta irá criar uma projeção da department_name e LOCATION_ID
colunas da tabela de departamentos? (Escolha a melhor resposta.)
A. SELECIONE department_name DISTINCT, LOCATION_ID DE
Departamentos;
B. SELECIONAR department_name, LOCATION_ID dos departamentos;
C. SELECCIONAR DEPT_NAME, LOC_ID DE DEPT;
D. SELECIONAR department_name AS “LOCATION_ID” dos departamentos;

2 . Depois de descrever a tabela EMPREGADOS, você descobre que a coluna SALÁRIO tem
uma Tipo
dados
de NUMBER (8,2). Que valores salário não será permitido nesta coluna?
(Escolha a melhor resposta.)
A. SALÁRIO = 12345678
B. SALÁRIO = 123456.78
C. SALÁRIO = 1234567,8
D. SALÁRIO = 123456
E. SALÁRIO = 12,34
3 . Depois de descrever a mesa de JOB_HISTORY, você descobre que o START_DATE e
colunas END_DATE tem um tipo de dados DATE. Considere a END_DATE expressão -
DATA DE INÍCIO. Escolha duas afirmações corretas sobre esta expressão.
A. Um valor de tipo de dados DATA é devolvido.
B. Um valor do tipo de número é retornado.
C. Um valor de tipo VARCHAR2 é devolvido.
D. A expressão é inválido desde aritmética não pode ser realizada em colunas com DATA
tipos de dados.
E. A expressão é válido desde a aritmética pode ser realizada em colunas com dados DATE
tipos.
4 . Qual afirmação relatórios sobre valores JOB_ID exclusivas da tabela de funcionários?
(Escolher
a melhor resposta.)
A. SELECIONAR JOB_ID dos empregados;
B. SELECIONAR UNIQUE JOB_ID dos empregados;
C. SELECIONE JOB_ID DISTINCT, EMPLOYEE_ID dos empregados;
D. SELECCIONAR JOB_ID DISTINTA DE TRABALHADORES;
5 . Escolha as duas declarações ilegais. As duas afirmações corretas produzem resultados
idênticos.
duas declarações
o ilegais causará um erro a ser levantada.
A. SELECIONAR DEPARTMENT_ID || 'Representa o' || Department_name ||'
Departamento'
como "Departamento Info" dos departamentos;
B. SELECIONAR DEPARTMENT_ID || 'Representa o || Department_name ||'
Departamento'
como "Departamento Info" dos departamentos;
C. selecionar department_id || 'Representa o' || department_name || "Departamento
'Departamento'
Info" dos departamentos;
D. SELECIONAR DEPARTMENT_ID representa o Departamento department_name como
"Departamento Info" dos departamentos;
6 . Que duas cláusulas da instrução SELECT facilitar a seleção e projeção? (Escolha o
melhor resposta.)

A. SELECT, FROM
B. ORDER BY, ONDE
C. SELECT, ONDE
D. SELECT, ORDER BY
7 . Escolha a cláusula ONDE que extrai os valores department_name contendo o
caráter literal er da tabela DEPARTMENTS. As cláusulas SELECT e FROM são
Department_name SELECT FROM DEPARTAMENTOS. (Escolha a melhor resposta.)
A. ONDE department_name EM ( '% E% r');
B. ONDE department_name COMO '% er%';
C. ONDE department_name ENTRE 'E' e 'r';
D. ONDE department_name CONTÉM 'E% r'
8 . Qual das seguintes condições são equivalentes entre si? (Escolha todos os que se aplicam.)
A. WHERE SALÁRIO <= 5000 E SALÁRIO> = 2000
B. ONDE salariais em (2000,3000,4000,5000)
C. ONDE salarial entre 2000 AND 5000
D. WHERE SALÁRIO> 2000 E SALÁRIO <5000
E. WHERE SALÁRIO> = 2000 E <= 5000
9 . Escolha duas declarações falsas sobre a cláusula ORDER BY. (Escolha a melhor resposta.)
A. Ao usar a cláusula ORDER BY, deve ser sempre acompanhada por uma fileira de
limitação
cláusula.
B. A cláusula ORDER BY pode aparecer em uma instrução SELECT que não contém um
Cláusula WHERE.
C. A ORDEM BY especifica uma ou mais termos, através da qual as linhas recuperadas
sejam
classificadas. Esse termo só pode ser nomes de coluna.
D. triagem posicional é conseguido através da especificação na cláusula ORDER BY a
numérico
posição de uma coluna como ele aparece na lista SELECT.
10 . Ao usar variáveis de substituição e comercial na consulta a seguir, quantas vezes vai
você será solicitado a entrada de um valor para a variável chamada JOB a primeira vez que
esta consulta é
executado?
FIRST_NAME SELECT, '& JOB'
DE FUNCIONÁRIOS
ONDE JOB_ID LIKE '%' || & JOB || '%'
E '&& JOB' entre 'a' e 'Z';
(Escolha a melhor resposta.)
A. 0
B. 1

C. 2
D. 3
11 . Ao usar uma cláusula de limitação linha na consulta seguinte, a informação que é
empregado
devolvida?
employee_id SELECT, first_name
DE funcionários
ORDER BY employee_id
OFFSET 5 linhas FETCH próximos 5 apenas linhas;
(Escolha a melhor resposta.)
A. Os cinco funcionários com maior employee_id
B. Os cinco funcionários com o menor employee_id
C. Os cinco funcionários com a 6 ª a 10 ª menor employee_id
D. Os cinco funcionários com a 6 ª a 10 ª maior employee_id
E. Os dez funcionários com o menor employee_id
F. Nenhum dos anteriores

Respostas de auto-teste
1. B . Uma projecção é uma restrição intencional das colunas devolvidas a partir de uma
tabela.
A , C , e D estão incorrectos. Um é eliminado já que a questão não tem nada a ver com
duplicatas, distintividade, ou singularidade de dados. C incorrectamente selecciona colunas
inexistentes
chamado DEPT_NAME e LOC_ID de uma tabela inexistente chamado DEPT. D retorna
apenas
das colunas
um solicitadas: department_name. Em vez de projetar além disso, o
LOCATION_ID coluna da tabela de departamentos, ele tenta alias o
coluna department_name como LOCATION_ID.
2. A e C . Colunas com o tipo de número (8,2) de dados pode armazenar, no máximo, oito
que, dígitos, de dois desses dígitos são à direita do ponto decimal. Embora um e C são
no máximo,
as respostas corretas, note que uma vez que a questão é formulada de forma negativa, esses
valores
não sãoser armazenados numa tal coluna. A e C não são permitidas porque eles contêm
poder
oito e sete números inteiros dígitos, respectivamente, mas o tipo de dados é limitada para
seis dígitos de números inteiros e dois dígitos fracionários.
armazenar
B , D , e E são incorrectas. B , D , e E pode ser legitimamente armazenado neste tipo de
dadossão
portanto, e, as respostas incorretas para essa pergunta. D mostra que os números sem
parte são valores legítimos para esta coluna, enquanto o número de dígitos no número
fraccionada
inteiro
porção não excede seis dígitos.
3. B e E . O resultado de operações aritméticas entre dois valores de data representa um
dias.certo número de
A , C , e D estão incorrectos. É um erro comum que esperar o resultado da aritmética
entre dois valores de data para ser uma data, bem, então A pode parecer plausível, mas é
falso.

4. D . Valores JOB_ID únicas são projetados a partir da tabela EMPREGADOS, aplicando


palavra-chave
o DISTINCT apenas a coluna JOB_ID.
A , B , e C são incorrectas. A retorna uma lista irrestrita de valores JOB_ID incluindo
duplicados, B faz uso da palavra-chave únicas no sentido incorrecto, e C selecciona o
distinta combinação de valores JOB_ID e EMPLOYEE_ID. Isso tem o efeito de voltar
todas as linhas da tabela EMPREGADOS, uma vez que a coluna EMPLOYEE_ID contém
única
valores para cada registro de empregado. Além disso, C retorna duas colunas, o que não é o
queoriginalmente
foi é solicitado.
5. B e D . B e D representam as duas declarações ilegais que irá retornar erros de sintaxe
que são
se executados. Esta é uma pergunta complicada, porque ele pede para as declarações
ilegais
as e não legais. B é ilegal porque está faltando uma única citação envolvendo o
declarações
personagem
literal representa o . D é ilegal porque não fazer uso de aspas simples para delimitar a sua
literais de caracteres.
A e C são incorrectas. A e C são as declarações legais e, portanto, no contexto de
a questão, são as respostas incorretas. A e C parecem ser diferentes, uma vez que o SQL
declarações diferem no caso e um usa a palavra-chave alias como, ao passo que C só deixa
um
entreespaço
a expressão e o alias. No entanto, ambos A e C produzem resultados idênticos.
6. C . A cláusula SELECT facilita projecção especificando uma lista de colunas a ser
projetada a partir de uma tabela, enquanto a cláusula WHERE facilita a selecção, limitando
as linhas com base em suas condições.
recuperado
A , B , e D são incorrectas. A , B , e D são incorrecta porque a cláusula de Especifica
a fonte das linhas que estão sendo projetadas e a cláusula ORDER BY é usada para
classificar
linhas a
selecionadas.
7. B . O operador LIKE testa a coluna department_name de cada linha para valores
que contêm os caracteres er . Os símbolos percentuais, antes e após o caractere literal
indicam que todos os caracteres que encerram o er literal são permitidas.
A , C , e D estão incorrectos. A e C são sintacticamente correcto. A utiliza o operador
que éIN,
usado para testar a adesão set. C testa se o valor do alfabética
Coluna department_name é entre a carta de e e a letra r . Finalmente, D usa o
palavra contém , o que não pode ser usado neste contexto.
8. A e C . Cada um destes testes condições para valores salariais em faixa de US $ 2.000 a
$5,000.
B , D , e E são incorrectas. B exclui valores como US $ 2.500 de seu conjunto. D exclui
o de limite de US $ 2.000 e US $ 5.000, e E é ilegal, uma vez que está faltando o
valores
referência nome da coluna após o operador.
salário
9. A e C . A cláusula de limitação de linha é opcional e os termos especificado em uma
cláusula
ordempode
PELO
incluir nomes de colunas, ordenação posicional, valores numéricos e
expressões.
B e D estão incorretas porque elas são verdadeiras.
10. D . A primeira vez que esta instrução é executada, duas variáveis de substituição único e
são encontrados
comercial antes da terceira variável dupla substituição e comercial. Se a primeira
referência
na primeira linha da consulta continha uma dupla substituição e comercial, você seria
solicitado a entrada de um valor apenas uma vez.

A , B , e C são incorrectas. Estes são erradas, uma vez que você for solicitado três vezes
entrada
parade um valor para a variável de substituição TRABALHO. Em execuções
asubseqüentes desta
mesma sessão, declaração
você não será em
solicitado para introduzir um valor para esta variável.
11. C . Os resultados são ordenados do menor para o maior employee_id. O deslocamento 5
limita
cláusula
as linhas retornadas para o segundo conjunto de cinco registros de funcionários.
A , B , D e E estão incorrectos. As cláusulas OFFSET e order_by determinar quais
segmento do conjunto de resultados é extraído e a ordem de classificação, enquanto a
cláusulalinhas
quantas FETCH sãodetermina
finalmente recuperado.
CAPÍTULO 8

Funções de Uma Única Linha e conversão

Objetivos do exame
Neste capítulo, você vai aprender a
• 061.3.1 Descrever vários tipos de funções disponíveis em SQL
• 061.3.2 Uso de caracteres, número e Funções de data em instruções SELECT
• 061.4.1 Descrever vários tipos de funções de conversão que estão disponíveis no SQL
• 061.4.2 Use as funções de conversão TO_CHAR, to_number, e TO_DATE
• 061.4.3 Aplicar expressões condicionais em uma instrução SELECT
As funções discutidas neste capítulo são comumente usados built-in programas PL / SQL,
embaladospela
fornecido e Oracle. Alguns operam em numérico, data e dados de caracteres, enquanto outros
converter
entre os diferentes
dados tipos de dados escalar. As funções podem ser aninhadas, e algumas funções são
destinadas a interacções com NULL. As funções condicional CASE e decodificar têm a capacidade
simplificando
para exibir resultados diferentes dependendo de valores de dados, que fornecem if-then-else lógica
no uma
de contexto
consulta SQL.

Descrever e usar caracteres, número e data de


Funções em SQL
funções SQL são geralmente divididos entre aqueles que calcular e retornar um valor para cada linha
em uma de dados e aqueles que retornam um único valor agregado para todas as linhas. A
conjunto
conversão
funções serão
de maiúsculas
examinados,
e minúsculas
seguido por as funções de manipulação de caracteres, numéricos, e de
data.
Definir uma Função
Uma função é um programa escrito para aceitar, opcionalmente, os parâmetros de entrada, executar
uma operação,
retornar um únicoe valor. A função retorna apenas um valor per execução.
Três importantes componentes formam a base da definição de uma função. O primeiro é o
parâmetro
Lista. de entrada
Ele especifica zero ou mais argumentos que podem ser passados para uma função de entrada
como argumentos
Estes para o processamento.
ou parâmetros podem ser opcionais e de diferentes tipos de dados. O segundo
componente
o tipo de dados
é do valor resultante. Após a execução, somente um valor de um tipo de dados
predeterminado
retornado pela função.
é O terceiro encapsula os detalhes do processamento executadas pela
função e contém o código de programa que opcionalmente manipula os parâmetros de entrada,
cálculos e das operações, e gera um valor de retorno.
executa
Uma função é frequentemente descrita como uma caixa negra que leva uma entrada, executa um
retorna
cálculo,
um valor.
e Em vez de se concentrar em seus detalhes de implementação, é mais útil para se
concentrar
as características
em que funções embutidas fornecem.
As funções podem ser aninhados dentro de outras funções, tais como f1 (x, y, F2 (a, b), z), onde
parâmetros
F2 leva de
dois
entrada, a e b, e a terceira forma de quatro parâmetros submetidos a F1. As funções
operar em qualquer tipo de dados; os mais comuns são caracteres, data e dados numéricos. Estes
podem
operandos
ser colunaspode
ou expressões.
Como exemplo, considere uma função que calcula a idade de uma pessoa. A função AGE leva
um
parâmetro de entrada data, que é seu aniversário. O resultado retornado pela função idade é um
representando a idade de uma pessoa. O cálculo caixa-preta envolve a obtenção da diferença em
número
entre a data atual e o parâmetro de entrada aniversário.
anos

Tipos de Funções
As funções podem ser amplamente divididas em duas categorias: aquelas que operam em uma única
linha de que
aqueles cadaprocessar
vez e várias linhas. Esta distinção é vital para a compreensão do contexto mais
amplo
as funções
em utilizadas.

Funções de Uma Única Linha


Existem várias categorias de -fila única funções, incluindo caracteres, numérico, data, conversão,
e geral. Estas são funções que operam em uma linha de um conjunto de dados de cada vez. Se uma
consultaa função
linhas, seleciona
é executada
dez dez vezes, uma vez por linha com os valores a partir dessa linha como
função.
entrada para o
Esta consulta selecciona duas colunas da tabela de REGIÕES juntamente com uma expressão
função
utilizando
COMPRIMENTO
o com a coluna REGION_NAME:

O comprimento da coluna REGION_NAME é calculado para cada uma das quatro linhas no
REGIÕES mesa; a função executa quatro vezes separados, retornando um resultado por linha.
funções de uma única linha manipular os itens de dados em uma fila para extrair e formatá-los
propósitos.
para exibição
Os valores de entrada para uma função de linha única podem ser constantes especificado
pelo utilizador
dados de coluna,
ouvariáveis,
literais, ou expressões opcionalmente fornecido por outras funções de uma única
linha aninhados.
assentamento de ofunções de uma única linha é uma técnica vulgarmente usada. As funções podem
retornar
tipo um valor
de dados com um
diferente dos seus parâmetros de entrada. A consulta anterior mostra como a função
aceita parâmetro de entrada um caractere e retorna um resultado numérico.
COMPRIMENTO
Para além da sua inclusão na lista SELECT de uma consulta SQL, podem ser utilizados funções
na WHERE
de uma única
e ORDERlinha BY cláusulas.

Funções de várias linhas


Como o nome sugere, esta categoria de funções opera em mais de uma linha de cada vez. Os usos
típicos
de de várias linhas funções incluem o cálculo da soma ou média de valores numéricos ou coluna
contando o número total de registros em conjuntos. Estas são algumas vezes conhecido como
agregação
funções e são
ou explorados
grupo no Capítulo 9 .

Usando funções Caixa de Conversão


Numerosas fontes, incluindo interfaces de aplicativos e programas em lote, pode salvar dados de
caracteres
mesas. Nãoemé seguro assumir que os dados personagem foi introduzido de forma caso consistente. o
caráter de conversão de caso funções têm duas finalidades importantes. Eles podem ser usados, em
aprimeiro
aparência
lugar,
de um
paraitem
modificar
de dados de caracteres para fins de exibição e, por outro, para torná-los
para operações de comparação. É mais simples para procurar uma string usando um formato
consistentemente
consistente
testando caso,
cada em vez dede caracteres maiúsculos e minúsculos que poderia coincidir com a string.
permutação
Lembre-se que estas funções não alteram os dados armazenados em tabelas. Eles ainda fazem parte
da leitura
única consulta SQL.
Estas funções esperar parâmetros de cadeia que podem consistir em strings literais, coluna de
valores,
caracteres
expressões de caracteres ou valores numéricos e de data (que são convertidos
implicitamente em
cordas).

A função MENOR
A função MENOR substitui os caracteres maiúsculos em uma string com os seus equivalentes em
Sua sintaxe é mais baixo ( s ). A consulta a seguir ilustra o uso desta função:
minúsculas.

Suponha que a data atual do sistema é de 17-DEZ-2014. As cordas 200, SQL, e 17-Dez-2014 são
devolvida. Note que os resultados de data pode variar de acordo com os parâmetros de sessão. O
numérico e são
expressões dataavaliadas e implicitamente convertido em dados de caracteres antes da função
inferior é
executado.
A função inferior é usada na seguinte condição para localizar os registros com as letras U
e R , em qualquer caso, adjacentes uns aos outros no campo LAST_NAME:

Considere escrever uma consulta alternativa para retornar os mesmos resultados sem o uso de
umaPode
função. conversão caso
ser feito da seguinte forma:

Esta consulta funciona, mas é complicado, e o número de cláusulas OR requerida aumenta


exponencialmente à medida que o comprimento das cordas de busca aumenta.
A função UPPER
A função UPPER é o oposto lógico da função inferior e substitui o minúsculas
caracteres em uma determinada seqüência com seus equivalentes em maiúsculas. Sua sintaxe é
UPPER (ilustra
consulta s ). Ososeguintes
uso desta função:

Esta consulta extrai as linhas da tabela de países onde os valores COUNTRY_NAME


conter as letras U, S , e A (em qualquer dos casos) em que ordem.

A Função INITCAP
A função INITCAP converte uma cadeia de caracteres em caso de maiúscula. Ele é frequentemente
usado
fins depara
apresentação.
dados As primeiras letras de cada palavra da string são convertidos para suas letras
equivalentes, enquanto as restantes letras de cada palavra são convertidos nos seus equivalentes
maiúsculas
minúsculas.
palavra UMA uma cadeia de caracteres adjacentes separadas por um espaço ou sublinhado,
é geralmente
mas outras como o símbolo percentual, ponto de exclamação ou um cifrão são palavra válida
personagens
separadores. Pontuação ou caracteres especiais são considerados como separadores de palavras
válidas.
A função INITCAP pode tomar apenas um parâmetro. Sua sintaxe é INITCAP ( s ). Os seguintes
consulta ilustra o uso desta função:

A consulta retorna% Cap Init Cap Ou Init_Cap Ou Init.

Exercício 8-1: Use as funções Caixa de Conversão Construir uma consulta para recuperar uma
lista de todos
valores FIRST_NAME e LAST_NAME da tabela TRABALHADORES onde FIRST_NAME
contém o li cadeia de caracteres.

1. Inicie o SQL Developer ou SQL * Plus e ligar para o esquema HR.


2. O WHERE deve comparar os valores da coluna FIRST_NAME com um padrão de
caracteres contendo todas as combinações possíveis de caso de o li cadeia. Portanto, se o
FIRST_NAME contém as cadeias de caracteres Li, li, li, ou Li, essa linha deve ser
recuperado.
3. O operador LIKE é utilizado para a correspondência de caracteres, e quatro combinações
podem
com ser
quatro
extraídos
WHERE separadas pela palavra-chave OR. No entanto, a conversão caso
funções podem simplificar a condição. Se a função inferior é usada na FIRST_NAME
coluna, a comparação pode ser feito com uma condição WHERE cláusula. O UPPER ou
INITCAP funções também poderiam ser utilizados.
4. Executar esta instrução retorna nomes dos funcionários que contêm o li personagens:

Usando funções de manipulação de caracteres


Os manipulação de caracteres funções são, possivelmente, alguns dos recursos mais poderosos para
emergir
da Oracle. A sua utilidade na manipulação de dados é quase sem par, e muitos temperado
profissionais técnicos chicotear juntos um script rápido para massagear itens de dados usando essas
Nidificação destas funções é comum. O operador de concatenação (||) é geralmente utilizado em vez
funções.
função CONCAT. O comprimento, INSTR, SUBSTR, e substitui funções são muitas vezes utilizados
do
juntos, como são RPAD, LPAD e TRIM.

A função CONCAT
A função CONCAT junta-se dois caracteres literais, colunas ou expressões para se obter uma maior
expressão de caracteres. A função CONCAT tem dois parâmetros. Sua sintaxe é CONCAT ( S1, S2 ),
onde s1 e s2 representam strings literais, valores coluna de caracteres, ou expressões que resultam
valores de caracteres. A consulta a seguir ilustra o uso desta função:
em
O segundo parâmetro para a função CONCAT é SYSDATE, que retorna o atual sistema
encontro. Este valor é convertido implicitamente em uma string para que o literal no primeiro
parâmetro é Se a data do sistema é 17-DEC-2014, a consulta retorna a seqüência de hoje é: 17-
concatenada.
DEC-2014.
Considere usar a função CONCAT para se juntar três termos para retornar uma cadeia de
CONCAT
caracteres.
leva Desde
apenasadois parâmetros, só é possível juntar dois termos com uma instância desse
função. Uma solução é a função ninho CONCAT dentro de outra função CONCAT, como mostrado
Aqui:

A primeira função CONCAT tem dois parâmetros; a primeira é a Outer1 literal, enquanto que o
umasegundo
função CONCAT
é aninhada. A segunda função CONCAT tem dois parâmetros: o primeiro é o

literal Inner1, enquanto que o segundo é o Inner2 literal. Esta consulta resulta na seguinte seqüência:
Outer1
Inner1 Inner2. funções aninhados estão descritos numa secção posterior. O operador de
concatenação
discutido no Capítulo
|| 7 também pode ser usado para unir estes termos.

A função de duração
A função LENGTH retorna o número de caracteres que constituem uma cadeia de caracteres. Em
branco
espaços, separadores, e caracteres especiais são contados pela função COMPRIMENTO. A função
leva apenas um parâmetro string. Sua sintaxe é COMPRIMENTO ( s ). Considere a seguinte
COMPRIMENTO
consulta:

A função COMPRIMENTO é usada para extrair os valores de COUNTRY_NAME com


dez comprimentos superiores
caracteres da tabela de países.

As Funções LPAD e RPAD


As funções LPAD e RPAD, também conhecido como bloco de esquerda e funções almofada direito ,
retornar umacom
acolchoada string
um número especificado de caracteres à esquerda ou à direita de uma string dada,
respectivamente.
cadeias o utilizados para preenchimento incluem caracteres literais, os valores da coluna,
de caracteres
expressões,
espaços (o padrão),
branco tabulações e caracteres especiais.
As funções LPAD e RPAD tomar três parâmetros. Seus sintaxes são LPAD ( S, N, P ) e
RPAD ( s, n, p ), onde s representa a cadeia de origem, n representa o comprimento final da cadeia
voltou, e p especifica a cadeia de caracteres a ser usado como preenchimento. Se LPAD é usado, o
caracteres p são adicionados à esquerda da cadeia de origem s até que se atinge o comprimento de n .
estofamento
Se RPAD édeusado,
caracteres o
enchimento P são adicionados ao lado direito da cadeia de origem s até que se atinge o
comprimento
o parâmetro ndeé menor
n . Note
doque
queseou igual ao comprimento da cadeia de origem s , em seguida, sem
epreenchimento
apenas os primeiros
ocorre n caracteres de s são devolvidos. Considere as consultas mostradas na Figura
8-1 .
Figura 8-1 Usando as funções LPAD e rpad

A primeira consulta não almofada os dados, e os resultados não são tão legível como a saída do
segunda consulta. RPAD é usado para adicionar espaços onde necessário a concatenação de
first_name e que cada nome é 18 caracteres de comprimento, enquanto LPAD adiciona espaços
last_name até
para osalário
valor início até
do cada salário é de 6 caracteres.

A função TRIM
A função TRIM remove caracteres a partir do início ou final de valores de caracteres, para se obter
um
ponto potencialmente mais curto. A função TRIM tem um parâmetro composta de um componente
obrigatório
um opcional.
e Sua sintaxe é TRIM ([ arrastando | levando | tanto ] trimstring de s ). A string a ser
aparadas ( s ) é obrigatório. Os seguintes pontos listar as regras que regem o uso desta função:

• TRIM ( s ) remove espaços de ambos os lados da cadeia de entrada.


• TRIM (arrastando trimstring de s ) remove todas as ocorrências de trimstring a partir da
extremidade
s se ele estiver
da cadeia
presente.
• TRIM (levando trimstring de s ) remove todas as ocorrências de trimstring desde o início do
corda s se ele estiver presente.
• TRIM (ambos trimstring de s ) e TRIM ( trimstring de s ) remover todas as ocorrências de
trimstring desde o início e final da string s se ele estiver presente.

A consulta anterior retorna as cordas invisíveis, **** oculto e **** escondido. Note que, embora
um caractere guarnição for especificado, várias ocorrências serão cortados se forem
presente.
consecutivamente

A Função -INSTRUÇOÑES (Na-String)


A função INSTR localiza a posição de uma seqüência de pesquisa dentro de uma dada string. Ele
retorna onanumérico
posição qual o n th ocorrência da cadeia de pesquisa começa, em relação a uma posição de início
Se a cadeia de pesquisa não estiver presente, a função INSTR retorna zero.
especificada.
A função INSTR leva dois opcional e dois parâmetros obrigatórios. A sintaxe é
INSTR ( cadeia de origem, seqüência de pesquisa , [ pesquisa posição inicial ], [ ocorrência
para a posição
enésimo de
ou início
]).éO1,valor
ocorrência de pesquisa
a padrão
primeira é 1, ou
ocorrência. o início as
Considere daseguintes
seqüênciaperguntas:
de origem . O valor padrão para o
enésimo

Consulta 1 pesquisas desde o início da cadeia de origem para a primeira ocorrência do hash e
posição
retorna
2. Consulta 2 pesquisas para o hash de posição 5 e encontra a próxima ocorrência na posição
Consultar 3 pesquisas para o hash da posição 3 e encontra a quarta ocorrência na posição 10.
6.

DICA A função INSTR é frequentemente usado em combinação com a função SUBSTR em


programaspara
projetado utilitários
extrair dados codificados de fluxos de dados eletrônicos.

A função SUBSTR (subsequência)


A função SUBSTR extrai uma subsequência de um comprimento especificado da cadeia de origem
que seposição.
dada inicia num
Se a posição de início é maior do que o comprimento da cadeia de origem, será
retornado
número denulo.
caracteres
Se o para extrair a partir de uma dada posição de arranque for maior do que o
comprimento
cadeia, o segmento
da fonte
é devolvido a subsequência da posição inicial para o final da cadeia.
A função SUBSTR tem três parâmetros, com os dois primeiros sendo obrigatória. Sua sintaxe é
SUBSTR ( cadeia de origem, a posição de partida , [ número de caracteres para extrair ]). O
número padrão
caracteres para extrair
de é igual ao número de caracteres a partir da posição inicial para o final do
seqüência de origem . Considere as seguintes perguntas:

Consulta 1 extrai a subcadeia começando na posição 5. Uma vez que o terceiro parâmetro não
for especificado,
o comprimento de extracção padrão é igual ao número de caracteres a partir da posição inicial para a
extremidade de
a cadeia de origem, que é 6. Assim, para consulta 1, o substring retornado é 5 # 7 # 9 #. consulta 2
retorna os três caracteres que ocupam posições 5-7, que formam a subcadeia 5 # 7. Consulta 3
começa em
posição -3. O parâmetro posição inicial negativo instrui o Oracle para começar à procura de três
personagens do final da cadeia. Por conseguinte, a posição de início é de três caracteres a partir da
aextremidade
corda, que édea posição 8. O terceiro parâmetro é 2, o que resulta na subsequência # 9 sendo
devolvida.

A função REPLACE
A função REPLACE substitui todas as ocorrências de um item de pesquisa em uma seqüência de
origemdecom
prazo um
substituição. Se o comprimento do termo de substituição é diferente daquele do item de
pesquisa,
os comprimentos
em seguida,
das cordas e retornados de origem será diferente. Se a cadeia de pesquisa não for
encontrado,
cadeia de origem
o é devolvido inalterado. A função REPLACE tem três parâmetros, com os dois
sendo obrigatória. Sua sintaxe é REPLACE ( cadeia de origem, item de pesquisa , [ termo de
primeiros
substituição
prazo ]). Se o parâmetro for omitido, cada ocorrência do item de pesquisa é removido do
de substituição
seqüência de origem . Em outras palavras, o item de pesquisa é substituída por uma cadeia vazia.
Considere o seguinte
consultas:

O hash na consulta 1 é especificado como o carácter de pesquisa, ea cadeia de substituição é


->. O
especificada
símbolo dacomo
mistura ocorre cinco vezes na origem, e a cadeia resultante é 1-> 3-> 5-> 7-> 9->.
não Consulta 2 não especificar uma cadeia de substituição. O comportamento padrão é, portanto,
para substituir
cadeia com uma a busca
cadeia vazia; Isto, na prática, retira o carácter de pesquisa completamente a partir da
resultando na seqüência de 13579 a serem devolvidos.
fonte,

Usando funções numéricas


Há uma gama de built-in funções numéricas fornecido pela Oracle que rivaliza com a matemática
caixas de ferramentas de pacotes de planilhas populares. Um diferencial significativa entre numérico
e outros é que eles aceitam e retornar apenas os dados numéricos. A Oracle fornece funções
funções
numéricas para
resolvendo trigonométricas, exponenciação, e problemas logarítmicas, entre outros. Este guia
concentra-se
três funções de
emuma única linha numéricos : redondo, TRUNC e MOD.

A função numérica ROUND


A função ROUND executa uma operação de arredondamento em um valor numérico baseado em
precisão especificada. O valor devolvido é arredondado para cima ou para baixo, dependendo do
decimal
valor
do dígito
numérico
significativo na posição precisão decimal especificado. Se a precisão decimal especificado
é N , o número significativo para o arredondamento é encontrado ( n + 1) lugares para a direita do
éponto
negativo,
decimal.
o algarismo
E se significativo para o arredondamento é encontrado n lugares para a esquerda
do o
Se ponto
valordecimal.
numérico do dígito significativo é maior ou igual a 5, a “arredondar” ocorre;
Caso contrário, um “down round” ocorre.
A função ROUND tem dois parâmetros. Sua sintaxe é ROUND ( número de fonte, decimal
precisão ). O parâmetro número de fonte representa qualquer valor numérico. A precisão decimal

parâmetro especifica o grau de arredondamento e é opcional. Se o parâmetro de precisão decimal é


ausente, o grau padrão de arredondamento é zero, o que significa que a fonte é arredondado para o
inteiro mais próximo
número.
Considere os graus decimais listados na Tabela 8-1 para o número 1.601,916. O decimal
valores
negativo
de precisão estão localizados à esquerda do ponto decimal, enquanto os valores positivos são
encontrados ao
certo.

Tabela 8-1 Descrições decimal de precisão

Se o parâmetro de precisão decimal é um, então o número de fonte é arredondado para o décimo
Se émais
dois,próximo.
então a fonte é arredondado para o centésimo mais próximo, e assim por diante. As
seguintes
ilustrar o uso
consultas
desta função:

Consulta 1 tem um parâmetro decimal de precisão ( n ) de 1, o que implica que o número de


arredondado
fonte é para a décima mais próxima. Uma vez que os centésimos ( n + 1) é um dígito (menos
do que 5),
ocorre, e ode
número
arredondamento
retornado épara
1601,9.
baixo
O parâmetro precisão decimal na consulta 2 é 2, então a
número de fonte é arredondado para o centésimo mais próximo. Uma vez que a unidade é de 6
milésimos (maiorocorre,
arredondamento do quee5),
o número retornado é 1.601,92. O parâmetro precisão decimal do
consulta é 3 -3. Uma vez que é negativo, o dígito significativo para arredondamento é encontrado 3
lugaresdecimal,
ponto à esquerda
no dígito
do centenas, que é 6. Como a unidade de centenas é 6, arredondamento ocorre,
eo número retornado é 2000. Consulta 4 tem dispensado com o parâmetro de precisão decimal. este
implica que o arredondamento é feito para o número inteiro mais próximo. Desde a décima unidade
é 9, o númeroeé1602 é retornado.
arredondado,

A função numérica TRUNCAR (truncado)


A função TRUNCAR executa uma operação de truncagem em um valor numérico baseado em
precisão
decimal especificada. A truncagem numérico é diferente de arredondamento na medida em que
diminui os números

além da precisão decimal especificado e não tenta arredondar para cima ou para baixo se o decimal
precisão é positivo. No entanto, se a precisão decimal ( n ) for negativa, o valor de entrada é zerada
para baixo a partir do n th posição decimal.
A função TRUNC tem dois parâmetros. Sua sintaxe é TRUNC ( número de fonte, decimal
precisão ). O número de fonte representa qualquer valor numérico. A precisão decimal especifica o
grau de truncamento e é opcional. Se o parâmetro de precisão decimal é ausente, o decimal padrão
precisão é zero, o que significa que o número de fonte é truncado para um valor inteiro.
Se o parâmetro de precisão decimal é 1, então o número de fonte é truncado em sua unidade
é 2, décimos.
será truncado
Se isso
em sua unidade centésimos, e assim por diante. As consultas a seguir ilustram o
uso desta
função:

Consulta 1 tem um parâmetro de precisão decimal de 1, o que implica que o número de fonte é
truncado na sua unidade décimos, e o número retornado é 1601,9. O parâmetro precisão decimal ( n
) em
consulta 2 é 2, então o número de fonte é truncado em sua unidade centésimos, eo número retornado
é1.601,91. Note-se que este resultado seria diferente se uma operação de arredondamento foram
realizados
dígito na posição
desde o( n + 1) é de 6 (maior do que 5). Consulta 3 especifica um número negativo (-3)
sob a sua Três
precisão. formacasas
decimal
para a esquerda do ponto decimal implica que o truncamento acontece no
centenas dígitos, como mostrado anteriormente na Tabela 8-1 . Portanto, o número de fonte é zerado
para baixo
centenas dígitos
de sua(6), e o número retornado é 1000. Finalmente, a consulta 4 não tem um decimal
parâmetro de precisão, o que implica que a truncagem é feito no grau do número inteiro de precisão.
número retornado é 1,601.
o

A Função de MOD (Modulus)


A função MOD retorna o resto numérico de uma operação de divisão. Dois números, o dividendo
(Número que está sendo dividido) e o divisor (número de dividir por), são fornecidos, e uma
éoperação
desempenhado.
de divisão
Se o divisor é um fator do dividendo, MOD retorna zero, pois não há restante.
Se o divisor é zero, nenhuma divisão por zero erro é retornado, e a função MOD retorna o dividendo
em vez de. Se o divisor é maior do que o dividendo, em seguida, a função MOD retorna o dividendo
como seu Isso é porque ele divide zero vezes no divisor, deixando o restante igual ao
resultado.
dividendo.
A função MOD tem dois parâmetros. Sua sintaxe é MOD ( dividendo, divisor ). O dividendo e
divisor parâmetros representam um literal numérico, coluna, ou expressão, que pode ser negativo ou
positivo. As consultas a seguir ilustram o uso desta função:

Consulta 1 divide 6 por dois perfeitamente, obtendo-se 0, quando o restante. Consulta 2 divide 5
compor
o restante
3, obtendo-se
2. Pesquisa
um 3 tentativas para dividir 7 em 35. Uma vez que o divisor é maior do que o
dividendo ,

o número 7 é retornado como o valor do módulo. Consulta 4 possui uma fração decimal como o
dividendo .por 5,2 3 produz um com o restante 2,2.
Dividindo

DICA Qualquer número par dividido por dois naturalmente não tem restante, mas números ímpares
dividido
ter sempre
porum
dois
resto de 1. Por conseguinte, a função de MOD é muitas vezes usado para distinguir
entre mesmo
e números ímpares.
Trabalho com datas
Os data funções fornecem uma maneira conveniente para resolver problemas relacionados com a
adata
parsem
de anos
a necessidade
bissextos ou
de omanter
número de dias em determinados meses. Em primeiro lugar, descrever o
armazenamento
O formato de data
depadrão
datas emáscaras antes de examinar a função SYSDATE. Nós, então, discutir data
aritméticas e a manipulação data funções : ADD_MONTHS, MONTHS_BETWEEN,
LAST_DAY, NEXT_DAY, ROUND e TRUNC.

Data de armazenamento no banco de dados


As lojas de banco de dados data internamente em um formato numérico que suporta o
armazenamento
mês de século,
e dia detalhes, ano,informações de tempo como horas, minutos e segundos. Quando
bem como
acesso a informações de data de uma tabela, o formato padrão dos resultados é composto por dois
dígitos que o dia, uma abreviação de três letras do mês, e dois dígitos representam o ano
representam
componente. Para evitar anomalias que surgem com carcaça tipo automático, as datas literais no
seguintes consultas foram convertidos em datas por uma função de conversão TO_DATE discutido
mais tarde
neste capítulo. Resultados exactos podem variar devido a diferenças de parâmetros sessão NLS.

A função SYSDATE
A função SYSDATE não tem parâmetros e retorna o atual sistema data e hora de acordo com
o servidor de banco de dados. Se o servidor de banco de dados é instalado com AMERICAN como o
idioma SYSDATE
função padrão, o retorna os componentes DD-MON-RR da data atual do sistema do servidor. Se o
servidor de banco de dados está localizado em um fuso horário diferente de um cliente consultando o
banco de
tempo retornado
dados, apor
data
SYSDATE
e será diferente da hora local na máquina do cliente. Aqui está uma
consulta para
recuperar a data servidor de banco de dados:

data aritmética
A equação a seguir ilustra um princípio importante sobre data aritmética :
Date1 - data2 = Num1 .
A data pode ser subtraída da outra data. A diferença entre dois artigos da data representa o
número de dias entre eles. Qualquer número, incluindo as fracções, pode ser adicionado ou subtraído
de um

artigo da data. Neste contexto, o número representa um número de dias. A soma ou a diferença entre
um
número e uma data item de sempre retorna um item de data. Este princípio implica que a adição,
multiplicação,
divisão de doisou
artigos da data não é permitido.

A Função MONTHS_BETWEEN
A função MONTHS_BETWEEN retorna o número de meses entre duas data obrigatória
parâmetros. Sua sintaxe é MONTHS_BETWEEN ( date1, date2 ). A função calcula a diferença
em meses de 31 dias entre data1 e data2 . Se date1 ocorre antes date2 , um número negativo é
devolvida. A diferença entre os dois parâmetros de data pode consistir em um número inteiro que
representa o número de meses entre as duas datas e um componente fracionário que representa o
dias e tempo restante (com base em um mês de 31 dias) após a diferença entre o número inteiro e
meses é calculado. Um número inteiro com nenhuma parte fracionária é devolvido se os
anos
componentes
datas sendo comparados
dia do são os mesmos ou o último dia de suas respectivas meses.
A consulta a seguir ilustra a função MONTHS_BETWEEN:

Suponha que a data atual é de 16-APR-2009. Esta consulta retorna 1 como o número de meses
entre 16-APR-2009 e 16-MAR-2009.
EXAME TIP Um erro comum é assumir que o tipo de dados de retorno de funções de uma única
mesmo
linha é aque a categoria a função pertence. Isso só é verdade das funções numéricas. caráter e
funções de data pode retornar valores de qualquer tipo de dados. Por exemplo, a função de caráter
INSTR de
função eo data MONTHS_BETWEEN tanto retornar um número. Também é comum supor
que a diferença entre duas datas é uma data, quando na verdade ele é um número.
erroneamente

A Função ADD_MONTHS
A função ADD_MONTHS retorna um item de data calculada pela adição de um determinado
número de meses valor de data. A função ADD_MONTHS leva dois parâmetros obrigatórios. Sua
a um determinado
sintaxe é
ADD_MONTHS ( data de início, número de meses ). A função calcula a data de destino depois de
o número especificado de meses para a data de início . O número de meses pode ser negativa,
adicionar
resultando
uma data-alvo
em mais cedo do que a data de início que estão sendo devolvidos. O número de meses
pode ser fracionada,
componente fraccionada mas éo ignorado, e o componente de número inteiro é utilizado. Estes três
consultas ilustrar afuncionar:
ADD_MONTHS

Consulta 1 retornos 07-MAY-2009, uma vez que o componente dia permanece o mesmo, se
mêspossível
é incrementado
eo por um. A segunda consulta tem duas dimensões interessantes. o parâmetro

especificando o número de meses para adicionar contém um componente fracionário, que é


ignorado.
dois mesesadicionando
para a data de 31-DEC-2008 deve retornar a data 31-FEB-2009, mas não há tal data,
assim o último dia do mês, 28-FEB-2009, é devolvido. Como o número de meses adicionados no
consulta é -12, a data de 07-APR-2008 é retornado, que é de 12 meses anteriores à data de início.
terceiro

A Função NEXT_DAY
A função NEXT_DAY devolve a data em que a próxima ocorrência de um determinado dia da
ocorre. Leva dois parâmetros obrigatórios e tem a NEXT_DAY sintaxe ( data de início, dia do
semana
semana ). A função calcula a data em que o dia da semana parâmetro seguinte ocorre após a
a data de início . O dia da semana parâmetro deve ser um valor caractere válido, conforme
determinado
parâmetro depelo
sessão NLS_DATE_LANGUAGE. Para NLS_DATE_LANGUAGE = AMERICAN, o
valores padrão são pelo menos os três primeiros caracteres do nome do dia. Os valores de caracteres
quedias
os representam
da semana podem ser especificados em qualquer caso. O nome curto pode ser mais longo do
que três
personagens; por exemplo, o domingo pode ser referenciada como sol, Sund, sunda, ou domingo.
considereconsultas:
seguinte o

Aqui, 01-JAN-2009 é uma quinta-feira. Portanto, a próxima vez que uma terça-feira ocorre será
de cinco
depois, dias
em 06-JAN-2009. A segunda consulta especifica o WEDNE literal personagem, que é
interpretados como quarta-feira. A próxima quarta-feira após 01-JAN-2009 é 07-JAN-2009.

A Função LAST_DAY
A função LAST_DAY retorna a data do último dia do mês em que o dia dado pertence.
Ele usa um único parâmetro obrigatório e tem o LAST_DAY sintaxe ( data de início ). A função
extrai o mês que a data de início parâmetro pertence e calcula a data do último dia de
esse mês. A consulta a seguir retorna a data 31-JAN-2009:

A função ROUND Data


A função Data Ronda executa uma operação de arredondamento em um valor com base numa data
formato de precisão. O valor devolvido é arredondado para cima ou para baixo para a precisão da
específica
data maisEsta
formato. próxima
função tem um parâmetro obrigatório e um parâmetro opcional e tem a sintaxe
ROUND ( data source , [ formato de precisão data ]). A data source parâmetro representa qualquer
item
O data. de precisão data parâmetro especifica o grau de arredondamento e é opcional. Se ele está
formato
o grau padrão
ausente,
(AAAA), de arredondamento
trimestre (Q), mês (MM),é dia . Os formatos
semana de precisão
(W), dia (DD), data incluem
hora (HH) e minutosséculo
(MI).(CC), ano
Arredondamento para século é equivalente a adicionar um para o século atual. Arredondamento
mêspara
ocorre
o próximo
se o dia componente é superior a 16, ou então arredondando para o início do
mês atual ocorre. Se o mês cai entre um e seis, em seguida, o arredondamento para ano retorna a
data
o em do ano em curso; se não, ele retorna a data no início do ano seguinte.
início
Considere a seguinte consulta e seus resultados:

Suponha que esta consulta foi executado em 17-APR-2009 em 0:05. O primeiro item arredonda a
dia.data
Desdepara o maisépróximo
o tempo 00:05, que é depois da meia-noite, a data não é arredondado para cima. O
segundo item
arredonda a data para o mesmo dia da semana como o primeiro dia do mês. Desde 01-APR-2009 é
Quarta-feira, a data retornada é a quarta-feira da semana em que esta data ocorre. Lembrar
uma
que, por padrão, o primeiro dia da semana é domingo. Portanto, a primeira quarta-feira da semana
começando 12-APR-2009 é de 15-APR-2009. O terceiro item arredonda a data para o início do
mês seguinte vez que o componente dia é de 17 e retorna 01-MAY-2009. O quarto ponto representa
arredondado para a data no início do ano em curso desde o componente mês é 4, e 01-
JAN-2009 é retornado.

A função de data TRUNC


A função da data TRUNCAR executa uma operação de truncagem em um valor de data com base
numa data
formato deespecífica
precisão.
A função de data TRUNC leva um parâmetro obrigatório e um parâmetro opcional. sua sintaxe
é TRUNC ( actualizado recurso , [ formato de precisão data ]). A data source parâmetro representa
qualquer
item. O formato
data de precisão data parâmetro especifica o grau de truncamento e é opcional. Se for
ausente, o grau padrão de truncamento é dia . Isto significa que qualquer componente de tempo da
édata
definido
sourcecomo a meia-noite ou 00:00:00 (00 horas, 00 minutos e 00 segundos). Truncando no nível
define a data da data source para o primeiro dia do mês. Truncando no nível ano retorna a
mês
data no início do corrente ano. A seguinte consulta e os resultados mostram quatro itens na
lista SELECT, cada truncar uma data literal para um diferente grau de precisão:

Suponha que esta consulta foi executado em 17-APR-2009 às 12:05 AM O primeiro item define o
de 0:05
componente
- 00:00 ede
retorna
tempoo dia atual. O segundo item trunca a data para o mesmo dia da
a semana como o primeiro dia do mês (quarta-feira) e retorna a quarta-feira em sua semana: 15
APR-
2009. O terceiro item trunca a data para o início do mês atual e retorna 01-APR-
2009. O quarto item trunca a data para o início do ano atual e retorna 01-JAN-2009.

Exercício 8-2: Use as funções de manipulação de caracteres Conectar-se ao esquema de OE e


construir uma consulta que extrai o nome do host e-mail exclusivo do
coluna.
CUSTOMERS.CUST_EMAIL

1. Inicie o SQL Developer e conectar-se ao esquema de OE.


2. A entrada CUSTOMERS.CUST_EMAIL típico é o seguinte:
firstname.lastname@hostname.EXAMPLE.COM. O nome do host começa imediatamente
após a
@ Símbolo e termina antes do EXAMPLE.COM. A função SUBSTR podem ser usadas para
extrair este valor. No entanto, a posição de início ea duração ainda são desconhecidos. o
função
INSTR pode
characters ser utilizada para localizar a posição da primeira ocorrência do símbolo @ eo
EXAMPLE.COM.
3. Uma solução possível é a seguinte:

Descrevem vários tipos de funções de conversão


Disponível em SQL
Conversão SQL funções são funções de uma única linha destinados a alterar a natureza do tipo de
dadosde
valor decoluna,
um expressão, ou literal. TO_CHAR, TO_NUMBER , e TO_DATE são os três mais
amplamente utilizado funções de conversão. TO_CHAR converte informações numéricas e data em
enquanto TO_NUMBER e TO_DATE converter dados de caracteres em números e datas,
caracteres,
respectivamente.
Funções de conversão
Oracle permite colunas a serem definidos com ANSI, DB2 e tipos de dados SQL / DS. Estes são
internamente para tipos de dados Oracle. Cada coluna tem um tipo de dados associado que
convertidos
constrange
os dados quea natureza
ele pode de
armazenar. A coluna de número não pode armazenar informações de caráter.
Uma colunacaracteres
armazenar data não ou
podenúmeros aleatórios. No entanto, os equivalentes de caráter de número e data
informação pode ser armazenada em um campo VARCHAR2.
Se uma função que aceita um parâmetro de entrada personagem encontra um número em vez
converte-lo
disso, o em
Oracle
seu automaticamente
caráter equivalente. Se uma função que aceita um número ou um parâmetro de
encontra um valor de caractere, existem condições específicas em que tipo de dados automática
data
ocorre conversão. Embora conversões tipo de dados implícitos estão disponíveis, é geralmente mais
fiáveis para converter explicitamente valores a partir de um tipo de dados para outro utilizando a
conversão de linha única
funções.

Implícita de conversão Tipo de dados


Valores que não compartilham tipos de dados idênticos com os parâmetros de função são
convertidos
requerida formato
implicitamente
se possível.
ao tipos de dados VARCHAR2 e CHAR são colectivamente referidos
tipos de caracteres. campos de caracteres são flexíveis e permitem o armazenamento de quase
como
qualquer tipo
Portanto, os valores
de informação.
data eo número pode facilmente ser convertidos para seus equivalentes de
caracteres. Estes
conversões são conhecidos como número de caracteres e data de caráter conversões. considere o
seguinte consultas:

Ambas as consultas usar a função de comprimento, o que leva um parâmetro de cadeia de


caracteres.naOconsulta
1234567890 número1 é implicitamente convertido em uma cadeia de caracteres, '1234567890',
antes de ser
avaliada pela função de comprimento, o que devolve 10. Consulta 2 em primeiro lugar a função
o qual é assumido como sendo 07-ABR-38. Esta data é implicitamente convertido para a cadeia de
SYSDATE,
caracteres, e'07
APR-38' a função
- retorna COMPRIMENTO o número 9.
É incomum para dados de caracteres a ser convertido implicitamente em tipos de dados
única
numéricos,
condição uma sob avez
qual
que
isso
o pode ocorrer é se os dados personagem representa um número válido.
o
seqüência de caracteres '11' será convertido implicitamente a um número, mas '11 .123.456' não será,
como o seguintes demonstram:
consultas

Consulta 3 e 4 implicitamente converter as cadeias de caracteres '11' e '11 .123' para os números
11 e respectivamente, antes da função de MOD avalia-los e devolve os resultados 1 e 1.123.
11,123,
Consulta 5 retorna o erro “ORA-1722: número inválido” quando a Oracle tenta executar um
caracteres para o número de conversão porque a cadeia '11 .123.456' não é um número válido. 6
implícita
também
falha comconsulta
o erro número inválido desde o símbolo do dólar não pode ser convertido implicitamente
para uma
número.
Implícita
seguindo personagem
padrões de data: a[Ddata de separator1
| DD] conversão é[MON
possível quando
| MÊS] a cadeia [R
separator2 de caracteres
| RR | YY |está em D
AAAA].
conformidade com o
eDD representam um dígito e de dois dígitos dias do mês. MON é uma abreviatura de três caracteres,
enquanto MÊS é o nome completo de um mês. R e RR representam anos simples e de dois dígitos.
YY e representam dois e quatro dígitos anos, respectivamente. Os separator1 e separator2
AAAA
elementos
pode ser a maioria dos sinais de pontuação, espaços e tabs. Tabela 8-2 demonstra caráter implícito a
conversão, listando várias chamadas de função e os resultados SQL Developer retornos. Estes
data
resultados
que o sistema
assumem
faz uso dos padrões de sessão americanos.

Tabela 8-2 Exemplos de caráter implícito a Data de Conversão

CUIDADO Embora conversões tipo de dados implícitos estão disponíveis, é mais confiável para
valores explicitamente de um tipo de dados para outro usando funções de conversão de uma única
converter
linha. conversão
informações personagem para número e data depende de máscaras de formato.

Explícita Tipo de conversão de dados


Funções que convertem itens de um tipo de dados para outro são conhecidos como explícita
conversãoEstes
funções. tipo retornar
de dadosum valor garantido para ser o tipo necessário e oferecer um método seguro e
de conversão de itens de dados.
confiável
NUMBER e DATE itens podem ser convertidas explicitamente em itens de caracteres usando o
função.
TO_CHAR
Uma cadeia de caracteres pode ser explicitamente transformado em um número usando o
função. A função TO_DATE é usado para converter cadeias de caracteres em itens de data. oracle
TO_NUMBER
máscaras de formato permitem uma ampla gama de controle sobre personagem-a-número e as
conversões.
características-to-date

EXAME DICA Sua compreensão de modelos de formato comumente utilizados ou máscaras será
praticamente
testado com perguntas como “Prever o resultado de uma chamada de função, como TO_CHAR
(TO_DATE
JAN-00' , 'DD-MON-RR),
('01 - 'Day').”

Use o TO_CHAR, TO_NUMBER, e TO_DATE


Funções de conversão
Este objectivo certificação contém uma descrição sistemática da TO_NUMBER, TO_DATE, e
funções TO_CHAR, com exemplos. A discussão sobre TO_CHAR é dividido na conversão de
artigos da data para caracteres e números de caracteres. Esta separação é garantido pela
máscaras de formato
disponibilidade
coexistir com de diferentes
muitos para
outros, mas sãocontrolar a conversão para valores de caracteres. Estas funções
os mais utilizados.
de conversão
Usando as funções de conversão
Muitas situações exigem o uso de funções de conversão. Eles podem variar de formatação de data
campos em um relatório para garantir que os dígitos numéricos extraídos de campos de caracteres
são corretamente
convertido em números antes de aplicá-los em uma expressão aritmética.
Quadro 8-3 ilustra a sintaxe das funções de conversão de dados tipo explícito de uma única linha.

Tabela 8-3 Sintaxe de funções de conversão explícita de tipo de dados

suporte ao idioma nacional opcional (NLS) parâmetros (nls_parameters) são úteis para
a linguagem
especificar
e formato em que os nomes de data e numéricos elementos são retornados. Estes
parâmetros são geralmente ausentes, e os valores padrão para elementos tais como o dia ou mês
nomes e
abreviaturas são utilizadas. Como Figura 8-2 mostra, existe uma vista publicamente disponível
NLS_SESSION_PARAMETERS que contém os parâmetros NLS para a sua sessão atual. o
chamado
valor NLS_CURRENCY padrão é o símbolo do dólar, mas isso pode ser alterado na sessão de
usuário
nível. Por exemplo, para alterar a moeda para a cadeia GBP três caracteres, você pode emitir o
seguinte comando:
Figura 8-2 linguagem Nacional parâmetros de sessão apoio

A conversão de números de caracteres utilizando a função


A função TO_CHAR retorna um item de dados tipo VARCHAR2. Quando aplicado a itens do tipo
TO_CHAR
NÚMERO, várias opções de formatação estão disponíveis. Sua sintaxe é a seguinte:

A num parâmetro é obrigatório e deve ser um valor numérico. O opcional formato de parâmetro
pode ser usado para especificar informações de formatação numérico, tais como largura, símbolo de
moeda,decimal
ponto de umaeposição
grupo (ou milhares) separadores e devem ser colocados entre aspas simples.
Há outras opções de formatação para números que estão sendo convertidas em caracteres, alguns dos
quais são
listado na Tabela 8-4 . Considere as duas consultas a seguir:
Tabela 8-4 Máscaras formato numérico

Consulta 1 avalia o número 00001, remove os zeros, converte o número 1 para o


caráter '1', e retorna a seqüência de caracteres '1 é um número especial'. Consulta 2 aplica o
máscara de formato '0999999' para o número 00001, convertendo-o na cadeia de caracteres
numérico
'0000001'. Depois
concatenação para de
os literais de caractere, a string retornada é '0000001 é um número especial'. o
e os seis noves na máscara de formato indicam à função TO_CHAR que zeros à esquerda deve ser
zero

apresentada e que a largura do display deve ser definido para sete caracteres. Portanto, a string
aretornada por
função TO_CHAR contém sete caracteres.

TIP Convertendo números em caracteres é uma maneira confiável para garantir que as funções e
SQL geral
sintaxe, que espera que a entrada de caracteres, não retornam erros quando os números são
encontrados.
números conversão
em cadeias de caracteres é comum quando os dados numéricos devem ser formatados para
propósitos. As máscaras de formato que suportam moeda, milhares separadores, e separadores de
relatórios
ponto
são frequentemente
decimal utilizados ao apresentar dados financeiros.

Converter datas de caracteres usando a função TO_CHAR


Você pode tirar proveito de uma variedade de modelos de formato para converter artigos da data em
quase qualquerde caracteres de uma data usando TO_CHAR. Sua sintaxe é a seguinte:
representação

Apenas o date1 parâmetro é obrigatório; ele deve assumir a forma de um valor que pode ser
implicitamente
convertida para uma data. O opcional formato parâmetro é sensível a maiúsculas e devem ser
colocadosOs
citações. emespecifica
um únicomáscara de formato que os elementos de data são extraídos e se o elemento
ser descrito por uma longa ou um nome abreviado. Os nomes dos dias e meses são automaticamente
deve
preenchido com espaços. Estes podem ser removidos com um modificador para a máscara de
(formato
FM ) dochamado
operador.o modo de preenchimento
Prefixando o modelo de formato com as letras fm , você instrui o Oracle para
cortar
dos nomes
todosdos
os espaços
dias e meses. Há muitas opções de formatação para datas a ser convertidos em
caracteres, alguns dos quais estão listados na Tabela 8-5 . Considere as seguintes três consultas:
Tabela 8-5 Formato máscaras de data por dias, meses e anos

Se a data do sistema atual é 03 / JAN / 09 e o formato de exibição padrão é DD / MON / RR, em


seguida,
1 retorna consulta de caracteres '03 / JAN / 09 é a data de hoje'. Há dois componentes notáveis
a seqüência
emEm
2. consulta
primeiro lugar, apenas o componente mês da data atual do sistema é extraído de conversão
para de
tipo umapersonagem. Em segundo lugar, uma vez que a máscara de formato é sensível a maiúsculas e
aparece
string retornada
'Mês' emé caso
'Janeiro
de título,
é um momento
o especial'. Não há necessidade de adicionar um espaço em
frente
um ao literal
momento 'é
especial', já que a função TO_CHAR almofadas automaticamente o nome do mês com
umaespaço.
Se máscara de formato na consulta 2 foi 'MÊS', a string retornada seria 'Janeiro é um especial
Tempo'. A fm modificador é aplicado para consultar 3, ea cadeia resultante é 'Januaryis um momento
Note que não há espaço entre janeiro eo literal 'é um momento especial'. Na Tabela 8-5 , assumir a
especial'.
elementos estão operando na data 02-JUN-1975 eo ano atual é de 2009.
Os elementos de formato de data referentes a semanas, trimestres, séculos, e outros menos
utilizados
máscaras de formato estão listadas na Tabela 8-6 . A coluna resultado é obtido através da avaliação
da TO_CHAR
função usando a data de 24-SEP-1000 AC, com o formato da máscara a partir da coluna elemento de
formato no
mesa.
Tabela 8-6 Menos Data comumente usados Formato Máscaras

O componente de tempo de um tipo de dados de data e hora é extraído utilizando os modelos de


formato énaobtido
O resultado Tabelaatravés
8-7 . da avaliação da função TO_CHAR usando a data, incluindo seu tempo
componente 27-JUN-2010 21:35:13, com a máscara de formato em Formato Elemento coluna na
Tabela 8-7 .

Tabela 8-7 Máscara formato de data para componentes de tempo

Tabela 8-8 lista vários elementos diversos que podem ser utilizados em modelos de formato de
sinais
data
deepontuação
hora. são usados para elementos de formato separados. Existem três tipos de sufixos
para formatar de elementos de data e hora. Além disso, os literais de caracteres podem ser incluídos
componentes
em um formato
modelo se eles estão
de data
entre aspas duplas. Os resultados na Tabela 8-8 são obtidas através
aplicando a função TO_CHAR utilizando a data 12 / SEP / 08 14:31 com as máscaras de formato
listadas na e coluna Formato Mask.
Descrição

Tabela 8-8 Máscaras Data Format Diversos


A tabela JOB_HISTORY mantém o controle de postos de trabalho ocupados por funcionários da
empresa.
na Figura 8-3arecupera
consultauma frase descritiva sobre a data sair para cada funcionário com base em sua
END_DATE, EMPLOYEE_ID e JOB_ID campos. A expressão de caracteres é concatenado a um
Chamada de função TO_CHAR com um modelo de formato de 'fmDay ‘a’ ddth ‘do’ Mês AAAA'. a
modificador é usado para aparar espaços em branco que arrastam os nomes dos dias mais curtos e
fm
meses
dois mais curtos.
literais o
de caracteres entre aspas duplas são as palavras “a” e “de”. O th'
modelo de formato é aplicada ao elemento 'dd' data para criar um dia ordinal, como o 17º ou 31º. o
modelo de formato 'Mês' exibe o nome completo do elemento mês da coluna END_DATE em título
caso. Finalmente, a máscara de formato AAAA recupera o componente de ano com quatro dígitos.
Figura 8-3 função TO_CHAR com datas

Embora o componente de uma data do século não é exibida por padrão, ele é armazenado no
quando
banco
o valor
de dados
de data é inserida ou atualizada e está disponível para recuperação. O formato DD-
máscara é o padrão para exibição e de entrada. Ao inserir ou atualizar valores de data, do século
MON-RR
componente é obtido a partir da função SYSDATE se não for fornecido. A máscara RR formato de
data
difere do formato YY mascarar em que ele pode ser usado para especificar diferentes séculos com
base no
anos corrente e especificados. O componente século atribuído a um encontro com seu ano
especificado
formato de data
comRR
o pode ser melhor compreendida, considerando os seguintes princípios:

• Se os dois dígitos do ano em curso e a mentira ano especificado entre 0 e 49, a corrente
século é retornado. Suponha que a presente data é 02-JUN-2007. O século retornou para o

data de 24 JUL-04 no formato DD-MON-RR é de 20.


• Se os dois dígitos do ano em curso mentira entre 0 e 49 e o ano especificado cai entre
50 e 99, do século anterior é retornado. Suponha que a data atual é 02-JUN-2007. o
século devolvido para 24-JUL-94 é 19.
• Se os dois dígitos do ano corrente e especificados situar-se entre 50 e 99, o século atual é
retornado por padrão. Suponhamos que a data actual é 02-JUN-1975; século retornado para
JUL-94 é 19.
24
• Se os dois dígitos do ano em curso mentira entre 50 e 99 e no ano especificado cai entre
0 e 49, o próximo século é retornado. Suponhamos que a data actual é 02-JUN-1975; o século
retornado para 24 JUL-07 é de 20.

Converter caracteres a Datas Usando a função TO_DATE


A função TO_DATE retorna um item do tipo DATE. cadeias de caracteres convertidos em datas
conter todas ou apenas um subconjunto dos elementos de data e hora que compõem uma data.
podem
Quando cordas
subconjunto da com
data apenas uma de tempo são convertidos, Oracle fornece valores padrão para
de elementos
construir um
encontro. Componentes
completo de cadeias de caracteres estão associados com diferentes elementos de data e
hora usando
modelo ou máscara.
um formato
Sua sintaxe é a seguinte:

Apenas string1 é obrigatório, e se nenhuma máscara de formato é fornecido, string1 deve ser
implicitamente
conversíveis em uma data. O opcional formato parâmetro é quase sempre usado e é especificado em
aspas simples. As máscaras de formato são idênticos aos indicados nos Quadros 8-5 , 8-6 , e 8-7 . o
Função TO_DATE tem um fx modificador, que é semelhante ao fm utilizado com a função
TO_CHAR.
fx modificador
o especifica uma correspondência exata para string1 e a máscara de formato. Quando o
fx modificadoritens
especificada, é de caracteres que não correspondem exatamente a máscara de formato de
produzir
depois deum
cinco
erro.
consultas:
considere o

Consulta 1 avalia a seqüência de 25-DEZ-2010 e tem informações suficientes para convertê-lo


em um
implicitamente
artigo da data com uma máscara padrão de DD-MON-YYYY. O separador de hífen poderia
substituído por um outro caractere de pontuação. Desde há componentes de tempo são fornecidos, o
ser
tempo
esta para
data convertido é definida como a meia-noite, ou 0:00:00. Consulta 2 não pode converter
implicitamente
data, porque nãoa há
string
informação
em um suficiente e um ORA-01840: valor de entrada não é tempo suficiente
o formato de data; é devolvido um erro. Ao fornecer uma máscara de formato DD-MON para a
para
consulta 3, a Oracle
cadeia 25-DEC em pode coincidir com o número 25 a DD e o nome do mês abreviado DEC para o
componente. Ano e tempo componentes estão ausentes, assim que o ano corrente retornado pelo
MON
função é utilizada eo tempo está definido para meia-noite. Se o ano atual é 2009, consulta 3 retorna a
SYSDATE
25 / Dez / 09 00:00:00. Consulta 4 executa uma conversão completa de uma string com o tempo data
data

elementos presentes, e não valores padrão são fornecidos pela Oracle. Consulta 5 usa o fx
modificador
máscara em sua Uma vez que o componente da cadeia de ano é 10 e a máscara de formato
de formato.
correspondente
AAAA, os fx resultados
é modificadoras em um ORA-01862 erro que está sendo retornado: “o valor
numéricocom
coincidir não faz
o comprimento do item formato “.

A conversão de caracteres para números utilizando a


Função
TO_NUMBER
A função TO_NUMBER retorna um item de tipo de número. cadeias de caracteres convertida em
números devem ser adequadamente formatado de modo a que quaisquer componentes não
numéricos
embora comsão
uma
traduzidos
máscaraou
dedespojado
formato apropriado. A sintaxe é como se segue:

Apenas o string1 parâmetro é obrigatório e se nenhum formato de máscara é fornecido, ele deve
podeserserum
convertido
valor queem um número implicitamente. O opcional formato parâmetro é especificado
em única
aspas. As máscaras de formato são idênticos aos listados na Tabela 8-4 . Considere o seguinte
duas consultas:

Consulta 1 não pode executar uma conversão implícita para um número por causa do sinal de
e período;
dólar, vírgula,
ele retorna o erro ORA-1722: número inválido. Consulta 2 corresponde ao símbolo do
vírgula, eo período da corda para a máscara de formato e, embora a largura numérica é maior do que
dólar,
a largura da corda, o número 1000,55 é retornado.

EXAME TIP A função TO_NUMBER converte itens de caracteres em números. Se você converter
número usando uma máscara de formato mais curto, é devolvido um erro. Se você converter um
um
número usando
máscara de formato,
um longo
o número original é devolvido. Tenha cuidado para não confundir conversões
to_number
com TO_CHAR. Por exemplo, TO_NUMBER (123,56 '999.9') retorna um erro, enquanto
TO_CHAR (123,56 '999.9') retorna 123,6.

Aplicar expressões condicionais em uma instrução


SELECT
Funções
seção.
aninhadas foram introduzidas mais cedo, mas nós oferecemos-lhe uma discussão formal
sobre este
Descrevemos
conceito neste
também funções condicionais que trabalham com valores nulos e apoio
condicional
lógica em expressões.

Funções aninhadas
Funções aninhadas utilizar a saída a partir de uma função de como a entrada para a outra. Funções
sempre retornam

exatamente um resultado. Portanto, você pode considerar de forma confiável uma chamada de
função,
um valordaliteral
mesma formafornecendo
quando como fariaparâmetros de entrada a uma função. funções de uma única linha
podem sernível
qualquer aninhadas
de profundidade.
para A forma geral de uma função é a seguinte:

função substituindo chama como parâmetros para outras funções podem conduzir a uma
Segue:
expressão, tais como o
funções aninhados são avaliados antes de os seus valores de retorno são utilizadas como entrada
outras
para
funções.
paramétrico
Eles são avaliados a partir do interior para níveis ultraperiféricas. A expressão
é avaliada como se segue:
precedente

1. F3 ( param3.1 ) é avaliada, e o seu valor de retorno fornece o terceiro parâmetro para


funcionar
e podemF2ser chamados param2.3 .
2. F2 ( param2.1, param2.2, param2.3 ) é avaliada, e o seu valor de retorno fornece o segundo
parâmetro para funcionar F1 e é param1.2 .
3. F1 ( param1.1, param1.2, param1.3 ) é avaliada, eo resultado é retornado para a convocação
programa.
F3 função está aninhado três níveis de profundidade neste exemplo.
Considere a seguinte consulta:

Há três funções na lista SELECT, que, do interior para o exterior níveis, são SYSDATE,
LAST_DAY e NEXT_DAY. A consulta é avaliada como se segue:

1. A função mais interna é avaliada em primeiro lugar. SYSDATE retorna a data atual. Assuma
issoa data de hoje é de 28-OCT-2009.
2. A segunda função mais interna é avaliada a seguir. LAST_DAY ('28 oct-2009' ) retorna a
data do último dia de outubro, que é 31-OCT-2009.

Finalmente, o NEXT_DAY função ('24 oct-2009' , 'ter') é avaliado, e a consulta retorna o


número da última terça-feira do mês, que neste exemplo é de 27-OCT-2009.

TIP É tentador mergulhar e construir um complexo expressão que compreende muitos função
chama, mas esta abordagem evolui com prática e experiência. Conceituar uma solução para uma
aninhada
consulta eem chamadas de função de componentes. A tabela DUAL é útil para testes ad hoc e
dividi-la
depuração de chamadas de função separadas. De teste e de depuração componentes mais pequenos e
de forma
estes iterativa
até que montarfinal é formado.
a expressão

Funções condicionais
Lógica condicional, também conhecido como if-then-else lógica, refere-se a escolha de um caminho
de execução
valores comde
de dados base em determinadas condições. Funções condicionais retornar valores
reuniões
diferentes
avaliar as condições
com base emde comparação. Funções dentro desta categoria simplificar o trabalho com
evalores
incluem
nulos
o NVL, NVL2, NULLIF , e COALESCE funções. Lógica condicional genérico é
implementado pela função decodificar e a expressão CASE. A função DECODIFICAR é específico
a Oracle, enquanto a expressão CASE é ANSI SQL compatível.

A função NVL
A função NVL avalia se uma coluna ou expressão de qualquer tipo de dados é nulo. Se o termo é
null, ele retorna um valor alternativo não-nulo; caso contrário, o termo original é devolvido.
A função NVL leva dois parâmetros obrigatórios; sua sintaxe é NVL (original, IFNULL) , onde
inicial representa o termo que está sendo testada e IFNULL é o resultado devolvido se os originais
avalia nulo.
como prazoOs tipos de dados dos originais e IFNULL parâmetros devem ser sempre compatíveis.
Ou elesser do mesmo tipo ou deve ser possível converter implicitamente IFNULL para o tipo de
devem
parâmetro. A função NVL retorna um valor com o mesmo tipo de dados como o originais
originais
Considere as seguintes três consultas:
parâmetro.
Como a função NVL leva dois parâmetros obrigatórios, consulta 1 retorna o erro ORA-00909:
número inválido de argumentos. Consulta 2 retorna 1234 depois da palavra-chave nulo é testada e
verificou-se
nulo. Consultaser3 envolve uma função SUBSTR aninhada que tenta extrair o quarto carácter de um
seqüência de três caracteres que retorna nulo, deixando a NVL função externa (null, 'Não existe
substring')o para
executar, que, em seguida, retorna a string 'Não existe substring'.

TIP A função NVL é valiosa para a conversão de valores numéricos nulos para zero de modo a que
em aritmética
eles não retorna nulo.

A Função NVL2
A função NVL2 proporciona um aperfeiçoamento para NVL mas serve um propósito semelhante.
eleuma
se avalia
coluna ou expressão de qualquer tipo de dados é nulo ou não. Se o primeiro termo não é
nulo, o segundo
parâmetro é devolvido, ou então o terceiro parâmetro é retornado. Recorde-se que a função é
diferente
uma NVL
vez que retorna o termo original se não for nulo.
A função NVL2 leva três parâmetros obrigatórios com a sintaxe NVL2 ( original, ifnotnull,
IFNULL ), onde inicial representa o termo que está sendo testada. ifnotnull é devolvido se originais
enão
IFNULL
é nulo,é devolvido se originais é nulo. Os tipos de dados dos ifnotnull e IFNULL parâmetros
devem ser e eles não podem ser do tipo LONG. Ou eles devem ser do mesmo tipo ou deve ser
compatível,

possível converter IFNULL com o tipo do ifnotnull parâmetro. O tipo de dados devolvidos pela
NVL2
função é a mesma que a do ifnotnull parâmetro. Considere as seguintes perguntas:

O ifnotnull prazo na consulta 1 é um número, ea IFNULL parâmetro é uma cadeia. Desde que há
tipouma
de dados incompatibilidade entre eles, um “ORA-01722: número inválido” erro é retornado.
consultao2IFNULL parâmetro, que é 5678. Consulta 3 extrai os caracteres bc usando o SUBSTR
retorna
função eo NVL2 função ( 'bc', 'Não bc', 'Não Substring') é avaliada e o ifnotnull
parâmetro, 'Não bc', é devolvido.

A função NULLIF
A função NULLIF testa dois termos de igualdade. Se forem iguais, a função retorna um valor nulo,
ou então
ele retorna o primeiro dos dois termos testados.
A função NULLIF leva dois parâmetros obrigatórios de qualquer tipo de dados. Sua sintaxe é
NULLIF ( ifunequal, comparison_term ), onde os parâmetros ifunequal e comparison_term são
comparação. Se eles são idênticos, será retornado nulo. Se eles diferem, o ifunequal parâmetro é
devolvida. Considere as seguintes perguntas:

Consulta 1 retorna um valor nulo uma vez que os parâmetros são idênticos. Os literais de
implicitamente
caracteres naconvertidos
consulta 2 em
nãoartigos
são da data e são comparados como duas cadeias de caracteres
pelo NULLIF
função. Como as cordas são de diferentes comprimentos, a ifunequal parâmetro 24-JUL-2009 é
retornado.
A Figura 8-4 mostra como NULLIF está aninhado como um parâmetro para a função NVL2. o
NULLIF
própria função tem as funções SUBSTR e caráter UPPER incorporados na expressão usada como
sua ifunequal parâmetro. A coluna e-mail é comparado com uma expressão, formado por
concatenando o primeiro caractere do FIRST_NAME ao equivalente em maiúsculas do
coluna LAST_NAME, para empregados com quatro caracteres primeiros nomes. Quando esses
termos sãoretorna
NULLIF iguais,um valor nulo, senão ele retorna a avaliação ifunequal parâmetro. Esta é usada
como um para NVL2. A função NVL2 fornece linhas de texto de classificação descritivos como
parâmetro
combinando
padrão ou não.
o
Figura 8-4 O NVL2 e NULLIF

A função COALESCE
A função COALESCE retorna o primeiro valor não-nulo da sua lista de parâmetros. Se todos os seus
são nulos, será retornado nulo.
parâmetros
A função COALESCE leva dois parâmetros obrigatórios e qualquer número de opcional
parâmetros. A sintaxe é COALESCE ( expr1, expr2 ,.,.,. Exprn ), onde expr1 é devolvido se não for
null, outra expr2 se não é nulo, e assim por diante. COALESCE é uma forma geral da função NVL,
comoequações
duas o seguintes ilustram:

O tipo de dados devolvidos pela coalesce, se um valor não-zero seja encontrado, é a mesma que
a do primeiro
parâmetro não-nulo. Para evitar um “ORA-00932: tipos de dados inconsistentes” de erro, todos os
parâmetros
deve ter tipos
nãodenulos
dados compatíveis com o primeiro parâmetro de não-nulo. Considere o seguinte
consultas:
três
Consulta 1 retorna o quarto parâmetro, que é uma cadeia uma vez que este é o primeiro
encontrado.
parâmetroConsulta
não-nula
2 retorna NULL porque todos os seus parâmetros são nulos. Consulta 3 avalia
seu primeiroque é uma função SUBSTR aninhada, e descobre que ela é nula. O segundo parâmetro
parâmetro,
não éentão a string 'Não bc' é devolvido.
null,

EXAME TIP Os parâmetros do NVL2 função geral pode ser confuso se você já está
familiarizado com NVL. NVL ( original, IFNULL ) retorna originais se não é nulo, ou então
IFNULL
O (NVL2é,retornado.
original, ifnotnull IFNULL ) devolve ifnotnull se originais não é nulo, ou então IFNULL
édevolvida. A confusão pode surgir porque o segundo parâmetro na função NVL é IFNULL ,
o segundo parâmetro na função NVL2 é ifnotnull . Esteja consciente do significado do parâmetro
enquanto
posições em funções.

A função DECODE
A função DECODE implementa if-then-else lógica condicional, testando seus dois primeiros termos
igualdade e retorna a terceira se eles forem iguais e opcionalmente retorna outro termo, se eles não
de
são.A função DECODE leva pelo menos três parâmetros obrigatórios, mas pode levar muitos mais. o
sintaxe da função é DECODIFICAR ( expr1, comp1, iftrue1 , [ comp2, iftrue2 ... [ compN, iftrueN ]],
[ Iffalse ]). Estes parâmetros são avaliados como mostrado no exemplo em pseudocódigo seguinte:

Aqui, expr1 é comparado com comp1 . Se eles são iguais, então iftrue1 é retornado. Se expr1 não
igualé a comp1 , então o que acontece a seguir depende se os parâmetros opcionais comp2 e
iftrue2 estão presentes. Se eles são, então expr1 é comparado com comp2 . Se eles são iguais, então
iftrue2 é Se não, o que acontece a seguir depende se ainda compn, iftrueN existem pares, ea
devolvida.
ciclo continua até que não há termos de comparação permanecem. Se nenhuma correspondência
foram encontrados
parâmetro é definido,
e seentão
o iffalse
iffalse é retornado. Se o iffalse parâmetro não existe e nenhum resultado
são encontrados, um nulo é retornado.

Todos os parâmetros para a função DECODE podem ser expressões. O tipo de dados de retorno
o doé primeiro
o mesmoitem
que de comparação correspondente. A expressão expr1 é implicitamente convertidos
para do
tipo os primeiro
dados parâmetro de comparação comp1 . Como os outros parâmetros de comparação
comp2.
são avaliados,
. . compn
eles também são implicitamente convertidos para o mesmo tipo de dados como comp1
. DECODE
dois nulos para
considera
ser equivalente, por isso, se expr1 é nulo e COMP3 é o parâmetro de comparação
primeiro nulo
encontrou, em seguida, o correspondente parâmetro resultado iftrue3 é retornado. Considere o
consultas:
seguinte

Consulta 1 compara o número 1234 com o primeiro termo de comparação 123. Uma vez que eles
o primeiro
não sãotermo
iguais,resultado não pode ser devolvido. Além disso, como não há nenhum padrão iffalse
éparâmetro
devolvido.
definido,
Consultaum2 nulo
é idêntico ao primeiro excepto que uma iffalse parâmetro é definido. Assim
desde 1234 não é igual a 123, a string 'No jogo' é devolvido. Consulta 3 pesquisas por meio do
sendo,
parâmetros de comparação para uma partida. O comp1 cordas e comp2 não são iguais para
pesquisar, de
Resultados true1
modoe true2
que onão são devolvidos. A correspondência é encontrada no termo terceira
(parâmetro
comparação 6), que'true3'
COMP3
contendo a string contém a seqüênciaNote-se
é devolvido. de pesquisa. Portanto,
que uma vez queo um
termo terceira
jogo resultado procurando
foi encontrado, iftrue3
(parâmetro
mais longe
acontece 7)
em. Assim, embora o quarto termo de comparação (parâmetro 8) também é um jogo de
Expr1 , este
expressão não é avaliado porque um fósforo foi encontrado em um termo de comparação mais cedo.

A expressão CASE
Praticamente todas as linguagens de programação de terceira e quarta geração implementar um caso
construto.
Função Como o a expressão CASE facilita if-then-else lógica condicional. Há dois
DECODE,
variantes da expressão CASE. A simples expressão CASE lista o item de pesquisa condicional uma
e igualdade para o item de pesquisa é testada por cada expressão de comparação. O procurou CASE
vez,
expressão enumera uma condição separada para cada expressão de comparação.
A expressão CASE leva pelo menos três parâmetros obrigatórios, mas pode demorar muito mais.
sintaxe
Estádepende de uma simples ou uma expressão CASE pesquisada é usado. A sintaxe para o
expressão CASE simples é a seguinte:

A expressão CASE simples é fechado dentro de um caso. . . bloco END e consiste em pelo
um menos
quando. . . ENTÃO comunicado. Na sua forma mais simples, com um quando. . . ENTÃO
comunicado,éacomparado com o comparison_expr1 . Se eles são iguais, então o resultado iftrue1 é
search_expr
devolvida. Se não, um valor nulo é retornado a menos que um componente ELSE é definido, no caso
do que iffalse valor é retornado. Quando mais de um quando. . . THEN instrução existe no caso
default

expressão, procurando uma expressão de comparação correspondência continua até que seja
encontrada uma correspondência.
Os parâmetros de busca, comparação, eo resultado pode ser valores de colunas, expressões ou
todos
literais,
devemmasser do mesmo tipo de dados. Considere a seguinte consulta:

A expressão de busca derivado do SUBSTR (1234, 1, 3) é a cadeia de caracteres 123. A primeira


QUANDO . . . THEN instrução compara a string 134 com 123. Uma vez que eles não são iguais, o
expressão não é avaliada. O segundo QUANDO. . . THEN instrução compara a seqüência de 1235
resultado
123, e novamente, eles não são iguais. O terceiro QUANDO. . . THEN instrução compara os
com
resultados
derivada da CONCAT ( '1', '23') de expressão, que é de 123, para a expressão de pesquisa. Desde que
são idênticos, o terceiro expressão resultados, '123 é um jogo', é devolvido.
eles
As colunas LAST_NAME e HIRE_DATE para funcionários com valores DEPARTMENT_ID de
100 são recuperados juntamente com duas expressões numéricas e uma expressão caso, como
mostrado na Figura
8-5.
Figura 8-5 A expressão PROCESSO simples

Suponha que SYSDATE é 27-JAN-2015. A expressão numérica alias como um ANOS retorna
valor truncado obtido dividindo-se os meses de serviço por 12. Cinco categorias de lealdade
classificação com base nos anos de serviço são definidos. Esta constitui a expressão de busca no
declaração. Nenhuma das linhas no conjunto de dados coincide com a expressão de comparação no
caso
primeiro
THEN QUANDO.
instrução, mas. como
. Figura 8-5 mostra, quatro fileiras conheceu o restante quando. . . then
e duas fileiras são capturados pela instrução ELSE.
A sintaxe para a expressão CASE pesquisada é a seguinte:
A expressão CASE procurou está dentro de um caso. . . bloco END e consiste de pelo
QUANDO menos um. . . ENTÃO comunicado. Na sua forma mais simples com um quando. . .
THEN instrução,
condição1 é avaliada; se é verdade, então o resultado iftrue1 é retornado. Se não, um valor nulo é
a menos que um componente ELSE é definido, caso em que o padrão iffalse valor é retornado.
devolvido
quando
do mais
que um quando. . . THEN existe na expressão CASE, em busca de uma correspondência
expressão de comparação continua até que seja encontrado. A consulta para recuperar o conjunto
idêntico
aos obtidos
de resultados
no Figura 8-5 , usando uma expressão PROCESSO procurou, é como se segue:

Exercício 8-3: Use o DECODE Função consultar a tabela de HR.LOCATIONS para linhas com o
US Value na coluna country_id. Uma expressão como alias LOCATION_INFO é necessária para
avaliar os valores da coluna e retorna STATE_PROVINCE informações diferentes de acordo com o
seguinte tabela. Ordenar a saída com base na expressão LOCATION_INFO.

1. Inicie o SQL Developer ou SQL * Plus e ligar para o esquema HR.


2. A expressão LOCATION_INFO pode ser calculado de várias maneiras diferentes. este
inclui o uso de uma expressão ou uma função PROCESSO DECODIFICAR. Esta solução
usa um caso
expressão:

Broca Two-Minute
Descrevem vários tipos de funções de conversão disponíveis em SQL
• conversão explícita ocorre quando uma função como TO_CHAR é invocado para alterar o
tipo
dede
umdados
valor. A função TO_CHAR realiza data-to-caráter e número de caracteres de dados
conversões de tipo.
• Os itens de caracteres são explicitamente transformado em valores de data usando a conversão
função.
TO_DATE
• Os itens de caracteres são transformados em valores numéricos usando a função de conversão
TO_NUMBER.
Use as funções de conversão TO_CHAR, to_number, e TO_DATE
• A função TO_CHAR retorna um item do tipo VARCHAR2.
• modelos de formato ou máscaras prescrever padrões que cadeias de caracteres devem
corresponder
conversão precisas
para facilitar
e consistentes em número ou data itens.
• termos de caracteres, como nomes de mês e dia, extraídos de datas com a função TO_CHAR
são automaticamente preenchidos com espaços que podem ser aparadas prefixando a máscara
de formato
o fm com
modificador.
• A função TO_DATE tem um fx modificador que especifica uma correspondência exata para o
personagem
string a ser convertido ea máscara de formato de data.

Aplicar expressões condicionais em uma instrução SELECT


• Funções aninhadas utilizar a saída a partir de uma função de como a entrada para a outra.
• A função NVL retorna ou o item original inalterada ou um item alternativo se o inicial
prazo é nulo.
• A função NVL2 retorna um novo se nulo item se o item original é nulo ou uma alternativa se-
não-nula item se o termo original não é nulo.
• A função NULLIF testa dois termos de igualdade. Se forem iguais, a função retorna nulo, ou
senão ele retorna o primeiro dos dois termos testadas.
• A função COALESCE retorna o primeiro valor não-nulo da sua lista de parâmetros. Se toda a
suaparâmetros são null, em seguida, um nulo é retornado.
• A função DECODE e CASE simples e pesquisado expressões CASE são usados para
facilitar if-then-else lógica condicional.

Auto teste
1 . Que declarações sobre funções de uma única linha são verdadeiras? (Escolha todos os que
se aplicam.)
A. Eles podem retornar mais de um valor.
B. Eles executam uma vez para cada linha processada.
C. Eles podem ter zero ou mais parâmetros de entrada.
D. Eles devem ter pelo menos um parâmetro obrigatório.
2 . O valor é retornado depois de executar a seguinte declaração?

(Escolha a melhor resposta.)


A. longa
B. _long
C. anel?
D. Nenhuma das anteriores
3 . O valor é retornado depois de executar a seguinte declaração?

(Escolha a melhor resposta.)


A. 4
B. 14
C. 12
D. Nenhuma das anteriores
4 . O valor é retornado depois de executar a seguinte declaração?
(Escolha a melhor resposta.)
A. 3
B. 42
C. 2
D. Nenhuma das anteriores
5 . O valor é retornado depois de executar a seguinte declaração? Tome nota que a 01-JAN-
2009ocorreu em uma quinta-feira.

(Escolha a melhor resposta.)


A. 07-JAN-2009
B. 31-JAN-2009

C. quarta-feira
D. Nenhuma das anteriores
6 . Assumindo SYSDATE = 30-DEC-2007, o valor é retornado depois de executar o seguinte
declaração?

(Escolha a melhor resposta.)


A. 31-DEC-2007
B. 01-JAN-2008
C. 01-JAN-2007
D. Nenhuma das anteriores
7 . Escolha quaisquer declarações incorrectas sobre funções de conversão. (Escolha todos os
queA.se TO_CHAR
aplicam.) pode converter itens de data para itens de caracteres.

B. TO_DATE pode converter itens de caracteres para artigos da data.


C. TO_CHAR pode converter números de itens de caracteres.
D. TO_DATE pode converter itens de data para itens de caracteres.
8 . Se SYSDATE retorna 12-JUL-2009, o que é retornado pela seguinte declaração?

(Escolha a melhor resposta.)


A. 12 de Julho
B. 12 de julho
C. DUODÉCIMA julho
D. Nenhuma das anteriores
9 . O valor é retornado depois de executar a seguinte declaração?

(Escolha a melhor resposta.)


A. SPANIEL
B. TERRIER
C. NULL
D. Nenhuma das anteriores
10 . Se SYSDATE retorna 12-JUL-2009, o que é retornado pela seguinte declaração?

(Escolha a melhor resposta.)


A. imposto devido
B. PARTE

C. 02
D. Nenhuma das anteriores

Respostas de auto-teste
1. B e C . Funções de uma única linha executado uma vez para cada registro selecionado
podeemdemorar
um conjunto
tanto sem
de dados
parâmetros
e de entrada, como SYSDATE, ou muitos parâmetros de
entrada.
A e D são incorrectas. A está incorreta porque uma função, por definição, retorna
apenas
resultar, e Dum
é incorrecta porque há muitas funções sem parâmetros.
2. Um . A função SUBSTR extrai uma substring de quatro caracteres a partir da dada
string decom
começando entrada
e incluindo o quinto personagem. Os caracteres em posições de 1 a 4 são
Começando com o caractere na posição 5, os próximos quatro caracteres formam a palavra
How_.
longaB ., C , e D estão incorrectos. B é uma substring de cinco caracteres começando na
anel posição
?, o que4,também
enquantoé de cinco caracteres, começa cinco caracteres a partir do final da dada
corda.
3. B . A função INSTR retorna a posição de que o n º ocorrência da cadeia de pesquisa
pode ser encontrada depois de iniciar a busca de uma determinada posição inicial. A
seqüênciasublinhado,
caractere de pesquisaeéoaterceiro ocorrência desta natureza a partir da posição 5 na
cadeia de origem ocorre na posição 14.
A , C , e D estão incorrectos. Eles são incorrecta, dado que a posição 4 é a primeira
a cadeia
ocorrência
de pesquisa
de e posição 12 é a terceira ocorrência se a pesquisa começou na posição
4. 1. C . Quando 14 é dividida por 3, a resposta é de 4 com 2 restante.
A , B , e D são incorrecta porque a função MOD devolve o resto de uma divisão.
5. Um . Desde primeiro de janeiro de 2009 cai numa quinta-feira, a data da seguinte
Quarta-feira é seis dias depois.
B , C , e D estão incorrectos. B retorna o último dia do mês em que a data dada
cai, e C retorna uma cadeia de caracteres em vez de uma data.
6. C . A função de data TRUNC não executa arredondamento, e uma vez que o grau de
truncamento é ANO, os componentes dia e mês de determinada data são ignorados e o
dia do ano a que pertence é retornado.
primeiro
A , B , e D são incorrectas. A retorna o último dia do mês em que a data dada
ocorre, e B retorna um resultado obtido por arredondamento em vez de truncagem.
7. D . As datas são convertidos em cadeias de caracteres usando TO_CHAR apenas, não o
função.
TO_DATE
A , B , e C são incorrectas. A , B , e C são demonstrações correctas.
8. Um . O componente DD retorna o dia do mês em maiúsculas. Uma vez que é um
Não número,
importa, a menos que o th máscara é aplicada, caso em que esse componente é
especificadoMÊS
maiúsculas. em retorna o mês em letras em maiúsculas.
B , C , e D estão incorrectos. B seria devolvido se a máscara de formato foi 'Mês
fmddth',
e C seria devolvido se a máscara de formato foi 'fmDDspth MÊS'.

9. Um . A função NULLIF compara seus dois parâmetros, e uma vez que eles são
primeiro
diferentes,
parâmetro
o é retornado. O NVL2 ( 'CODA', 'SPANIEL', 'TERRIER') chamada de
função
retorna spaniel, desde o seu primeiro parâmetro não é nulo.
B , C , e D estão incorrectos. B seria correto se a função NULLIF retornou um NULL,
que só iria acontecer se os seus dois parâmetros eram idênticas, e eles não são. C seria
correto se o segundo parâmetro para NVL2 foi NULL, mas não é.
10. B . A função TO_CHAR mais interna (SYSDATE, 'MM') resulta na cadeia de caracteres
07 que estão sendo devolvidos. A função exterior é DECODIFICAR ('07' , '02', 'imposto
devido',
07 não é'partido').
igual a 02,Desde
o partido
a outra componente é devolvido.
A , C , e Dera
de SYSDATE estão
02. incorrectos. A seria
C e D não são opçõesdevolvido somente
para a saída se o componente
na função mês extraído
DECODIFICAR
lista de parâmetros.
CAPÍTULO 9

Funções de Grupo

Objetivos do exame
Neste capítulo, você vai aprender a

• 061.5.1 identificar as funções de Grupo disponíveis


• 061.5.2 descrever o uso de Funções de Grupo
Dados • Grupo 061.5.3 usando a cláusula GROUP BY
• 061.5.4 incluir ou excluir linhas agrupadas usando a cláusula HAVING
Funções de uma única linha, explorados no Capítulo 8 , devolva um valor único para cada linha em
um conjunto
Grupo ou agregados
de resultados.
funções operam em várias linhas. Eles são usados para contar o número de
ou para encontrar a média dos valores de coluna específicos em um conjunto de dados. Muitas
linhas
operações
cálculo de estatísticas,
desvio padrão,taismediana,
como e as médias, depender de execução de funções contra agrupados
dados e não apenas linhas simples.

Você vai examinar funções de grupo em duas etapas. Uma discussão sobre a sua finalidade e
precede
sintaxe
uma análise detalhada do AVG, SUM, MIN, MAX, COUNT, LISTAGG, STDDEV, e
funções variância. O agrupamento ou recolha de dados, com base em um ou mais valores da coluna
éexaminados antes da cláusula GROUP BY é introduzido. A cláusula WHERE restringe linhas em
um conjunto
antes de agrupamento,
de dados enquanto a cláusula HAVING restringe-los após o agrupamento. Este capítulo
termina
uma discussão
com sobre a cláusula HAVING.

Descrever as funções de agrupamento


Esta seção define SQL funções de grupo e discute as diferentes variantes. A sintaxe e
exemplos demonstram as funções grupo seleccionado são fornecidos juntamente com uma discussão
da suade dados e o efeito da palavra-chave DISTINCT e valores nulos.
tipos

Definição de Funções de Grupo


Funções de grupo operam em dados agregados e retornar um único resultado por grupo. estes grupos
consistem geralmente em uma ou mais linhas de dados. funções de uma única linha são definidos
com
z,. . .)a =fórmula
Resultado,
M (x,em
y, que x, y, z. . . são parâmetros de entrada. A função F é executado em uma
linha da de dados de cada vez e retorna um resultado para cada linha. As funções de grupo pode ser
conjunto
definida utilizando a seguinte
Fórmula:
F(g1, g2, g3, . . . , gn) = result1, result2, result2, . . . , resultn;
A função de grupo é executado uma vez para cada grupo de linhas e retorna um único resultado
As linhas
por grupo.
dentro destes grupos estão associados usando um valor comum ou atributo. Se uma tabela
é apresentada
como um grupo com a função de grupo na sua totalidade, em seguida, um resultado é retornado. Um
ou mais podem
funções grupo aparecer na lista SELECT da seguinte forma:

Considere tabela Funcionários. Existem 107 registros nesta tabela. Grupos podem ser criados
sobre
com
os base
valores comuns que partilham linhas. Por exemplo, as linhas que compartilham o mesmo
Valor DEPARTMENT_ID podem ser agrupados. Depois disso, as funções de grupo são executados
separadamente contra cada grupo original.
A Figura 9-1 mostra 12 valores distintos DEPARTMENT_ID na tabela empregados, incluindo
umnulo. As linhas são distribuídos em grupos de 12 com base em valores DEPARTMENT_ID
valor
A função COUNT executa 12 vezes, uma para cada grupo. Observe que os grupos distintos não
comuns.
contêm o mesmo número de linhas.
Figura 9-1 funções do Grupo que operam em 12 grupos

NOTA funções Grupo agregar uma série de valores de várias linhas em um único resultado. Eles
são amplamente utilizados para fins de relatórios, fornecendo somas totais, médias e contagem. Eles
também sãocomo síntese ou funções de agregação.
conhecido

Usando Funções de Grupo


AVG, SUM, MIN, MAX, COUNT, STDDEV, e a variância de demonstrar a aplicação prática
de funções de grupo . Estas funções agrupar todos retornam resultados numéricos. Além disso, o
MIN e MAX
funções podem retornar caracteres e data resultados. Estas funções operam em valores não nulos,
masoutros,
os ao contrário
a chamada de função COUNT conta também linhas com valores nulos, sob certas
condições.

A Função COUNT
A função COUNT conta o número de linhas em um grupo. Sua sintaxe é a seguinte:

Esta sintaxe pode ser desconstruída-se nas seguintes formas:

• COUNT (*)
• COUNT (DISTINCT expr )
• COUNT (ALL expr )
• COUNT ( expr )

Quando COUNT (*) é invocado, todas as linhas do grupo, incluindo aqueles com valores nulos
são ou
contadas.
valoresQuando
duplicados,
COUNT (DISTINCT expr ) é executado, apenas as ocorrências únicas de expr
contadas para cada grupo. A palavra-chave ALL é parte da sintaxe padrão, portanto COUNT (ALL
são
expr ) e ( expr ) são equivalentes. Se expr é baseada em colunas nomeadas, então nulos são
COUNT
ignorados,em
baseia-se mas se exproutra coisa, ela será avaliada para cada linha, se há valores nulos na linha
qualquer
ou não. O tipo de dados de expr pode ser o número, DATA, CHAR, ou VARCHAR2. considere estes
consultas:

Consulta uma conta as linhas da tabela de empregados e retorna o inteiro 107. consulta 2
contagens
linhas os não nulos COMMISSION_PCT e retorno 36. É também conta a expressão literal
com valores
que não se baseia em uma coluna chamada e, portanto, é avaliada para cada linha, retornando 107.
1,
3 considera as linhas 107 não nulos, determina o número de valores SALARIAIS únicas, e retorna
Consulta
Consulta 4 demonstra como a função COUNT é usado em ambos uma coluna de data e um
58.
NÚMERO
coluna. Os inteiros 107 e 106 são devolvidos, uma vez que existem 107 valores hire_date não nulos
e106 valores manager_id não nulos no grupo.

EXAME TIP a contagem de um literal, como COUNT (1), é reescrito internamente para COUNT
(*) e todas as linhas, independentemente da presença de valores nulos.
conta

A função SUM
A função soma retorna o total agregado dos valores numéricos não nulos em um grupo. Ele tem este
sintaxe:

Esta sintaxe pode ser desconstruída-se nas seguintes formas:

• SUM (DISTINCT expr )


• SUM (ALL expr )
• SUM ( expr )

SUM (DISTINTA expr ) fornece um total adicionando todos os valores originais devolvido
avaliada
depois
para
expr
cada
é linha no grupo. SUM ( expr ) e SOMA (ALL expr ) proporcionam um total pela
adição de expr
para cada linha no grupo. Os valores nulos são ignorados. O expr parâmetro deve ser um valor
Considere as seguintes perguntas:
numérico.

Existem 107 linhas na tabela EMPREGADOS. Consulta 1 adiciona o número 2 em 107 linhas e
retorna 214. Consulta 2 converte o valor da coluna de salário para cada linha no grupo, o qual neste
caso
é toda a tabela, e retorna a quantidade total de salário de 721166. Consulta 3 retorna um total de
uma vez que muitos funcionários é pago o mesmo salário, e a palavra-chave DISTINCT só
417,158,
acrescenta
na coluna com
valores
o total.
exclusivos
Consulta 4 retorna 7,9 após a adição dos valores COMMISSION_PCT não
nulos.
A função AVG
A média valor de uma coluna ou de expressão é obtido dividindo a soma pelo número de não-
linhas nulos no grupo. A função AVG tem a seguinte sintaxe:

Esta sintaxe pode ser desconstruída-se nas seguintes formas:

• AVG (DISTINCT expr )


• AVG (ALL expr )
• AVG ( expr )
Quando o AVG (DISTINTA expr ) é invocado, os valores distintos de expr são somados e
o número
divididos
de ocorrências
por únicas de expr . AVG (ALL expr ) e AVG ( expr ) adicionar os valores não
de expr para cada linha e dividir a soma pelo número de linhas não nulos no grupo. o expr
nulos
parâmetro deve ser um valor numérico. Considere estas perguntas:

Existem 107 linhas na tabela EMPREGADOS. Consulta 1 adiciona o número 2 em 107 linhas e

divide o total pelo número de linhas para retornar o número 2. literais numéricos apresentados ao
função são devolvidos inalterada. Consulta 2 adiciona o valor do salário para cada linha para obter o
AVG
total de
quantidade salário de 721.166, o qual é dividido por as linhas com valores não nulos SALARIAIS
a(107)
médiapara
6.739,86916.
retornar Existem 58 valores salariais únicas, que, quando adicionado, o rendimento de
um total de417158. 417158 por 58 retorna 7192,37931 como a média dos valores salariais distintas,
Dividindo
que é devolvido pela terceira consulta. Adicionando os valores não nulos COMMISSION_PCT
produz
total de um
7,9. Dividindo este por os registos de empregados com valores COMMISSION_PCT não
nulos (36)
produz 0,219444444, que é devolvido por consulta 4.

As Funções stdDev e variância


O desvio padrão é uma medida do espalhamento ou a distribuição dos valores de uma coluna ou
expressão. Ele é obtido calculando a raiz quadrada da variância. A variância refere-se a
soma das diferenças ao quadrado entre o valor real e o valor médio dividido por N-1 ou N
dependendo se variância está sendo estabelecido para uma amostra ou toda a população. o
função de variância estabelece variância para uma amostra e, portanto, divide a soma de quadrado
as diferenças entre os valores reais e médios por N-1. Para mais informações, procure o
funções VAR_POP e VAR_SAMP, que estão além do escopo deste exame.
A variação é calculada calculando primeiro a média dos valores no conjunto. Então, para cada
número, subtraia o valor médio e quadratura do resultado. Esta é a diferença de quadrados. a
é, em seguida, a soma de todas as diferenças quadrado dividido por N-1. O STDDEV e variância
variância
funções têm duas formas, uma forma agregada e uma forma analítica que está fora do âmbito do
exame. A forma agregada tem esta sintaxe:

Considere as consultas em Figura 9-2 .


Figura 9-2 As funções de variância e STDDEV

Existem três funcionários que pertencem ao departamento de 90 com valores salariais de 24000,
17000.
17000,
O salário
e médio é 19333,3333 como retornado por consulta 2, que mostra a variância e
desvio padrão. Para o estatisticamente inclinados, consulta 3 e 4 maneiras show de alternativas para
variância e o desvio padrão. Estes são nonexaminable e para exemplificar o
calcular
descrições destas funções. Consulta 3 usa o poder da função, o que levanta (salário - média
salário) para alimentar 2, dando-lhe as diferenças ao quadrado, que são somados usando a função
soma e por dois (N-1). Ele usa também a função sqrt para calcular o desvio padrão. Lembrar, n é 3
dividida
porque há três valores salariais no conjunto de amostra. O salário médio, 19333.3333, é hard-
codificado em consulta 3, enquanto consulta 4 usa uma subconsulta aninhada (detalhes no Capítulo
11valor
o ) paramédio
buscardodinamicamente
salário.

As funções MAX e MIN


As funções MAX e MIN devolver o máximo (maior) e mínimo (menor) expr valor em um
grupo. As funções MAX e MIN operar em número, a data, CHAR, e dados VARCHAR2
tipos. Eles retornam um valor do mesmo tipo de dados como seus argumentos de entrada, que são ou
a maior
ou menores itens no grupo. Quando aplicado a artigos da data, MAX retorna a data mais recente, e
retorna o mais antigo um. cadeias de caracteres são convertidos em representações numéricas de seu
MIN
constituinte
caracteres com base nas configurações NLS no banco de dados. Quando a função MIN é aplicada a
um grupo
cadeias dedecaracteres, a palavra que aparece em primeiro lugar em ordem alfabética é devolvido,
enquanto
que aparece
MAX passado.
retorna
Asafunções
palavra MAX e MIN tem a seguinte sintaxe:

Esta sintaxe pode ser desconstruída-se nas seguintes formas:

• MAX (DISTINCT expr ); MIN (DISTINTA expr )


• MAX (ALL expr ); MIN (ALL expr )
• MAX ( expr ); MIN ( expr );

MAX ( expr ), MAX (ALL expr ) e MAX (DISTINCT expr ) examinar os valores para expr em
grupo
uma de linhas e devolver o maior valor. Os valores nulos são ignorados. MIN ( expr ), MIN (ALL
expr ),(DISTINCT
MIN e expr ) examinar os valores para expr em um grupo de linhas e retornar o menor
valor.
Considere estas perguntas:
Consulta 1 retorna 0,1 e 0,4 para os valores mínimos e máximo COMMISSION_PCT na
tabela EMPREGADOS. Observe que os valores nulos para COMMISSION_PCT são ignorados.
Consulta
uma coluna
2 avalia
de data e indica que a primeira START_DATE na tabela JOB_HISTORY é 17-
SEP-1995 e o mais recente END_DATE é 07-JAN-2015. Consulta 3 retornos e AC_ACCOUNT
ST_MAN como os valores JOB_ID aparecendo primeiro e último em ordem alfabética na tabela
Funcionários.
The LISTAGG Function
A função LISTAGG retorna uma cadeia de agregação de valores da coluna. Se uma cláusula
ORDER BY é os valores são classificados e concatenados. Esta função opera como uma função de
Presentemente,
agregação
que single-set
opera em todas as linhas e retorna uma linha de saída único ou como uma função de agregação
set-grupouma
devolve quelinha de saída para cada grupo na cláusula GROUP BY (discutido na próxima secção).
LISTAGG function has this syntax:
o

O expr parâmetro pode ser qualquer expressão válida. Os valores nulos são ignorados. Os
delimitadores
a cadeia especifica
opcional para separar a expr . A ORDEM BY determina a ordem na qual o
valores concatenados são devolvidos. Considere as consultas em Figura 9-3 .
Figure 9-3 The LISTAGG function

Consulta 1 retorna o formato de saída familiarizado países ordenados por REGION_ID e reverso
listando
alfabeticamente pelo COUNTRY_NAME. Consulta 2 demonstra a forma de um único agregado de
definir oLISTAGG, e uma única linha que encadeia os valores COUNTRY_NAME em uma vírgula
função
lista delimitada é retornado. Consulta 3 mostra a forma agregada set-grupo, e um vírgula-delimitado
lista concatenada de valores COUNTRY_NAME são devolvidos para cada agrupamento por
REGION_ID
com junto do número de itens por grupo.
uma contagem

EXAME TIP Há duas regras fundamentais para se lembrar quando se estuda as funções de grupo.
eles sempre operam em um único grupo de linhas de cada vez. O grupo pode ser um dos muitos
Primeiro,
grupos um
conjunto de dados foi dividido em, ou pode ser uma tabela inteira. A função de grupo executa uma
vez porEm segundo lugar, as linhas com valores nulos que ocorrem em colunas de grupo ou
grupo.
expressões
funções, excepto
são ignorados
o COUNT por(*)
todo
e COUNT
o grupo ( literais formas) da função de contagem.

Exercício 9-1: Use as funções do Grupo A tabela PAÍSES armazena uma lista de
valores COUNTRY_NAME. Você é obrigado a calcular o comprimento médio de todos os nomes de
países.
Quaisquer componentes fracionários deve ser arredondado para o número inteiro mais próximo.

1. Inicie o SQL * Plus ou SQL Developer e conectar-se ao esquema HR.


2. O comprimento do valor do nome do país para cada linha deve ser calculado usando o
comprimento
função. O comprimento médio pode ser determinado usando a função AVG. Ele pode ser
arredondado
o número inteiro
paramais próximo utilizando a função ROUND. O que se segue é uma solução
possível:

3. A execução dessa declaração mostra que a duração média de todos os nomes dos países nas
mesa de países é oito caracteres.

Dados do Grupo Usando a Cláusula GROUP BY


As funções de grupo discutidos anteriormente usar grupos de linhas que compõem a tabela inteira.
esta seção
explora particionamento de um conjunto de dados em grupos que utilizam o GROUP BY cláusula.
Funções adeesses
aplicada gruposubconjuntos
pode ser ou grupos de linhas.

Criação de grupos de dados


A tabela tem pelo menos uma coluna e zero ou mais linhas de dados. Em muitas tabelas, os dados
requer
para uma análise em informação útil. É uma exigência de relatório comum para calcular
transformá-lo
a partir de um conjunto de dados dividido em grupos com diferentes atributos. exemplos anteriores
estatísticas
usando grupo
funções operado contra todas as linhas em uma tabela. A tabela inteira foi tratado como um grupo
Grupos de dados dentro de um conjunto são criadas associando linhas com atributos comuns entre si.
grande.
Depois disso, as funções de grupo pode executar contra cada um destes grupos. Grupos de dados
incluem
linhas e colunas
todo não específicas.
Considere tabela Funcionários. É composta por 11 colunas e 107 linhas. Você poderia criar
grupos de linhas que compartilham um valor DEPARTMENT_ID comum. A função de soma pode
entãocriar
para ser utilizada
totais de salários por departamento. Outra possível conjunto de grupos podem
compartilhar
valores da coluna.
JOB_IDA função
comum de grupo AVG pode então ser usado para identificar o salário médio
pago aos
empregados em trabalhos diferentes.
Um grupo é definido como um subconjunto de todo o conjunto de dados a partilhar uma ou mais
atributos
atributos são comuns. Estes
tipicamente valores da coluna, mas também podem ser expressões. O número de
grupos criado
depende dos valores distintos presentes no atributo comum.
Como a Figura 9-4 mostra, existem 12 valores DEPARTMENT_ID únicos na tabela de
Se as
PESSOAL.
linhas são agrupados usando valores DEPARTMENT_ID comuns, haverá 12 grupos. Se um
grupo
função é executado contra estes grupos, haverá 12 valores devolvidos porque ele executará
uma vez para cada grupo.

Figura 9-4 valores originais DEPARTMENT_ID na tabela TRABALHADORES

NOTA Agrupando dados e utilizando funções de resumo são amplamente utilizados para fins de
relatório.
valiosa para
Istoa éprática da segmentação de um conjunto de dados em diferentes grupos. A Oracle
fornece o analítica para desconstruir conjuntos de dados em grupos, divida-as em mais subgrupos, e
linguagem
assim por
funções dediante.
grupo agregado pode então ser executado contra esses grupos e subgrupos.

A cláusula GROUP BY
A instrução SELECT é reforçada pela adição da cláusula GROUP BY. Esta cláusula facilita
a criação de grupos. Aparece depois a cláusula WHERE, mas antes da cláusula ORDER BY, como
seguinte maneira:
A coluna ou expressão especificado na cláusula GROUP BY também é conhecido como o
atributo
agrupamento
e é o componente que as linhas são agrupadas por. O conjunto de dados são segmentados de
acordo com oatributo. Considere a seguinte consulta:
agrupamento

O atributo de agrupamento no presente exemplo é a coluna DEPARTMENT_ID. O conjunto de


as funções
dados, em
de grupo
que na lista SELECT deve operar, é dividido em 12 grupos, um para cada
departamento. Para cada grupo (departamento), o valor máximo salário e o número de linhas são
devolvida. Uma vez que os resultados são classificados por DEPARTMENT_ID, a terceira linha no
conjuntoosdevalores
contém resultados
de 11000 e 6. Isso indica que 6 funcionários têm o mesmo DEPARTMENT_ID
valor (que você já sabe é 30). Destes 6, o maior ganhador tem um valor de salário de
11000. Esta consulta demonstra que o atributo de agrupamento não tem de ser incluído na
lista SELECT.
É comum ver o atributo de agrupamento na lista SELECT junto com funções de grupo. Se um
item que não é uma função de grupo aparece na lista SELECT e não há nenhuma cláusula GROUP
BY, uma
“ORA-00937: não um grupo único grupo de funções” erro é gerado. Se um grupo BY está presente
mas esse item não é um atributo de agrupamento, em seguida, um “ORA-00979: não um GROUP
BY expressão” erro é
devolvida.

EXAME TIP Qualquer item na lista SELECT que não é uma função de grupo deve ser um atributo
adecláusula
agrupamento
GROUP
de BY.

Se uma função de grupo é colocado numa cláusula ONDE, um “ORA-00934: função de grupo
não é permitido
aqui”erro é retornado. Que impõe condições de nível de grupo é conseguida utilizando a cláusula
HAVING
discutido mais adiante neste capítulo. As funções de grupo pode, no entanto, ser utilizado como
parte do pedido pela
cláusula.
A primeira consulta na Figura 9-5 gera um erro porque a coluna END_DATE é no SELECT
lista com uma função de grupo e não há nenhuma cláusula GROUP BY. Um erro ORA-00979 é
aretornado
segunda de
consulta, uma vez que o item START_DATE está listada na cláusula SELECT, mas não é
agrupamento atributo.
um
Figura 9-5 A GROUP BY

A terceira consulta divide as linhas JOB_HISTORY em grupos com base no ano de quatro
componente
dígitos da coluna END_DATE. Quatro grupos são criados usando este atributo agrupamento.
representam diferentes anos quando os funcionários terminou seus trabalhos. A contagem mostra o
Estes
número de que abandonaram seus empregos durante cada um desses anos. Os resultados estão
empregados
listados
com baseemnoordem decrescente
“número de empregados” expressão. Note-se que a função de grupo COUNT está
apresente
cláusulaem
ORDER BY.

EXAME TIP Um conjunto de dados é dividido em grupos usando a cláusula GROUP BY. O
aatributo
chave comum
de agrupamento
compartilhada
é por membros de cada grupo. O atributo de agrupamento é usualmente
uma podem
mas única coluna,
ser colunas múltiplas ou uma expressão que não pode ser baseado em funções de grupo.
Note que de
atributos apenas
agrupamento e funções de grupo são permitidas na cláusula SELECT ao usar GROUP
BY.
O agrupamento por várias colunas
Uma poderosa extensão da cláusula GROUP BY usa vários atributos de agrupamento. licenças da
conjuntos de dados para ser dividida em grupos e permite que estes grupos ser ainda dividido em
oracle
subgrupos
utilizando um atributo agrupamento diferente. Considere as duas consultas a seguir:

Consulta 1 restringe as linhas retornados a partir da tabela que os empregados das 35 linhas com
valores
não-nulo
COMMISSION_PCT. Estas linhas são então divididos em dois grupos: 80 e NULL com
base
O agrupamento
em atributo DEPARTMENT_ID. O conjunto de resultados contém duas linhas, que
retornam
os valoresaCOMMISSION_PCT
soma de para cada grupo.
Consulta 2 é semelhante ao primeiro, exceto que tem um item adicional: JOB_ID tanto o
e GROUP
SELECT BY cláusulas. Este atributo segundo agrupamento decompõe-se os dois grupos por
DEPARTMENT_ID para os componentes JOB_ID constituintes pertencentes às linhas em cada
Os valores JOB_ID distintos para as linhas com DEPARTMENT_ID = 80 são AC_ACCOUNT,
grupo.
e SA_MAN. O valor JOB_ID distinta para linhas com um DEPARTMENT_ID nula é SA_REP.
SA_REP,
Portanto, consulta 2 retorna dois grupos: um que consiste em três subgrupos, e a outra com apenas
um, como mostrado na Figura 9-6 .
Figura 9-6 A GROUP BY com várias colunas

Exercício 9-2: Grupo de dados baseada em colunas múltipla Análise de rotatividade de pessoal é
um comum Você é obrigado a criar um relatório que contém o número de funcionários que
declaradas.
deixaram seus empregos, agrupadas por ano em que eles deixaram. Os trabalhos que realizaram
também
os resultados
é necessária.
devem ser o classificados em ordem decrescente com base no número de empregados em
cada grupo.
relatório deveo listar o ano, o JOB_ID, eo número de funcionários que deixaram um trabalho
específico em que
ano.

1. Inicie o SQL Developer e conectar-se ao esquema HR.


2. A tabela contém os JOB_HISTORY colunas END_DATE e JOB_ID, que constituem
os dados de origem para este relatório.
3. O componente ano pode ser extraído usando a função TO_CHAR. O número de
empregados que param um trabalho específico em cada ano pode ser obtida usando o
COUNT (*)
função.
4. Executar a seguinte instrução retorna o relatório rotatividade de pessoal, conforme
solicitado:

Funções grupo aninhado


Recorde-se que as funções de uma única linha podem ser encaixados ou incorporado para qualquer
nível de profundidade. funções de grupo
podem ser aninhados apenas dois níveis de profundidade. Três formatos usando funções de grupo
são G1
mostrados aqui: ) = resultado
( group_item
G1 (G2 ( group_item ) = resultado
G1 (G2 (G3 ( group_item ))) não é permitido.
Funções de grupo são representados pela letra G seguida de um número. A primeira forma
não simples
contém funções aninhadas. Exemplos incluem o somatório ( group_item ) e AVG ( group_item )
funções que retornam um único resultado por grupo. A segunda forma suporta duas funções grupo
como SUM
aninhadas,
valor do (AVG ( group_item
group_item por grupo é)). Neste caso,
calculado antesuma cláusula
de ser GROUP
agregadas pelaBY é necessário
função porque a
somatório.
média
A terceira forma é anulado pela Oracle. Considere-se uma expressão que aninha três funções de
Se agrupo.
função MAX é aplicada ao exemplo anterior, a expressão
MAX (SUM (AVG ( group_item ))) é formada. As duas funções grupo interno retornar um único
representando a soma de um conjunto de valores médios. Esta expressão torna-se MAX ( valor
valor
único
não é razoável,
), que visto que uma função de grupo não pode ser aplicado a um único valor.

EXAME TIP funções de linha única podem ser encaixados a qualquer nível, mas as funções de
grupo
no máximo,
podemdois
ser níveis
encaixados
de profundidade.
para, A contagem chamada de função aninhada (SUM (AVG
(X))) retorna
00935:. Grupoo função
erro “ORA
é demasiado aninhados”É aceitável para funções ninho de fila única dentro
funções. Considere a seguinte consulta: SELECT SUM (AVG (LENGTH (LAST_NAME))) FROM
grupo
FUNCIONÁRIOS GROUP BY DEPARTMENT_ID. Ele calcula a soma do comprimento médio de
valores LAST_NAME por departamento.

Incluir ou excluir linhas agrupadas Usando o TENDO


Cláusula
Criação de grupos de dados e aplicando funções agregadas são úteis. Um refinamento destas
acaracterísticas
capacidade deé incluir ou excluir os resultados com base em condições de nível de grupo. Esta
seção apresenta
TENDO cláusula.
a Uma clara distinção entre a cláusula WHERE e a cláusula HAVING.

Restringindo Resultados do Grupo


ONDE condições cláusula restringir linhas retornadas por uma consulta. As linhas são incluídos se
cumprir a listadas e são conhecidos como os resultados em nível de linha . Linhas de agrupamento
condições
usando
BY o GROUP
e aplicar uma função de agregação para estes grupos retorna resultados muitas vezes referida
resultados ao nível do grupo . A cláusula HAVING restringe os resultados ao nível do grupo.
como
A consulta a seguir limita as linhas recuperadas da tabela JOB_HISTORY especificando um
ONDE condição com base nos valores da coluna DEPARTMENT_ID.

Essa consulta retorna sete linhas. Se a cláusula WHERE estavam ausentes, todos os dez linhas
recuperado.
seria Suponha que você quer saber quantos funcionários já foram empregadas em cada um
dos
estes departamentos. Há sete linhas que podem ser agrupadas e contadas manualmente. No entanto,
há um grande número de linhas, podem ser utilizadas uma função agregada como COUNT, como
se
mostradoconsulta:
seguinte na

Esta consulta contribui para a afirmação anterior. A contagem de função agregada foi adicionado
à
Também foi adicionado lista SELECT, e uma cláusula GROUP BY DEPARTMENT_ID. Quatro
linhas comdesua
contagem linha agregada são devolvidos, e é claro que as sete linhas originais restringido pela
WHERE foram agrupadas em quatro grupos com base em valores DEPARTMENT_ID comuns,
mostrado na tabela seguinte:
como
Suponha que você queira restringir essa lista para apenas os departamentos com mais de um
empregado.
O TENDO limites cláusula ou restringe as linhas de nível de grupo, conforme necessário.
Esta consulta deve realizar os seguintes passos:

1. Considerar todo o conjunto de dados em nível de linha.


2. Limitar o conjunto de dados por qualquer onde as condições cláusula.
3. Segmento os dados em um ou mais grupos que utilizam os atributos de agrupamento
especificado
GROUP BY no cláusula.
4. Aplicar quaisquer funções agregadas para criar um novo conjunto de dados em nível de
grupo.
considerado
Cada linha
comopode
uma
seragregação de seus dados no nível de linha de origem com base nos
grupos criados.
5. limitar ou restringir os dados de nível de grupo com uma condição cláusula HAVING.
Apenas
resultados
em nível
correspondentes
de grupo essas condições são devolvidos.

NOTA Escolhendo o contexto apropriado para usar um WHERE ou uma cláusula HAVING depende
se as linhas reais ou linhas de nível de grupo devem ser limitadas. Quando linhas reais (físicos) são
restrito, uma ou mais condições são impostas usando uma cláusula WHERE. Quando estas linhas
são conjunto,
em agrupadosuma ou mais funções de agregação pode ser aplicada, obtendo-se uma ou mais linhas
ao nível
pode ser do
restringida
grupo queutilizando uma cláusula HAVING.

A cláusula HAVING
A forma geral da instrução SELECT é reforçada pela adição da cláusula HAVING
e torna-se o seguinte:

Uma diferença importante entre a cláusula HAVING e as demais cláusulas instrução SELECT é
que ele apenas pode ser indicada se uma cláusula GROUP BY está presente. Esta dependência é
razoável, visto que
linhas de nível de grupo deve existir antes que eles possam ser restrito. A cláusula HAVING pode
ocorrer antes
Cláusula GROUPdo BY na instrução SELECT. No entanto, é mais comum para colocar o TENDO
cláusula após cláusula GROUP BY. Todos agrupamento é realizada e funções de grupo são
executados
para avaliarantes
a cláusula HAVING.
A consulta a seguir mostra como a cláusula HAVING é usado para restringir um conjunto de
Registros
dados da
agregado.
tabela JOB_HISTORY são divididos em quatro grupos. As linhas que atendem a
TENDO condição cláusula (contribuindo com mais de uma linha para a contagem de linha de grupo)
são retornados:
Três
2, e 3,linhas com valoresrespectivamente.
são devolvidos, DEPARTMENT_ID de 50, 80, e 110, cada um com um valor de COUNT (*)
de 2,A Figura 9-7 mostra três procedimentos. Consulta 1 divide os 107 registos da tabela
em 19
TRABALHADORES
grupos com base em valores JOB_ID comuns. O salário médio para cada grupo e o JOB_ID
contagem de linha agregados são computados. Consulta 2 refina os resultados, excluindo
condicionalmente
linhas agregados onde
aqueles
o salário médio é menor ou igual a 12000, usando uma cláusula HAVING.
Consulta 3 demonstra que os operadores booleanos podem ser usados para especificar cláusula ter
condições.
várias

Figura 9-7 A cláusula HAVING


TIP EXAME
Cláusula GROUPA cláusula
BY pode HAVING pode ser sem
ser especificado especificada apenas
uma cláusula quando uma cláusula GROUP BY
HAVING.
está presente. UMA
Exercício 9-3: usar a cláusula TENDO A empresa está planejando uma campanha de recrutamento
e quer
identificar quais os dias dos membros da equipe na semana 20 ou mais foram contratados. Seu
erelatório
o númerodeve
de listar
funcionários
os dias contratados em cada um deles.

1. Inicie o SQL * Plus ou SQL Developer e conectar-se ao esquema HR.


2. TRABALHADORES Divide registos em grupos com base no componente dia do
HIRE_DATE
coluna. Você pode obter o número de funcionários por grupo usando a função COUNT. Usar
a cláusula HAVING para restringir estas linhas para apenas aqueles onde a contagem é
maior
igual aou
20.
3. Uma solução possível é a seguinte declaração, que retorna os dias da semana em que
20 ou mais empregados foram contratados:

Broca Two-Minute
Descrever as funções de agrupamento
• funções de grupo também são conhecidos como de várias linhas, agregado, ou funções de
resumo.
executado
Elesuma vez para cada grupo de dados e agregar os dados a partir de várias linhas em
uma únicapara cada grupo.
resultam
• Os grupos podem ser tabelas inteiras ou partes de uma tabela agrupados por um agrupamento
comum
atributo.
• A contagem de uma coluna ou uma expressão retorna um valor inteiro que representa o
número
linhas de
em um grupo, no qual a coluna ou expressão especificado não é nulo.
• A função soma retorna um total agregado de todos os valores numéricos não nulos em um
grupo.
• A função AVG divide a soma de uma coluna ou expressão pelo número de linhas não nulos
num grupo.
• As funções MAX e MIN operar em número, data, CHAR, e os dados VARCHAR2
tipos. Eles retornam um valor que seja o item maior ou menor no grupo.

Dados do Grupo Usando a Cláusula GROUP BY


• A cláusula GROUP BY especifica as linhas de atributos de agrupamento deve ter em comum
para eles

ser agrupados.
• A cláusula GROUP BY facilita a criação de grupos dentro de um conjunto seleccionado de
dados
aparece
e depois de a cláusula WHERE, mas antes da cláusula ORDER BY.
• Qualquer item na lista SELECT que não é uma função de grupo deve ser um atributo de
agrupamento.
• As funções de grupo não podem ser colocados em uma cláusula WHERE.
• conjuntos de dados podem ser divididos em grupos e ainda dividido em subgrupos com base
ematributos
múltiplos
agrupamento.
• A função LISTAGG retorna uma cadeia concatenada de valores coluna classificada,
classificado
ORDEM DE pelaexpressão especificado após a cláusula dentro do grupo.

Incluir ou excluir linhas agrupadas usando a cláusula HAVING


• linhas Clustering usando um agrupamento comum atribuir com a cláusula GROUP BY e
aplicando
uma função agregada a cada um destes grupos devolve os resultados ao nível do grupo .
• A cláusula HAVING fornece a linguagem para limitar os resultados a nível de grupo
devolvidos.
• A cláusula HAVING pode ser especificado somente se houver uma cláusula GROUP BY
presente.
• Todos agrupamento é realizada e funções de grupo são executados antes de avaliar o TENDO
cláusula.

Auto teste
1 . O resultado é retornado pela seguinte declaração?

(Escolha a melhor resposta.)


A. NULL
B. 0
C. 1
D. Nenhuma das anteriores
2 . Escolha uma afirmação correta sobre as funções de grupo.
A. As funções de grupo pode ser usado apenas quando um grupo BY está presente.
B. funções de grupo podem operar em várias linhas ao mesmo tempo.
C. funções Grupo operam em apenas uma única linha de cada vez.
D. Funções de grupo pode executar várias vezes dentro de um único grupo.
3 . O valor é retornado depois de executar a seguinte declaração?

Suponha que há dez registros de empregados e cada um contém um valor salário de 100,
comexemplo,
por exceção que tem um valor nulo no campo salário. (Escolha a melhor resposta.)

A. 900
B. 1000
C. NULL
D. Nenhuma das anteriores
4 . Que valores são devolvidos depois de executar a seguinte declaração?

Suponha que há dez registros de empregados e cada um contém um valor salário de 100,
comexemplo,
por exceção que tem um valor nulo no campo salário. (Escolha todos os que se aplicam.)
A. 10 e 10
B. 10 e NULL
C. 10 e 9
D. Nenhuma das anteriores
5 . O valor é retornado depois de executar a seguinte declaração?

Suponha que há dez registros de empregados e cada um contém um valor salário de 100,
com um
para exceção
empregado, que tem um valor nulo no campo salário. (Escolha a melhor resposta.)
A. NULL
B. 90
C. 100
D. Nenhuma das anteriores
6 . O valor é retornado depois de executar a seguinte declaração?

Suponha que há dez registros de empregados e cada um contém um valor salário de 100,
comexemplo,
por exceção que tem um valor nulo no campo salário. (Escolha a melhor resposta.)
A. Um erro
B. 3
C. 4
D. Nenhuma das anteriores
7 . Quantas linhas são retornadas pela seguinte consulta?

Suponha que há 11 não nulo e 1 Valores DEPARTMENT_ID nula únicas. Todos os registros
um valor do salário não nulo. (Escolha a melhor resposta.)
têm
A. 12

B. 11
C. NULL
D. Nenhuma das anteriores
8 . Que valores são devolvidos depois de executar a seguinte declaração?

Suponha que a tabela JOBS tem dez registros com o mesmo valor JOB_ID de DBA ea
mesmo valor MAX_SALARY de 100. (Escolha a melhor resposta.)
A. Uma linha de saída com o DBA valores, 100
B. Dez linhas de produção com o DBA valores, 100
C. Um erro
D. Nenhuma das anteriores
9 . Quantas linhas de dados são devolvidos depois de executar a seguinte declaração?

Suponha tabela EMP tem dez linhas e cada um contém um valor salário de 100, exceto para
um, que tem um valor nulo no campo salário. As cinco primeiras linhas têm um valor
de 10, enquanto que o segundo grupo de cinco linhas, que inclui a linha com um salário nulo
DEPT_ID
valor, tem um valor DEPT_ID de 20. (Escolha a melhor resposta.)
A. Duas fileiras
B. Uma linha
C. zero linhas
D. Nenhuma das anteriores
10 . Quantas linhas de dados são devolvidos depois de executar a seguinte declaração?

Suponha tabela EMP tem dez linhas e cada um contém um valor salário de 100, exceto para
um, que tem um valor nulo no campo salário. As cinco primeiras linhas têm um valor
de 10, enquanto que a segunda cinco linhas, que incluem a linha com um valor do salário
DEPT_ID
nulo, têm
valor um de 20. (Escolha a melhor resposta.)
DEPT_ID
A. Duas fileiras
B. Uma linha
C. zero linhas
D. Nenhuma das anteriores
11 . Escolha duas afirmações que são verdadeiras.
A. A função STDDEV retorna a raiz quadrada da variância.
B. função da variação retorna a raiz quadrada do STDDEV.
C. A função AVG funciona em data e dados numéricos.
D. A função LISTAGG retorna uma soma numérico total de uma lista de dados.
E. LISTAGG retorna os valores concatenadas da coluna medida.
12 . Quantas linhas de dados são devolvidos depois de executar a seguinte declaração?

Suponha tabela de trabalhadores tem dez valores DEPARTMENT_ID distintas e 107 linhas.
(Escolha a melhor resposta.)
A. 0
B. 1
C. 10
D. 107
E. Nenhuma das anteriores

Respostas de auto-teste
1. C . A tabela DUAL tem uma fileira e uma coluna. A função COUNT (*) retorna o
número de linhas em uma tabela ou grupo.
A , B , e D são incorrectas. A está incorreta porque uma tabela pode ter zero ou mais
mas linhas,
as linhas não nulo. B é incorrecta, uma vez a tabela DUAL tem uma linha. D é
incorrecta
porque a resposta correcta é C .
2. B . Por definição, funções de grupo podem operar em várias linhas de cada vez, ao
funções
contrário
linha.de um único
A , C , e D estão incorrectos. Um é incorrecta porque a função de grupo pode ser usado
GROUPsem um
BY cláusula. Neste caso, todo o conjunto de dados é operado como um grupo. C é
porque as funções do grupo são muitas vezes executada contra uma tabela inteira, que é
incorrecta
tratado
grupo. Dcomo um
é incorrecta porque uma vez que um conjunto de dados foi dividido em diferentes
grupos, qualquer
funções de execução de grupo uma vez por grupo.
3. Um . A função agregada SUM ignora valores nulos e adiciona valores não nulos. desde
linhas
nove
contêm o valor SALÁRIO 100, 900 é retornado.
B , C , e D estão incorrectos. B seriam devolvidas se SUM (NVL (salário, 100)) foram
executado. C é uma escolha tentadora desde aritmética regular com valores NULL retorna
um NULLNo entanto, as funções de agregação, com excepção de COUNT (*), ignorar
resultado.
valores nulos.
incorreta D éa resposta correta é A .
porque
4. C . COUNT (*) considera todas as linhas, incluindo aqueles com valores nulos,
COUNT
enquanto
(SALÁRIO) considera apenas as linhas não nulas.
A , B , e D são incorrectas.
5. C . A função NVL converte o valor um NULL em 100. Depois disso, a média

função adiciona os valores salariais e obtém 1000. Dividindo este pelo número de registros
retorna 100.
A , B , e D são incorrectas. B seria devolvido se o AVG (NVL (SALÁRIO, 0)) foram
selecionado. É interessante notar que, se foram selecionados AVG (SALÁRIO), 100 teria
sido devolvido, dado que a função do AVG se somar os valores não nulos e dividir o total
também<