Professional Documents
Culture Documents
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.
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.
Todo o meu amor para Ameetha, para uma viagem de uma vida.
Rupesh
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 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
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
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
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
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
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
Auto teste
Respostas de auto-teste
Capítulo 26 Flashback
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
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:
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 .
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
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,
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.
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.
• 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
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.
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
Você pode passar muitas outras opções de linha de comando para o instalador. Isto é como exibi-
los todos
em Linux:
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.
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.
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.
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
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.
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.
• 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).
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.
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.
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.
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
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:
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.
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:
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:
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:
• 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.
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:
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.
• 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
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:
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
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.
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.
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
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
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:
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:
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
Discos ASM
O termo disco ASM é um pouco enganador, porque os dispositivos não são realmente discos. A
seguir,
as possibilidades:
são
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.
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.
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.
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:
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.
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
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.
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)
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:
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.
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:
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
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.
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 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):
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:
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:
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
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.
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.
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
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
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.
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:
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.
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
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
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
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.
• 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.
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 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
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:
• 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.
• 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
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.
• Í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.
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.
• A adição de colunas:
• Modificação de colunas:
• colunas Renomear:
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.
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.
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:
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:
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:
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
nó
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
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:
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
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
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.
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."
EXAME TIP original e restrições de chave primária precisa de um índice. Se não existir, um será
criado automaticamente.
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):
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.
É 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:
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
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.
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.
É 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.
• 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
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:
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.
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.
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:
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:
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.
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.
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
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:
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:
7. Na sua sessão B, inserir uma linha para a nova tabela e não cometê-lo.
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
í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:
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:
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:
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
• 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:
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.
4. Insira duas linhas na tabela de ordens, fornecendo explicitamente os nomes das colunas.
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
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
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.
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.
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:
• 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,
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.
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
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.
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:
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;
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
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.
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.
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é
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
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.
• 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.
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.
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.
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.
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
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.
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.
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.
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.
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
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.
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.
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:
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:
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.
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
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
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
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:
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
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.
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.
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
• 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.
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).
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 .
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
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
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.
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
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.
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:
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.
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:
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:
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.
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?
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:
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.
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:
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
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.
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
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:
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.
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:
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.
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:
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:
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.
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:
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
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 .
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
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
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
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:
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.
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:
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:
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
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.
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.
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.
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.
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.
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.
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:
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
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.
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
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.
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.
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.
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:
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:
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.
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 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:
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
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.
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:
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:
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
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.
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
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:
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.
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.
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.
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.
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').”
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 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
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.
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
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
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
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
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 “.
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.
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
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.
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:
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.
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.
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?
C. quarta-feira
D. Nenhuma das anteriores
6 . Assumindo SYSDATE = 30-DEC-2007, o valor é retornado depois de executar o seguinte
declaração?
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
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.
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
A Função COUNT
A função COUNT conta o número de linhas em um grupo. Sua sintaxe é a seguinte:
• 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:
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:
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.
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.
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.
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.
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
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.
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.
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:
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
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.
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.
Auto teste
1 . O resultado é retornado pela 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
o número de linhas com valores SALARIAIS não nulos. Então, AVG (SALÁRIO) seria
por
calculada como 900/9 = 100.
6. C . O conjunto de dados está segmentada pela coluna de salário. Isto cria dois grupos:
valores
um salário
com de 100 e outro com um valor do salário nulo. O comprimento médio de
valor do salário 100 é de 3 para as linhas do primeiro grupo. O valor do salário NULL é
convertido para o número 0 pela função NVL, e o comprimento médio de salário é 1.
primeiro
A função somatório opera entre os dois grupos de adição os valores de 3 e 1, voltando 4.
A , B , e D são incorrectas. Um parece plausível desde funções de grupo não podem ser
mais de dois níveis são
encaixados
enquanto os outros de profundidade. Embora
funções de uma existam
única linha quatro funções,
avaliadas antes dasapenas
funçõesduas são B
de grupo.
funções
seria de grupo,
retornado se o somatório expressão (AVG (COMPRIMENTO (salário))) foram
seleccionados.
porque D écorrecta
a resposta incorrecta
éC.
7. Um . Existem 12 valores DEPARTMENT_ID distintas. Uma vez que este é o atributo
12 grupos
de agrupamento,
são criados, incluindo uma com um valor DEPARTMENT_ID nulo. Portanto, 12
são devolvidos.
linhas
B , C , e D estão incorrectos. B está incorreta porque o DEPARTMENT_ID nulo é um
valorválido
único pelo qual o grupo é repartido. C está incorreta porque 12 linhas são retornadas.
D é incorrecta porque a resposta correcta é um .
8. C . Para uma cláusula GROUP BY a ser utilizado, uma função de grupo devem aparecer
Lista.no SELECT
A , B , e D são incorrectas. Estes são incorretos desde a declaração é sintaticamente
imprecisa e não é permitido pela Oracle. Não confunda a coluna chamada MAX_SALARY
para a função MAX (salário).
9. B . Dois grupos são criados com base em seus valores Dept_ID comuns. O grupo com
Dept_ID valores de 10 é composto por cinco linhas com valores de salário de 100 em cada
um deles.
Por conseguinte, a função de soma (salário) retorna a 500 para este grupo, e satisfaz a
TENDO SUM cláusula (SALÁRIO)> 400. O grupo com valores de Dept_ID 20 tem quatro
linhas com valores de salário de 100 e uma linha com um salário nulo. SUM (salário)
retorna apenas 400, e este grupo não satisfaz a cláusula HAVING.
A , C , e D estão incorrectos. Cuidado da soma (NVL (salário, 100)) a expressão em
cláusula SELECT. Esta expressão selecciona o formato da saída. Ele não restringir ou
limitar
o conjunto de dados de qualquer forma. Um seria correto se a cláusula de ter determinado
que hajaa dois
grupos que seria aplicada a função de agregação. C é incorrecta porque existe uma
pronto para ser agregados, o que resulta em uma linha que está sendo retornado. D é
incorrectacorreta
resposta porqueé B
a .
10. Um . Dois grupos são criados com base em seus valores Dept_ID comuns. O grupo com
Dept_ID valores de 10 é composto por cinco linhas com valores de salário de 100 em cada
um deles.
Portanto, (, NVL (SALÁRIO 100)) a função somatório retorna 500 para este grupo e satisfaz
o SUM TENDO (NVL (SALÁRIO, 100))> 400 cláusula. O grupo com valores de Dept_ID
20 tem quatro linhas com valores de salário de 100 e uma linha com um salário nulo.
SUM (NVL (salário, 100)) retorna 500, e este grupo satisfaz a cláusula HAVING.
Portanto, duas linhas são retornadas.
B , C , e D estão incorrectos. Embora a cláusula SELECT contém SUM (SALÁRIO),
que retorna 500 e 400 para os dois grupos, a cláusula HAVING contém o
SUM (NVL (salário, 100)) a expressão, que especifica os critérios de inclusão ou de
exclusão
para uma linha de nível grupo. B seria correto se a cláusula de ter determinado que haja um
grupo a que seria aplicada a função de agregação. C é incorrecta porque existem dois
define a serem agregadas, o que resulta em duas fileiras que estão sendo devolvidos. D é
incorrectacorreta
resposta porqueé A
a .
11. A e E . O desvio padrão é matematicamente definida como a raiz quadrada da sua
variância. A função LISTAGG classifica a medida usando o ORDER BY na DENTRO
cláusula GROUP e retorna uma cadeia concatenada ordenada.
B , C , e D estão incorrectos. Todas essas afirmações são falsas.
12. B . O conjunto de dados não é dividida em grupos por uma cláusula GROUP BY, eo
funçãoLISTAGG
funciona, portanto, em toda a tabela como um único conjunto de dados. Uma longa
fila consistindo
uma lista concatenada
de em valores LAST_NAME é retornado.
A, C, D, e E são incorrectas. A está incorreta porque LISTAGG retorna pelo menos uma
CeD linha.
seria correcta se o conjunto de dados foi dividida em 10 e 107 grupos,
érespectivamente.
incorreta porqueEa resposta correta é B .
CAPÍTULO 10
SQL junta
Objetivos do exame
• 061.6.1 escrever instruções SELECT para acessar dados de mais de uma tabela Usando
Equijoins e Nonequijoins
• 061.6.2 unir uma tabela a si mesmo usando um auto-Junte
• 061.6.3 Visualizar dados que não atende a condição de associação Usando Junções Externas
• 061.6.4 gerar um produto cartesiano de duas ou mais tabelas
Os três pilares da teoria relacional são selecção, projecção, e juntando-se. Este capítulo enfoca
a aplicação prática de juntar . Linhas de diferentes tabelas estão associados uns com os outros
usando junta . Suporte para se juntar tem implicações para a forma como os dados são armazenados
em tabelas
modelos dede bancocomo
dados, de dados. Muitos
a terceira forma ou estrela normal esquemas surgiram para explorar esse
recurso.
As tabelas podem ser unidas de várias maneiras. A técnica mais comum é chamado de equijoin .
estáUma
associado
fila com uma ou mais linhas na outra tabela com base na igualdade de valores de coluna
expressões. As tabelas também podem ser unidos usando um nonequijoin . Neste caso, uma linha é
ou
associado a umna outra tabela se os seus valores de coluna cair numa gama determinada pelo
ou mais linhas
operadores.
desigualdade
Uma técnica menos comum é associar linhas com outras linhas na mesma tabela. esta associação
é baseada em colunas com relações lógicas e geralmente hierárquicos entre si. Isto é
chamado de auto-associação . Linhas com entradas nulas ou diferentes em comum colunas de
junção sãoe excluídos
equijoins nonequijoins
quando
colectivamente conhecidas como as junções internas são executadas. Uma
junção externa
disponíveis paraé buscar estes uma perna ou órfãs linhas, caso necessário.
A junção cruzada ou produto cartesiano é formado quando cada linha de uma tabela é unida a
todasEsta
noutro. as linhas
junção é frequentemente o resultado de falta ou inadequada condições de junção, mas é
intencional.
ocasionalmente
• Tipos de junta
• Unir tabelas usando a sintaxe ANSI SQL
• nomes das colunas de qualificação ambígua
• O NATURAL JOIN cláusula
• O Cadastrar-se usando cláusula
• O JOIN ON cláusula
• N-way junta e adicionais condições de junção
• Nonequijoins
Tipos de junta
Dois básica junta são o equijoin eo nonequijoin . Equijoins são provavelmente mais frequentemente
utilizado.
Junta-se podem ser realizadas entre várias tabelas, mas grande parte da seguinte discussão vai usar
tabelas hipotéticas para ilustrar os conceitos e linguagem da junta. A primeira tabela é chamada a
dois
efonte
a segunda
, é chamada o alvo . Linhas nas tabelas de origem e de destino compreender um ou mais
colunas. Como exemplo, suponha que a fonte e alvo são os países e regiões
tabelas do esquema HR, respectivamente.
A tabela PAÍSES contém três colunas chamadas country_id, COUNTRY_NAME, e
REGION_ID. A tabela REGIÕES é composto por duas colunas chamado REGION_ID e
REGION_NAME. Os dados nestas duas tabelas é relacionados uns aos outros com base no comum
coluna REGION_ID. Considere as seguintes perguntas:
O nome da região para a qual um país pertence pode ser determinada através da obtenção de sua
valor REGION_ID. Este valor é usado para juntar-se com a linha na tabela de regiões com a mesma
REGION_ID. Consulta 1 recupera os valores das colunas associadas com a linha a partir dos países
mesa onde o country_id = 'CA'. O valor REGION_ID desta linha é 2. Consulta 2 busca o
Américas REGION_NAME da tabela de regiões para a linha com REGION_ID = 2. Equijoining
facilita a recuperação de valores de coluna de várias tabelas usando uma única consulta.
As tabelas de origem e de destino pode ser trocado, por isso a tabela de regiões poderiam ser a
PAÍSES
fontetabela
eo poderia ser o alvo. Considere as duas consultas a seguir:
Consulta 1 obtém uma linha com um valor de 2. REGION_ID Juntando desta forma invertida
a seguinte
permitepergunta a ser feita: Que países pertencem à região das Américas? As respostas de
Consulta 2 são cinco valores COUNTRY_NAME: Argentina, Brasil, Canadá, México e Estados
Unidos da América. Estes resultados podem ser obtidos a partir de uma única consulta que associa as
tabelas
A linguagem
juntos.para executar equijoins, nonequijoins, junções externas, e cruz junta é introduzido no
próximo,
com uma juntamente
discussão sobre a Oracle tradicional juntar sintaxe.
associações internas
A junção interna é implementado usando três possíveis juntar cláusulas que usam as seguintes
palavras-chave
combinações diferentes:
em NATURAL JOIN, UTILIZANDO, e ON.
Quando as tabelas de origem e de destino compartilham colunas com nomes idênticos, é possível
junção
realizar
natural
umaentre eles sem especificar uma junção da coluna. Neste cenário, colunas com o
mesmo
nomes nas tabelas de origem e de destino são automaticamente associados entre si. linhas com
valores de colunas correspondentes em ambas as tabelas são recuperados. As regiões e mesa dois
compartilhar a coluna REGION_ID. Eles podem ser, naturalmente, juntou-se sem especificar
países
colunas denas
mostrado junção,
duas primeiras
como pesquisas na Figura 10-1 .
O NATURAL JOIN palavras-chave instruir Oracle para identificar colunas com nomes idênticos
as tabelas
entre ade
consulta, origem
coluna e de destino.é Depois
REGION_ID disso,como
identificada uma ajunção
única écoluna
realizada implicitamente
comumente entre
chamado em eles.
ambas
Em
as primeiro
tabelas.
REGIÕES é a tabela de origem e aparece após a cláusula FROM. A tabela de destino é, por
Países. Para cada linha na tabela REGIÕES, um jogo para o valor REGION_ID é solicitada
conseguinte
todas as linhas na tabela de países. Um conjunto de resultados intercalar é construído contendo
alinhas
condição
correspondentes
de junção. Este conjunto é então restrita pela cláusula WHERE. Neste caso, porque o
valor COUNTRY_NAME deve ser o Canadá, um REGION_NAME of Americas é retornado.
A segunda consulta mostra uma junção natural onde os países é a tabela de origem. o
REGION_ID
valor para cada linha na tabela de países é identificado. O conjunto de linhas da tabela REGIÕES
para ser usado no exercício de correspondência com o quadro de países é primeiro podadas pela
condição para apenas aqueles com Americas como o seu valor REGION_NAME. o
ONDE
valores de linhas com Américas como sua REGION_NAME são retornados da tabela de países.
COUNTRY_NAME
Às vezes mais controle deve ser exercido sobre quais colunas usar para junta. quando há
são os nomes das colunas idênticos nas tabelas de origem e de destino que deseja excluir como
colunas
pode usardeojunção,
JOIN. .você
. Usando o formato. Lembre-se que a Oracle não impor quaisquer regras
afirmando
colunas comque
o mesmo nome em duas mesas distintas deve necessariamente ter qualquer
relacionamento
de outros. A terceira
com cada
consulta especifica explicitamente que a tabela REGIÕES ser unidas para os
tabela com base em valores comuns em suas colunas REGION_ID. Esta sintaxe permite associações
países
internas
formada para ser
em colunas específicas, em vez de em todas as colunas comumente chamados.
A quarta consulta demonstra o JOIN. . . ON formato da junção interna, que permite juntar-se
colunas a serem explicitamente declarado. Este formato não dependem das colunas na origem e no
mesas ter nomes idênticos. Esta forma é mais geral e é o mais amplamente utilizado junção interna
destino
formato.
TIP Seja cauteloso ao usar junções naturais desde os designers de banco de dados pode atribuir o
mesmo nome
colunas exclusivas.
a chave
Estas
ou colunas podem ter nomes como ID ou SEQ_NO. Se uma junção natural é
entre essas tabelas, resultados ambíguos e inesperadas podem ser devolvidos.
tentada
Junções Externas
Nem todas as tabelas compartilham um relacionamento perfeito, onde cada registro na tabela de
origem
pelo menos
podem
uma serlinha
combinadas
na tabelapara
do alvo. ocasionalmente é necessário que linhas com não correlação
juntar coluna
valores também ser recuperados por uma consulta. Isto pode parecer para derrotar o propósito de
junta mas tem
benefícios práticos.
alguma
Suponha que os funcionários e mesas departamentos estão unidas com comum
valores DEPARTMENT_ID. EMPREGADOS registros com valores nulos DEPARTMENT_ID são
excluídos juntamente com valores ausente da mesa de SERVIÇOS. Uma associação externa obtém
linhas.
estes
cruz junta
A junção cruzada ou produto cartesiano deriva seus nomes da matemática, onde também é referido
como
um produto de cruzamento entre dois conjuntos ou matrizes. Esta juntar cria uma linha de saída para
combinação de linhas da tabela de origem e destino.
cada
Se as tabelas de origem e de destino têm três e quatro linhas, respectivamente, uma junção
resulta
cruzada
em filas
entre(3eles
× 4 = 12) a ser devolvida. Considere as contagens de linha recuperados a partir
das consultas
Figura 10-2 . em
Figura 10-2 CROSS JOIN
As duas primeiras contagens de linha são realizadas nos países e regiões tabelas produzindo 25
e 4 linhas, respectivamente. Consulta 3 conta o número de linhas retornadas a partir de uma junção
cruzadae destes
mesas rendimentos 100. Consulta 4 retornaria 100 registros, se a cláusula WHERE estava ausente.
cada
as quatro
um linhas na tabela de regiões é unida à uma linha da tabela de países. Cada fila
retornado contém todas as colunas de ambas as tabelas.
Consulta 1 executa uma junção interna especificando a juntar-se como uma condição na cláusula
A diferença
WHERE.mais Istosignificativa
é entre o tradicional e ANSI SQL juntar sintaxes. Tome nota do
aliasing em coluna usando a notação TABLE.COLUMN_NAME para remover a ambiguidade da
coluna idêntica
nomes. Esta notação é discutido em detalhe mais adiante neste capítulo. Consulta 2 especifica a
junção entre o
tabelas de origem e de destino como uma condição onde. Há um sinal de mais (+) entre colchetes
a esquerda do sinal de igual que indica ao Oracle que uma junção externa direita deve ser realizada.
para
esta consulta
retorna LAST_NAME dos funcionários e seus valores department_name correspondentes. Além do
aque,
junção
alémexterna
do mais,recupera department_name das linhas com valores DEPARTMENT_ID não
atualmente atribuído a quaisquer registros de funcionários. Consulta 3 executa uma cartesiana ou
ajunção
condição
cruzada,
de junção.
excluindo
DICA A Oracle tradicional juntar-se a sintaxe é amplamente utilizado. No entanto, o exame avalia o
seu
compreensão da junta e as formas ANSI SQL de sua sintaxe. Esteja preparado, embora; algumas
pode tocar o seu conhecimento da sintaxe tradicional. Este conhecimento é útil, pois Oracle
perguntas
sintaxe está profundamente enraizado em todos os sistemas de software em todo o mundo.
tradicional
A tabela EMPREGADOS é alias com o nome EMP curta, enquanto a mesa de departamentos é
não. A cláusula SELECT faz referência as colunas EMPLOYEE_ID e manager_id como
EMP.EMPLOYEE_ID e EMP.MANAGER_ID. A coluna do MANAGER_ID
tabela DEPARTMENTS é referido como DEPARTMENTS.MANAGER_ID. qualificando o
coluna EMPLOYEE_ID usando a notação de ponto é desnecessário, porque há apenas uma coluna
com esteentre as duas tabelas. Portanto, não há ambigüidade.
nomear
A coluna MANAGER_ID deve ser qualificado para evitar ambigüidade, porque é destaque em
mesas.
ambos
Desde o JOIN. . . Usando o formato é aplicado apenas DEPARTMENT_ID é usado como a
coluna. Se uma junção natural foi utilizada, tanto o DEPARTMENT_ID e MANAGER_ID
junção
colunas seriam utilizados. Se a coluna MANAGER_ID não foi qualificado, um “ORA-00918:
coluna
erro ambiguamente definido”seria devolvido. Se DEPARTMENT_ID foi alias, um “ORA-25154:
parte da coluna de usar cláusula não pode ter qualificador de erro”seria levantado.
SQL Developer fornece a MANAGER_ID título para a primeira referência feita no SELECT
cláusula. O “_1” string é automaticamente acrescentado à segunda referência, criando o título
MANAGER_ID_1.
TIP referências à coluna de qualificação com a notação de ponto para indicar a tabela de uma coluna
de origemde
benefício tem
desempenho.
um Tempo é salvo porque a Oracle é dirigido instantaneamente para o
apropriado
mesa e não tem de resolver o nome da tabela.
A junção natural identifica colunas com nomes comuns entre as duas tabelas. Em Consulta 1,
Country_id ocorre em ambas as tabelas e torna-se a coluna de junção. Consulta 2 é escrito usando
tradicional sintaxe Oracle e recupera as mesmas linhas como Consulta 1. A menos que você estiver
familiarizado
colunas nas tabelas
com ode origem e de destino, natural junta deve ser utilizado com cuidado porque se
condições são automaticamente formado entre todas as colunas com nomes comuns.
juntar
Consulta 3 executa participar de um natural entre os TRABALHOS e países tabelas. Não há
colunas com nomes idênticos, resultando em um produto cartesiano. Consulta 4 é equivalente a
consulta
uma junção3, ecartesiana é realizada usando a sintaxe tradicional Oracle.
A junção natural é simples, mas propenso a uma fraqueza fundamental. Ele sofre o risco de que
dois com o mesmo nome pode ter nenhuma relação e não pode mesmo ter tipos de dados
colunas
Na Figura 10-4 , estão descritos os países, regiões, e SALES_REGIONS tabelas. o
compatíveis.
tabela SALES_REGIONS foi construído de modo a ilustrar o seguinte ponto importante: Embora
REGION_ID em comum com a tabela de países, pode não ser, naturalmente, se juntou a ele, porque
tenha
o seu de dados são incompatíveis. Os tipos de dados do COUNTRIES.REGION_ID e
tipos
colunas SALES_REGIONS.REGION_ID são NÚMERO e VARCHAR2, respectivamente. o
dados de caracteres não pode ser implicitamente convertido em dados numéricos, e um “ORA-
01722: inválido
número de erro”é levantada. A coluna REGIONS.REGION_ID é de tipo de número, e seus dados é
relacionada com os dados na tabela de países. Portanto, a junção natural entre as regiões e
mesa PAÍSES funciona perfeitamente.
Figura 10-4 juntar o natural
Exercício 10-1: Usando o NATURAL JOIN As ações da tabela JOB_HISTORY três identicamente
colunas nomeadas com o quadro de funcionários: EMPLOYEE_ID, JOB_ID e DEPARTMENT_ID.
6. executar essa instrução retorna uma única linha com o mesmo EMPLOYEE_ID, JOB_ID, e
valores DEPARTMENT_ID em ambas as tabelas.
O Cadastrar-se usando Cláusula
O formato da sintaxe para a cláusula JOIN usando é a seguinte:
SELECIONAR tabela1.coluna, tabela2.coluna
DE table1
Cadastre table2 UTILIZAÇÃO ( join_column1, join_column2 ... );
Enquanto a junção natural contém a palavra-chave natural em sua sintaxe, o JOIN. . . Usando a
não.sintaxe
Um erro é gerado se as palavras-chave NATURAIS E usando ocorrem na mesma cláusula de
O JOIN. . . USANDO cláusula permite que uma ou mais colunas Equijoin ser que explicitamente
junção.
especificado
entre parênteses
em após a palavra-chave usando. Isso evita as deficiências associadas com a junção
natural.
Muitas situações exigem que tabelas ser unidos apenas em determinadas colunas, e este formato
serve para issoConsidere as seguintes perguntas:
requerimento.
Consulta 1 especifica que os locais e tabelas países devem ser unidas em comum
valores de coluna country_id. Todas as colunas dessas tabelas são recuperados para as linhas com
correspondentes juntar-se os valores da coluna. Consulta 2 mostra uma consulta tradicionalmente
especificado
linhas como Consulta
que recupera
1. Aajuntar
mesma colunas especificadas com o JOIN. . . sintaxe USANDO não pode
ser qualificado
usando nomes de tabela ou aliases quando eles são referenciados no SELECT e cláusulas JOIN.
Uma vezjuntar-se
sintaxe que estepotencialmente exclui algumas colunas com nomes idênticos a partir da cláusula de
junção,
ser qualificado,
estas devem
se eles são referenciados para evitar ambiguidades.
Como a Figura 10-5 mostra, as tabelas job_history e empregados foram unidos com base no
presença de valores iguais nas suas colunas JOB_ID e EMPLOYEE_ID. Linhas conformes com a
condição de junção são recuperados. Estas tabelas compartilham três colunas com nomes idênticos.
presente
Neste exemplo,
apenas dois deles são especificadas como colunas de junção. Observe que, embora o terceiro nome
coluna é DEPARTMENT_ID, é qualificado com um alias de tabela para evitar ambigüidade,
idêntico
enquantoespecificadas
colunas a juntar-se na cláusula SELECT não pode ser qualificado com aliases de tabela.
O JOIN ON Cláusula
O formato da sintaxe para a cláusula JOIN ON é a seguinte:
SELECIONAR tabela1.coluna, tabela2.coluna
DE table1
ADERIR table2 EM ( table1.column_name = table2.column_name );
A junção natural e JOIN. . . USANDO cláusulas dependem de colunas de junção com coluna
nomes.
idêntica
O JOIN. . . Cláusula ON permite a especificação explícita de se juntar colunas,
independentemente
os nomes das colunas.
da Esta
sua é a forma mais flexível e amplamente utilizada das cláusulas participar.
O ON e
palavras-chave natural não pode aparecer juntos em uma cláusula de junção. As colunas são
totalmente Equijoin
qualificado como table1.column1 = table2.column2 e são opcionalmente especificado entre
parênteses apósAs
palavra-chave. o NO
consultas a seguir ilustram o JOIN. . . Cláusula ON:
Consulta 1 recupera todos os valores da coluna de ambos os departamentos e funcionários mesas
as linhas
para que atendem uma condição equijoin. Esta condição é cumprida por valores
correspondentes valores DEPARTMENT_ID na tabela SERVIÇOS. A sintaxe tradicional Oracle
EMPLOYEE_ID
Consulta 2 retorna os mesmos resultados que consulta 1. Observe as semelhanças entre o tradicional
condição especificada na cláusula WHERE e a condição de junção especificada após a palavra-
juntar
chave ON. START_DATE na tabela JOB_HISTORY é unida à coluna em HIRE_DATE
A coluna
a tabela de trabalhadores em Figura 10-6 . Este equijoin recupera os detalhes dos funcionários que
para a organização e Jobs mudou.
trabalhavam
Esta consulta produz corretamente 27 linhas nos resultados finais estabelecidos desde as colunas
listados
necessárias
na cláusula
juntar
SELECT.
são A consulta a seguir demonstra como o JOIN. . . cláusula NO é
para buscar as mesmas 27 linhas. Uma condição de junção pode fazer referência apenas colunas no
utilizada
seu âmbitoa de
exemplo, junção
aplicação.
dos departamentos
Na sequênciapara locais não pode fazer referência colunas na
Países ou regiões tabelas, mas a junção entre países e regiões podem fazer referência
qualquer coluna das quatro tabelas envolvidas na consulta.
O JOIN. . . cláusula utilizando também pode ser usado para unir estas quatro tabelas como segue:
DICA Existem três equijoin ou junção interna formatos. A junção natural usa o NATURAL JOIN
cláusula e une duas tabelas com base em todas as colunas com nomes comuns. Os outros dois
formatos de .usar
JUNTE-SE o
. . USANDO e JOIN. . . ON cláusulas. Preste atenção à sintaxe desde uma cláusula de
junção, como
SELECT * FROM tabela1 NATURAL JOIN TABLE2 UTILIZAÇÃO (coluna) pode parecer correto,
é, de fato, sintaticamente incorreto. Lembre-se do UTILIZAR, ON, e palavras-chave natural são
mas
exclusivo no âmbito da mesma cláusula de junção.
mutuamente
Nonequijoins
Nonequijoins coincidir com os valores da coluna de diferentes tabelas com base em uma expressão
da coluna
desigualdade.
de junção
O valor
em cada
que linha da tabela a fonte é comparado com os valores correspondentes no
tabela alvo. A correspondência é encontrada, se a expressão usada na junção, com base em um
operador
avalia a verdade.
de desigualdade,
Quando tal uma junção é construída, uma nonequijoin é realizada.
Um nonequijoin é especificada utilizando o JOIN. . . ON sintaxe, mas a condição de junção
operador
contémdeum
desigualdade, em vez de um sinal de igual.
O formato da sintaxe para uma cláusula nonequijoin é a seguinte:
SELECIONAR tabela1.coluna, tabela2.coluna
DE table1
[JOIN table2 ON ( table1.column_name < table2.column_name )] |
[JOIN table2 ON ( table1.column_name > table2.column_name )] |
[JOIN table2 ON ( table1.column_name <= table2.column_name )] |
[JOIN table2 ON ( table1.column_name > = table2.column_name )] |
[JOIN table2 ON ( tabela1.coluna ENTRE table2.col1 E table2.col2 )]
Considere as 16 linhas retornadas pela consulta na Figura 10-8 . A tabela funcionários é
nonequijoined para a mesa de trabalhos com base no desigualdade condição de junção (2 * e.salary <
J.MAX_SALARY). A tabela JOBS armazena a faixa salarial para trabalhos diferentes na
organização.
valor do salário
o para cada registro de empregado é dobrada e comparados com todos os valores
na tabela de postos de trabalho. Se a condição de junção é avaliada como verdadeira, a linha é
MAX_SALARY
retornada.
DICA Nonequijoins não são tão comumente usado como equijoins. A ENTRE operador de faixa
aparece com condições nonequijoin. É simples de usar um operador BETWEEN em uma condição
frequentemente
duas condições nonequijoin base no operador de menos do que ou igual a (<=) e maior do que ou
de
igual a (> =) operador.
Junte-se a uma tabela a si mesmo usando um auto-Junte
O armazenamento de dados hierárquicos em uma única tabela relacional pode ser conseguido através
da atribuição
colunas por fila.
de, Uma
pelo menos,
coluna armazena
dois um identificador de registro pai da fila, e as lojas de segunda
identificador da linha. Associando fileiras uns com os outros com base em uma relação hierárquica
exige
Oracle para participar de uma mesa para si. Esta auto-associação técnica é discutido na próxima
seção.
Juntando-se uma tabela a ela mesma Utilizando o JOIN. . . ON Cláusula
Suponha que você precisa para armazenar uma árvore de família em uma tabela relacional; você
poderia
opção é tomar várias
usar uma abordagens.
tabela chamada 1FAMÍLIA com colunas nomeadas ID, NOME, MOTHER_ID, e
FATHER_ID, onde cada linha armazena o nome de uma pessoa, um número de identificação único,
e os valores
seus pais. de ID para
Quando duas tabelas são unidas, cada linha da tabela de origem está sujeita à condição de junção
linhas
comda tabela de destino. Se a condição for avaliada como verdadeira, então a linha se juntou,
consistindo
colunas de ambas
de as tabelas, é devolvido.
Quando as colunas de união são originários da mesma tabela, uma auto-associação é necessária.
tabela
Conceitualmente,
de origem é duplicado
o para criar a tabela de destino. A auto-associação funciona como um
regular
essas junçãoNote-se
tabelas. entre que, internamente, a Oracle não duplica a mesa, e essa descrição é meramente
fornecidos para explicar o conceito de auto-adesão. Considere as seguintes três consultas:
Para identificar o pai de uma pessoa na mesa da família, você poderia usar Consulta 1 para obter
Nome ID edavalor
pessoa,
FATHER_ID. Em Consulta 2, o valor FATHER_ID obtido a partir da primeira
poderia ser substituído para se obter valor o nome do pai. Note que ambas as consultas fonte 1 e 2
consulta
informações da tabela de família.
Consulta 3 realiza uma auto-se juntar com o JOIN. . . Cláusula ON por aliasing tabela de família
e F2. como
A Oracle
f1 trata estas tabelas como diferentes, embora eles apontam para a mesma tabela de
física. o ocorrência de mesa da família, alias como f1, é designada como tabela de origem, enquanto
primeira
asegunda ocorrência, alias como F2, é designado como a tabela de destino. A condição de junção na
écláusula
do formato
ON source.child_id = target.parent_id . A Figura 10-9 mostra um exemplo de dados
familiares euma de três vias autojunção à mesma mesa.
demonstra
Figura 10-9 autojunção
Exercício 10-3: Realizando uma associação automática Existe uma relação hierárquica entre os
e seus gerentes. Para cada linha na tabela de funcionários, a coluna MANAGER_ID armazena o
funcionários
EMPLOYEE_ID do gerente de cada funcionário. Usando uma auto-associação na tabela
Funcionários,
necessário paravocê
recuperar
está do empregado LAST_NAME, EMPLOYEE_ID, MANAGER_ID, gerente
de LAST_NAME, e empregado DEPARTMENT_ID para as linhas com valores DEPARMENT_ID
10, 20, ou 30. Alias tabela a empregados como E e o segundo exemplo da tabela de
de
TRABALHADORES
como M. Organizar os resultados com base na coluna DEPARTMENT_ID.
7. A execução dessa instrução retorna nove linhas descrevendo os gestores de cada empregado
nestes
departamentos.
Visualizar dados que não atende a condição de
associação
Usando por Externas
Junções
linhas jogo Equijoins entre duas tabelas com base na igualdade dos dados da coluna armazenados em
mesa. Nonequijoins contar com linhas correspondentes entre tabelas com base em uma condição de
cada
junção contendo
expressão desigualdade.
um linhas da tabela alvo sem correspondência juntar coluna na tabela de origem
são geralmente
não requerido. Quando eles são necessários, no entanto, uma junção externa é usada para buscá-los.
diversas
de variações
associações externas pode ser utilizado, dependendo se se juntar dados da coluna está em falta a
partir daoufonte
tabelas ambos.
ou alvo
Estes junção externa técnicas são descritas nos seguintes tópicos:
1. Uma linha empregado tem um valor DEPARTMENT_ID que corresponde a uma linha na
tabela DEPARTMENTS.
2. Uma linha empregado tem um valor nulo em sua coluna DEPARTMENT_ID.
3. Existem linhas na tabela de departamentos com valores DEPARTMENT_ID que não são
armazenados em quaisquer registros de funcionários.
4. Uma fileira empregado tem um valor DEPARTMENT_ID que não é caracterizado no
tabela DEPARTMENTS.
O primeiro cenário descreve uma junção interna entre as duas tabelas. A segunda e terceira
causar
cenários
muitos problemas. Juntando os funcionários e departamentos tabelas no
coluna DEPARTMENT_ID pode resultar em linhas com valores nulos DEPARTMENT_ID sendo
Uma junção externa pode ser usado para incluir essas linhas órfãs em conjunto de resultados. O
excluídos.
quarto cenário
raramente deve ocorrer em um banco de dados bem concebido porque restrições de chave
estrangeira
inserção de impediria
criança grava
a sem valores pai. Uma vez que esta linha será excluído por uma junção
interna, que
podem ser recuperadas usando uma junção externa.
Um exterior esquerda junção entre as tabelas de origem e de destino devolve os resultados de
linhas
umadajunção
tabela interna,
de origem bem
excluídos
como por essa junção interna. A junção externa direita entre a fonte e
tabelas de destino retorna os resultados de uma junção interna, bem como as linhas da tabela de
destinointerna.
junção excluídos
Sepor
umaesse
junção retorna os resultados de uma junção interna, bem como linhas de
tanto a origem
tabelas excluídas
eo por
destino
essa junção interna, em seguida, uma junção externa completa tenha sido
realizada.
Left Outer Joins
O formato da sintaxe para a esquerda OUTER JOIN cláusula é a seguinte:
SELECIONAR tabela1.coluna, tabela2.coluna
DE table1
LEFT OUTER JOIN table2
EM ( tabela1.coluna = tabela2.coluna );
Uma junção externa esquerda efectua uma junção interna da tabela 1 e tabela2 com base na
a palavra-chave
condição especificada
ON. Quaisquer
depoislinhas da tabela na esquerda da palavra-chave JOIN excluídos por
anão
condição
cumprirde junção também são devolvidos. Considere as duas consultas a seguir:
Consultas 1 e 2 são idênticos, exceto para as cláusulas, que têm as palavras-chave junção externa
JOIN esquerda
e JOIN, respectivamente. Consulta 2 executa uma junção interna, e sete linhas são retornadas.
linhas compartilham valores DEPARTMENT_ID idênticos em ambas as tabelas. Consulta 1 retorna
Estes
eosuma
mesmos
linhasete
adicional.
linhas Esta linha extra é obtida a partir da tabela à esquerda da palavra-chave JOIN,
que é a tabela SERVIÇOS. É a linha que contém detalhes do departamento de folha de pagamento. o
junção interna não inclui esta linha desde há funcionários estão atualmente atribuído ao
departamento.
A Figura 10-10 mostra uma junção externa esquerda. A junção interna produz 27 linhas com
correspondência
valores location_id em ambas as tabelas. Existem 43 linhas no total, o que implica que 16 linhas
recuperado da tabela Locais, que está na esquerda da palavra-chave JOIN. Nenhuma das linhas
foram
a partir da tabela SERVIÇOS contém qualquer um destes 16 valores location_id.
Figura 10-10 esquerda junção externa
EM ( tabela1.coluna = tabela2.coluna );
Uma junção externa direita executa uma junção interna da tabela 1 e Tabela2 com base na
especificada
condição após
de junção
a palavra-chave ON. Linhas da tabela à direita da palavra-chave JOIN, excluídos
a condição de junção, também são devolvidos. Considere a seguinte consulta:
por
A junção interna produz sete linhas contendo detalhes para os funcionários com LAST_NAME
valores que começam com a letra G . A tabela EMPREGADOS é o direito da palavra-chave JOIN.
Qualquer
registros de funcionários que não estejam em conformidade com a condição de junção estão
incluídos, da
Condição desde
cláusula
que em
WHERE.
conformidade
Além disso,
com aa junção externa direita obtém um registro de
LAST_NAME
funcionário comdeumGrant. Este registro tem atualmente um valor DEPARTMENT_ID nulo. a junção
exclui
internao registro uma vez que nenhum DEPARTMENT_ID é atribuído a este funcionário.
Figura 10-11 mostra uma junção externa direita entre as tabelas JOB_HISTORY e funcionários.
tabela
o EMPREGADOS está à direita da palavra-chave JOIN. As elimina palavra-chave distinct
duplicar combinações de valores JOB_ID das tabelas. Os resultados mostram os postos de trabalho
que os funcionários
historicamente esquerda. Os trabalhos que não os funcionários deixaram também são devolvidos.
Estes
na coluna
têm “Jobs
um valor
em nulo
JOB_HISTORY”.
EM ( tabela1.coluna = tabela2.coluna );
A junção externa completa retorna os resultados combinados de uma esquerda e direita junção
e table2
externa.
é realizada
Uma junção
antesinterna
linhas excluídos
de table1 pela condição de junção de ambas as tabelas são
o conjunto de resultados.
mescladas
O tradicional sintaxe do Oracle juntar não suporta uma associação externa completa, que
combinando
normalmente
os resultados
é realizada
de um externa esquerda e direita aderir utilizando o operador de conjunto
UNIÃO descrito
Capítulo 11 . Considere
em a junção externa completa mostrada na Figura 10-12 . A cláusula WHERE
restringe o para linhas com valores NULL DEPARTMENT_ID mostra as linhas órfãs em ambas as
resultados
étabelas.
uma ficha
Lá na mesa de funcionários que não tem valores DEPARTMENT_ID, e existem 16
departamentos para que nenhum funcionário pertence.
4. A ESQUERDA EXTERIOR cláusula de junção com o quadro alvo alias é como se segue:
A Figura 10-13 mostra uma junção cruzada entre as regiões e países tabelas. Há 4
linhas em regiões e 25 linhas nos países. Desde a cláusula WHERE limita as regiões
tabela a dois de quatro linhas, o produto cartesiano produz 50 (25 × 2) registos. Os resultados são
em ordem alfabética, pela primeira vez no REGION_NAME e depois no COUNTRY_NAME. O
classificados
primeiro
o par de valores
registroda
tem
Ásia e da Argentina. Quando o REGION_NAME muda, o primeiro registro tem
seguinte par de valores: Oriente Médio e África e Argentina. Observe que o COUNTRY_NAME
o
Os valores são repetidos para cada REGION_NAME.
Figura 10-13 Os junção cruzada
Exercício 10-5: Realizando uma junção cruzada Você é obrigado a obter o número de linhas na
Funcionários e departamentos mesas, bem como o número de registros que serão criados
por um produto cartesiano das duas tabelas. Confirmar seus resultados através da contagem de forma
explícita e
multiplicando o número de linhas presentes em cada uma dessas tabelas.
5. contagem explícita das linhas presentes nas tabelas de origem são realizadas utilizando o
seguinte:
6. multiplicação explícita dos valores resultantes das consultas anteriores pode ser realizado por
consultando a tabela DUAL.
7. Executar estas declarações revela que existem 107 registros na tabela EMPREGADOS, 27
registros na tabela de departamentos e 2.889 registros no produto cartesiano destes
dois conjuntos de dados, como mostrado na figura a seguir:
Broca Two-Minute
Escrever SELECTs para acessar dados de mais de uma tabela Usando
Equijoins e Nonequijoins
• Equijoining ocorre quando uma consulta obtém os valores da coluna de várias tabelas em que
o linhas cumprir uma condição de associação à base de igualdade.
• A natural união é realizada usando o NATURAL JOIN sintaxe quando a origem eo destino
mesas são implicitamente equijoined usando todas as colunas com nomes idênticos.
• O JOIN. . . Usando a sintaxe permite uma junção interna a ser formada em colunas específicas
com
nomes compartilhados.
• notação de ponto refere-se a qualificar uma coluna pré-fixando com o seu nome de tabela e
umsímbolo
ponto ou
período. Este designa a mesa uma coluna origina e diferencia de
nome idêntico colunas de outras tabelas.
• O JOIN. . . Cláusula ON permite a especificação explícita de se juntar colunas,
independentemente
os nomes das colunas.
da sua
Isto fornece um formato juntar flexível.
• ON, utilização e palavras-chave natural são mutuamente exclusivos e, portanto, não pode
aparecem juntos em uma cláusula de junção.
• A nonequijoin é realizada quando os valores nas colunas de associação cumprir a condição de
junção
em uma
comexpressão
base desigualdade.
Auto teste
As seguintes perguntas irá ajudá-lo a medir sua compreensão do material apresentado neste
capítulo. Leia todas as opções com cuidado porque pode haver mais de uma resposta correta.
todas as respostas corretas para cada questão.
Escolher
A. Equijoin
B. Nonequijoin
C. Cross JOIN
D. Outer join
4 . Qual das seguintes afirmações são sintaticamente correto? (Escolha todos os que se
aplicam.)
A. SELECT * DE TRABALHADORES E ADERIR D departamentos USANDO
(DEPARTMENT_ID);
B. SELECT * FROM Funcionários Cadastre DEPARTAMENTOS D UTILIZAÇÃO
(D.department_id);
C. SELECCIONAR d.department_id TRABALHADORES DE PARTICIPAR D
departamentos
USANDO (DEPARTMENT_ID);
D. Nenhuma das anteriores
5 . Qual das seguintes afirmações são sintaticamente correto? (Escolha todos os que se
aplicam.)
A. SELECIONAR E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, CURRENT_JOB
E.JOB_ID
DE JOB_HISTORY J CROSS JOIN PESSOAL E EM
(J.START_DATE = E.HIRE_DATE);
B. SELECIONAR E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, CURRENT_JOB
E.JOB_ID
DE JOB_HISTORY J ADERIR PESSOAL E EM
(J.START_DATE = E.HIRE_DATE);
C. SELECIONAR E.EMPLOYEE_ID, J.JOB_ID PREVIOUS_JOB, CURRENT_JOB
E.JOB_ID
DE JOB_HISTORY J OUTER JOIN PESSOAL E EM
(J.START_DATE = E.HIRE_DATE);
D. Nenhuma das anteriores
6 . Escolha uma afirmação correta sobre a seguinte consulta:
A. 2
B. 3
C. 4
D. Nenhuma das anteriores
8 . Escolha uma afirmação correta sobre a seguinte consulta:
Respostas de auto-teste
1. D . Todas as consultas são incorretas, então D é a escolha correta.
A , B , e C são incorrectas. A está incorreta porque a consulta executa uma junção
natural
junta-se que
implicitamente as duas tabelas em todas as colunas com nomes idênticos, que, neste
caso, são
DEPARTMENT_ID e MANAGER_ID. B e C são incorrecta porque as consultas
incorretamente contêm a palavra-chave NATURAL. Se este for removido, eles vão se juntar
aDepartamentos e funcionários tabelas com base na coluna DEPARTMENT_ID.
2. A , B , e C . Estas cláusulas demonstrar técnicas diferentes para unir as tabelas, tanto no
DEPARTMENT_ID e manager_id colunas.
D está incorreta porque há respostas corretas dadas.
3. B . A condição de junção é uma expressão baseado no menos de operador de
desigualdade.
Portanto, esta associação é uma nonequijoin.
A , C , e D estão incorrectos. Um seria correto se o operador na condição de junção
expressão era um operador de igualdade. O CROSS JOIN palavras-chave ou a ausência de
uma junção
condição resultaria em C sendo verdadeira. D seria verdadeiro se um dos OUTER JOIN
foi usada em vez da união. . . Cláusula ON.
cláusulas
4. Um . Esta declaração demonstra o uso correto do JOIN. . . UTILIZAÇÃO cláusula.
B , C , e D estão incorrectos. B está incorreta uma vez que apenas nomes de coluna não
qualificados
permitidos são
nos suportes depois da palavra-chave usando. C é incorrecta porque a coluna em
entre parênteses após a palavra-chave usando não pode ser referenciado com um
qualificador no SELECT
cláusula. D está incorreta uma vez que há uma resposta correta.
Objetivos do exame
Neste capítulo, você vai aprender a
definir Subqueries
Uma subconsulta é uma consulta que está aninhado dentro de SELECT, INSERT, um UPDATE, ou
DELETE
dentro de outro
ou subconsulta. Uma subconsulta pode retornar um conjunto de linhas ou apenas uma
linha para
escalar subconsulta
a sua consulta
é umapai.
consulta
UMA que retorna exatamente um valor: uma única linha, com uma
única coluna.pode
subconsultas Escalar
ser usado na maioria dos lugares em uma instrução SQL onde você poderia usar
uma expressão
valor literal. ou uma
Os lugares em uma consulta, onde uma subconsulta podem ser usados são os seguintes:
Uma subconsulta é muitas vezes referida como um interior consulta, ea declaração em que ele
chamou
ocorreo exterior
é, então,consulta. Não há nada de errado com essa terminologia, exceto que ela pode
implicar
pode ter apenas
que vocêdois níveis, interiores e exteriores. Na verdade, a implementação do Oracle de
subconsultas
impor quaisquer
nãolimites práticos sobre o nível de aninhamento. A profundidade de aninhamento
subconsulta
ilimitada na permitido é
cláusula FROM e é limitado a 255 níveis na cláusula WHERE.
EXAME TIP Subqueries podem ser aninhadas até uma profundidade ilimitada em uma cláusula
FROM,em
níveis mas
uma“apenas”
cláusula255
WHERE. Elas podem ser usadas na lista SELECT e no FROM, WHERE, e
TENDO cláusulas de uma consulta.
Uma subconsulta pode ter qualquer uma das cláusulas usuais para a selecção e projecção. A
cláusulas
seguir,exigidas:
são
• A lista SELECT
• A cláusula FROM
• ONDE
• POR GRUPO
• TENDO
A subconsulta (ou subqueries) dentro de uma declaração deve ser executado antes da consulta
chama-lo
pai quepara que os resultados da subconsulta pode ser passado para o pai.
Exercício 11-1: Explore Tipos de Subqueries Neste exercício, você vai escrever um código que
demonstra os lugares onde subqueries podem ser usados. Use o SQL * Plus ou SQL Developer.
as consultas deve ser executado quando conectado ao esquema HR.
Todos
1. Inicie a sessão no seu banco de dados como o usuário HR.
2. Crie uma consulta que usa subconsultas na lista de projeção coluna. A consulta apresentará
umnúmeros
relatórioatuais
sobre de
o departamentos e funcionários.
3. Crie uma consulta para identificar todos os funcionários que são gerentes. Isso vai exigir o
usosubconsulta
de um na cláusula WHERE para selecionar todos os funcionários cujo
EMPLOYEE_ID
como um MANAGER_ID.
aparece
4. Crie uma consulta para identificar o maior salário pago em cada país. Isso vai exigir o uso de
umsubconsulta na cláusula FROM.
Neste exemplo, o subconsulta é utilizado para substituir um valor na cláusula WHERE da mãe
inquerir; ele retorna um valor único, utilizado para comparação com as linhas recuperadas pela
consulta pai.
A subconsulta poderia retornar um conjunto de linhas. Por exemplo, você poderia usar o seguinte
departamentos
para encontrarquetudo
têm um ou mais funcionários atribuídos a eles:
No exemplo anterior, a subconsulta é usado como uma alternativa para uma junção interna. Você
obter
poderia
o mesmo resultado com a seguinte:
Se a subconsulta está indo para retornar mais de uma linha, então o operador de comparação
devevários
aceitar ser capaz de Estes operadores são IN, NOT IN, ANY e ALL. Se o operador de comparação
valores.
representa qualquer um dos operadores de igualdade ou desigualdade escalares (que cada um pode
aceitar apenas
consulta pai iráum
falhar.
valor), o
DICA Usando NOT IN é cheio de problemas por causa da maneira SQL lida com valores nulos.
Como não
regra, geraluse NOT IN, a menos que você esteja certo de que o conjunto de resultados não irá incluir
um NULL.
Transformação estrela
Uma extensão do uso de subconsultas como uma alternativa para uma junção é permitir a
transformação
muitas vezes necessários
da estrela em aplicações de data warehouse. Considere a tabela SALES grande no
esquema
usada paradegravar
demonstração
transaçõesSHde vendas. Cada linha captura de um determinado produto vendido a
umcliente
do particular,
através de um canal em particular. Estes atributos são identificados por códigos de
pesquisapara
chaves usado
dimensionar
como estrangeira
tabelas com linhas que descrevem cada produto, cliente e canal. Para
identificar
vendas de um
todos
item chamado heróis de quadrinhos para os clientes na cidade de Oxford através de
ordens
você de Internet,
pode executar a seguinte consulta:
Esta consulta utiliza a cláusula WHERE para unir as tabelas e, em seguida, para filtrar os
resultados. Os seguintes
é uma consulta alternativa que irá produzir o mesmo resultado:
Neste uso, a lista SELECT usado para colunas projeto está sendo preenchida com os resultados
subconsultas.
da Uma subconsulta usado dessa maneira deve ser escalar ou a consulta pai vai falhar
com um erro.
Gerar linhas a serem passados para uma instrução DML
Instruções DML são abordados em detalhes no Capítulo 10 . Por enquanto, considere estes
exemplos:
O primeiro exemplo utiliza uma subconsulta para identificar um conjunto de linhas de uma
outro.
tabela
O segundo
que serão
exemplo
inseridos
usa uma subconsulta para calcular o salário médio de todos os
funcionários
passa esse valor
e (a quantidade escalar) para uma instrução de atualização. O terceiro exemplo utiliza
uma subconsulta
recuperar todos ospara
DEPARTMENT_IDs que estão em uso e passa a lista para um comando
DELETE, que
irá remover todos os departamentos que não estão em uso. Observe o uso da cláusula WHERE
adicional no para garantir que nenhum valores nulos são devolvidos pela subconsulta. Se esta
subconsulta
cláusula
linhas seriam
estavam
excluídos.
ausentes, não
EXAME TIP Uma subconsulta pode ser usado para selecionar linhas para inserção, mas não de uma
cláusula VALUES de uma
INSERT.
Note que não é legal usar uma subconsulta na cláusula VALUES de uma instrução de inserção. o
Segue-se bem:
4. Crie uma consulta para identificar todos os funcionários que ganham mais do que a média e
quequalquer
trabalham
umem
dos departamentos de TI. Isso exigirá duas subconsultas, não aninhados.
Se qualquer um dos operadores na tabela anterior são utilizados com uma subconsulta que
retorna
fileira, mais do
a consulta iráque um Os operadores na tabela a seguir pode usar subconsultas de várias linhas:
falhar.
EXAME TIP Os operadores de comparação válidos para subconsultas de uma única linha são =,>,>
=,
Os<, <=, e <>. de comparação válidos para subconsultas de várias linhas são IN, NOT IN, ANY, e
operadores
ALL.
Subconsultas correlacionadas
A subconsulta correlacionada tem um método mais complexo de execução do que simples e
subqueries e é potencialmente muito mais poderoso. Se uma subconsulta referencia colunas no pai
múltipla-row
consulta, em seguida, seu resultado será dependente da consulta pai. Isso torna impossível avaliar a
subconsulta antes de avaliar a consulta pai. Considere esta declaração, que lista todos os
funcionários
ganham menosqueque o salário médio:
A subconsulta de fileira única precisa de ser executado apenas uma vez, e o resultado será
consulta
substituído
pai. Mas
na agora considerar uma consulta que irá listar todos os funcionários cujo salário é
inferiormédio
salário ao de seu departamento. Neste caso, a subconsulta deve ser executado para cada
funcionário
determinar o salário médio de seu departamento; é necessário passar departamento do empregado
código para a subconsulta. Isso pode ser feito da seguinte forma:
Neste exemplo, a referência a uma coluna subconsulta, p.department_id , a partir da lista de
consulta
selecção
pai. do
Este é o sinal de que em vez de avaliar a subconsulta uma vez, ele deve ser avaliado
para
cada linha da consulta pai. Para executar a consulta, a Oracle vai olhar para cada linha em
funcionários
e, como ele faz isso, execute o subconsulta usando o DEPARTMENT_ID da linha atual do
empregado.
O fluxo de execução é a seguinte:
Uma única linha ou subconsulta de várias linhas é avaliada uma vez, antes de avaliar a consulta
subconsulta
externa; uma
correlacionada deve ser avaliada uma vez para cada linha na consulta externa. A
subconsulta
pode ser umacorrelacionada
simples ou de várias linhas subconsulta, se o operador de comparação é apropriado.
TIP Correlated subconsultas pode ser uma construo ineficiente devido à necessidade de repetidas
execução da subconsulta. Sempre tentar encontrar uma abordagem alternativa.
Exercício 11-3: Investigar os diferentes tipos de Subqueries Neste exercício, você vai
demonstrar os problemas que podem ocorrer com diferentes tipos de subconsultas. Use o SQL * Plus
ou SQL
Desenvolvedor. Todas as consultas devem ser executados quando conectado ao esquema HR;
presume-se
tabela EMPREGADOS
que o tem os conjuntos padrão de linhas.
Isto irá falhar com o erro “ORA-01427: única linha subconsulta retorna mais de uma linha.”
Determinar por que a consulta na etapa 2 sucedido mas a um em etapa 3 falhou. A resposta
estádados.
os na
O uso do “maior que” operador nas consultas para as etapas 2 e 3 requer uma única linha
subconsulta, mas a subconsulta utilizada pode retornar qualquer número de linhas,
dependendo
predicado utilizado.
da pesquisa
4. Fixar o código nas
LAST_NAME etapasAqui
é usado. 2 e 3estão
para duas
que as declarações
soluções vai terum
possíveis: sucesso,
usa umanão importa o que
comparação
operador que pode lidar com uma subconsulta de várias linhas; o outro usa uma subconsulta
diferente
queum
ser serásubconsulta
sempre de fileira única.
Aqui está a primeira solução:
No exemplo anterior, subqueries são aninhados três níveis de profundidade. Note-se que os
o operador
subqueries
IN, usar
porque é possível que as consultas podem retornar várias linhas.
Você foi solicitado para encontrar o emprego com o maior salário médio. Isso pode ser feito com
subconsulta
um única linha.
A subconsulta retorna um único valor: o salário médio do departamento com a maior média
salário. É seguro usar o operador de igualdade para esta subconsulta porque as garantias de função
que apenas uma linha será devolvido.
MAX
Os todas e quaisquer operadores são suportados sintaxe, mas sua função pode ser duplicado com
operadores
outros combinados com agregados mais comumente usado. Por exemplo, estas duas
que recuperar todos os funcionários cujo salário é maior do que qualquer um no departamento 80,
declarações,
conjuntos de resultados idênticos:
voltará
compara se EMPLOYEE_ID <> ALL, e uma vez que um NULL está presente na subconsulta, a
declaração não retorna nenhuma linha. Você pode garantir que não nulos são devolvidos na
subconsulta
Cláusula WHERE,
usandocomo
um na segunda instrução que retorna os 89 funcionários que não são gestores.
EM operador é equivalente a = QUALQUER. Não há nenhum problema com valores nulos no
o
conjuntodeclaração
terceira de resultados,
retorna
eo os 18 funcionários que são gerentes.
Estes comandos são equivalentes aos operadores padrão usados na matemática a teoria dos
representada
conjuntos,graficamente
muitas vezescomo diagramas de Venn.
O círculo no topo esquerdo da figura representa o conjunto de criaturas de duas pernas, o círculo
no direito consiste de criaturas que pode voar, e o círculo de fundo é animais peludos. Os
superior
intersecções, e desvantagens dos conjuntos são imediatamente evidentes através da observação dos
sindicatos,
elementos
várias partes
nados círculos que fazem ou não se sobrepõem. O diagrama na figura também inclui o
conjunto universal, representado pelo retângulo. O conjunto universal é todos os elementos que
existem,
que incluindo
não são aqueles
membros dos conjuntos definidos. Neste caso, o conjunto universal seria definido como
todos os seres
criaturas, incluindo
vivosaqueles que não desenvolveram pele, duas pernas, ou a capacidade para fazer (tal
como peixe).
Isso é matemática da escola o suficiente; agora avançar para a implementação dentro do SQL.
TIP Dada a alteração pendente na prioridade operador, pode ser uma boa prática sempre usar
parênteses. Isto irá assegurar que a função do código não vai mudar quando executado contra uma
versão posterior
do banco de dados.
Cada consulta em uma consulta composto irá projectar a sua própria lista de colunas
temselecionadas.
o mesmo número
Essasdelistas
elementos,
devem ser indicado na mesma sequência, e ser de dados globalmente
tipo. Eles não precisam ter os mesmos nomes (ou aliases de coluna), nem precisam vir do
semelhante
mesmas tabelas (ou subconsultas). Se os nomes das colunas (ou aliases) são diferentes, o conjunto de
resultadoscomposto
consulta da terá colunas nomeadas como estavam na primeira consulta.
EXAME DICA As colunas nas consultas que compõem uma consulta composto pode ter nomes
mas o conjunto de resultados de saída usará os nomes das colunas na primeira consulta.
diferentes,
Enquanto as listas de colunas projetadas não tem que ser o mesmo tipo de dados, eles devem ser
grupodo de
mesmo
tipos de dados. Por exemplo, as colunas seleccionadas por uma consulta pode ser de tipos
de dados e DATA
NÚMERO, e aqueles a partir da segunda consulta poderia ser TIMESTAMP e INTEIRO. O conjunto
adeconsulta
resultadoscomposto
de terá colunas com o mais elevado nível de precisão; neste caso, eles seriam
TIMESTAMP e número. Outros que aceitar tipos de dados a partir do mesmo grupo, os operadores
de conjunto
não vai fazer qualquer conversão implícita de tipo. Se a segunda consulta recuperados colunas do
tipo VARCHAR2,
consulta composto oiria lançar um erro, mesmo que as variáveis de cadeia poderia ser resolvido para
data e valores numéricos.
legitimar
TIP EXAME As colunas correspondentes das consultas que compõem uma consulta composto deve
sermesmo
o de grupo de tipos de dados.
EXAME TIP Uma consulta composto, por padrão, retornar linhas classificadas em todas as colunas,
da esquerda
para a direita. A única exceção é UNION ALL, onde as linhas não serão classificados. O único lugar
onde
um ORDER BY é permitida é no final da consulta composto.
Exercício 11-4: Descrever os operadores de conjunto Neste exercício, você vai ver o efeito do
operadores. De qualquer SQL * Plus ou SQL Developer pode ser usado.
conjunto
A segunda consulta irá remover todas as linhas na primeira consulta. O resultado é que há
linhas são
esquerda.
O operador de união
A UNIÃO realiza uma UNION ALL e, em seguida, ordena o resultado em todas as colunas e
duplicatas. A primeira consulta na Figura 11-3 retorna todas as quatro linhas porque não há
remove
No entanto, as linhas estão agora em ordem. Pode parecer que as duas primeiras linhas não estão em
duplicatas.
ordem
os por em
valores causa de
datados, mas eles são. O DNAME nas OLD_DEPTS tabela é de 20 bytes de
comprimento
com espaços),(acolchoado
enquanto o DNAME em NEW_DEPT, onde é um VARCHAR2, é apenas enquanto o
nome próprio. Os espaços dar a linha de OLD_DEPT um valor tipo superior, mesmo que o valor de
é menos.
data
Figura 11-3 consultas compostas UNIÃO
EXAME TIP A UNION ALL retornará linhas agrupadas de cada consulta em sua ordem natural.
comportamento pode ser modificado pela colocação de uma única ordem BY no final.
este
A segunda consulta na Figura 11-3 remove quaisquer espaços esquerda ou à direita do DNAME
colunas e corta os elementos de tempo de datado e DINICIAL. Duas das linhas tornam-se assim
idêntico para que apenas um, aparece na saída.
Por causa do tipo, a ordem das consultas em uma consulta composto UNIÃO faz diferença para
a ordem das linhas retornadas.
DICA Se você sabe que não pode haver duplicatas entre duas tabelas, em seguida, use sempre
UNION
Ele salvaALL.
o banco de dados de fazer um monte de classificação. Seu DBA não vai estar satisfeito
com você, se você usar
UNIÃO desnecessariamente.
O operador de intersecção
A intersecção de dois conjuntos é as linhas que são comuns a ambos os conjuntos, como se mostra
na Figura 11-4 .
Figura 11-4 cruzam e MENOS
A primeira consulta mostrada na Figura 11-4 retorna nenhuma linha, porque cada linha nas duas
diferente.
tabelasEm
é seguida, aplicando funções para eliminar algumas das diferenças retorna a uma linha
comum.
Neste caso, apenas uma linha é retornada; se tivesse havido várias linhas comuns, eles estaria em
A ordem em que as consultas aparecem na consulta composto não tem efeito sobre isso.
ordem.
O operador MINUS
A MENOS corre ambas as consultas, classifica os resultados, e retorna somente as linhas a partir do
primeiro
não aparecer
conjunto
no segundo
de resultados
conjunto
quedefazer
resultados.
A terceira consulta na Figura 11-4 retorna todas as linhas em OLD_DEPT porque não há
linhas
correspondência
em NEW_DEPT. A última consulta força algo em comum, fazendo com que uma das linhas a
serem
removido. Por causa da ordenação, os registros estarão em ordem independentemente da ordem em
que as consultas
aparecem na consulta composto.
Este voltaria consultores que não estão na lista negra e, em seguida, acrescentar todo o pessoal
Alternativamente,
permanente. os parênteses pode controlar a precedência explicitamente.
Esta consulta irá listar todos os funcionários permanentes e, em seguida, anexar todos os
na lista
funcionários
negra. consultor que não são
Estas duas consultas retornará as mesmas linhas, mas a ordem será diferente porque a União
TODAS as operações listar as tabelas PERMSTAFF e consultores em uma sequência diferente. Para
garantir
que as consultas retornam conjuntos de resultados idênticos, não seria necessário uma cláusula
ORDER
as consultas
BYcompostas.
ao pé da
CUIDADO As duas consultas anteriores irá retornar as mesmas linhas, mas a segunda versão
poderia ser melhor código porque os parênteses torná-lo mais auto-documentado. Além disso,
considerado
em precedência implícita com base na ordem das consultas funciona no momento, mas versões
baseando-se
SQL podem incluir conjunto precedência do operador.
futuras
que entraria em conflito com o ORDER BY. Pode parecer teoricamente possível que um UNION
ALL
(Que não classificar as linhas) pode levar uma ORDER BY para cada consulta, mas o Oráculo
implementação de UNION ALL não permite isso.
Não há qualquer problema com a colocação de um ORDER BY no final da consulta composto,
Contudo. Isto irá resolver todo o resultado da consulta composto. A ordenação padrão de linhas é
em todas as colunas na seqüência em que aparecem. A ordem especificada pelo cláusula não tem
baseado
restrições;
pode basear-se
isto em quaisquer colunas (e funções aplicadas a colunas) em qualquer ordem. Aqui está
um exemplo:
Broca Two-Minute
definir Subqueries
• Uma subquery é uma instrução SELECT incorporada dentro de outra instrução SQL.
• Subconsultas podem ser aninhados uns dentro dos outros.
• Com exceção da subconsulta correlacionada, subqueries são executados antes da consulta
externa
dentro do qual estão inseridos.
• subconsultas de uma única linha deve ser usada com operadores de comparação de uma única
linha.
• subconsultas de várias linhas devem ser usados com operadores de comparação de várias
linhas.
• A todos e quaisquer operadores podem ser alternativas para usar de agregações.
Auto teste
1 . Considere esta descrição genérica de uma instrução SELECT:
F. expressão_3
2 . A consulta pode ter uma subconsulta incorporado dentro dele. Em que circunstâncias
poderia
mais haver
do que uma subconsulta? (Escolha a melhor resposta.)
A. A consulta externa pode incluir uma consulta interna. Não é possível ter outra consulta
dentro da consulta interna.
B. É possível incorporar uma subconsulta única linha dentro de uma subconsulta de várias
linhas,
contrário.
mas não o
C. A consulta externa pode ter várias consultas internas, mas eles não devem ser encaixado
dentro
entre si.
D. Subqueries pode ser incorporado dentro do outro, sem limitações práticas em
profundidade.
3 . Considere a seguinte declaração:
O que pode ser dito sobre as duas declarações? (Escolha duas respostas corretas.)
A. As duas declarações devem gerar o mesmo resultado.
B. As duas declarações podem gerar resultados diferentes.
C. A primeira declaração sempre será executado com sucesso; a segunda instrução será erro
se houver
são dois departamentos com department_name = 'Executive'.
D. Ambos declarações sempre será executado com sucesso, mesmo se houver dois
departamentos
Department_name
com = 'Executive'.
6 . Quais são as características distintivas de uma subconsulta escalar? (Escolha duas correta
respostas.)
A. Uma subconsulta escalar retorna uma linha.
B. Uma subconsulta escalar retorna uma coluna.
C. Uma subconsulta escalar não pode ser usado na lista de seleção da consulta pai.
D. Uma subconsulta escalar não pode ser usado como um subconsulta correlacionada.
7 . Qual operador de comparação não pode ser usado com subconsultas de várias linhas?
(Escolha
responda.)
o melhor
A. ALL
B. QUALQUER
C. IN
D. NOT IN
E. Todos os acima pode ser utilizado.
8 . Considere a seguinte declaração:
O que está errado com isso? (Escolha a melhor resposta.)
A. Nada é errado, a declaração deve ser executado sem erro.
B. A declaração falhará porque a subconsulta na lista SELECT faz referência a uma tabela
quenão
é listados na cláusula FROM.
C. A declaração falhará se a segunda consulta retorna mais de uma linha.
D. A declaração será executado, mas é extremamente ineficiente por causa da necessidade
de executar
subconsulta
a segunda
uma vez para cada linha em funcionários.
O que aconteceria se um valor foram dadas para & Nome que não corresponde com nenhuma
linha de
Empregados? (Escolha a melhor resposta.)
A. A declaração iria falhar com um erro.
B. A declaração voltaria cada linha na tabela.
C. A declaração iria retornar nenhum registro.
D. A declaração iria retornar todas as linhas onde JOB_ID é nulo.
11 . Qual destes operadores estabelecidos não vai classificar as linhas? (Escolha a melhor
resposta.)
A. INTERSECT
B. MINUS
C. UNIÃO
D. UNION ALL
12 . Qual destes operadores irá remover linhas duplicadas a partir do resultado final? (Escolha
tudoAplique.)
o que
A. INTERSECT
B. MINUS
C. UNIÃO
D. UNION ALL
13 . Se um composto de consulta contém tanto um operador MENOS e um operador de
intersecção, que em primeiro lugar? (Escolha a melhor resposta.)
será aplicado
A. O INTERSECT, porque INTERSECT tem precedência maior do que de menos.
B. A MENOS, porque MINUS tem uma precedência maior do que se cruzam.
C. A precedência é determinada pela ordem em que são especificados.
D. Não é possível para um composto de consulta para incluir tanto MENOS e cruzam.
14 . Existem quatro linhas na tabela REGIÕES. Considere as seguintes afirmações, e escolha
quantas linhas serão devolvidos para cada um: 0, 4, 8 ou 16:
Respostas de auto-teste
1. A , B , C , e E . Subqueries pode ser usado em todos estes pontos.
D e F são incorrectas. Uma subconsulta não pode ser usado no GROUP BY e ORDER
BY de uma consulta.
cláusulas
2. D . Nidificação Subquery pode ser feito para muitos níveis.
A , B , e C são incorrectas. A e C são incorrecta porque subconsultas podem ser
incorreto,
aninhados.
pois oBnúmero
é de linhas retornadas não é relevante para subqueries nidificação, só
os operadores serem usadas.
para
3. Um . O conjunto de resultados da consulta interna é necessária antes da consulta externa
pode
B , C ser
,eD executado.
estão incorrectos. B e C não são possíveis porque o resultado da subconsulta
é
necessária antes da consulta pai pode começar. D está errado porque a subconsulta é
executado apenas uma vez.
4. D . Esta é uma subconsulta correlacionada que deve ser executado para cada linha na
tabela.
A , B , e C são incorrectas. O resultado da consulta interna é dependente de um valor do
consulta externa; deve, portanto, ser executado uma vez para cada linha.
5. A e D . As duas declarações irá entregar o mesmo resultado, e nem falhará se o
nome é duplicado.
B e C são incorrectas. B é incorrecta porque as declarações são funcionalmente
idênticos,
embora sintaticamente diferente. C é incorrecta porque o operador de comparação utilizado,
EM, pode
lidar com uma subconsulta de várias linhas.
6. A e B . Uma subconsulta escalar pode ser definida como uma consulta que retorna um
único
C e D valor.
são incorrectas. C é incorrecta porque uma subconsulta escalar é o único que
podesubconsulta
ser usado na lista de seleção. D é incorrecta porque subconsultas escalares podem ser
correlacionados.
7. E . ALL, ANY, IN, e não são os operadores de comparação de várias linhas.
A , B , C , e D estão incorrectos. Todos estes podem ser usados.
8. C . O operador de igualdade exige uma subconsulta de uma única linha, ea segunda
retornar
subconsulta
várias linhas.
poderia
A , B , e D são incorrectas. A está incorreta porque a instrução falhará em todos
circunstâncias, exceto no caso improvável onde há zero ou um empregado. B é incorrecta
porque este não é um problema; lá não precisa ser uma relação entre a fonte de
dados para as consultas interior e exterior. D está incorreta porque a subconsulta será
executado
não é uma apenas
subconsulta
uma vez;
correlacionada.
isto
9. A e B . Estes são idênticos.
C e D são incorrectas. C é logicamente a mesma que A e B , mas não é sintacticamente
possível; ele vai te dar um erro. D sempre retornará nenhuma linha, pois ele pede para todos
funcionários que têm um salário mais baixo do que todos os funcionários. Este não é um
erro, masquaisquer
devolver nunca pode linhas. O filtro de departamentos não é relevante.
10. C . Se uma subconsulta retorna NULL, a comparação também retornará NULL, o que
significa
linhas que não
serão recuperadas.
A , B , e D são incorrectas. A está incorreta porque isso não causaria um erro. B é
incorreta porque uma comparação com NULL retornará nada, nem tudo. D é incorrecta
porque uma comparação com NULL nunca pode retornar nada, nem mesmo outros nulos.
11. D . UNION ALL retorna linhas na ordem em que eles são entregues pelas duas
que aconsultas
consultade
composto é composta.
A , B , e C são incorrectas. INTERSECT, MINUS e UNIÃO todo o uso de ordenação
sua execução.
como parte de
12. A , B , e C . INTERSECT, MINUS e UNIÃO toda remover linhas duplicadas.
D está incorrecta. UNION ALL retorna todas as linhas, duplicações.
13. C . Todos os operadores de conjunto têm a mesma precedência, então a prioridade é
determinada
sequência em quepela
elas ocorrem.
A , B , e D são incorrectas. A e B estão incorretas porque rs conjunto operato têm igual
precedência, embora isso possa mudar em versões futuras. D é incorrecta porque muitos
conjunto
os operadores podem ser utilizados em uma consulta composto.
14. A = 4; B = 8; C = 0; D = 4.
Note-se que 16 não é usada; que seria o resultado de uma consulta produto cartesiano.
15. C . Cada consulta em uma consulta composto deve devolver o mesmo número de
colunas.
A , B , D , e E são incorrectas. A está incorreta porque as colunas podem ter diferentes
nomes. B é incorrecta porque as duas colunas são do mesmo grupo de tipos de dados, que é
tudo
o que era necessário. Resulta, assim, que D e E também são incorrectos.
16. B . Você não pode usar ORDER BY para uma consulta de uma consulta composto; você
ORDEM
pode único
colocarBYapenas
no final.
uma
A , C , D , E , e F são incorrectas. Todas essas linhas são legais.
17. B . As linhas de cada consulta estarão juntos, mas não haverá classificação.
A , C , e D estão incorrectos. A não é possível com qualquer sintaxe. C é incorrecta
seriaporque isso de uma união, não um UNION ALL. D está incorreta porque UNION ALL
o resultado
irá retornar as linhas de cada consulta agrupados.
PARTE III
DBA1
Capítulo
Capítulo 12
13 Visão Geral Arquitetural
Gerenciamento do Oracle Database 12 c
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
CAPÍTULO 12
Objetivos do exame
• Lista 062.2.1 os componentes da arquitetura de um banco de dados Oracle
• 062.1.2 Explicar as estruturas de memória
• 062.1.3 descrever as estruturas de processo
• 062.1.4 explicar a relação entre estruturas de armazenamento lógicos e físicos
Um servidor Oracle consiste em duas entidades: a instância eo banco de dados. O exemplo consiste
estruturas de memória e processos, enquanto que o banco de dados é composto por arquivos no
disco. Nonão
servidor oráculo
é completa abstração de armazenamento lógico de armazenamento físico. As estruturas
lógicas
que os programadores ver (como tabelas) não estão diretamente relacionados com as estruturas
físicas (arquivos de
administradores de sistema
dados) que
ver. A relação entre os dois é mantida por estruturas dentro do
controlfile e dicionário de dados.
Gerenciamento de memória em 12 c pode ser totalmente automático. O DBA precisa fazer nada
umamais do que
alocação deespecificar
memória em geral, tanto para a SGA ea PGA e depois deixar a Oracle gerenciar
essa memória
como ele pensa melhor. Alternativamente, o DBA pode controlar as alocações de memória. Como
uma
o DBAtécnica
podeno
definir
meio,certos limites sobre o que a gestão automática pode fazer.
EXAME TIP memória SGA é compartilhado por todo o fundo e os processos de primeiro plano;
memória
só pode ser
PGAacessado pelo processo de primeiro plano da sessão à qual ele foi alocado. Ambos
SGA e PGA de memória podem ser gerenciados automaticamente.
As estruturas físicas que compõem um banco de dados Oracle são os arquivos de dados, o log
redo online
arquivos, e o controlfile. Dentro das estruturas físicas do banco de dados, que o sistema
administradores ver, são as estruturas lógicas que os usuários finais ver. A arquitetura do Oracle
garante abstração da lógica da física; não há nenhuma maneira um programador pode determinar
onde, fisicamente, um bit de dados está localizado. Programadores abordar apenas estruturas lógicas,
tais
mesas.como
Da mesma forma, é impossível para os administradores de sistema para saber o que bits de
dados se encontram
Estrutura física. Tudo emo nenhuma
que posso ver é os arquivos do sistema operacional, não o que está dentro
deles. oÉadministrador
você, somente de banco de dados, que é permitido (e necessário) para ver os dois lados da
história.
A abstracção de armazenamento lógico do armazenamento físico faz parte da base de dados
gestão
relacional
(RDBMS) padrão. Se fosse possível para um programador para determinar o físico
localização de uma linha, em seguida, a execução bem-sucedida do código seria totalmente
dependente
ambiente de oum
para qual ele foi escrito. Alterando a plataforma, movendo os arquivos de dados, e até
mesmo
um arquivo
renomear
iria quebrar a aplicação. É, de fato, possível determinar onde uma mesa (e até mesmo
linha dentro de uma tabela) realmente é, mas não através de SQL padrão. A linguagem não permite
um
isso.fornecidos
são Ferramentas para uso do administrador de banco de dados para fazer isso, caso venha a ser
necessário.
Os dados são armazenados em arquivos de dados. Não há limite prático para o número ou o
abstracção
tamanhodedos armazenamento
arquivos de dados,
lógicoeo
do armazenamento físico significa que os arquivos de dados
pode arquivos
mais ser movido de ou redimensionados
dados e
podem ser adicionados sem os desenvolvedores de aplicativos estar ciente
disto. as
entre O estruturas
relacionamento
físicas e lógicas é mantida e documentado no dicionário de dados, que
contém metadados que descrevem todo o banco de dados. Consultando certas visualizações do
dicionário
o DBA pode de determinar
dados, com precisão onde cada parte de cada tabela reside.
O dicionário de dados é um conjunto de tabelas armazenadas no banco de dados. Há um
problema
aqui: recursivo
A instância tem de estar ciente das estruturas física e lógica de banco de dados, mas o
informações que descrevem esta é em si dentro do banco de dados. A solução para este problema
reside no de
processo encenado
inicialização, que é detalhado no Capítulo 13 .
Um requisito da norma RDBMS é que o banco de dados não deve perder dados. Isto significa
ser apoiada;
que deveAlém disso, todas as alterações feitas aos dados entre os backups devem ser capturados
de tal
forma
forma que eles podem ser aplicados a um backup restaurado. Este é o processo de recuperação
para a frente.a Oráculo
implementa captura de mudanças através do log redo , que é um registro seqüencial de toda a
vectores aplicada aos dados. Um vetor de mudança é a alteração feita por um Data Manipulation
mudança
(DML) (tal como INSERT, UPDATE excluir ou mesclar, discutida no Capítulo 6 ).
Language
Sempre que uma sessão de usuário faz as alterações, os dados no bloco de dados é alterado, ea
mudança
vector é escrito para os lados para o log de redo, de uma forma que torna repetitivo. Então, no caso
danos a um arquivo de dados, um backup do arquivo pode ser restaurado, e Oracle irá extrair a
de
mudançadorelevante
vetores log de redo e aplicá-los para os blocos de dados dentro do arquivo. Isso garante que o
nunca será perdido, a menos que o dano ao banco de dados é tão extensa quanto a perder não só um
trabalho
ou mais de dados, mas também quer os seus backups ou o log de redo.
arquivos
O controlfile armazena os detalhes das estruturas físicas do banco de dados e é o ponto de partida
para o link para as estruturas lógicas. Quando uma instância abre um banco de dados, fá-lo por
primeira leitura,
controlfile. Dentroo do controlfile é uma informação a instância pode usar para conectar-se ao resto
banco
do de dados e dicionário
A arquitectura de dados
de uma base dentro
de dados dela. ico, representado graficamente na Figura 12-1 ,
de objecto
resumidos
pode sercomo consistindo de quatro componentes que interagem:
O processo de usuário é o software de interface do usuário. Poderia ser uma ferramenta simples,
algocomo
mais ocomplicado,
SQL * Plus,como
ou o Microsoft Access, mais o driver ODBC, algo escrito em
C, ou um processo Java rodando em um servidor de aplicativos. Seja o que for, é a ferramenta com a
qual o interage no lado do cliente. É absolutamente impossível para qualquer processo do lado do
usuário
clienteem
entre para
contato
ter qualquer
com o banco de dados. A divisão de cliente-servidor é entre o processo do usuário
e(que
o processo
gera SQL)do servidor (que executa-lo).
Combinações destas opções pode entregar um sistema distribuído que pode atingir a meta de 100
por cento o tempo de atividade e perda de dados zero, com escalabilidade ilimitada e desempenho.
Exercício 12-1: Identificar os componentes do servidor de banco Neste exercício, você será
consultas para determinar se o banco de dados é um sistema auto-contido ou é parte de um maior
executado
meio ambiente, e você também vai identificar os principais componentes.
distribuído
Conecte-se ao banco de dados usando SQL * Plus como usuário SYSTEM e, em seguida, siga
estes passos:
1. Determinar se o exemplo é parte de um banco de dados RAC.
A Figura 12-2 mostra um exemplo de saída. ipcs mostra dois blocos de memória compartilhada
oráculo
propriedade
que compõem
de usuário
o SGA, e ps mostra o processo de uma instância chamada orcl fundo. Seu
saída irá variar dependendo de como sua instância de banco de dados foi nomeado.
sessões de usuário também precisa de memória no lado do servidor. Este é o PGA nonshareable.
terácada sessão PGA privada.
sua própria
EXAME TIP Que estruturas PIG são necessários, e quais são opcionais? O tampão de base de
cache, buffer de log, e piscina comum são necessários; a grande piscina, piscina Java e riachos
dados
piscina são
opcional.
instrução SELECT. O SELECT recupera alguns detalhes para ser enviado para o processo do
usuário,
será onde eles
formatado para exibição. Para executar esta declaração, o processo servidor da sessão irá ler o
bloco de dados que contém a linha relevante a partir de um arquivo de dados para um tampão. O
processo
um diálogode de
utilizador,
tela paraentão,
pedir iniciar
alguma mudança a ser feita e verificada; em seguida, a instrução
aUPDATE
instruçãoe COMMIT será construído e enviado para o processo do servidor para execução.
Forneceu
que um período de tempo excessivo não tiver decorrido, o bloco com a linha ainda estará disponível
cache quando a instrução UPDATE é executado. proporção Neste exemplo, a cache da memória
no
intermédia
por cento: dois
será acessos
atingidode50um bloco no cache, mas apenas uma leitura do bloco do disco. Um bem
banco de dados de cache do tampão pode resultar numa proporção de acertos cache bem mais de 90
afinado
por Um
cento.
tampão de armazenamento de um bloco cuja imagem no cache não é o mesmo que a imagem
referido
em disco
comoé um
frequentemente
sujo tampão. Um tampão será “limpo”, quando um bloco é primeiro copiados para
ele. Emoque
ponto, bloco de imagem em que o tampão é o mesmo que o bloco de imagem em disco. O tampão
sujo quando o bloco na sua actualização. Eventualmente, buffers sujos deve ser escrito de volta para
será
os arquivos
cujo ponto odetampão
dados,será
a limpa de novo. Mesmo depois de ter sido gravado no disco, o bloco
permaneceé em
memória; possível que o tampão não irá ser substituído com um outro bloco durante algum tempo.
Note-se que não há nenhuma correlação entre a frequência de alterações de um tampão (ou o
Compromete)
número de e quando ele é escrito de volta para os arquivos de dados.
EXAME TIP Mudou blocos podem ser gravados arquivos de dados antes ou depois de COMMIT.
No decorrer dasnormal, não é incomum para dados não confirmados a serem gravados para os
funcionamento
arquivos denão
alterações dados
foram
ou escritos.
para comprometida
O tamanho da memória cache base de dados é crítico para o desempenho. O cache deve ser
adequadamente
dimensionado para o cache de todos os blocos freqüentemente acessados (seja limpa ou suja), mas
nãoarmazena
ele tão grandeblocos
que que raramente são necessários. Um cache subdimensionado irá resultar em
atividade
blocos acessados
excessiva
comdofreqüência
disco, comosão continuamente lido do disco, usado, substituído por outros
blocos,
lido e depois
do disco novo. Um cache de grandes dimensões não é tão ruim (contanto que não é tão grande
que a operação
sistema tem que trocar páginas de memória virtual dentro e fora de memória real), mas pode causar
problemas;o para
exemplo, arranque de uma instância é mais lento que se envolve a formatação de um tampão de
base de dados enorme
cache.
EXAME TIP O tamanho da memória cache base de dados pode ser ajustado dinamicamente, e que
pode ser
gerenciados automaticamente.
O cache de buffer do banco de dados é alocado em tempo de inicialização de instância e pode ser
redimensionada
a qualquer momento.para
Estecima ou para baixo empode ser manual ou automática, de acordo com a
redimensionamento
carga de trabalho,
mecanismo tiver sido
se aactivado.
automática
O Log Buffer
O tampão de registo é uma pequena área de teste, a curto prazo para os vectores de mudança antes
de serem
redo escritas
log no disco.para
Um ovetor de mudança é uma modificação aplicada a algo; execução de instruções
gera vectores de alteração aplicada aos dados. O redo log é a garantia do banco de dados que dados
DML
nunca será perdido. Sempre que um bloco de dados é alterado, os vectores de alteração aplicada ao
blocoosão
para log escritos
de redo, de onde podem ser extraídos e aplicados a arquivo de dados backups se é sempre
necessário para restaurar um arquivo de dados. Assim, o arquivo de dados pode ser atualizado.
Refazer não está escrito diretamente para os arquivos de log redo por processos do servidor
sessão.
sessões teriaSeque
fosse, a para o disco I / O operações para completar sempre que executou um DML
esperar
declaração. Em vez disso, sessões de escrever refazer para o buffer de log na memória. Isto é muito
mais rápido
disco. O buffer
do que
de log
escrever
(que contêm
para vectores de mudança de muitas sessões, intercalados com cada
outro) é então escrito nos arquivos de log refazer. Uma gravação da memória intermédia de registo
em disco,
lote por conseguinte,
de muitos pode serdeum
vetores de mudança muitas transações. Mesmo assim, os vectores de mudança no
buffer
são gravados
de log em disco em quase tempo real, e quando uma sessão emite uma instrução COMMIT, o
buffer de gravação realmente acontece em tempo real. As gravações são feitas pelo fundo log
log
processo, a LGWR.
escritor
EXAME TIP O que LGWR fazer quando você cometer? Ele libera todo o buffer de log para o
disco.
faz o DBW
o quen se em cometer? Nada.
O buffer de log é pequeno (em comparação com outras estruturas de memória), porque é um
áreacurto prazo
de armazenamento. vetores de mudança são inseridos nele e são transmitidos para o disco em
tempo
não há quase
necessidade
real. Há
para
simque seja mais do que alguns megabytes no máximo, e de fato o que torna
muitopadrão
valor maior do
pode
queser
o seriamente ruim para o desempenho. O padrão é determinado pelo servidor
e baseia-se no número de CPUs no nó do servidor. O padrão é geralmente correta.
Oracle
Compreender o processamento de COMMIT é vital. Quando uma instrução COMMIT é emitida,
processamento
parte do de cometer envolve escrever o conteúdo do buffer de log nos arquivos de log redo no
disco. esteocorre em tempo real, e enquanto ela está em andamento, a sessão que emitiu o COMMIT
gravação
A garantia de que uma transação confirmada nunca será perdido se baseia em que a comprometer-
irá travar.
mensagem não é retornado para a sessão até que os blocos de dados no cache foram alterados (que
complete
significa que a transação foi concluída) e os vetores de mudança foram escritos ao redo
log no disco (e, por conseguinte, a operação pode ser recuperado, se necessário).
O buffer de log é alocada na inicialização da instância, e nunca pode ser redimensionada
posteriormente
reiniciar a instância.sem
É um tampão circular. Como processos de servidor escrever vetores de
mudança de
endereço para
gravação
ele, o atual se move ao redor. O processo de log escritor escreve os vetores em lotes,
e como
ele faz isso, o espaço que ocupavam fica disponível e pode ser substituído por mais mudanças
vetores. É possível que em períodos de pico de actividade, os vectores de mudanças serão gerados
maisprocesso
log rapidamente do pode
escritor que oescrever-los. Se isso acontecer, toda a atividade DML cessará (para
milissegundos), enquanto que o escritor de log limpa o buffer.
alguns
O processo de lavagem do tampão de log para o disco é um dos gargalos finais em Oracle
arquitetura. Você não pode fazer DML mais rápido que o LGWR pode lavar os vetores de mudança
para o on-line
refazer arquivos de log.
EXAME TIP O tamanho do buffer de log é estático, fixo na inicialização de instância. Ele não pode
ser automaticamente
gerenciou.
A piscina comum
A piscina comum é a mais complexa das estruturas PIG. Ele é dividido em centenas de
subestruturas, todos os quais são gerenciados internamente pelo servidor Oracle. Esta discussão de
arquitetura vou mencionar apenas três dos componentes piscina comum brevemente:
• O cache de biblioteca
• O cache de dicionário de dados
• A consulta SQL e PL / SQL cache de resultados de função
Algumas outras estruturas serão descritos em capítulos posteriores. Todas as estruturas dentro da
são piscina
automaticamente
comum gerenciados. O seu tamanho irá variar de acordo com o padrão de actividade
contra o dentro do tamanho total do pool compartilhado. A piscina comum em si pode ser
exemplo,
dinamicamente, quer em resposta a instruções do DBA ou através sendo gerenciado
redimensionada
automaticamente.
O Cache Biblioteca
O cache de biblioteca é uma área de memória para armazenamento de código recentemente
executado
de na sua forma
cache armazena analisado.
em cache todo oAcódigo:
biblioteca
SQL, PL / SQL e Java. Análise é a conversão de código
escrito por
programadores em algo executável, e é um processo que a Oracle faz sob demanda. Porque
código analisado é armazenada em cache no pool compartilhado de modo que ele pode ser
reutilizado
ser muito melhorada.
sem reparsing,
Análise
o desempenho
de código SQL
podeleva tempo. Considere esta instrução SQL simples:
Antes desta declaração pode ser executado, o servidor Oracle tem que descobrir o que isso
executá-lo.
significaPara
e como
começar, o que é empregados ? É uma mesa, um sinónimo, ou uma visão? Será que
ainda existe?
Depois, há o asterisco (*). Quais são as colunas que compõem a tabela de funcionários (se for um
mesa)? O usuário tem permissão para ver a tabela? As respostas a estas perguntas e muitas outras
têm de ser encontrados consultando o dicionário de dados.
DICA O algoritmo usado para encontrar SQL no cache de biblioteca é baseada na American
Standard Code
para os valores dos personagens que compõem a declaração Information Interchange (ASCII). o
menor
diferença (mesmo algo tão trivial como SELECIONAR em vez de select) significa que a declaração
não será
corresponder e, portanto, ser analisado novamente. Código que não é reutilizável é ruim para o
desempenho.
Tendo trabalhado para fora o que a afirmação realmente significa, o servidor tem de decidir a
executá-lo.
melhor forma
Existe de
um índice na coluna last_name? Se assim for, seria mais rápido para usar o índice
para
localize a linha ou para examinar a tabela inteira? Mais consultas no dicionário de dados são
necessários. Isto
perfeitamente possível
é para uma consulta de uma linha simples contra uma tabela de usuário para
gerar
o dicionário
dezenasdededados
consultas
e paracontra
a análise de uma declaração para levar muitas vezes mais do que,
executá-lo. O objetivo do cache de biblioteca do pool compartilhado é armazenar declarações em sua
eventualmente,
analisado
forma, pronto para execução. A primeira vez que uma declaração é emitida, ela tem de ser analisado
antessegunda
Pela da execução;
vez, ele pode ser executado imediatamente. Em um aplicativo bem projetado, é
possível quepodem ser analisados uma vez e executada milhões de vezes. Isso economiza uma
declarações
quantidade enorme de tempo.
O Dicionário de Dados Cache
O cache de dicionário de dados é muitas vezes referida como o cache de linha . Qualquer que seja o
termorecentemente
lojas que você preferir,
utilizado definições de objetos, incluindo descrições de tabelas, índices, usuários
e outros de metadados. Manter tais definições na memória na SGA, onde eles são imediatamente
definições
acessível a todas as sessões em vez de cada sessão de ter que lê-los repetidamente a partir dos dados
dicionário no disco, melhora o desempenho de análise. As definições de objetos em cache pode ser
usado para
muitas declarações
analisar diferentes.
O cache armazena dados dicionário definições de objetos de modo que quando as declarações
que tem
podeque
serser
analisado
analisado,
fast-sem ter que consultar o dicionário de dados. Considere o que acontece se
declarações são emitidas consecutivamente:
estes
Ambas as declarações devem ser analisados porque eles são declarações diferentes, mas
instrução
analisando
SELECT
o primeiro
terá carregado a definição da tabela Empregados e suas colunas para o
cache de dicionário de dados, de modo analisar a segunda instrução será mais rápido do que de outra
forma teria nenhum acesso dicionário de dados serão necessários.
sido porque
TIP Piscina colectiva ajuste é normalmente orientada para certificar-se de que o cache de biblioteca
é o direito Isto é porque os algoritmos Oracle usa para alocar memória no SGA são concebidos para
Tamanho.
favorecer
o cache de dicionário, por isso, se o cache de biblioteca está correta, o cache de dicionário já estará
correta.
A consulta SQL e PL / SQL resultado da função de cache
Em muitas aplicações, a mesma consulta é executado muitas vezes, por um ou outro na mesma
sessão ou muitos
diferentes sessões. Criando um cache de resultados permite que a loja servidor Oracle os resultados
de tais consultas
memória. em vez que a consulta é emitida, em vez de executar a consulta, o servidor pode
A próxima
recuperar o
resultado em cache. O mecanismo de cache de resultado é inteligente o suficiente para controlar se
as tabelas
qual contrafoi executado foram atualizados. Se isso aconteceu, os resultados da consulta será
a consulta
invalidada, e da próxima vez que é emitida a consulta, ela será repetida. Assim, não há perigo de
nunca receber um resultado em cache out-of-date.
O cache de resultados de PL / SQL utiliza um mecanismo similar. Quando uma função PL / SQL
valor
é executado,
de retorno pode
o seuser armazenado em cache, pronto para a próxima vez que a função é
executada.
para a função
Se ou
os as
parâmetros
tabelas que
passados
as consultas de função são diferentes, a função será reavaliado, mas
caso contrário, o valor em cache será devolvido.
Por padrão, o uso da consulta SQL e PL / SQL cache de resultados função é desativada, mas se
estiver ativado que muitas vezes pode melhorar drasticamente o desempenho. O cache está
programaticamente,
dentro doaocompartilhada
piscina; contrário das outras áreas de memória descrito anteriormente, ele não pagar DBAs algum
controle
eles podem
emespecificar
que um tamanho máximo.
Dimensionamento do pool compartilhado
Dimensionamento do pool compartilhado é fundamental para o desempenho. Deve ser grande o
código executado
suficiente para armazenar
e definições
em cache
de objetos
toda afrequentemente
frequência necessários (no cache de biblioteca e o
dicionário
cache), masdenão
dados
tão grande que ele armazena em cache as declarações que foram executadas apenas
uma vez.
piscina comum
um subdimensionado
aleija desempenho porque sessões de servidor de ter tido várias vezes para pegar o
espaço nele para
declarações análise, que são depois substituídas por outras declarações e, portanto, tem que ser
novamente quando eles estão reexecutado. Uma piscina comum de grandes dimensões pode
analisado
impactar
leva muitonegativamente
tempo para procurá-la.
sobre o desempenho,
Se a piscinaporque
comum é menor do que o tamanho ideal, o
degradar. No entanto, há um tamanho mínimo abaixo do qual as declarações irá falhar.
desempenho
Memória no pool compartilhado é alocado de acordo com um algoritmo menos recentemente
o espaço
usadasnecessidades
(LRU). Quandodo servidor Oracle no pool compartilhado, ele irá substituir o objeto que não
foi usada
por mais tempo. Se o objeto for mais tarde novamente necessário, terá que ser recarregado-
substituindo um outro objecto.
possivelmente
A piscina comum é alocado em tempo de inicialização de instância. Antes de liberar 9 i do banco
não de
é possível
dados, foi
redimensionar a piscina comum, posteriormente, sem reiniciar a instância de banco de
dados,
9 i prosseguimento
mas a partir deda que pode ser redimensionada para cima ou para baixo a qualquer momento.
Este redimensionamento
libertar 10 g em diante) automático,
pode ser manual
de acordo
ou (acom
partir
a carga
de de trabalho, se o mecanismo automático
foi activada.
A grande piscina
A grande piscina é uma área opcional que, se criado, será automaticamente usado por vários
que de outra forma ter memória do pool compartilhado. Um uso principal do grande piscina é por
processos
processos do servidor, descritos no Capítulo 14 na discussão do (multithreaded ou) servidor
compartilhado
arquitetura. servidores de execução paralela também vai usar a piscina grande, se houver. Na falta de
compartilhado
uma grande piscina, esses processos irão usar a memória do pool compartilhado. Isso pode causar
mau acontenção
para piscina comum. Se os servidores compartilhados ou servidores paralelos estão sendo usados,
umacriado.
ser grandeAlguns
piscinaprocessos
deve sempre
I / O também podem fazer uso da grande piscina, tais como os
processos
o Gerenciador
utilizados
de recuperação
pela quando ele é o backup em um dispositivo de fita.
A Piscina Java
A piscina Java é necessário somente se sua aplicação está indo para executar procedimentos
armazenados Java dentro do
base de dados. Ele é usado para o espaço de pilha necessário para instanciar os objetos Java. No
entanto, do
Opções uma série são
Oracle de escritos em Java, portanto, a piscina Java é considerado normal hoje em dia.
Note-senão
código queestá
Javaem cache na piscina Java; ele é armazenado em cache no pool compartilhado, da
émesma
armazenada
forma em
quecache.
o código PL / SQL
A Piscina Streams
Oracle Streams usa o pool de fluxos, que é uma ferramenta avançada que vai além do escopo do
OCP
exames ou este livro, mas para a completude uma breve descrição segue.
O mecanismo utilizado pelo Streams envolve extrair vectores de mudança de registo de refazer e
estesdereconstruir as declarações que foram executadas, ou declarações que teriam o mesmo efeito.
Estas declarações são executadas no banco de dados remoto. Os processos que extraem mudanças de
e os processos que se aplicam as mudanças precisam de memória; essa memória é a piscina
refazer
córregos. de
liberação A partir
bancode de dados 10 g em diante, é possível criar e redimensionar a piscina fluxos depois
instância
comece; esta criação e dimensionamento pode ser completamente automática. Com versões
anteriores,
definido noque
arranque
tinha que
e eraser
um tamanho fixo.
EXAME TIP O tamanho do compartilhada, grande, Java, e córregos piscinas é dinâmico e pode ser
gerenciados automaticamente.
Exercício 12-2: Investigar as estruturas de memória da instância Neste exercício, você vai correr
consultas para determinar o dimensionamento atual de várias estruturas de memória que compõem a
instância.
são os passos:
Aqui
1. Conecte-se ao banco de dados como usuário SYSTEM.
2. Use o comando SHOW SGA para exibir informações resumidas.
3. Mostrar a corrente, máximo e tamanhos mínimos dos componentes do SGA que podem ser
redimensionada dinamicamente, assim:
DICA Na versão 12 c , é de fato possível executar Oracle em um modelo de multithreaded (em vez
padrão modelo de multiprocessamento) como ele é executado no Windows. Isso é ativado com o
do
THREADED_EXECUTION parâmetro de instância, que está além do escopo do exame OCP.
EXAME TIP Se uma sessão termina de forma anormal, o que acontecerá com uma transação ativa?
Será
ser revertida pelo processo de fundo PMON.
DICA Quantos escritores banco de dados que você precisa? O número padrão pode muito bem ser
correto.
mais podeadicionando
ajudar o desempenho, mas geralmente você deve olhar para a memória de sintonia em
primeiro disco
otimizar lugar.IComo regra geral,
/ O, perguntar porantes de há qualquer necessidade de disco I / O.
que não
DBW n escreve buffers sujos do cache de buffer do banco de dados para os arquivos de dados,
os tampões
mas nãocomo
escrever
eles se tornam sujas. Pelo contrário, ele escreve como poucos buffers, pois ele
pode
A idéia
se geral
safar.é que o disco I / O é ruim para o desempenho, por isso não fazê-lo a menos que ele
realmente
bloco em umé necessário.
tampão foiSe um por uma sessão, há uma possibilidade razoável de que será
gravado
regravados-a essa sessão ou um diferente. Por que escrever o buffer para o disco se ele pode muito
bem ser
sujou novamente no futuro próximo? O algoritmo DBW n utiliza para selecionar buffers sujos para
gravarlimpá-los)
(Que em disco irá seleccionar apenas tampões que não tenham sido usadas recentemente. Então, se
um buffer
muito é
ocupado porque as sessões são ler ou a escrever-lo repetidamente, DBW n não vai gravá-lo
emvezes.
às disco Poderia
para haver centenas ou milhares de gravações para um buffer antes DBW n limpa-lo.
Pode ser que em um cache de buffer de um milhão de buffers, cem mil deles estão sujas, mas DBW
isto
pode escrever apenas algumas centenas deles para o disco de cada vez. Estas serão as poucas
n
centenas
sessão foique nenhumaem por algum tempo.
interessado
TIP EXAME O que fará com que DBW n escrever? A resposta é não buffers livres, muitas buffers
um de três segundos de tempo limite, ou um posto de controle.
sujos,
DBW n escreve de acordo com um algoritmo muito preguiçoso: tão pouco quanto possível e tão
Quatro
raramente
circunstâncias
quanto possível.
irá causar DBW n escrever: há buffers livres, muitas buffers sujos, um de três
tempo limite, e quando há um posto de controle.
segundos
A primeira circunstância é quando não há buffers livres. Se um processo servidor precisa copiar
paraumo cache
blocode buffer do banco de dados, ele deve encontrar um tampão livre , que é um tampão
que não é nem
(Atualizado e ainda
suja não escrito de volta para o disco), nem preso (a tampão preso é aquele que está
sendo usado por
outra sessão naquele momento). Um tampão sujo não devem ser substituídas porque se fosse, o
dados seriam perdidos, e um buffer preso não pode ser substituído porque a memória do sistema
alterado
mecanismos de proteção não permitirá isso. Se um processo de servidor leva “muito longo”
operacional
(conforme
A Oracle internamente)
determinado pela
para encontrar um buffer livre, ele sinaliza DBW n escrever alguns buffers
sujos no disco. Uma vez que este
é feito, eles vão estar limpa-e, portanto, livre e disponível para uso.
A segunda circunstância é quando há muitos buffers sujos ( “muitos” ser mais
limiar interno). No processo de um servidor pode ter tido um problema encontrar um buffer livre,
mas no geral,
poderia haver um grande número de buffers sujos, o que fará com DBW n para escrever alguns deles
paraAoterceira
disco. é a circunstância de três segundos de tempo limite. A cada três segundos, DBW n vai
tampões.
limparNa alguns
prática, este evento pode não ser significativa em um sistema de produção porque os
circunstâncias descritas anteriormente serão forçando as gravações, mas o tempo de espera significa
dois
que,
o sistema
mesmo estiver
se ocioso, o cache de buffer do banco de dados acabará por ser limpo.
Em quarto lugar, pode haver um posto de controle solicitado. As três razões já expostas causará
paraDBW n um número limitado de buffers sujos para os arquivos de dados. Quando um ponto de
escrever
verificação
são escritos.ocorre, todos os buffers sujos
Escrevendo tampões para os primeiros três razões mencionadas é referido como um ponto de
ou como
verificação
o avanço
incrementais
da posição de ponto de verificação periódica . Isso é tudo o que deve acontecer
no marcha
de curso denormal e é optimizada de modo a que tampões serão disponibilizados conforme
necessário, sem
desempenho, salientando
impactar o sistema I / O.
O único momento em que um ponto de verificação completo é absolutamente necessário é
e o exemplo
quando oébanco
desligado
de dados
(a descrição
é fechado
completa desta sequência é dada no capítulo 13 ). UMA
checkpoint escreve todos os buffers sujos no disco; esta sincroniza a cache da memória intermédia
com os arquivos
sincroniza o exemplo,
de dados
comea base de dados. Durante o funcionamento normal, os arquivos de dados
estão sempre
encontro. Elesfora
podem
de estar faltando alterações (comprometidos e não comprometidos). Isso não
importa,
cópias deporque
blocosono buffer cache estão atualizados, e são estes que as sessões de trabalhar. mas em
desligamento, é necessário escrever tudo no disco. pontos de verificação automáticos ocorrer
somente
mas um posto
em desligamento,
de controle pode ser forçado a qualquer momento com esta declaração:
Para concluir, DBW n escreve sobre uma muito preguiçosa algoritmo de tão pouco quanto
possível,
possível
exceto
e tãoquando
raramente
um posto
como de controle completa ocorre. Então, todos os buffers sujos são
gravados em disco tão rápido quanto
possível.
EXAME DICA Quando vai LGWR liberar o buffer de log para o disco? Ele acontece no COMMIT,
quando éo um terço completo e pouco antes DBWn escreve.
tampão
CKPT, o processo de verificação
O CKPT mantém sinais de onde no fluxo de refazer a posição checkpoint incremental é e, se
necessário, instrui DBW n para escrever alguns tampões sujas, a fim de empurrar a posição do ponto
de verificaçãoA posição do ponto de verificação atual é o ponto no fluxo de redo em que a
progressivo.
recuperação
em deve
caso de um começar
acidente de instância. CKPT atualiza continuamente o controlfile com o ponto de
verificação atual
posição.
EXAME DICA Por padrão, MMON reúne um instantâneo e lança o ADDM cada hora.
ARC n , o arquivador
Este é um processo opcional, tanto quanto o banco de dados está em causa, mas geralmente é um
processo
o negócio.necessário
Sem um ou para
mais ARC n processos (pode haver até 30, com o nome ARC0, ARC1, e
assim por diante), é possível perder dados. O processo e o propósito de lançar ARC n para criar
registro de
arquivos é descrito
arquivamento
em detalhes no Capítulo 22 . Por enquanto, é apenas necessário um resumo.
Todos os vectores de alteração aplicada a blocos de dados são escritos para a memória
as mudanças)
intermédiaede depois
registo
para(pela
o on-line
tomadaarquivos
de sessões
de log redo (pelo LGWR). Os arquivos de log redo
on-line são
tamanho dee número. Depois de terem sido preenchidos, LGWR irá substituí-los com mais dados
fixo
detempo
O redo. que deve decorrer antes que isso aconteça é dependente do tamanho e número do registro
arquivos e a quantidade de actividade DML (e, por conseguinte, a quantidade de refazer gerado)
on-line
contradeodados. Isto significa que as lojas online de redo log mudar vetores somente para atividade.
base
Para
preservar um histórico completo de todas as alterações aplicadas aos dados, os arquivos de log on-
line deve
eles estãoser
cheios
copiado
e antes
comode serem reutilizados. O ARC n é responsável por fazer isso. Providenciou
estas cópias, conhecido como arquivo de arquivos de log redo, estão disponíveis, será sempre
que
possível
de qualquer
recuperar
dano ao banco de dados, restaurando backups arquivo de dados e aplicação de vetores
de
extraídos de para
mudança todoseles
os arquivos de log arquivados gerados desde os backups foram feitas.
EXAME TIP LGWR grava os arquivos de log on-line; ARC n lê-los. Durante o funcionamento
normal, nenhum
processos de tocá-los
outroem tudo.
DICA O progresso da ARC n processos eo estado dos destinos para os quais eles estão escrevendo
deve ser monitorado. Se o arquivamento falhar, o banco de dados acabará por travar. Esse
monitoramento
através do sistema
pode
deser
alerta.
feito
Neste exemplo:
A primeira actualização aplica-se uma linha no banco de dados local; a segunda se aplica a uma
bancolinha
de em
dados
umidentificada
controle remoto
pelo link de banco de dados DEV. O comando COMMIT instrui ambos
os bancos de
confirmar a transação,
dados paraque consiste em ambas as declarações. Transações distribuídas exigem um
fases . O comprometer em cada banco de dados deve ser coordenado; se vier a falhar eo outro
dois
eram para ter sucesso, o total de dados estaria em um estado inconsistente. A confirmação de duas
fases base
cada prepara
de dados, instruindo seus LGWRs para limpar a memória intermédia de registo para o
discoé (a
isto confirmado,
primeira fase),
a transação
e uma vez
é sinalizado como comprometida em todos os lugares (na segunda
fase).
der errado
Se alguma
em qualquer
coisa lugar entre as duas fases, reco toma medidas para cancelar a cometer e
reverter
o trabalho em todas as bases de dados.
Exercício 12-3: investigar os processos em execução no seu Instância Neste exercício, você vai
correr
consultas para ver o que processos em segundo plano está em execução no seu exemplo. Você pode
usar o SQL
Desenvolvedor ou SQL * Plus. Aqui estão os passos a seguir:
Essas consultas dará resultados semelhantes. Cada processo deve ter uma sessão (até mesmo
processos em segundo plano), e cada sessão deve ter um processo. Os processos que podem
o
várias vezes terá um sufixo numérico, exceto para os processos de apoio sessões de usuário,
ocorrer
que todos têm o mesmo nome.
3. Investigue quantos processos podem estar em execução.
O v $ view bgprocess tem uma linha para cada processo possível. Processos que são
running ter um endereço, que é uma junção da coluna para a visão v $ process.
realmente
4. Observe o lançamento de processos do servidor como sessões são feitas através da contagem
do processos
número deservidor (Linux ou qualquer plataforma Unix) ou o número de threads Oracle (em
Janelas). A técnica é diferente nas duas plataformas. No Linux / Unix, Oracle
processos são processos do sistema operacional separados, mas no Windows eles são tópicos
um processo do sistema operacional.
dentro
No Linux, execute este comando a partir de um prompt do sistema operacional:
Isto irá contar o número de processos em execução que têm a string LOCAL em seu nome.
Isso incluirá todos os processos do servidor sessão.
Lançar uma sessão SQL * Plus e, em seguida, execute novamente o comando anterior. Use o
lançar
comando
um shell
deoperacional
acolhimentode dentro da sessão SQL * Plus. Você vai ver que o número de
processos aumentou. Sair da sessão, e você verá que o número caiu novamente. Figura
12-5 demonstra isso.
Inicie uma nova sessão com a instância, e você verá o incremento contagem da linha. Saia da
sessão, e ele vai diminuir.
TIP EXAME O que três tipos de arquivos devem estar presentes em um banco de dados? O
controlfile,e qualquer
arquivos, o redo online
número de arquivos de dados de log.
o cONTROLFILE
Primeiro, um ponto de terminologia: Alguns DBAs vai dizer que um banco de dados pode ter várias
controlfiles,
enquanto que os outros vão dizer que tem um controlfile, dos quais pode haver várias cópias. Este
seguirá o último terminologia. A documentação do Oracle é inconsistente.
livro
O controlfile é pequena, mas vital. Ele contém ponteiros para o resto do banco de dados,
locais
incluindo
da refazer
o on-line arquivos, os arquivos de dados, e mais recentemente os arquivos de log do
arquivodededados
banco log (se
está
o no modo de registro de arquivamento). Ele também armazena informações
necessárias
tais para manter
como vários númerosa integridade
de sequênciadocríticos
banco de dados de tempo, por exemplo. Se a ferramenta
e marcas
Recovery
está sendoManager
usado para backups, os detalhes desses backups também serão armazenados no
controlfile.normalmente
controlfile o haverá mais do que alguns megabytes de tamanho, mas você não pode
sobreviver sem ele.
Cada banco de dados tem um controlfile, mas um bom DBA vai sempre criar várias cópias do
controlfile de modo que se uma cópia está danificado, o banco de dados irá sobreviver. Se todas as
cópias
são perdidos,
do controlfile
é possível (embora talvez desajeitada) para se recuperar, mas você nunca deve
encontrar-se
essa situação.em Você não tem que se preocupar em manter cópias multiplexados do controlfile
sincronizada-Oracle vai cuidar disso. Sua manutenção é automática; seu único controle é como
muitas cópias de ter e onde colocá-los.
Se você receber o número de cópias ou o seu local errado no momento da criação do banco de
remover
dados, cópias
você mais
pode tarde
adicionar
ou movê-los.
ou No entanto, você deve ter em mente que qualquer
operações exigirão tempo de inatividade, por isso é uma boa idéia para obtê-lo logo no início. Não
há certo
ou resposta errada ao determinar quantas cópias de ter. O mínimo é um; o máximo
possível é oito. Todas as organizações devem ter um manual normas DBA que afirma algo como
“Todos os bancos de dados de produção terá três cópias do controlfile, em três dispositivos
separados”
sendo um número
(três escolhido apenas para fins ilustrativos, mas um número com o qual muitas
organizações
feliz). estão de tais orientações são no lugar, alguém deve escrever-los (e talvez o “alguém”
Na ausência
deveria ser você). Não há nenhuma regra que diz que duas cópias são muito poucos ou sete cópias
são normas
muitos; só há corporativos, e o trabalho do DBA é garantir que os bancos de dados estão em
conformidade com estes
padrões.
Dano a qualquer cópia controlfile fará com que a instância de banco de rescindir imediatamente.
há nenhuma
Lá maneira de evitar isso. A Oracle Corporation não permitir operar um banco de dados
com menos do que o
número de controlfiles solicitado.
EXAME TIP Cada banco de dados deve ter pelo menos dois grupos de arquivo de log redo online
para funcionar.
grupo deve ter pelo
Cadamenos dois membros para a segurança.
Um dos grupos é o actual grupo. As alterações são gravadas no arquivo de log redo online atual
grupo por LGWR. Como as sessões do usuário atualizar dados no cache de buffer do banco de
dados, eles
alteração mínima
tambémvectores
escrever
para
o o buffer de redo log. LGWR libera continuamente esse buffer para os
arquivos que
compõem o grupo arquivo de log redo online atual. Os arquivos de log são tamanho fixo; portanto,
eventualmente,
tornando-se os arquivos
o grupo atual vai encher. LGWR, então, realizar o que é chamado de um interruptor de
faz com
log , que que a segunda corrente grupo e começa a escrever a isso. Se seu banco de dados está
configurado
o ARC n processo
adequadamente,
(s) será então de arquivo (na verdade, cópias de segurança) dos membros do
arquivoQuando
grupo. de log tornando-se
o segundo grupo
o primeiro
enche, LGWR mudará de volta para o primeiro grupo, tornando-se
atual e
substituí-lo; ARC n vai então arquivar o segundo grupo. Assim, os grupos de arquivos de log de redo
on-line (eos membros tornando-se) são usados de forma circular, e cada chave de registo irá
portanto,
gerar um arquivo de log redo arquivo.
Tal como acontece com o controlfile, se você tiver vários membros por grupo (e você deve!),
se preocupar
Você não emtemmanter-los sincronizados. LGWR irá garantir que ele escreve para todos eles, em
mantendo-os idênticos. Se você perder um membro de um grupo, desde que você tenha um
paralelo,
sobrevivente
membro, o banco vai continuar a funcionar.
O tamanho eo número dos seus grupos de arquivo de log são uma questão de sintonia. Em geral,
você vai
tamanho escolher
adequado uma quantidade de atividade que se antecipa. O tamanho mínimo é de 50MB,
para
mas alguns
bases de dados
ativos
terão de levantar esta a vários gigabytes se eles não são para preencher a cada poucos
minutos.
banco de Um
dados
ocupado
pode gerar megabytes de refazer um segundo, enquanto um banco de dados em
grande parte estática pode gerar
apenas alguns megabytes de uma hora. O número de membros por grupo será dependente de qual o
nível de a falhas é considerada adequada, e é uma questão a ser documentado em padrões
tolerância
No entanto, você não precisa se preocupar com isso no momento da criação do banco de dados. Você
corporativos.
pode mover
refazer os arquivos
o seu site
de log em volta, adicionar ou soltá-los, e criar aqueles de diferentes tamanhos
comotarde.
mais você agradar
Tais operações
a qualquer
são momento
realizadas “online” e não requerem tempo de inatividade; eles são,
portanto,
transparente para os usuários finais.
os arquivos de dados
O terceiro tipo arquivo necessário fazer-se um banco de dados é o arquivo de dados. No mínimo,
você devedeterdados
arquivos três (todos a ser criado na criação do banco de dados de tempo), um para cada espaço
de tabela SYSTEM
armazena (que
o dicionário de dados), a tabela SYSAUX (que armazena dados que é o auxiliar de dados
dicionário), ea tabela de undo (que armazena os segmentos de desfazer necessárias para proteger
transações). Você terá muito mais do que quando seu banco de dados vai viver e muitas vezes irá
um pouco mais para começar.
criar
Arquivos de dados são o repositório de dados. Seu tamanho e números são efetivamente
bancoilimitado.
de dadosUm pode
pequeno
ter apenas meia dúzia de arquivos de dados de apenas algumas centenas de
megabytes
banco cada.poderia
de dados A maiorter milhares de arquivos de dados, cujo tamanho é limitado apenas pela
capacidade
sistema operacional
do hospedeiro
e hardware.
Os arquivos de dados são as estruturas físicas visíveis para os administradores do sistema.
o repositório
Logicamente,
para eles
os segmentos
são contêm dados de utilizador que os programadores ver e também para
segmentos que compõem o dicionário de dados. Um segmento é uma estrutura de armazenamento de
o
dados;
são tabelas
segmentos
e índices.
típicos
Arquivos de dados pode ser renomeado, redimensionado, movido, adicionado,
aouvida
cairútil
emdoqualquer
banco demomento da lembre-se que algumas operações em alguns arquivos de dados
dados, mas
pode exigir
tempo de inatividade.
Ao nível do sistema operativo, um arquivo de dados é constituído por uma série de blocos de
Internamente,
sistema operativo.
arquivos de dados são formatados em blocos da Oracle . Estes blocos são numeradas
dentro de cada ficheiro de dados. O tamanho do bloco é fixada quando o arquivo de dados é criado, e
consecutivamente
na maioria
será o mesmo dasaocircunstâncias,
longo de todo o banco de dados. O tamanho do bloco é uma questão para a
sintonização
(Com limites,e dependendo
pode variar da plataforma) de 2KB até 32KB. Não há relação necessária
entre o tamanho do bloco Oracle e o tamanho do bloco sistema operacional.
A Figura 12-7 mostra o modelo de armazenamento Oracle na forma de um diagrama de
coluna
entidade-relacionamento.
da esquerda mostra as oestruturas lógicas próximos para as estruturas físicas. Para completar, o
Também mostra as entidades ASM nas duas colunas mais à direita, que são abrangidos no Capítulo 3
diagrama
. Esses
uma alternativa
são para o armazenamento do sistema de arquivos discutido aqui.
Figura 12-7 O modelo de armazenamento do Oracle
DICA Muitos DBAs gostam de combinar com o tamanho do bloco de sistema operacional para o
tamanhode
motivos dodesempenho,
bloco Oracle.osPara
blocos do sistema operacional nunca deve ser maior do que os blocos da
Oracle,
não mas
há nenhuma razão para não tê-los menores. Por exemplo, ter um tamanho de 1 KB bloco
operacional
tamanho do ebloco
uma 8KB Oracle é perfeitamente aceitável.
Dentro de um bloco é uma seção de cabeçalho, uma área de dados e, possivelmente, algum
contém
espaço
informações
livre. A secção
como de
o diretório
cabeçalhode linha, que lista a localização dentro da área de dados do
linhas no bloco (se o bloco está a ser utilizado para um segmento de mesa) e também informações da
linha
há umadetransação
bloqueio (ou
se várias transações concorrentes) que trabalham nas linhas do bloco. Os dados
área contém os dados em si, tais como linhas, se é parte de um segmento de mesa, ou chaves de
índicedeseum
parte o bloco
segmento
é de índice.
EXAME TIP processos do servidor lidos dos arquivos de dados; DBW n grava arquivos de dados.
• arquivo de parâmetro Instância Quando uma instância Oracle é iniciado, as estruturas PIG
construir
memória eme os processos de fundo iniciar de acordo com as configurações no arquivo de
parâmetro.
o único arquivo
Isto éque precisa existir para iniciar uma instância. Há várias centenas de
parâmetros,
apenas uma émas
necessária: o parâmetro DB_NAME. Todos os outros têm padrões. Portanto, o
arquivo de parâmetro pode ser bastante pequena, mas deve existir.
• arquivo de senhas Usuários estabelecer sessões através da apresentação de um nome de
usuário
servidor
e senha.
autentica
O oraculo
estes contra as definições do usuário armazenados no dicionário de dados.
dicionário
Os dados é um conjunto de tabelas no banco de dados; é, portanto, inacessível se o banco de
aberto.
dados nãoHá éocasiões em que um usuário precisa ser autenticado antes de o dicionário de dados
édisponíveis, como quando eles precisam para começar o banco de dados ou mesmo para criá-
lo. um link
arquivo de senhas
externoé um meio de fazer isso. Ele contém um pequeno número de (tipicamente
menos
uma dúzia)
do quenomes
metade
de usuários e senhas que existem fora do dicionário de dados que podem
ser usados
conectar para instância antes do dicionário de dados está disponível.
a uma
• Arquivo refazer arquivos de log Quando um arquivo de log redo online enche, os ARC n
processo
o bancocopia-o
de dados
para
para
fora
um arquivo de log arquivo de redo. Uma vez feito isso, o arquivo de
log
o banco
não édemais
dados.
parte
É,do
no entanto, essencial que seja sempre necessário para restaurar um
backup
A Oracledofornece
arquivoinstalações
de dados, epara gerir os arquivos de log arquivados redo.
• Registro de alertas e arquivos de rastreamento O log de alerta é um fluxo contínuo de
mensagens
operaçõesrelativas
críticos certa
que afectam o exemplo e a base de dados. Nem tudo é registrado; só
eventos que são considerados muito importantes (como inicialização e desligamento),
alterações físicas
estruturas no do banco de dados, e alterações nos parâmetros que controlam o exemplo.
arquivos de rastreamento são gerados por processos em segundo plano quando detectam
condições
às de erro
vezes para e certas ações.
relatar
TIP EXAME O espaço de tabela SYSAUX deve ser criado no momento da criação do banco de
dados. Se vocêserá
especificá-lo, nãocriado por padrão.
O Dicionário de Dados
O dicionário de dados é metadados, que são dados sobre dados. Ele descreve o banco de dados, tanto
efísica
logicamente, e seu conteúdo. definições de usuário, informações de segurança, restrições de
integridade ede monitoramento de desempenho são todos parte do dicionário de dados. É
informações
armazenada
no sistema e como
os espaços
um conjunto
de tabela
deSYSAUX.
segmentos
De muitas maneiras, os segmentos que compõem o dicionário de dados são segmentos como
tabelas
qualquer
e índices.
outro,
A apenas
diferença fundamental é que as tabelas de dicionário de dados são gerados no
banco de
tempo de dados
criação, e você não tem permissão para acessá-los diretamente. Não há nada para parar um
curioso
DBA de investigar o dicionário de dados diretamente, mas se você fizer as suas actualizações,
poderáirreparáveis
danos provocar ao seu banco de dados e, certamente, Oracle Corporation não vai apoiá-lo.
Criar um dicionário de dados é parte do processo de criação do banco de dados. Ele é mantido em
seguida
Data Definition
por Language (DDL) comandos. Quando você emitir o comando CREATE TABLE,
você
são, de facto inserir linhas em tabelas de dicionário de dados, como você está com comandos como
USUÁRIO e GRANT.
CRIAR
Para consultar o dicionário, a Oracle fornece um conjunto de pontos de vista. Os pontos de vista
prefixado
vêm em CDB_,
quatroDBA_,
formas,ALL_, ou USER_. Qualquer vista prefixado USER_ será preenchida com
descrevendo objetos de propriedade do usuário consultando a visão. Portanto, não há duas pessoas
linhas
vão ver o mesmo
conteúdo. Se o usuário SCOTT consulta USER_TABLES, ele vai ver informações sobre suas mesas;
se vocês
consulta USER_TABLES, você verá informações sobre suas tabelas. Qualquer vista prefixado ALL_
preenchida com linhas descrevendo objetos aos quais você tem acesso. Portanto, ALL_TABLES vai
será
contêm linhas descrevendo suas próprias tabelas, além de linhas que descrevem tabelas pertencentes
a qualquer
ter outra
sido dada pessoa que
permissão paravocê
ver. Qualquer vista prefixado DBA_ terá linhas para cada objeto na
banco de dados, de modo DBA_TABLES terá uma linha para cada tabela no banco de dados, não
importa
criou. Osquem
pontos de vista CDB são idênticos aos pontos de vista de DBA, a menos que você estiver
trabalhando
base de dados.
emEstes
um multitenant
pontos de vista são criados como parte do processo de criação do banco de
dados,
de juntamente
pacotes PL / SQLcom
queum grande
são número
fornecidos pela Oracle para ajudar os administradores de banco de
dados na
banco de gestão
dados edoprogramadores em desenvolvimento de aplicações. código PL / SQL também é
armazenado nos dados
dicionário.
EXAME TIP qual visão irá mostrar-lhe todas as tabelas no banco de dados? A vista é
não ALL_TABLES.
DBA_TABLES,
A relação entre áreas de tabela e arquivos de dados é mantido na controlfile base de dados. este
lista todos os arquivos de dados, indicando que tablespace eles fazem parte. Sem o controlfile, não
há
forma uma instância pode localizar os arquivos de dados e, em seguida, identificar aqueles que
compõemquando
Somente o espaço
o espaço
de tabela
de SYSTEM.
tabela SYSTEM foi aberto é possível para a instância para acessar os
dicionário, em que ponto se torna possível abrir o banco de dados.
dados
4. Identificar o arquivo pelo nome (substitua o file_id a partir da consulta anterior, quando
solicitado).
5. Exercite-se precisamente onde no arquivo a extensão é em termos de quantos bytes para o
arquivo queIsso requer descobrir o tamanho do bloco da tabela. Digite o block_id e
começa.
tablespace_name retornado pela consulta na etapa 3 quando solicitado.
Figura 12-8 mostra estes passos, executados a partir do SQL * Plus.
A figura mostra que a tabela existe em uma extensão (medida 0) que é 64 KB. Esta medida está
em
o /u01/app/oracle/oradata/orcl/system01.dbf arquivo e começa cerca de 826MB para o arquivo.
Broca Two-Minute
Listar os componentes arquitectónicos de um banco de dados Oracle
• Um servidor Oracle é uma instância conectado a um banco de dados.
• Um exemplo é um bloco de memória compartilhada e um conjunto de processos em segundo
plano.
• Um banco de dados é um conjunto de arquivos no disco.
• Uma sessão de usuário é um processo de usuário conectado a um processo do servidor.
Auto teste
1 . O que declarações relativas a memória da instância e memória de sessão estão correctos?
(Escolha
respostas
tudocorretas.)
A. memória SGA é segmentos de memória privadas; Memória PGA é compartilhada
segmentos
B. Sessionsde memória.
podem escrever para o PGA, não o SGA.
C. O SGA é escrito para por todas as sessões; a PGA é escrito por uma sessão.
D. O PGA é alocada na inicialização da instância.
E. O SGA é alocada na inicialização da instância.
B. Ele é gravado no bloco de dados no disco e o arquivo de log redo online atual.
C. A sessão escreve para o buffer cache do banco de dados, eo escritor log escreve à
corrente
on-line arquivo de log refazer.
D. Não há nada escrito até que a mudança está comprometida.
7 . Qual destes processos de fundo é opcional? (Escolha a melhor resposta.)
A. ARC n , o processo de arquivo
B. CKPT, o processo de verificação
C. DBW n , a base de dados escritor
D. LGWR, o escritor de log
E. MMON, o monitor de gerenciamento
8 . O que acontece quando um usuário emite um COMMIT? (Escolha a melhor resposta.)
A. O processo de ckpt sinaliza um ponto de verificação.
B. O DBW n processo escreve buffers alterados da transação para os arquivos de dados.
C. O LGWR libera o buffer de log para log refazer o online.
D. O ARC n processo escreve os vectores de mudança para o registo de arquivo de refazer.
9 . Uma instância do Oracle pode ter apenas um dos muitos processos, mas vários dos outros.
qual dos processos podem ocorrer várias vezes? (Escolha todas as respostas corretas.)
esses
A. O processo de arquivo
B. O processo de verificação
C. O processo de gravação da base de dados
D. O processo escritor log
E. O processo do servidor sessão
10 . Um segmento pode ser transmitida através de muitos arquivos de dados. Como? (Escolha a
melhor
A. resposta.)
Ao alocar extensões com blocos em vários arquivos de dados
B. Ao espalhar o segmento em vários espaços de tabela
C. Ao atribuir vários arquivos de dados para um espaço de tabela
D. Usando um tamanho de bloco de Oracle que é maior do que o tamanho do bloco de
11 . Qual afirmação
sistema é correta a respeito de log refazer o online? (Escolha a melhor resposta.)
operativo
A. Deve haver pelo menos um grupo de arquivo de log, com pelo menos um membro.
B. Deve haver pelo menos um grupo de arquivo de log, com pelo menos dois membros.
C. Deve haver pelo menos dois grupos de arquivo de log, com pelo menos um membro de
cada um.haver pelo menos dois grupos de arquivo de log, com pelo menos dois membros
D. Deve
cada. está o endereço redo byte atual, também conhecida como a posição checkpoint
12 . Onde
incremental,
gravado? (Escolha a melhor resposta.)
A. No controlfile
B. No grupo de arquivo de log on-line atual
C. No cabeçalho de cada arquivo de dados
D. Em System Global Area
Respostas de auto-teste
1. C , E . O SGA é compartilhada memória, atualizado por todas as sessões; PGAs são
particulares
sessão. O SGA éaalocada
cada no momento da inicialização (mas ele pode ser modificado mais
tarde).
A , B , e D são incorrectas. A está incorreta porque ele inverte a situação. É o SGA
que existe na memória compartilhada, e não o PGA. B está incorreta porque as sessões
escrever tantoepara
própria PGA SGA.sua
D está incorreta porque (ao contrário do SGA) da PGA só é alocado
sob demanda.
2. D . Este é o grupo cliente-servidor. Processos de usuário gerar processos SQL, e do
execute
servidor
SQL.
A , B , e C são incorrectas. A e B estão incorretas porque recebem o uso de Oracle Net
incorreta. Oracle Net é o protocolo entre um processo do usuário e um processo do servidor.
Cé
incorreto porque ele descreve o que processos do servidor faz, não o usuário processos fazer.
3. A , D , F . Cada instância deve ter um cache de buffer do banco de dados, um buffer de
log, e uma compartilhada
piscina.
B , C , E , e G estão incorrectos. B , C e G são incorretas porque o pool de Java, a
grande
piscina, ea piscina fluxos são necessários somente para determinadas opções. E é incorrecta
porque
PGA não
a é parte do SGA em tudo.
4. D . O tampão de registo é fixo em tamanho no momento do arranque.
A , B , C , E , F , e G estão incorrectos. A , B , C , E , e F são incorrecta porque estes
são o
Componentes redimensionáveis do SGA. L é incorrecta porque a memória intermédia de
5. registo
D .éOestática.
buffer de log não pode ser redimensionada manualmente, não importa
automaticamente.
A , B , C , E , F , e G estão incorrectos. A , B , C , E , e F são incorrecta porque estes
PIG
componentes podem ser gerenciados automaticamente. L é incorrecta porque a memória
6. intermédia de registo
Um . A sessão é estática.
atualiza a cópia do bloco na memória e escreve o vetor de mudança
para o buffer de log.
B , C , e D estão incorrectos. B está incorreta porque embora isso vai acontecer, isso não
acontece
acontecer quando a alteração é feita. C está incorreta porque confunde a realização da sessão
alterações na memória com alterações LGWR propagação para o disco. D é incorrecta
porque todos
alterações nos dados ocorrem na memória como eles são feitos, o COMMIT não é relevante.
7. Um . O arquivamento não é obrigatória (embora seja geralmente uma boa idéia).
B , C , D , e E são incorrectas. CKPT, DBW n , LGWR, e MMON são todos necessários
processos.
8. C . Em COMMIT, o escritor log libera o buffer de log para o disco. Nenhum outro
processos
fundo precisam fazer nada.
A, B , e D são incorrectas. A está incorreta porque checkpoints completos ocorrer
ou em
apenas
desligamento
o algoritmo mediante ordenado;
pedidoparacheckpoints
DBW n utiliza parciaispara
selecionar buffers sãogravar
automática, conforme
os arquivos necessário.
de dados B
não está
érelacionado
incorrecta porque
commas
processamento, COMMIT
a como agitado o tampão é. D é incorrecta porque ARC n copia apenas
redo logs on-line; ele não copia os vectores de mudança em tempo real.
preenchido
9. A , C , E . Ambos A e C estão corretas porque o DBA pode optar por configurar
múltiplas
arquivo e escritor de banco de dados de processos. E é correto porque um processo do
servidor para
lançado será cada sessão simultânea.
B e D são incorrectas. Uma instância pode ter processo escritor apenas um log e apenas
processo
um de verificação.
10. C . Se uma tabela tem vários arquivos de dados, segmentos podem ter extensões em
todos
A , B ,eles.
e D são incorrectas. Um é incorrecta porque uma medida consiste em
consecutivo
blocos em qualquer arquivo de dados. B é incorrecta porque um segmento pode existir em
uma única
tabela (embora uma tabela pode conter diversos segmentos). D é incorrecta porque
embora isso certamente pode ser feito, a um quarteirão pode existir em apenas um arquivo
11. de dados.
C . Dois grupos de um membro é o mínimo necessário para a base de dados para
funcionar.
A , B , e D são incorrectas. A e B são incorrecta porque, pelo menos, dois grupos são
sempre
requeridos. D está incorreta porque, embora certamente é aconselhável multiplex os
não é um requisito técnico.
membros,
12. Um . O processo de verificação escreve o endereço redo byte (RBA) para o controlfile.
B , C , e D estão incorrectos. Os logs online, os arquivos de dados, e a SGA não têm
conhecimento de onde a RBA atual.
CAPÍTULO 13
Gestão Instância
Objetivos do exame
• Ferramentas de Gestão 062.3.1 Uso de banco de dados
• 062.3.2 Entenda Inicialização Parâmetro Arquivos
• 062.3.3 Start Up e Desligar uma instância Oracle Database
• 062.3.4 ver o registo de Alerta e acesso dinâmico Desempenho Visualizações
Após a criação de um banco de dados e um exemplo, a instância irá começar, e o banco de dados irá
ser aberto.que o banco de dados foi configurado com Enterprise Manager banco de dados Express,
Supondo
este será como uma ferramenta de gestão. O que não pode estar em execução é o ouvinte de banco
disponível
de dadosno
descrito (que é totalmente
Capítulo 14 ). Antes que um usuário pode se conectar ao banco de dados Express, o
ouvinte deve estar executando
também.
Banco de dados Express requer nenhuma configuração. Ele só tem que ser criado, e que é feito
tempo
no banco
de criação
de dados
(ou ele pode ser instalado mais tarde). No entanto, a instância de banco de dados
na maioria dossubstancial
configuração casos vai exigir
após a criação. Isto é feito ajustando os parâmetros de inicialização.
Qualquer que seja a ferramenta é usada para conectar ao banco de dados, é necessário neste
duasmomento
técnicas para compreender a
ligar a uma instância Oracle. Um normal de utilizador for autenticado,
apresentando
password cujoumhash é armazenado no dicionário de dados. Um privilegiada utilizador for
autenticado, quer
apresentando umapela
senha cujo hash é armazenado no arquivo de senhas externo ou mediante a
apresentação
identidade dodesistema
um operacional que a Oracle aceita.
Isto lhe dará um prompt de SQL a partir do qual você pode se conectar com uma variedade de
detalhado
sintaxes,
na para
próxima
ser seção.
Se SQL * Plus não iniciar ou gera erros quando se faz o lançamento, a razão mais provável é que
seu ambiente de sessão sistema operacional não está configurado corretamente; a variável ou
ORACLE_HOME
a variável PATH está errado ou faltando. A Figura 13-1 mostra exemplos deste problema, e como
corrigi-lo, para Linux. A mesma técnica é aplicável no Windows.
Figura 13-1 Lançamento SQL * Plus a partir de um prompt de comando do sistema operacional
DICA Muitos administradores de banco de dados (DBAs) sempre trabalhar em SQL * Plus ao tentar
problemas. É uma ferramenta simples que não esconde mensagens de erro e está sempre disponível.
resolver
Isto é como se conectar como um usuário privilegiado usando a autenticação de arquivo de senha:
A Figura 13-2 mostra todos os três sintaxes de ligação. O primeiro exemplo liga como um
através da rede.
utilizador O banco de dados deve estar aberto (e do ouvinte de banco de dados deve estar em
normal,
suceder. O segundo exemplo de liga como o SYS utilizador privilegiado através da rede. O banco de
execução) para que isso
ouvinte deve estar em execução, mas isso teria sucesso, mesmo se o banco de dados foram fechadas.
dados
O terceirousa a autenticação do sistema operacional para obter uma conexão privilegiada. O SQL *
exemplo
sessão deve estar executando na mesma máquina que o banco de dados. Nem o banco de dados nem
Plus
o ouvinte
precisa estar em execução para a conexão com sucesso.
gera páginas de Hypertext Markup Language (HTML) que são enviados para navegadores; os
usuáriospara
páginas podem usá-losinformações ou para enviar atualizações de volta. Porque consiste de código
recuperar
armazenado
banco de dados,
dentro
banco
do de dados Express não pode ser usado para iniciar ou encerrar um banco de
dados.
O Uniform Resource Locator (URL) para acessar banco de dados Express irá ter sido exibido
Assistente
pela de banco de dados de configuração (DBCA) na conclusão da criação do banco de dados.
Por padrão,
será o seguinte:
ele
Para determinar a porta de escuta HTTP se não é o padrão de 5500, fazer logon no banco de dados
com
SQL * Plus e executar esta consulta:
Neste exemplo, a porta de escuta é 5500, e o protocolo é o HTTP. Use o utilitário lsnrctl para
mostrar o status do ouvinte, como na Figura 13-3 .
Figura 13-3 O estado da base de dados ouvinte
Na figura, o utilitário lsnrctl é executado com a opção de status. Na secção de estado da saída,
você pode ver que o ouvinte foi executado por uma hora e meia e que está escutando em dois
endpoints: porta 1521 e porta 5500, tanto no endereço db121a.example.com . Porta 1521 é a
porta padrão para conexões de banco de dados mais de Oracle Net. Note-se que a porta 5500 está
escutandoesta
portanto, paraé HTTP;
a porta para o banco de dados Express, e agora é possível deduzir o que o URL para
Banco de dados Express é.
Se o comando status lsnrctl retorna qualquer tipo de erro, é provável que o ouvinte não foi
começado. Neste caso, inicie-o com este:
A janela de login de banco de dados Express solicita um nome de usuário e senha, com a opção
especificar
de que a conexão deve ser feita AS SYSDBA. Se você deseja se conectar como um usuário
dar o nome de usuário SYS e a senha e marque a caixa para AS SYSDBA. Caso contrário, dar
privilegiado,
qualquer nome de usuário e senha válidos para o banco de dados.
TIP banco de dados Express requer o plug-in Adobe Flash Player. Sem isso, não é possível
logon.
Banco de dados Express pode ser instalado em um banco de dados no momento da criação do
banco
solicita de Ele
essa. dados. A ferramenta
também pode serDBCA
instalado posteriormente, seja pela execução de scripts ou (muito
mais fácil)
usando DBCApor e selecionando a opção Configurar opções de banco de dados. Os pré-requisitos para
a utilização
Banco de dados
de expresso são as seguintes: Primeiro, um servidor HTTP ou HTTPS porta de escuta
deve confirmar
Para ter sido criado.
se isso tiver sido feito (e para corrigir a situação se ele não tem), use o
pacote DBMS_XDB_CONFIG.
Além disso, se você preferir usar o HTTPS para banco de dados Express, use o procedimento
DBMS_XDB_CONFIG.SETHTTPSPORT em vez de DBM_XDB_CONFIG.SETHTTPPORT.
Finalmente, todo o acesso ao banco de dados Express é através do mecanismo de servidor
compartilhado,
Capítulo descrito
14 . Isto requer no
a existência de um processo EXPEDIDOR; um será executado por padrão.
EXAME TIP Quais são os pré-requisitos para a utilização de banco de dados Express? O ouvinte
deve estar emdeve
despachante execução,
estar em
a execução, eo procedimento XML DB (XDB) deve ter sido usado para
permitir
porta de que um
escuta.
Exercício 13-1: usar ferramentas de gerenciamento de banco de dados Neste exercício, você se
familiarizar
técnicas paracom
a conexão
o como um usuário privilegiado, com o SQL * Plus e banco de dados Express.
o banco de dados interface de usuário expresso, seguindo estes passos:
Explorar
1. A partir de um prompt do sistema operacional, confirme que a sua conta está no grupo DBA.
Nouse
Linux,
o comando id.
Este resultado mostra que o utilizador está conectado como a Oracle utilizador e é um
membroedos
oinstall dba.grupos
Estes são os nomes padrão para os grupos que possuem o software Oracle e
tem privilégio SYSDBA no banco de dados.
No Windows, use o comando whoami.
Este resultado mostra que o utilizador é um membro do grupo ORA_DBA, que é o nome do
grupo DBA no Windows.
2. Defina as variáveis de ambiente necessárias. Este é um exemplo de Linux:
Isto deve mostrar que você está conectado como SYS usuário.
4. Lançamento de um navegador e, em seguida, emitir este URL:
Isto irá apresentá-lo com uma tela de logon. Digite o nome de usuário sys e senha do Oracle
seja qual for a senha que você especificou ao criar o banco de dados) e selecione a opção “as
(ou
caixa de seleção.
sysdba”
5. Explorar a interface do usuário do banco expresso. Selecione quaisquer tabs ou links que
parecem interessantes.
Você vai precisar para se familiarizar com todos eles.
%ORACLE_HOME%\database\INIT<SID>.ORA
Em todos os casos, <SID> refere-se ao nome da instância que o arquivo de parâmetros será
ordem
iniciado.
precedente
o é importante! A menos que um pfile é especificado no comando de inicialização, a
Oracle
bem abaixo
vai trabalhar
na lista, sua
utilizando o primeiro arquivo que encontra e ignorando o resto. Se nenhum
delesnão
pfile existe
padrão
(e umnão é especificado), o exemplo não começará.
O spfile é um arquivo do lado do servidor, e não pode ser renomeado ou realocados. A única
é quando
exceçãose autiliza
esta infra-estrutura da grade (GI), em cujo caso o nome não padrão e localização
podem ser no registro GI. Ele é lido pelo (SMON) processo em segundo plano o Monitor do sistema
registrado
quando o é iniciada. O spfile é um arquivo binário, e não pode ser editado manualmente. Qualquer
instância
tentativa de corrompê-lo
geralmente editar vai e torná-lo inutilizável. O pfile é um arquivo do lado do cliente. Ela existe
por padrão
diretório ORACLE_HOME,
no mas é de fato lido pelo processo de usuário que emite o comando para
iniciar
o exemplo. Você pode renomear ou mover o pfile como você quer, mas se você fizer isso, não será
encontrado
padrão, e você
pordeve especificar o nome eo local em seu comando de inicialização. A é um pfile
arquivo de texto ASCII; editá-lo com qualquer editor de texto você gosta (talvez com o Windows
notepad.exe
editor). O spfile
ou oéviumUnix
arquivo binário e não pode ser editada manualmente. Para alterar quaisquer
valores nele, use o
ALTER SYSTEM SET ... comandos do SQL * Plus ou as facilidades de edição de parâmetro de
banco de dados
Expressar.
Para criar um pfile, basta digitar os pares de parâmetro = valor, um por linha, e salve o arquivo
nomecomqueumestá em conformidade com o padrão. Para criar uma spfile, usar este comando SQL *
Plus:
Este comando irá ler o texto pfile nomeado e, em seguida, usar o seu conteúdo para gerar o
spfile.
binário
Por padrão, os arquivos de leitura e escrita serão aqueles com os nomes padrão no padrão
diretórios. Para converter um spfile em um arquivo de texto que pode ser editado, use o comando
inversa.
CREATE PFILE e CREATE comandos spfile pode ser executado a partir do SQL * Plus, a
qualquer
mesmo antes momento,
de a instância foi iniciada.
DICA O .ora arquivo spfile <SID> é, sem dúvida, o arquivo mais conveniente para usar como seu
arquivo de parâmetro.
Normalmente, você usará spfile.ora apenas em Clusters (RAC) ambiente Real Application, onde um
arquivo pode ser usado para iniciar várias instâncias. Você vai usar um init <SID> .ora arquivo
apenas
você precisa
se porfazer
alguma
edições
razãomanuais; spfiles são arquivos binários e não pode ser editado
manualmente.
Estáticos e dinâmicos Parâmetros e o arquivo de inicialização de parâmetros
Para visualizar os parâmetros e seus valores atuais, uma consulta, como isso vai fazer:
Você também pode ver a vista através de banco de dados Express. Na página inicial, selecione o
guia Configuração e clique no link Parâmetros de inicialização. Na janela subsequente, mostrado nas
Figura 13-4 , estão duas sub-abas. Corrente mostra os valores actualmente em vigor no exemplo
correr, emostra os registados no spfile.
SPFile
Figura 13-4 parâmetros de inicialização, tal como mostrado através de base de dados expresso
Você pode ajustar os parâmetros alteráveis através da mesma janela. Os valores para o primeiro
parâmetro mostrado (DB_BLOCK_SIZE) não pode ser alterado; não é um parâmetro dinâmico. Mas
a próxima
três parâmetros podem ser alterados. Para alterar os parâmetros estáticos, é necessário selecionar a
subguia e fazer as mudanças lá.
SPFile
Os parâmetros básicos
Os parâmetros de instância considerados “básicos” são aqueles que devem ser considerados para
base de dados. Para visualizar os parâmetros básicos e seus valores atuais, uma consulta, como isso
cada
vai fazer:
A diferença será porque algumas alterações de parâmetros podem ter sido aplicada para a
masinstância
não o spfile (ou vice-versa). A união é necessária porque não há nenhuma coluna na
Todos esses parâmetros básicos, bem como alguns dos parâmetros avançados, são discutidos no
capítulos apropriados.
Alterar parâmetros
Para alterar parâmetros com SQL * Plus, use o comando ALTER SYSTEM. A Figura 13-5 mostra
exemplos.
EXAME TIP Uma tentativa de alterar um parâmetro estático irá falhar a menos SCOPE é
especificado
SPFILE. como padrão é ambos (a instância em execução eo spfile). Se a instância é iniciada
O escopo
com um pfile, então SCOPE = SPFILE falhará.
Ele deve ser alterado com a cláusula SCOPE = SPFILE, ea instância deve ser reiniciado para ter
efeito.
DICA O tamanho do buffer de log padrão é provavelmente correta. Se você levantá-lo, você pode
achar que COMMIT
processamento demora mais tempo. Se você torná-lo menor do que o padrão, ele pode de fato ser
aajustado
tudo o que
internamente
a Oracle acha
para que
cimaé necessário.
Um exemplo de um parâmetro que se aplica a toda a instância, mas pode ser ajustado para o
sessões
indivíduo
é OPTIMIZER_MODE. Isso influencia a maneira em que a Oracle vai executar instruções.
escolha comum é entre os valores ALL_ROWS e FIRST_ROWS. Os ALL_ROWS valor
UMA
instrui o otimizador a gerar planos de execução que serão executados declarações até a conclusão, o
mais rapidamente
possível, enquanto FIRST_ROWS instrui-lo para gerar planos que irão receber algo de volta para o
o mais cedo possível, mesmo se toda a declaração leva mais tempo para ser concluído. Portanto, se
usuário
éseu
geralmente
banco de usado
dados por longos consultas do tipo DSS mas alguns usuários usá-lo para o trabalho
interativo,
emitir o comando
você pode
Se eles querem.
TIP gatilhos de logon podem ser usados para ajustar os parâmetros de sessão para valores adequados
para diferentes
dependendo do usuários,
nome de usuário com o qual eles fazem logon.
Exercício 13-2: consulta e defina Parâmetros de inicialização Neste exercício, use um SQL *
Plus oude dados Express para gerenciar parâmetros de inicialização. Os exemplos usam SQL * Plus,
Banco
émas
mais
só clara
porquepara dar comandos exatos do que para fornecer caminhos de navegação através de uma
gráfica
de interface
de usuário
(GUI). Aqui estão os passos a seguir:
1. Conecte-se ao banco de dados (que deve estar aberto!) Como usuário SYS, com o privilégio
SYSDBA.
Use a autenticação do sistema operacional ou a autenticação de arquivo de senha.
2. Mostrar todos os parâmetros básicos, verificando se todas elas foram definir ou estão ainda
na sua
padrão e anote os valores para os processos e sessões.
Quaisquer parâmetros básicos que estão em seu padrão deve ser investigado para ver se o
default é apropriado. Na verdade, todos os parâmetros básicos devem ser considerados.
Leia-se
deles nasobre
documentação
tudo do Oracle agora. O volume que você precisa é intitulada “Banco de
Dados OracleCapítulo 1 na Parte 1 tem um parágrafo descrevendo cada parâmetro de
Referência.”
inicialização.
3. Altere o parâmetro de processos para 200. Este é um parâmetro estático. É, portanto
necessário especificar um valor SCOPE e depois saltar para o banco de dados.
A Figura 13-6 mostra a sequência de comandos. O comando de inicialização FORCE é
explicado na próxima seção.
4. Execute novamente a consulta a partir do passo 2. Note o novo valor para processos e
também
PROCESSOS
para as sessões.
limita o número de processos do sistema operacional permissão para se
conectar ao
exemplo, e sessões limita o número de sessões. Os números apresentados referem porque
cada sessão vai exigir um processo. O valor padrão para as sessões é derivado
PROCESSOS, por isso, se SESSIONS estava no padrão, ele terá agora um novo valor.
5. Altere o valor para o parâmetro NLS_LANGUAGE para sua sessão. Escolha o que
linguagem dominante que você quer (Oracle suporta 67 idiomas no momento da escrita),
mas o deve ser especificado em Inglês (por exemplo, você usaria alemão, não Deutsch):
idioma
Você pode querer alterar o idioma da sessão de volta ao que era antes (como o Inglês)
com outro comando ALTER SESSION. Se você não fizer isso, estar preparado para
mensagens
na língua a sessão
de erroestá
parausando
ser agora.
7. Altere o parâmetro OPTIMIZER_MODE, mas restringir o escopo para a instância em
execução
só; não atualizar o arquivo de parâmetro. Este exercício permite que o obsoleto regra-base
otimizador, que pode ser necessária ao testar algum código antigo, mas você não gostaria
que o para ser permanente.
mudar
8. Confirme que a alteração foi feita, mas não gravada no arquivo de parâmetro.
9. Volte a OPTIMIZER_MODE
arquivo de parâmetro. ao seu valor normal, tanto na instância em execução eo
Note-se que a cláusula de escopo não é realmente necessário porque tanto é o padrão.
Isto irá não tiver cumprido a ouvinte, o que é correto na maioria dos casos. Você vai saber se você
criou um ouvinte com outro nome. Figura 13-3 , desde anteriormente no capítulo, mostra a saída do
tem
comando status lsnrctl quando o ouvinte (que é na verdade chamado LISTENER) está em execução.
Note-se que a primeira linha de descrição da saída na figura mostra o endereço do host e a porta
em que o ouvinte está ouvindo, ea terceira linha do fundo afirma que o ouvinte vai aceitar
conexões para o orcl serviço, que é oferecido por uma instância chamada orcl. Estes são o crítico
bits de informação necessária para se conectar ao banco de dados. Após uma criação de banco de
dados bem
DBCA, pode-se
sucedido
suporcom
que eles estão corretos. Se o ouvinte não está em execução, a saída do estado
vai deixar isso claro.
lsnrctl
No Windows, o ouvinte é executado como um serviço do Windows. Por conseguinte, é possível
através
controlá-la
da interface de serviços. Para identificar o nome do serviço do ouvinte, usar os Serviços
console de gerenciamento. Controlá-lo, quer através do console de serviços ou de um prompt de
comando.
EXAME TIP SYSDBA e SYSOPER não são usuários; eles são privilégios que podem ser
concedidos
Por padrão, aos
somente
usuários.
o usuário SYS tem esses privilégios até que eles são deliberadamente
concedido a outros usuários.
Uso do privilégio SYSDBA registra-lo para a instância como usuário SYS, o usuário mais
poderoso
o banco de dados e o proprietário do dicionário de dados. Uso do privilégio SYSOPER conecta-lo
PÚBLICO usuário. PÚBLICO não é um usuário em qualquer sentido normal; eles são um utilizador
como
nocional com
privilégios, mas
administração
sem privilégios que lhes permitem ver ou manipular dados.
• DESLIGAR
• NOMOUNT
• MOUNT
• ABERTO
Quando o banco de dados está em modo de encerramento, todos os arquivos estão fechados, ea
No modo
instânciaNOMOUNT,
não existe.a instância foi construído em memória (SGA foi criado eo
processos em segundo plano iniciada de acordo com o que está especificado em seu arquivo de
parâmetro),
conexão foi mas
feitanão
para um banco de dados. Na verdade, é possível que o banco de dados ainda não
existe.MOUNT,
modo Dentro a instância localiza e lê o controlfile do banco de dados. No modo Aberta, banco de
arquivos estão localizados e se abriu, e o banco de dados está disponível para uso pelos usuários
dados
finais. o arranque
processo é encenado. Sempre que você emitir um comando de inicialização, ele vai passar por estas
etapas. Isto
possível parar
é a parcialmente inicialização. Por exemplo, se o seu controlfile estiver danificado ou
um multiplexado
cópia está faltando, você não será capaz de montar o banco de dados, mas parando no modo
NOMOUNT,
pode ser capazvocêde reparar o dano.
Em qualquer fase, como é que a instância encontrar os arquivos necessários, e exatamente o que
NOMOUNT.
acontece? Quando
Começarvocê
comemitir um comando de arranque, o Oracle tentará localizar um arquivo de
seguir a convenção de nomenclatura dada anteriormente.
parâmetros,
Se nenhum arquivo de parâmetro existe, a instância não será iniciado. O único arquivo usado no
o arquivo
modo NOMOUNT
de parâmetro.éOs parâmetros no arquivo de parâmetros são usados para construir o SGA
na memória
iniciar os processos
e de fundo.
Onde está o log de alerta? É no local calculado a partir do parâmetro DIAGNOSTIC_DEST.
Isto irá tiver cumprido ao ORACLE_BASE (lembre-se Optimal Flexible Architecture [OFA]
do Capítulo 2 ) anuário. Dentro do DIAGNOSTIC_DEST é uma estrutura de diretório padrão. o
log de alerta serão localizados e nomeados da seguinte forma:
Para uma orcl banco de dados e instância nomeada, os valores (Windows e Linux) normalmente
seria o
Segue:
Se o registro já existir, ele será anexado. Caso contrário, ele será criado. Se quaisquer problemas
ocorrem durante esta fase, rastrear arquivos também podem ser gerados no mesmo local.
Uma vez que a instância é iniciado com êxito no modo NOMOUNT, pode ser transferida para
Modo
MOUNT
lendo o controlfile. Ele localiza o controlfile usando o parâmetro CONTROL_FILES,
que ele saiba de ter lido o arquivo de parâmetro usado quando se inicia no modo NOMOUNT. Se o
controlfile (ou qualquer cópia multiplexado dela) estiver danificado ou faltando, o banco de dados
não será
você terámontado,
que tomare as medidas necessárias antes de prosseguir. Todas as cópias do controlfile deve
disponível e idêntica se a montagem é para ser bem sucedido.
ser
Como parte do monte, os nomes e localização de todos os arquivos de dados e logs de redo on-
do controlfile,
line são lidos
mas a Oracle ainda não tentar encontrá-los. Isso acontecerá durante o
transição para o modo de abertura. Se houver arquivos faltando ou danificado, o banco de dados
permanecerá
modo e não pode
em MOUNT
ser aberto até que você tomar as medidas adequadas. Além disso, mesmo se todos
os arquivoseles
presentes, sãodevem ser sincronizados antes de o banco de dados é aberto. Se o último
desligamento
todos os buffers
foide
ordenada,
base de dados
com na memória cache do banco de dados a ser descarregado para o
disco
ser sincronizado.
por DBW nOracle
, entãovai
tudo
saber
o que
que
vaitodas as transações confirmadas são armazenados com
esegurança
que há transações
em arquivosnãode
confirmadas
dados são rondando à espera de ser revertida. No entanto, se o
última
Oracle paralisação
deve repararfoi desordenada
o dano, (como
eo banco a partir
de dados de uma perda
é considerado emdeum
energia
estadoou do servidor que
inconsistente. o está
sendo reinicializado),
mecanismo para este processo (conhecido como recuperação exemplo ) é descrito no Capítulo 22 . O
que monta e abre o banco de dados (e realiza reparos, se o desligamento anterior era desordenada)
processo
é o processo SMON. Apenas uma vez que o banco de dados foi aberto com sucesso será a Oracle
licença de
sessões de usuário
ser estabelecido com autenticação dicionário de dados normal.
Desligamento deve ser o inverso de inicialização. Durante um desligamento ordenado, o banco
fechada
de dados
e, emé seguida,
o primeiro
desmontados, e finalmente a instância estiver parado. Durante a fase de perto,
todas
são terminadas;
as sessões transações ativas são desfeitas, transações concluídas são liberadas para disco
DBW n , e os arquivos de dados e arquivos de log refazer estão fechados. Durante a desmontagem, o
controlfile
Em seguida,está fechado. foi parada desalocá o SGA e que encerra os processos em segundo plano.
a instância
DICA O STARTUP FORCE comando de inicialização você pode economizar tempo. É dois
comandos
Abortar SHUTDOWN
em um: um seguido por um arranque normal.
• normal Este é o padrão. Não há novas conexões de usuários será permitido, mas todos os
actuais
conexões são autorizados a continuar. Apenas uma vez que todos os usuários têm
(voluntariamente!)
o banco de dados realmente
Desconectado
desligado.
vontade
• Transactional conexões novo usuário Não são permitidas. Existente sessões que não estão em
transação será cancelada; sessões atualmente em uma transação são permitidos para
completareaserá então encerrada. Uma vez que todas as sessões são terminadas, o banco de
transação
desligar.
dados
• Imediato Não há novas sessões são permitidas, e todas as sessões actualmente ligados são
encerrado. Quaisquer transações ativas são desfeitas, eo banco de dados será então desligado.
• Abortar Quanto Oracle está em causa, este é o equivalente a um corte de energia. a instância
termina imediatamente. Nada está escrito no disco, e não há nenhuma tentativa de encerrar
transacções em curso em qualquer forma ordenada.
DICA A abortar o desligamento não irá danificar o banco de dados, mas algumas operações (como
backups)após
possível não são
um aborto.
Exercício 13-3: Start Up e Desligar um banco de dados Oracle Instância Use SQL * Plus para
iniciar ume abrir um banco de dados. Se o banco de dados já está aberto, fazer isso na ordem inversa.
exemplo
Observe
se você estiver
que trabalhando no Windows, o serviço do Windows para o banco de dados deve estar em
execução.
nome Ela terá um
do formulário OracleService SID , onde SID é o nome do exemplo.
1. Faça logon no computador como um membro do grupo de sistema operacional que possui a
ORACLE_HOME e, em seguida, definir as variáveis do ambiente de forma adequada para
ORACLE_HOME e PATH e ORACLE_SID, como descrito anteriormente.
2. Ligar como SYS com a autenticação do sistema operacional.
8. reiniciar a base.
O Registro de alertas
O registo de alerta é um registo contínuo das operações críticas aplicada à instância e o banco de
dados. Está é derivado da DIAGNOSTIC_DEST parâmetro de instância, e seu nome é
localização
alert_ <SID> .log, onde <SID> é o nome da instância. Os padrões DIAGNOSTIC_DEST ao
ORACLE_BASE, eo log de alerta será debaixo daquele.
TIP Os dois parâmetros de instância e BACKGROUND_DUMP_DEST USER_DUMP_DEST dar
o caminho completo para a localização do log de alerta. Estes parâmetros são oficialmente obsoleto,
mas émostrando
eles a maneira mais rápida para localizar o diretório de rastreamento.
Uma cópia do registro de alertas em formato Extensible Markup Language (XML) também é
diretório
mantido
diferente.
em um
A entrada de log de alerta para uma startup mostra todos os parâmetros de inicialização
Arquivo.
especificado
Esta informação,
no parâmetrojuntamente com o registro posterior de mudanças para a instância com
Sistema e as estruturas físicas do banco de dados com ALTER DATABASE, significa que é sempre
ALTER
possível reconstruir o histórico de alterações para o banco de dados ea instância. Isso pode ser
inestimável
quando você está tentando recuar, a fim de encontrar a fonte de um problema.
DICA Para muitos DBAs, a primeira coisa que fazem quando eles são convidados a olhar para um
banco de
tempo é localizar
dados para
o log
o primeiro
de alerta e digitalizá-lo, só para ter uma idéia do que vem acontecendo.
arquivos de rastreamento são gerados pelos vários processos em segundo plano, geralmente
Estes
quando
arquivos
elesestarão
atingiram
localizados
um erro.no diretório de rastreamento, juntamente com o log de alerta. Se
um processo
falhou devidodea um
fundo
erro,
temo arquivo de rastreamento gerado será inestimável para diagnosticar o
problema.
O Log DDL
Se o DBA optar por ativar isso, é possível gravar comandos de DDL em um arquivo de log. o
declaração utilizado (sem qualquer informação de apoio, tais como quem o emitiu) é gravada em um
arquivo deddl_
chamado texto
<instância> no seguinte diretório, com a mesma informação em um arquivo XML
chamado log.xml:
A figura mostra V $ exemplo, que tem uma linha com alguma informação resumida sobre a
instância. A maioria dos pontos de vista são preenchidos com informações da instância; o restante
sãocontrolfile.
do povoadas Todos eles dão informações em tempo real. visualizações de desempenho dinâmicos
que são
preenchido a partir do exemplo, tal como V $ instância ou V $ SYSSTAT, estão disponíveis em
todos osamomentos,
quando mesmo
instância estiver no modo NOMOUNT. visualizações de desempenho dinâmicas que são
preenchidostais
controlfile, a partir
comodoV $ DATABASE e V $ DATAFILE, pode não ser pesquisada a menos que a
base montado,
sido de dados tem
que é quando o controlfile é lido. Em contraste, os pontos de vista do dicionário de
dados (prefixado
DBA_, ALL_, ou USER_) pode ser consultada só depois de o banco de dados, incluindo os dados de
dicionário
foi aberto. tem-
EXAME
controlfile,TIP vistas desempenho
enquanto dinâmico
o DBA_, vistas ALL_ (V $ vista)
e user_ são estão preenchidos
preenchidos a partir
a partir do exemplo
do dicionário ou do
de dados.
Esta diferença determina o que vista pode ser consultado nas várias fases de arranque.
DICA Existe alguma sobreposição entre vistas $ V e vistas de dicionário de dados. Por exemplo,
V $ TABLESPACE tem uma linha para cada tabela, como faz DBA_TABLESPACES. Note-se que
como um
Regra geral, $ vistas V são singulares e dados views de dicionário são plurais. Mas há exceções.
Exercício 13-4: Use o Registro de alertas e desempenho Dynamic Views Neste exercício, você
localizar o log de alerta e encontrar as entradas para as mudanças de parâmetros feitas no Exercício
vai
13-2 eo e paralisações em Exercício 13-3 .
startups
1. Ligue para o seu banco de dados com SQL * Plus e, em seguida, exibir o valor de alguns
parâmetros.
5. Determine a localização dos membros de arquivos online de redo log, bem como o seu
tamanho.
tamanho
Porque
é um oatributo do grupo, não os membros, você terá que juntar dois pontos de vista.
Broca Two-Minute
Usar ferramentas de gerenciamento de banco de dados
• SQL * Plus está sempre disponível. Banco de dados Express pode tornar a administração fácil,
emdepende
mas objetos de banco de dados subjacentes; que, portanto, não está disponível até o banco de
dados é aberto.
Entenda Inicialização Parâmetro Arquivos
• Uma instância de banco de dados pode ser iniciado a partir de um arquivo estático parâmetro
(odinâmica
arquivo de
arquivo
inicialização)
de parâmetro
ou umde servidor (o spfile). Se ambos existem, o spfile tem
precedência.
• parâmetros estáticos não pode ser alterado sem um desligamento / inicialização.
• Outros parâmetros podem ser alterados de forma dinâmica para a instância ou uma sessão.
• Os parâmetros podem ser vistos na vista dinâmico desempenho V $ PARAMETER e
V $ SPPARAMETER.
Auto teste
1 . Você emitir o URL https://127.0.0.1:5500/em e receber um erro. O que poderia ser o
problema? (Escolha todas as respostas corretas.)
A. Você não começou o ouvinte banco de dados.
B. Banco de Dados Express está sendo executado em uma porta diferente.
C. DB_CREATE_FILE_DEST.
D. DIAGNOSTIC_DEST.
E. Nenhum parâmetro. A localização é plataforma específica e não pode ser alterado.
12 . Qual dessas visões pode ser consultado com êxito no modo nomount? (Escolha todos
corretos
respostas.)
A. DBA_DATA_FILES
B. DBA_TABLESPACES
C. V $ DATABASE
D. V $ DATAFILE
E. V $ INSTANCE
F. V $ SESSÃO
13 . Que vista irá listar todas as tabelas no banco de dados? (Escolha a melhor resposta.)
A. ALL_TABLES
B. DBA_TABLES
C. USER_TABLES, quando ligado como SYS
D. V $ FIXED_TABLE
Respostas de auto-teste
1. A , B , C , e E . Tanto o ouvinte banco de dados eo próprio banco de dados deve estar
Bancoemdeexecução para usar
dados Express. Também é possível o serviço de escuta HTTP pode não estar no
porto de 5500, e o endereço de auto-retorno só funcionará se você estiver executando o
padrão
anavegador
máquina doemservidor de banco de dados.
D está incorrecta. O agente de controle de nebulosidade não é necessário para usar o
2. Database Express.
A e B . Ambos HTTP e HTTPS podem ser utilizadas, desde que uma escuta apropriado
porta tenha sido configurado com XDB.
C e D são incorrectas. Oracle Net e IPC são os protocolos que podem ser usados pelo
usuário
processos entrar em contato com o servidor, não por navegadores para entrar em contato
3. banco de dados
B . O escopo Express.
padrão de ALTER SYSTEM é ao mesmo tempo, ou seja, memória e
spfile.
A e C são incorrectas. A está incorreta porque essa configuração terá sido substituído
pelo
configuração no segundo comando. C está incorreta porque a configuração de nível de
sessão perdidos
foram terá durante o reinício da instância.
4. D . Esta é a técnica para mudar um parâmetro estático.
A , B , e C são incorrectas. A está incorreta porque os parâmetros estáticos pode ser
alterado,
apenas com ummasdesligamento. B e C estão incorretas porque os parâmetros estáticos não
podesessão
uma ser alterado
em execução
para ou instância.
5. Um . Estes são os arquivos que compõem um banco de dados, e todos devem ser
sincronizados se o
banco de dados é abrir.
B , C , e D estão incorrectos. B está incorreta porque esses arquivos não são,
parteestritamente
do banco defalando,
dados. C está incorreta porque um problema com uma cópia controlfile
significaria
que o banco de dados não pôde ser montado, nunca mente aberta. D está incorreta porque
SMON
mecanismode de recuperação de instância pode corrigir problemas apenas em arquivos de
6. dados,
B .eMontagem
não qualquer outrade
da base coisa.
dados é o processo de abertura da controlfile (todas as cópias
dos mesmos).
A , C , D , e E são incorrectas. A está incorreta porque o arquivo de parâmetro é
necessárioCapenas
NOMOUNT. , D , e para
E estão incorretas porque esses tipos de arquivos são necessários
somente para aberto
modo.
7. D . Um encerramento imediato é limpo, por isso será necessário nenhuma recuperação.
A , B , e C são incorrectas. Sem recuperação ou reversão será exigido; todo o trabalho
ter sido
seráfeito como parte do encerramento.
8. B . O modo de desligamento padrão é desligamento normal, que vai pendurar até que
sessões
todos
de ter desligado voluntariamente.
A , C , e D estão incorrectos. A e C estão incorretas porque estes causaria um erro, não
a travar. D é incorrecta porque descreve TRANSACIONAL SHUTDOWN, não
Desligamento normal.
9. E . Nenhuma ação é necessária; recuperação será automática.
A , B , C , e D estão incorrectos. A está incorreta porque esta é uma coisa que você deve
nãodefazer
depois abortar. B está incorreta porque a recuperação de banco de dados não é necessário,
única instância
recuperação. C é incorrecta porque a recuperação de instância irá ocorrer automaticamente
no próxima
na modo de inicialização.
montagem D está incorreta porque nenhuma transação nunca vai ser perdido
como resultado de uma
ABORTO.
10. B e F . Nenhum destes afecta a estrutura da base de dados ou o exemplo; eles não são
importante o suficiente para gerar uma entrada de log de alerta.
A , C , D , e E são incorrectas. Todas estas são mudanças nas estruturas físicas ou de
e todas
memória,
essas alterações são registradas no log de alerta.
11. D . Este é o parâmetro utilizado para determinar a localização dos arquivos de
rastreamento
na verdade, todo odeRepositório
fundo e Automático de Diagnóstico.
A , B , C , e E são incorrectas. A está incorreta porque embora este parâmetro faz ainda
existir, ele será substituído. B está incorreta porque não existe tal parâmetro. C é incorrecta
porque este é o local padrão para arquivos de dados, não rastrear arquivos. E é incorrecta
embora haja um padrão específico da plataforma, ele pode ser substituído com um
porque
12. parâmetro.
E e F . Esses pontos de vista estão preenchido a partir do exemplo e será, portanto,
todasdisponível
as vezes. no
A , B , C , e D estão incorrectos. A e B são vistas de dados de dicionário, que apenas
podem
no modo ser vistos
aberto. C e D são vistas de desempenho dinâmico povoadas do controlfile e
são, portanto, disponível apenas no modo de montagem ou no modo aberto.
13. B . Os pontos de vista DBA listar cada objeto apropriado no banco de dados.
A , C , e D estão incorrectos. A está incorreta porque isso irá listar apenas as tabelas a
corrente
usuário tem permissões em-que pode ser todas as tabelas, mas provavelmente não é. C é
incorrecta
porque ele vai listar apenas as tabelas pertencentes a SYS. D é incorrecta porque esta é a
visãotodos
lista de que
os pontos de vista de desempenho dinâmico, nem todas as mesas.
CAPÍTULO 14
Networking da oracle
Objetivos do exame
• 062.4.1 Configurar Oracle Net Services
• 062.4.2 Usar ferramentas para configurar e gerenciar a Rede do Oracle
• 062.4.3 Configurar a Rede do lado do cliente
• 062.4.4 Entenda banco de dados Pooling Residente Connection
• 062.4.5 Configurar a comunicação entre bancos de dados
Oracle Net é a tecnologia que permite para a arquitetura cliente-servidor da Oracle. É o mecanismo
estabelecer sessões contra uma instância de banco de dados. Várias ferramentas podem ser usadas
de
para a criação ede Oracle Net, embora possa ser feito com nada mais do que um editor de texto
administração
simples. ofinal é um conjunto de arquivos que controlam um processo (o ouvinte de banco de dados)
resultado
queresposta
em inicia processos
a pedidos
dodeservidor
ligação e define o meio pelo qual um processo de utilizador irá localizar o
ouvinte.
O que realmente acontece quando esse comando é processado? Em primeiro lugar, quebrar o
componentes.
comando em Háseu
um nome de usuário de banco de dados (SCOTT), seguido por uma senha de
banco
que é sensível),
de dados (TIGRE,
e as duas estão separadas por um delimitador (/). Depois, há um símbolo @,
seguido por uma string de conexão (ORCL12C). O símbolo @ indica que o processo de usuário que
uma redeé necessária. Se o símbolo @ e a seqüência de conexão são omitidos, o processo de usuário
conexão
assumir que a instância que o usuário deseja se conectar está em execução na máquina local e que o
será
sempre disponível protocolo IPC pode ser utilizado. Se o símbolo @ e uma string de conexão estão
incluídos,de
processo a usuário irá assumir que o usuário está solicitando uma conexão de rede para uma
instância em um remoto
máquina, embora, na verdade, o usuário pode ser saltando fora a placa de rede e de volta para a
máquina
sobre o qual eles são registados.
resolução de nomes
Ao conectar através de uma rede, a primeira etapa é trabalhar para fora exatamente o que é que você
desejaEste
para. conectar
é o processo de resolução de nomes. Se a sua declaração de conexão inclui a seqüência de
@ Orcl12c, Oracle Net tem que trabalhar para fora o que se entende por orcl12c. Isto significa que a
conexão
corda temem
resolvido quecertas
ser partes de informação: o protocolo que pretende utilizar (assumir que este é
TCP),
o endereço IP no qual o ouvinte de banco de dados está em execução, a porta que o ouvinte está
monitorando
solicitações de entrada de ligação, e o nome do exemplo (que não necessita de ser o mesmo que o
conectar string) ao qual você deseja se conectar. Existem variações; em vez de um endereço IP, o
string de conexão pode incluir um nome de host, que então é ainda mais resolvido para um endereço
IP pelo Name System mecanismo (DNS) resolução. Você pode configurar um número de maneiras
Domain
de
Resolver conectar strings de endereço e nomes de instância, mas uma maneira ou de outra resolução
do nome dá o seu processo de usuário informação suficiente para ir através da rede para um ouvinte
processo
edesolicitar
banco de uma
dados
conexão a uma instância particular.
EXAME TIP Se o ouvinte banco de dados não está em execução ou está parado, sem novos
processos mas
-lançado, de servidor
isso nãopode
afetará
ser todas as sessões existentes que já foram estabelecidos.
DICA Você pode executar um ouvinte completamente em padrões, sem um arquivo listener.ora em
tudo. Ele endereço
qualquer irá escutarresolve hostname da máquina, na porta 1521. Evite isso para evitar confusão.
Sempre configurar o arquivo listener.ora para tornar a sua Ambiente Oracle Net auto-documentado.
EXAME DICA É o registro de ouvinte (LREG) processo de fundo que registra serviços com
o ouvinte.
Durante o tempo de vida do exemplo, o processo LREG reregisters repetidamente com o
Assim,
ouvinte.
se o ouvinte está parado e iniciado, ele vai se tornar consciente do banco de dados da
próxima
tenta registar.
vez LREG
servidor compartilhado
A arquitetura de rede descrito até agora é o servidor dedicado arquitetura. Cada processo é utilizador
conectada a um processo de servidor, lançado pelo ouvinte para manutenção que uma sessão. Uma
é o servidor compartilhado arquitetura, onde uma relativamente pequena piscina de processos de
alternativa
servidor
maior número
de serviços
de sessões
de uma
de grande
usuário.
EXAME TIP servidor compartilhado estiver configurado no lado do servidor, mas o cliente pode
exigir quer
servidor ou um
um compartilhada
servidor dedicado, especificando quer SERVER = dedicado ou SERVER =
compartilhados
os TNS ligar cadeia.
em
servidor compartilhado é implementado por processos adicionais que fazem parte da instância.
Eles são
processos em segundo plano lançado em tempo de inicialização de instância. Existem dois tipos de
processos: compartilhados.
servidores despachantes e Há também algumas estruturas de memória fila extras dentro System
Global Area
(SGA), e o ouvinte de banco de dados modifica seu comportamento para servidor compartilhado.
Quando um exemplo
configurado para servidor
que écompartilhado se inicia, para além dos habituais processos em segundo
plano, um ou mais
processos expedidor começar. Os despachantes, como qualquer outro processo TCP, executados em
uma portapelo
alocados TCPmapeador
única de porta de seu sistema operacional. Eles entrar em contato com o ouvinte e
registrar
ou mais processos
com ele. 1do servidor compartilhado também começar. Estes são conceitualmente
semelhante
processo doaservidor,
um dedicado
mas eles
normais
não estão vinculados a uma sessão. Eles receberão instruções SQL,
analisar e e gerar um conjunto de resultados. No entanto, eles não receberão as instruções SQL
executá-los,
a partir de um processo de utilizador; em vez disso, eles vão lê-los a partir de uma fila que será
diretamente
apreenchida
partir de qualquer
com declarações
número de processos de utilizador. Da mesma forma, os servidores
compartilhados não buscar conjuntos de resultados para um usuário
processar directamente; em vez disso, eles colocaram os conjuntos de resultados em uma fila de
resposta.
As próximas perguntas são como é que as declarações gerado pelo usuário entrar na fila que é
processos
lido pelo
do servidor, e como resultado obter buscada para os usuários? Este é o lugar onde os
despachantes
Quando entrar. de usuário contata um ouvinte, em vez de lançar um processo servidor e
um processo
conectá-lo
o processo ao
do utilizador, o ouvinte passa de volta o endereço de um expedidor. Se houver apenas um
o ouvinte irá conectá-lo a todos os processos do usuário. Se houver vários despachantes, o ouvinte
distribuidor,
load-balance as solicitações de conexão de entrada através deles, mas o resultado final é que muitos
vai
processos
vai de usuário
ser ligado a cada distribuidor. Cada processo usuário estará sob a impressão de que é
comunicando-se com um processo de servidor dedicado, mas não é. É a partilha de um despachante
com muitos
processos deoutros
utilizador. Ao nível da rede, muitos processos usuário terá conexões multiplexados
a uma porta usada pelo distribuidor.
através
EXAME TIP conexão de uma sessão para um despachante persistir para a duração da sessão, ao
a conexão com o ouvinte, que é transitória.
contrário
Quando um processo usuário emite uma instrução SQL, ele é enviado para o despachante. O
despachanteque
as declarações coloca
recebetoda
para uma fila. Essa fila é chamado de fila comum , porque todos
despachantes compartilhá-lo. Não importa qual o Dispatcher um processo de usuário está conectado,
todas
na filaascomum.
declarações acabam
Todos os processos do servidor compartilhado monitorar a fila comum. Quando uma instrução
fila chega
comum, ao o primeiro servidor compartilhado disponível pega. A partir de então, a execução
prossegue
o habitual de através
análise-se ligam-ciclo executar, mas quando se trata da fase de esforço, é impossível
para o para buscar o resultado definido para o processo de usuário compartilhada; não existe
servidor
nenhuma eo
processo ligação
servidor
entre
compartilhado.
o utilizador Então, em vez disso, o servidor compartilhado coloca o
conjunto
que é específico
de resultados
para o em
despachante
uma fila de
que
resposta
recebeu o trabalho em primeiro lugar. Cada dispatcher
monitoriza
própria fila adesua
resposta, e sempre que qualquer resultado são colocados sobre ele, o despachante vai
buscá-las ede volta para o processo de usuário que originalmente emitiu o comunicado.
buscá-los
EXAME TIP Há uma fila de entrada comum compartilhada por todos os despachantes, mas cada
distribuidor
própria fila de
temresposta.
a sua
• área de Sort
• área de Hash
• área de criação Bitmap
• área de junção de mapa de bits
• estado Cursor
• dados da sessão do usuário
As seguintes estruturas de memória sessão permanecem fora do SGA. Estes podem ser pensados
run-time
comoinformações
o para uma chamada em andamento:
• espaço de pilha
• As variáveis locais
TIP EXAME Em servidor compartilhado, o que estruturas de memória PGA não ir para o SGA?
eespaço
variáveis
de pilha
locais.
A parte do SGA usado para armazenar UGAS é a grande piscina. Este pode ser configurado
commanualmente
o parâmetro LARGE_POOL_SIZE, ou ele pode ser gerenciado automaticamente.
É impossível utilizar uma sessão do servidor compartilhado para iniciar ou encerrar o caso. Isto é
porque os processos necessários para apoiar servidor compartilhado (despachantes e processos
servidores
-se parte docompartilhados)
exemplo. são
Ajustando o servidor compartilhado é vital. Não deve ser sempre servidores compartilhados
solicitações
suficientes
da para
fila comum
retirar da
à medida
fila que chegam, e deve sempre haver suficientes despachantes que
que pode atender as solicitações de entrada à medida que chegam e retornar resultados como eles
estãode
filas enfileirados
resposta. uso
ao de memória por sessões de servidores compartilhados no SGA deve ser
monitorado.
conversão deDepois
servidor dededicado para servidor compartilhado, o SGA terá de ser substancialmente
maior.
Quando usar servidor compartilhado
Você não vai encontrar uma grande quantidade de conselhos duro na documentação do Oracle sobre
quando usar
servidor ou quantos
compartilhada
despachantes e servidores compartilhados que você precisa. O ponto principal
para pendurar sobre
servidor compartilhadoa é éque
uma facilidade que você usar, porque você é forçado a, não algo que você
usa automaticamente.
aumenta a escalabilidade,
isto mas talvez à custa de reduzir o desempenho. É bem possível que qualquer
declaração irá demorar mais tempo para executar em um ambiente de servidor compartilhado do que
um
se fosse executado
servidor dedicado, porque
num ele tem que ir através de filas. Ele também pode levar mais recursos da
CPU por causa
enqueuing disso actividade. Mas no geral, a escalabilidade do seu sistema vai aumentar
e dequeuing
dramaticamente. Mesmo que cada pedido é marginalmente mais lento, você será capaz de realizar
muitos mais por segundo através do exemplo.
solicitações
Duas ferramentas gráficas são fornecidas para criar e editar esses arquivos: o Gerenciador de
Rede eode Configuração Net.
Assistente
A Net Manager
Para iniciar o Gerenciador de Rede, executar netmgr partir de uma linha Unix; no Windows, você
vai encontrá-lo no início
cardápio.
A árvore de navegação Net Manager tem três ramos. O ramo Perfil cria ou edita o
arquivo sqlnet.ora e é usado para definir as opções que podem ser aplicados a ambos os lados cliente
e servidor
Este é o lugar
do Oracle.
onde, por exemplo, você pode configurar o rastreamento detalhado de sessões Oracle
Net ou
14-3 (como na
) permitir Figura
que certos métodos de resolução de nome. O ramo Naming serviço é usado para
resolução de nomes do lado do cliente no arquivo tnsnames.ora. O ramo Ouvintes é usado para
configurar
ouvintes de banco de dados no arquivo listener.ora.
configurar
Figura 14-3 editor Perfil de Net Gerente
O utilitário lsnrctl tem uma interface de usuário simples. A Figura 14-5 mostra a partir da
interface,o status do ouvinte padrão, desligá-lo, e sair da ferramenta. Observe a saída
verificando
do comando STATUS. O ouvinte está escutando na porta 1521 para conexões TCP.
Estas serão as solicitações de logon. Ele também está escutando na porta 5500 para Hypertext
Transfer sobre
(HTTP) Protocol
TCPS. Isto é para conexões de navegadores ao banco de dados Express.
Figura 14-5 Usando a interface do usuário lsnrctl para verificar o status e, em seguida, parar o
ouvinte chamado
OUVINTE
Neste exemplo, SQL * Plus usará TCP para ir para a porta 1521 no endereço IP ao qual o
hostname jwvaio resolve. Então, se há um ouvinte em execução nessa porta e endereço, ele irá pedir
ouvinte para gerar um processo servidor contra uma instância que está oferecendo um serviço
chamado
Resoluçãoorclz.
Local Naming Nome
Com nomenclatura local, o usuário fornece um nome alternativo, conhecido como um alias serviço
Oracle eo
corda, Net,
alias
para
é resolvido
a conexãopor um arquivo local para o endereço de rede completo (protocolo,
eendereço,
serviço ou
porta,
nome de instância). Este arquivo local é o arquivo tnsnames.ora infame, que causou
DBAs muito sofrimento ao longo dos anos. Considere este exemplo de um arquivo tnsnames.ora:
Este arquivo tnsnames.ora tem dois aliases Oracle Service Net definidos dentro dele: orclz e
aliases
teste.
sãoEstes
o que os usuários irão proporcionar em suas declarações de conexão. A primeira entrada,
orclz,
diz quesimplesmente
quando o @orclz seqüência de conexão é emitida, o seu processo de usuário deve usar o
protocolo
ir a jwvaioTCP para entre em contato com ele na porta 1521, e pedir o ouvinte monitorando essa
máquina,
porta para
sessão contra
estabelecer
a instância
umacom o nome do serviço orclz. A segunda entrada, teste, direciona os
usuáriosem
ouvinte a uma
uma máquina diferente, serv2.example.com , e pede uma sessão contra o instância
testdb.
chamada
DICA Não é necessário haver relação entre o alias, o nome do serviço e o nome da instância, mas
para o bem da sua sanidade normalmente você vai mantê-los o mesmo.
nomeação local suporta todos os protocolos e todos os recursos avançados do Oracle Net, mas
mantendo
arquivos tnsnames.ora em todas as suas máquinas cliente pode ser uma tarefa extremamente
demorado.
arquivo tnsnames.ora
o também é notoriamente sensível a variações aparentemente triviais em layout.
usando o gráfica do usuário (GUI), ferramentas ajudará a evitar tais problemas.
interface
tem que usar isso, se você já tem um Microsoft Active Directory, que será perfeitamente adequada.
IBM e Novell também vendem servidores de diretório em conformidade com o padrão LDAP.
Como nomenclatura local, nomeação diretório suporta todos os recursos, mas a Oracle Net, ao
usa contrário de nomenclatura
um repositório local, de diretório, por todos os seus detalhes de resolução de nomes.
central, o servidor
Isto éfácil
mais muitodemais
manter do que muitos arquivos tnsnames.ora distribuídos em toda a sua comunidade de
usuários
nomes inteiro.
externo é conceitualmente similar à nomeação de diretório, mas ele usa nomeação de
serviços
terceiros
tais como informações de Serviços de Rede da Sun (NIS +) ou os serviços de diretório
celular
que fazem
(CDS)
parte do Distributed Computing Environment (DCE).
O uso de listas e os serviços de nomes externo está fora do âmbito do Oracle Certified
Professional (OCP) syllabus.
Exercício 14-1: Configurar Oracle Net Neste exercício, você vai criar um Oracle Net completa
ambiente usando ferramentas gráficas e de linha de comando. Quaisquer diferenças entre Windows e
Linux
vai ser apontadas. Estes são os passos a seguir:
1. Crie um diretório para ser usado para os arquivos de configuração do Oracle Net e, em
seguida,
TNS_ADMIN
definir o variável para apontar para isso. Não importa onde o diretório é, desde que o
usuário Oracle tem permissão para criar, ler e escrever.
Aqui está um exemplo em Linux:
Certifique-se de que todo o trabalho a partir de agora é feito a partir de uma sessão onde a
variável
Aqui estáfoi
umdefinida.
exemplo no Windows:
Criar e definir o TNS_ADMIN chave como uma variável de cadeia no registro no Lar da
ramo. Este será tipicamente como se segue:
Oracle
HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ KEY_OraDB12Home1
Verifique se a variável está sendo lido usando o comando TNSPING de uma operação
prompt do sistema.
Isso irá retornar o erro “TNS-03505: Falha ao resolver o nome” porque não existem
arquivos
o diretórioemTNS_ADMIN. No Windows, pode ser necessário lançar uma nova linha de
comandos
pegar o novopara
valor TNS_ADMIN do registro.
2. Inicie o Gerenciador de Rede. No Linux, execute netmgr a partir de um prompt do sistema
operacional;
lançá-lo a no
partir
Windows,
do menu Iniciar. A linha superior da janela Net Manager irá mostrar o
localização dos arquivos Oracle Net. Se este não é o novo diretório, a variável
não foi definido corretamente.
TNS_ADMIN
A. Criar um novo ouvinte através da expansão da filial local da árvore de navegação,
destacando
Ouvintes e clicando em +.
B. Digite um nome ouvinte, newlist e clique em OK.
C. Clique em Adicionar endereço.
D. Para endereço 1, escolher TCP / IP como o protocolo e digite 127.0.0.1 como o anfitrião
e 2521
como a porta. A Figura 14-7 mostra este.
Figura 14-8 Criação de um nome de alias serviço tnsnames com a Net Manager
4. Salve a configuração clicando em Arquivo e Salvar Configurações de Rede de. Isto irá criar
a listener.ora e tnsnames.ora arquivos no diretório TNS_ADMIN.
Use um editor para verificar os dois arquivos.
LISTENER.ORA será parecido com este:
não o arquivo de parâmetro) e registrar o novo nome do serviço com o novo ouvinte, não
padrão.
9. A partir de um prompt do sistema operacional, confirmar que o novo serviço tem registado
com o novocom serviços lsnrctl newlist.
ouvinte
10. Confirme se o novo ambiente de rede é funcional, registando-se.
Isto define um link de banco de dados do banco de dados atual para um banco de dados remoto
identificado
tnsnames.ora pelo PROD corda e tem incorporado dentro de si as credenciais de logon para ser
conectar
usado quando
invocando código através do link. O link existe no esquema do usuário atual, SCOTT, e só SCOTT
pode usá-lo. Quando uma instrução como a seguinte é emitido, a sessão será transparente lançar um
sessão no banco de dados remoto, registar-se-lo como o usuário FRED, e executar a consulta lá:
Os resultados serão enviados de volta para a sessão de banco de dados local e depois voltou para o
processo
que a resolução
do usuário.
de nomes
Nota ocorre no servidor, não o cliente. O cliente não precisa de qualquer
informação
a respeito dos detalhes de conexão do servidor remoto; estes detalhes precisam estar disponíveis em
arquivo tnsnames.ora no lado do servidor.
um
Exercício 14-2: criar e usar um banco de dados link Este exercício assume que apenas um banco
de dados é então o link será um link de auto-retorno (de um banco de dados e voltar para ele). siga
disponível,
passos:
estes
(Substitua um tnsnames apelido trabalhando para 'orcl'. Note-se que este deve ser colocado
entre única
citações.)
2. Teste o link.
3. Resolução de problemas.
Os problemas mais comuns com links de banco de dados são de que o nome de usuário /
senha
na embutido
ligação estão errados e que o alias tnsnames não funciona. Outros problemas possíveis
que o ouvinte é baixo e que o registro dinâmico banco de dados com o ouvinte não tem
são
aconteceu ainda.
Broca Two-Minute
Configurar Oracle Net Services
• Oracle Net é configurado com um conjunto de três arquivos: tnsnames.ora no lado do cliente,
listener.ora
no lado do servidor, e (opcionalmente) sqlnet.ora em ambos os lados. O processo base de
gera
dadossessões
ouvintede servidor em resposta a pedidos de ligação de clientes.
• A arquitetura usual é de um servidor dedicado. Há um processo de servidor por usuário
processo,
a sessãoeconsiste de uma conexão persistente entre os dois. Todos os dados da sessão é
armazenado
PGA. Uma alternativa
em é a arquitetura de servidor compartilhado, onde os processos de
usuários têm
conexões compersistente
despachantes, que passam solicitações para um pool de processos do servidor
compartilhado.
arquitetura, Nisso das informações sessão é armazenado no SGA, em vez de PGA.
a maioria
Auto teste
1 . Quais protocolos podem Oracle Net 12 c usar? (Escolha todas as respostas corretas.)
A. TCP
B. UDP
C. SPX / IPX
D. SDP
E. TCP com Secure Sockets
F. Pipes nomeados
G. LU6.2
H. NetBIOS / NetBEUI
2 . Onde está a divisão entre o cliente eo servidor no ambiente Oracle? (Escolher
a melhor resposta.)
A. Entre a instância e o banco de dados.
B. entre o utilizador e o processo de utilizador.
C. Entre o processo do servidor ea instância.
D. Entre o processo do usuário eo processo de servidor.
E. A divisão de cliente-servidor varia, dependendo da fase do ciclo de execução.
3 . Qual das seguintes afirmações sobre os ouvintes é a correta? (Escolha a melhor resposta.)
A. Um ouvinte pode conectá-lo a uma instância única.
B. Um ouvinte pode conectá-lo a um único serviço.
C. Vários ouvintes podem compartilhar cartão de interface de rede.
D. Uma instância irá aceitar apenas ligações do ouvinte especificado na local_listener
parâmetro.
4 . Você decidiu usar nomeação local. Qual arquivo (ou arquivos) você deve criar no cliente
máquina? (Escolha a melhor resposta.)
A. tnsnames.ora and sqlnet.ora.
B. listener.ora only.
C. tnsnames.ora only.
D. listener.ora and sqlnet.ora.
E. Nenhum. Você pode confiar em padrões se você estiver usando TCP e seu ouvinte está
em execução na porta
1521.
5 . Se parar o ouvinte, o que acontecerá com sessões que conectados através dele? (Escolha o
melhor resposta.)
A. Eles vão continuar se tiver configurado failover.
B. Eles não será afetado de forma alguma.
C. Eles vão pendurar até que você reinicie o ouvinte.
D. Você não pode parar um ouvinte se ele está em uso.
E. As sessões erro fora.
6 . Estudar este arquivo tnsnames.ora:
Qual das seguintes afirmações estão corretas sobre a conexão cordas teste, prod, e dev?
(Escolha todas as respostas corretas.)
A. Todos os três são válidos.
B. Todos os três podem ter sucesso somente se as instâncias são criadas para o registo
instância
C. O testedinâmica.
de conexão falhará porque a seqüência de conexão não coincidir com o nome do
serviço.
D. Haverá um conflito de porta em Serv2 porque prod e dev tentar usar a mesma porta.
7 . Considere esta linha de um arquivo listener.ora:
O que vai acontecer se você emitir o seguinte seqüência de conexão?
Respostas de auto-teste
1. A , D , E , F . TCP, SDP, TCPS, e NMP são os protocolos suportados com a corrente
lançamento.
B , C , G , e H estão incorrectos. B e H são incorrecta porque UDP e
NetBIOS / NetBEUI nunca foram suportados. C e G são incorrecta porque SPX e
LU6.2 não são mais suportados.
2. D . A divisão de cliente-servidor é entre o processo de usuário e processo do servidor.
A , B , C , e E são incorrectas. Estes todos deturpar a arquitetura cliente-servidor.
3. C . Muitos ouvintes podem compartilhar um endereço, se eles usam portas diferentes.
A , B , e D são incorrectas. A está incorreta porque um ouvinte pode lançar sessões
muitoscontra
casos. B está incorreta porque um ouvinte pode conectá-lo a um serviço registrada. D
éincorreto, pois os controles de parâmetro local_listener que ouvinte a instância
inscrever-se de forma dinâmica; que também irá aceitar conexões de qualquer ouvinte que
estaticamente registrado.
tem
4. C . Este é o arquivo do lado do cliente necessário apenas para nomear local.
A , B , D , e E são incorrectas. A está incorreta porque SQLNET.ORA não é essencial.
B
e D estão incorretas porque se referem a arquivos do lado do servidor. E está incorreta
porque algunsé sempre necessário para nomeação local (embora não para Easy Connect).
configuração
5. B . O ouvinte estabelece conexões, mas não é necessário para a sua manutenção.
A , C , D , e E são incorrectas. Estes são todos incorreta porque eles assumem que a
ouvinte é necessário para a continuação de uma sessão estabelecida.
6. A e B . Todos os três são válidos, mas só funcionará se os serviços são registrados com
ouvintes.
o
C e D são incorrectas. C está incorreta porque não tem necessidade de ser uma conexão
entre as alias utilizado em uma string de conexão e o nome do serviço. D é incorrecta porque
serviços podem ser acessados através de uma única porta de escuta.
muitos
7. C . Alguma configuração do lado do cliente é necessário, e sem saber o que é, você tem
idéia do que vai acontecer.
A , B , D , e E são incorrectas. A está incorreta porque a seqüência de conexão pode se
conectar
qualquer a
exemplo. B está incorreta porque, embora o ouvinte L1 deve usar o registro
dinâmico,
Isso não é o suficiente. D está incorreta porque o uso do IPC para ignorar o ouvinte não é
relevante.
E é incorreta porque (embora certamente verdade) você não sabe se é relevante.
8. D , E . Ambos netca e netman oferecer uma interface gráfica para editar o arquivo
listener.ora.
A , B , e C são incorrectas. A está incorreta porque o Assistente de Configuração do
Banco
(DBCA) nãodepode
Dados
editar um ouvinte, mas vai editar o arquivo tnsnames.ora. B é incorrecta
porque banco de dados Express tem nenhuma capacidade para editar qualquer arquivo. C é
incorrecta
utility lsnrctl
porque
podeacontrolar um ouvinte, mas não configurar o arquivo listener.ora.
A oracle Armazenamento
Objetivos do exame
• 062.5.1 Descrever o armazenamento de tabela de dados Row nos Blocos
• 062.5.2 Criar e gerenciar Tablespaces
• 062.15.1 explicar como Oracle Database Server gerencia automaticamente o espaço
• 062.15.2 Economizar espaço usando a compactação
• 062.15.3 proativamente monitorar e gerenciar Tablespace Uso de Espaço
• 062.15.4 Use o Segment Advisor
• 062.15.5 Reclaim espaço desperdiçado de tabelas e índices com o segmento Encolher
funcionalidade
• 062.15.6 Gerenciar Resumable Espaço Allocation
Os usuários nunca ver um arquivo de dados físico. Tudo o que vejo são segmentos lógicos. Os
administradores
ver um segmentodelógico.
sistema
Tudo
nunca
o que vejo são arquivos de dados físicos. O banco de dados Oracle
fornece completa
abstracção de armazenamento lógico de física. Este é um dos requisitos do banco de dados relacional
paradigma. Como um administrador de banco de dados (DBA), você deve estar ciente da relação
entre o
armazenamento lógico e físico. Monitorização e administrar estas estruturas, uma tarefa muitas
vezes descrito
gestão do espaço
como
, costumava ser uma grande parte da carga de trabalho de um DBA. As facilidades
oferecidas nodo
lançamentos recente
banco de dados pode automatizar o gerenciamento de espaço, até certo ponto, e eles
certamente
o podem odeixar
DBA configurar armazenamento de formas que irão reduzir consideravelmente a carga de
instalações
trabalho vão permitir
através dadecapacidade deoAlém
manutenção. uso mais
deeficiente
disso,
redução alguns do espaço, tais como compressão e reorganização
segmento.
segmento
Quando um usuário acessa um limite de espaço, um erro será retornado, e a afirmação de que
falhou.
atingiu
Estaosituação
limite será
deve, naturalmente, ser evitado, mas se isso não ocorrer, o usuário pode ser
protegido por
permitindo a instalação de alocação de espaço resumable.
Existe uma relação, mostrado como uma linha pontilhada. Este é um de muitos para muitos
e segmentos
relação entre
de arquivos de dados. Esta relação é pontilhada porque não deveria estar lá. Tão bom
engenheiros, DBAs não permitem muitos-para-muitos relacionamentos. Resolvendo esta relação
relacional
para uma normalizada é o que o modelo de armazenamento é tudo.
estrutura
A entidade de tabela resolve a relação de n para n entre os segmentos e os arquivos de dados.
Uma tabela pode conter vários segmentos e ser composta de muitos arquivos de dados. Isto significa
que qualquer
segmento podem
um ser espalhados por vários arquivos de dados, e qualquer um arquivo de dados pode
conter toda
diversos segmentos.
ou partesIssode resolve muitos desafios de armazenamento. Alguns sistemas de
gerenciamento
uma relação de deum-para-um
banco de dados
entre os
mais
segmentos
antigos usados
e arquivos; cada tabela ou índice seria armazenado
como umseparado. Isso levantou dois problemas terríveis para grandes sistemas. Primeiro, um
arquivo
aplicativo
tem milhares
podedebem
tabelas e até mesmo mais índices; gestão de muitos milhares de arquivos foi uma
tarefa para os administradores de sistema. Em segundo lugar, o tamanho máximo de uma tabela é
terrível
limitada pela
tamanho de ummáxima
arquivo. Mesmo se os sistemas operacionais modernos não têm quaisquer limites
práticos, pode
limitações haver pelo ambiente de hardware subjacente. Uso de espaços de tabela ignora estes
impostas
problemas. Tablespaces são identificados pelo nome, único no banco de dados.
dois
A entidade segmento representa qualquer objeto de banco de dados que armazena os dados e,
um portanto,
espaço derequer
tabela.espaço
Seu segmento
em típico é uma mesa, mas existem outros tipos de segmentos,
nomeadamente
segmentos e desfazer
índicesegmentos. Qualquer um segmento pode existir em apenas um espaço de
tabela,semas
pode espalhar
a tabela
através de todos os arquivos que compõem o espaço de tabela. Isto significa que os
tamanhos
sujeito das tabelas
a quaisquer não são impostas pelo ambiente no tamanho máximo de arquivo. Porque
limitações
muitos compartilhar
podem segmentos um único espaço de tabela, torna-se possível ter muito mais segmentos do que
há arquivos
Os segmentos desão
dados.
objetos de esquema, identificados pelo nome segmento e qualificado com o
esquema
nome. Note-se
possuirque objectos de esquema programáticos (tais como procedimentos de PL / SQL,
pontos
não de vista, eles
segmentos; ou sequências) são dados, e eles existem como estruturas dentro do dicionário de
não armazenam
dados.
O bloco Oracle é a unidade de entrada / saída (I / O) para a base de dados. Arquivos de dados são
formatados
blocos em
Oracle, numeradas consecutivamente. O tamanho dos blocos da Oracle é fixo para um espaço
de tabela
(Em geral, é o mesmo para todos os espaços de tabelas no banco de dados); o padrão é 8KB. Uma
pode ser apenas um par de centenas de bytes, por isso, poderia haver muitas linhas armazenadas em
fila
um bloco.
quando umaContudo,
sessão quer uma linha, todo o bloco serão lidos do disco para o cache de buffer do
banco
Do de dados.
mesmo modo, se apenas uma coluna de uma linha foi mudado na cache de buffer do banco de
dados, a(DBW
escritor base den dados
) vai (finalmente) escrever todo o bloco de volta para o arquivo de dados de onde
ele veio,
substituindo a versão anterior. O tamanho de um bloco Oracle pode variar de 2 KB para 16 KB em
ou Windows e 32KB em alguns outros sistemas operacionais. O tamanho do bloco é controlada pela
Linux
DB_BLOCK_SIZE parâmetro. Isso nunca pode ser alterado após a criação do banco de dados
porque ele
formatar oséarquivos
usado para
de dados que compõem o espaço de tabela SYSTEM. Se torna-se aparente
depois que
tamanho nãoo bloco
é apropriado, o único curso de ação é a criação de um novo banco de dados e transferir
tudo Um
isto. em bloco é unicamente identificado pelo seu número de dentro de um ficheiro de dados; o
número do bloco por si só não é
suficiente.
Em resumo, e na ordem em que são mais propensos a dizer respeito a um DBA, estes tipos de
seguinte
segmento
maneira:
são tão
segmento, onde os dados da coluna, na verdade, reside. LOBs podem ter índices construídos
neles
acessopara
rápido aos dados dentro dos objectos, e LOB também pode ser repartida.
• CLUSTER Um cluster é um segmento que pode conter várias tabelas. Em contraste com
particionamento, que permite espalhar uma tabela em muitos segmentos, clustering permite
desnormalizar muitas mesas em um segmento.
• tabela aninhada Se uma coluna de uma tabela é definido como um tipo de objecto definida
pelo
temutilizador
colunas, que
em seguida,
se a coluna pode ser armazenada no seu próprio segmento como uma
tabela aninhada.
• ROLLBACK segmentos de reversão não deve ser utilizado no funcionamento normal da
liberação 9 i Release 9 i introduziu o gerenciamento de undo automático, que é baseada em
em diante.
segmentos
Haverá sempre
de desfazer.
um segmento de rollback que protege as transações usados para criar um
base de dados (isto é necessário porque, nesse ponto, não existem segmentos de anulação),
mas não deve
utilizado subsequentemente.
ser
Cada segmento tem uma ou mais extensões. Quando um segmento é criado, a Oracle irá alocar
a eleuma
em extensão
qualquer espaço de tabela é especificado. Eventualmente, como os dados são inseridos, a
extensão
irá então atribuir
vai encher.
umaOráculo
segunda medida na mesma tabela, mas não necessariamente no mesmo
ficheiro
você sabe
deque
dados.
um Esegmento
se que vai precisar de mais espaço, você pode alocar manualmente uma
extensão. Figura 15-
2 mostra como identificar precisamente em que cada ponto de um segmento é.
A última consulta na Figura 15-2 vai para os DBA_DATA_FILES vista para determinar o nome
arquivo
do no qual as extensões foram alocados e o nome da tabela para a qual o arquivo de dados
Para identificar de tabela da tabela, você também pode consultar DBA_SEGMENTS.
pertence.
DICA Você pode consultar DBA_TABLES para descobrir em que tablespace uma tabela reside, mas
isso vai apenas para não-particionados mesas-não para tabelas particionadas, onde cada partição é o
trabalhar
seu próprioe pode ser em uma tabela diferente. Partitioning permite que uma tabela (armazenado
segmento
como váriosspan.
tablespaces segmentos)
Uma medida é constituído por um conjunto de blocos consecutivamente numeradas. Cada bloco
e umateráárea
umadeárea
dados.
de cabeçalho
O cabeçalho é de tamanho variável e cresce para baixo, se necessário, a partir
do topo Entre
quadra. do outras coisas, ele contém um diretório de linha que lista onde no bloco cada linha
e linha de informação de bloqueamento. A área de dados enche de baixo para cima. Entre as duas há
começa
podepode)
não (ou ser uma área de espaço livre. Eventos que fará com que cabeçalho de um bloco de crescer
eincluem
linhas de
inserção
bloqueio. A área de dados será inicialmente vazio e vai encher como são inseridas linhas
(ou índice
São inseridos teclas, no caso de um bloco de um segmento de índice). O espaço livre que se
fragmentou
linhas são inseridas,
como excluídas, e atualizado (o que pode causar o tamanho de uma linha para mudar),
mas isso nãopois
significado, é detudo isso acontece na memória, após o bloco foi copiado em um buffer na
cache do buffer do banco de dados. O espaço livre é fundiram-se em uma área contígua, quando
necessário,
sempre antes
e da DBW n escreve o bloco de volta ao seu arquivo de dados.
Exercício 15-1: Investigar estruturas de armazenamento Neste exercício, você vai correr várias
consultas para
determinar as características de armazenamento. Siga esses passos:
Qual é o tamanho das extensões? Por padrão, esse é o tamanho que será utilizado para os
primeiros
de 16 extensões
um segmento, depois do que as extensões de 128 blocos serão atribuídos.
3. Mover a mesa.
criando Tablespaces
Para criar um espaço de tabela com Banco de Dados Express, a partir da home page do banco de
dados,
em cliqueosnaTablespaces
seguida, guia e armazenamento
ligar. Figura 15-3 mostra o resultado para o banco de dados padrão.
Figura 15-3 Os espaços de tabelas no banco de dados modelo de Uso Geral padrão
Há seis espaços de tabela mostradas na figura. Para cada espaço de tabela, identificado pelo
janela
nome,
mostra
o o seguinte:
• Tamanho Este é o tamanho atual do arquivo de dados (ou arquivos de dados) atribuído ao
espaço
com base
de tabela.
no tamanho
Isto é atual, não o tamanho máximo que pode ser autorizado a se expandir.
• Espaço livre O espaço disponível dentro do espaço de tabela.
• Usado (%) Este é o espaço ocupado por segmentos no tablespace que não pode ser
recuperada.
• Auto Extender Indica se todos os arquivos do espaço de tabela tem a extensão automática
instalação habilitado (todos eles fazem).
• O tamanho máximo Se autoextensible, ao que limite? Na figura, todos são Unlimited, ou
seja,
máximo
o possível.
• status verde indica que o espaço de tabela é on-line e, portanto, que os objetos dentro dela
deve ser acessível. Um espaço de tabela off-line seria indicado em vermelho.
• Digite um ícone indicando se as lojas de espaços de tabelas objetos permanentes, temporárias
objectos, ou a desfazer segmentos.
• segmento de Auto gestão de uma marca de verificação indica que o espaço segmento
automática
gestão é utilizado pelo espaço de tabela.
Você também pode recolher esta informação consultando as visões de dicionário de dados
DBA_TABLESPACES, DBA_DATA_FILES, DBA_TEMP_FILES e DBA_FREE_SPACE.
No banco de dados Express, clique no botão Ações para um menu drop-down, incluindo Criar
para criar
tablespace. A uma
janela Criar Tablespace solicita um nome de tabela, bem como o tipo de dados
(Permanente, temporário, ou desfazer) para ser armazenado dentro dele. O diálogo continua com
instruções
arquivo de para
dadoso (ou arquivos de dados) definição e vários atributos.
Banco de dados Express tem um botão Mostrar SQL na maioria das janelas. Isto significa que
construir
você pode
declarações
usá-lo para
sintaticamente corretas que você pode salvar (e editar) para o futuro, o uso de
script.declaração
uma Isto é típica gerado pelo banco de dados Express (números de linha adicionados):
Figura 15-4 mostra uma declaração típica criação de tabela, como executado a partir do SQL *
linha
Plus
de comando, com uma consulta confirmando o resultado.
Figura 15-4 criação Tablespace e verificação com o SQL * Plus
O GLTABS tabela consiste em dois arquivos de dados, nenhum dos quais vai autoextend. O
desvio
único
padrão foi de especificar um tamanho de extensão uniforme de 4MB. A primeira consulta na
mostra que a tabela não é uma tabela bigfile; se fosse, não teria sido possível
figura
definir dois arquivos de dados.
A segunda consulta na figura investiga a tabela TEMP, utilizada pela base de dados para
objetos
armazenar
temporários. É importante notar que a tabela temporários usar tempfiles , e não arquivos de
dados.
Tempfiles estão listados nas visualizações V $ tempfile e DBA_TEMP_FILES, enquanto arquivos
de dadosem
listados sãoV $ DATAFILE e DBA_DATA_FILES. Observe também que os US $ vistas V e as
vistas
dar informações
DBA diferentes. Como a consulta mostra, você pode consultar V $ TABLESPACE para
descobrir
espaço de se
tabela
um é um espaço de tabela bigfile, e você pode consultar V $ tempfile (ou V $
DATAFILE)
grande para saber
um arquivo como
foi no momento da criação. Esta informação não é mostrada nas vistas DBA. No
entanto, o DBA
visualizações dar o detalhe da gestão de extensão e gestão do espaço segmento. A informação
disponível nas vistas é porque há algumas informações armazenadas apenas no controlfile (e,
diferente
visíveis apenas na vista V $) e algum é armazenado apenas no dicionário de dados (e, por
portanto,
conseguinte, visíveis
visualizações apenas informações
DBA). Outras nas são duplicados.
Exercício 15-2: Criar, alterar e eliminar Tablespaces Neste exercício, você irá criar espaços de
e mudar suas características. Siga esses passos:
tabela
Este comando especifica as opções que estão o padrão. No entanto, ele pode ser considerado
boa prática para fazer isso para fazer a declaração auto-documentado.
3. Criar uma tabela na nova tabela e determinar o tamanho da primeira medida.
seguido pela consulta a partir do passo 3. Note-o ponto em que as medida que aumenta de
tamanho.
5. Pegue a tabela desligada, observar o efeito, e trazê-lo de volta online.
6. Faça o espaço de tabela somente leitura, observar o efeito, e torná-lo ler-escrever novamente.
alterando Tablespaces
Estas são as mudanças comumente feitas para espaços de tabela após a criação:
• Renomear
• Tomar online e offline
• A sinalização como leitura-gravação ou somente leitura
• redimensionamento
Este é simples, mas pode causar problemas mais tarde. Muitos sites contam com as convenções
espaços
de nomeação
de tabela de
para
se os
relacionar
seus arquivos de dados. Todos os exemplos neste capítulo fazer
exatamenteno
tablespace isso;
nome
elesdos
incorporar
arquivosode
nome
dados.
do A Oracle não se importa. Internamente, ele mantém as
usando o número de tabela e o número de ficheiro de dados (ou de ficheiro temporário). Estes são
relações
visíveis V
colunas como o
$ TABLESPACE.TS # e V $ DATAFILE.FILE #. Se o seu site se baseia em nomear
convenções, será necessário renomear os arquivos também.
A tabela pode ser renomeado enquanto ele estiver em uso, mas para renomear um arquivo de
dados, ele deve ser offline. Isto é
porque o arquivo deve ser renomeado no nível do sistema operacional, bem como dentro do Oráculo
meio ambiente, e isso não pode ser feito se o arquivo é aberto. Todos os identificadores de arquivo
se tornaria
No entanto,inválido.
é possível
isto
mover um arquivo de dados online.
A Figura 15-5 mostra um exemplo de todo o processo, utilizando a tabela criada na GLTBS
Figura 15-4 .
Depois de um espaço de tabela é feita somente leitura, nenhum dos objetos dentro dele pode ser
alterado com
Manipulation dados (DML), como demonstrado na figura. Mas eles podem ser descartados.
Language
Este é um pouco desconcertante, mas faz todo o sentido quando você pensa sobre isso. Descartando
uma tabela
não realmente afetar a mesa. É uma transação contra o dicionário de dados que elimina as linhas que
descrevem a tabela e suas colunas; o dicionário de dados está no espaço de tabela SYSTEM, e que
não é leitura.
somente
TIP Fazendo uma tabela somente leitura pode ter vantagens para backup e restauração operações.
Oráculo
estará ciente de que o conteúdo do espaço de tabelas não pode mudar e que não pode, portanto, ser
o backup do espaço de tabela repetidamente.
necessário
Redimensionar um Tablespace
Você pode redimensionar uma tabela quer pela inclusão de arquivos de dados a ele ou ajustando o
tamanho
arquivos dade existente
dados. Você pode redimensionar arquivos de dados para cima automaticamente
conforme
foi utilizado
necessário
no momento
se a sintaxe
da criação
AUTOEXTEND
do arquivo. Caso contrário, você tem que fazê-lo manualmente
com um banco de dados ALTER
comando.
Da sintaxe, você não sabe se o arquivo está sendo feito maior ou menor. uma cima
redimensionar só pode ter êxito se não houver espaço suficiente no sistema de arquivos, e
redimensionar
ter lata para
sucesso somente se obaixo
espaço no arquivo não estiver em uso por extensões alocadas a um
segmento.
Para adicionar outro arquivo de dados de 2GB em tamanho a um espaço de tabela, use o seguinte
comando:
Você pode incluir cláusulas de extensão automática ao criar o arquivo. Para habilitar automática
extensão posterior, utilize um comando como este:
Isso permitirá que o arquivo para dobrar de tamanho, aumentando 100MB de cada vez.
Um espaço de tabela bigfile pode ser redimensionado no nível de tabela, em vez do nível de
porque
arquivo
a Oracle
de dados.
sabe que
Istoaétabela pode ter apenas um arquivo de dados, e, portanto, não existe
ambigüidade sobre qual arquivo de dados deve ser redimensionada. Figura 15-7 mostra como criar e
redimensionar
tabela bigfile. uma
Você pode pensar que a limitação de uma tabela para um arquivo só iria limitar a capacidade de
tabela,
armazenamento
mas isso não do
é o caso. Um espaço de tabela smallfile pode consistir de até 1.022 arquivos de
dados,
que podecada
serum
de dos
até 4 milhões de blocos. Um espaço de tabela bigfile pode ser um arquivo de dados
de até 4então
blocos, bilhões
não há realmente nenhuma diferença.
Dropping Tablespaces
Para retirar um espaço de tabela, use o comando DROP TABLESPACE. A sintaxe é como se segue:
Se as palavras-chave, incluindo os conteúdos não são especificados, a queda irá falhar se houver
objetos
algumno espaço de tabela. Usando essas palavras-chave instrui o Oracle a cair os objetos em
primeiro lugar e,deem
soltar o espaço seguida,
tabela. paraeste irá falhar em algumas circunstâncias, como quando a tabela
Mesmo
uma tabela que é a mãe numa relação de chave estrangeira com uma tabela na outra tabela.
contém
Se os arquivos de dados e palavras-chave não são especificados, o espaço de tabela e seu
caiu,conteúdo
mas os arquivos
será de dados continuará a existir no disco. A Oracle vai saber nada sobre eles
mais, e eles terão de ser eliminados com comandos do sistema operacional.
Gestão de extensão
O método de gestão de medida é definido por tabela e aplica-se a todos os segmentos no espaço de
tabela.
Existem duas técnicas para gerenciar o uso de medida: Gestão de dicionário e gestão local.
A diferença é clara: A gestão local devem ser sempre utilizadas; gestão dicionário deve
nunca será usado. -Dictionary conseguiu gerenciamento medida ainda é suportado, mas é apenas um
resquícioanteriores.
versões de
Dicionário gerenciamento medida utiliza duas tabelas no dicionário de dados. SYS.UET $ tem
descrevendo
linhas extensões usadas e SYS.FET $ tem linhas que descrevem extensões livres. Toda vez
que o banco
precisa alocardeuma
dadosextensão de um segmento, ele deve procurar FET $ para encontrar um bit
apropriado
e, em seguida,de espaço
realizarlivre
operações DML contra FET $ e UET $ alocá-lo para o segmento. este
mecanismo de causa problemas com o desempenho, porque todas as operações de gerenciamento de
espaço no
banco de dados (muitas das quais poderiam ser iniciada concorrentemente) deve serializar no código
que constrói a
transações.
Gestão de extensão local foi introduzido com o lançamento 8 i e tornou-se o padrão com a
Ele liberação
usa bitmaps 9 i armazenados
. em cada arquivo de dados. Cada bit no bitmap abrange uma série de
blocos, ée alocado,
espaço quando os bits apropriados são alteradas de zero a um. Este mecanismo é muito mais
eficiente do que o mecanismo baseado em transação de gestão dicionário. O custo de atribuir
extensões é amortizado através bitmaps em cada arquivo de dados que pode ser atualizado
simultaneamente,
sendo concentradaem vezsérie)
(e em de nas duas tabelas.
Ao criar um espaço de tabela gerenciado localmente, uma opção importante é tamanho uniforme
. Se uniforme
especificada, entãoé cada medida já alocados no espaço de tabela será que tamanho. Isso pode tornar
o espaço
gestão altamente eficiente, porque os intervalos de blocos abrangidos por cada bit pode ser maior, ou
seja,bit
um única
por medida. Considere a seguinte declaração:
Cada extensão alocada nesse espaço de tabela será 160MB, por isso, haverá cerca de 64 deles. o
bitmap precisa de apenas 64 bits, e 160 MB de espaço pode ser alocado, atualizando apenas um
pouco.
vai ser muito
Isto é eficiente em termos desde que os segmentos no espaço de tabela são grandes. Se um
segmento
criado queeram
precisava de espaço para apenas algumas linhas, ele ainda teria uma extensão de 160 MB.
pequenos de
precisam objetos
seu próprio espaço de tabela.
Quando os segmentos são criadas nesta tabela, Oracle irá alocar uma extensão de oito bloco (64
ComoKB).
um segmento cresce e requer mais extensões, a Oracle irá alocar extensões deste tamanho até
extensão, após o qual ele vai alocar 128-bloco extensões (1MB). Assim, os segmentos de rápido
16
crescimento
para ser dadotenderá
espaço em pedaços maiores.
TIP Oracle Corporation recomenda autoallocate, mas se você sabe como segmentos grandes são
susceptível de ser e pode colocá-los em conformidade, tamanho uniforme pode muito bem ser a
aplicações são Muitos
melhor opção. projetadas dessa maneira.
É possível que, se um banco de dados foi atualizado a partir de versões anteriores, ele irá incluir
tablespaces gerenciados por dicionário. Verifique isso com a seguinte consulta:
Quaisquer espaços de tabela gerenciados por dicionário devem ser convertidos para a gestão
chamada
local com
de procedimento:
este PL / SQL
Os únicos espaços de tabelas que devem ser retornados por essa consulta são o sistema, desfazer
tabela
espaços
temporários.
de tabela,
Osesegmentos nestes espaços de tabela são geridos pela Oracle, que não faz
requerem assistência de qualquer mecanismo automático. Não é possível converter espaços de tabela
de
manual para o gerenciamento automático do espaço segmento. A única maneira é criar um novo
espaço automática
gestão de tabela usando
espaço segmento, mover os segmentos em que (no ponto em que o mapa de bits
gerados), e solte os antigos espaços de tabela.
será
Na figura, primeiro o parâmetro é definido. Note que o parâmetro é dinâmico; você pode alterá-
tempo,
lo aequalquer
todos os arquivos OMF criados posteriormente será no novo local. arquivos OMF
existentespor
afectada nãoqualquer
são mudança. Em seguida, os OMFTS tablespace é criado, confiando
completamente
defaults. A consulta
na OMF
mostra que estes são.
• O nome do arquivo gerado com uma corda principal (o1_mf), seguido do nome do espaço de
tabela,
seguido por oito caracteres aleatórios (para gerar um nome único), e, em seguida, um sufixo
(dbf)
• Tamanho do
100MB
arquivo
O último exemplo na figura mostra a adição de um ficheiro OMF a uma tabela existente,
substituindo
o padrão OMF para o tamanho do arquivo.
A combinação de OMF, espaços de tabela bigfile, e autoextend pode fazer gestão de espaço em
umde dados Oracle extremamente fácil e completamente automático.
banco
Exercício 15-3: Mudança Tablespace Características Neste exercício, você vai criar um espaço de
usando o gerenciamento de espaço manual de não padrão para simular a necessidade de converter-se
tabela
ao segmento automática
gerenciamento de espaço após uma atualização. Ativar OMF primeiro a facilitar o processo. Siga
esses passos:
1. Ative OMF para a criação de arquivo de dados. Escolha qualquer directório que existe e em
queusuário
o Oráculo
tem permissões de leitura e escrita. Este é um exemplo em Linux e, em seguida, o
Windows:
5. Solte a tabela e usar um comando do sistema operacional para confirmar que o arquivo tem
de fato
foi.
9. Estes segmentos vai ser criado com freelists, não bitmaps. Criar uma nova tabela que será
(Por padrão) usam o gerenciamento de espaço de segmento automático.
13. Renomeie a nova tabela para o nome original. Isso é muitas vezes necessário porque alguns
software aplicativo verifica os nomes de tablespace.
14. Arrumar por deixar cair a tabela, primeiro com este comando:
15. Nota o erro causado pela tabela não estar vazio e corrigi-lo.
TIP criação segmento diferidos pode ter alguns efeitos estranhos. Por exemplo, problemas com uma
não vai aparecer ao criar uma tabela somente ao inserir nele.
quota
EXAME TIP criação do segmento é sempre imediata de objetos criados por usuários internos, tais
SYS ou SYSTEM, não importa o que a definição do parâmetro. A tentativa de usar o segmento
como
CRIAÇÃO DIFERIDOS cláusula como SYS retorna um erro.
Exercício 15-4: Manage Space Segment Neste exercício, você observar a alocação de extensões
para
segmentos.
EXAME TIP migração Row é causada por instruções UPDATE. Inserir e excluir não pode nunca
resultar em migração de linha.
Quando uma linha é migrado, ele é removido a partir do bloco no qual ele reside e inserido numa
bloco diferente com espaço suficiente. O novo bloco será localizado através de pesquisa na bitmap
Então, na verdade, quando um usuário executa um UPDATE, isso se torna um INSERT e DELETE,
ASSM.
que é um mais caro. Além disso, o ROWID da linha (o localizador física da fileira) é
operação
Não mudou. O ROWID ainda aponta para o bloco original, que agora armazena mais do que um
“Endereço de encaminhamento” para a linha; o endereço de encaminhamento é o endereço do bloco
para ofoi
linha qual
movido.
o O fato de que o ROWID permanece inalterado é bom e ruim. É bom
porque não há necessidade de ajustar os índices; eles ainda vão apontar para o local original. Isso é
ruim
porque quando a linha é recuperada através de uma pesquisa de índice, uma operação de E / S
adicional
leia a linhaI serão
da suanecessários
nova localização.
para Isto é, claro, transparente para SQL, mas pode, em extrema
circunstâncias, provocar a degradação do desempenho.
Intimamente relacionada com a linha de migração é a questão do encadeamento de linha. A linha
maioracorrentado
do que o bloco.
é umaClaramente,
linha que é se o tamanho do bloco é 8K ea linha é 20K, em seguida, a linha
deve ser através de três blocos. Em tempo de inserção, todos os três blocos serão localizados
distribuído
através ASSM
bitmap de pesquisa
para na
blocos disponíveis para inserção e ao recuperar a linha mais tarde, todos os três
pode ser lido (dependendo de qual colunas são projectadas pela consulta). O ROWID de uma linha
blocos
aponta para o primeiro bloco de linha, como também é o caso com uma fileira migrado.
acorrentado
• compressão tabela básica comprime os dados dentro de um bloco quando linhas são inseridas
através
operação
de um
de carregamento direto. operações DML posteriores fará com que as linhas de ser
(E possivelmente migrou como um resultado desta).
descomprimido
• compactação de linha avançada irá comprimir linhas não importa como eles são inseridos e
manter
a compressão por meio de DML. A compressão é ainda numa base de bloco-por-bloco.
• Híbrido Columnar Compression (HCC) reestrutura dados em unidades de compressão de
vários
megabytes e está disponível apenas em determinadas plataformas de armazenamento.
As primeiras duas linhas de saída para a Figura 15-11 mostram os limiares gerados pelo sistema
para
tabela uma
temporário e a tabela de undo; tablespaces desses tipos não são monitorados. Isto é
porque uma simples verificação de espaço livre é inútil para tablespaces destes tipos, porque eles são
geralmente totalmente ocupada por segmentos temporários ou desfazer. O que importa é se a
temporária dentro
segmentos ou desfazer
deles estão cheios; esta é uma métrica mais complexa que não está configurado
A terceira linha de saída da consulta mostra os alertas padrão de todo o banco de dados para
não todos os alerta
tem um espaços de tabela queconfigurado. O alerta de aviso é fixado em maior ou igual a 85
explicitamente
por cento, e o alerta crítico é definido como maior ou igual a 97 por cento.
Além do sistema de alerta, que irá informá-lo sobre questões de acordo com pré-configurado
limiares, a Oracle mantém um histórico de uso de espaço de tabela. Esta é armazenado no Workload
Repository (AWR), a informação a ser recolhida como parte dos snapshots AWR criadas pelo
automática
monitor de gerenciamento processo (MMON). Você pode ver esta informação no
Vista DBA_HIST_TBSPC_SPACE_USAGE. A segunda consulta na Figura 15-11 junta-se este
ponto V
visão de$vista
TABLESPACE
para o (a união é necessária para recuperar o nome de tabela) e mostra a história
de uso do espaço para cada tabela. Observe que há uma linha por tabela por snapshot. Você pode
ver que a frequência instantâneo foi definido como a cada 15 minutos, e que (nas poucas linhas
exibido)
não houve alteração no uso dentro do espaço de tabela EXEMPLO.
DICA Você pode querer escrever seu próprio código de relatórios que consulta
DBA_HIST_TBSPC_SPACE_USAGE para obter uma imagem de como o espaço está sendo usado
no modo
de banco que
de dados
você pode adicionar espaço para espaços de tabela antes que os alertas são levantadas.
DICA O segmento Advisor Autotask executado por padrão. Muitos DBAs não olhar para o seu
conselho.
deve Vocêpara os resultados ou desativar a tarefa.
ou olhar
EXAME TIP Uma operação de redução tabela gera desfazer e refazer. Os índices são mantidos
porque o é implementado como um conjunto de transações DML. Não há bloqueio de tabela durante
encolher
a compactação,
linhas individuais
masserá bloqueado enquanto eles estão sendo movidos.
Usando a palavra-chave COMPACT realiza a primeira fase mas não o segundo; em outras
linhas
palavras,
são realocados,
o mas o espaço não é realmente liberado do segmento. A razão para usar este
é que, enquanto a compactação pode ocorrer durante as horas normais de funcionamento (embora
possa demorar
completas sobremuitas
uma grande
horas para
mesa), é possível que o DDL no final vai travar por causa da
concorrência
com outras transacções, e que também irá invalidar SQL analisado no cache de biblioteca. Assim,
necessário
pode ser para encolher a mesa com a palavra chave COMPACT em primeiro lugar e, em seguida,
novamente
durante um sem
período
COMPACT
de manutenção. Vai ser rápido porque a compactação já terá sido feito. o
CASCATA chave instrui Oracle também a encolher objetos dependentes, tais como os índices.
Antes de uma tabela pode ser reduzido, você deve permitir o movimento da linha para a mesa.
Permitindo o movimento de linha é necessária porque a natureza da operação significa que IDs
estardemudando.
linha seráA mesma linha (sem alteração para a chave primária) será em um local físico
diferente e
terá, portanto, um ID de linha diferente. Isso é algo que a Oracle não permitirá a menos fileira
movimento foi ativado.
EXAME TIP A tabela deve estar em um espaço de tabela com gerenciamento automático do espaço
segmento e linha
movimento deve ter sido habilitado; caso contrário, não pode ser reduzido. Se estas condições não
foram
conheceu, um movimento pode ser a única maneira de reorganizar a tabela.
A Figura 15-12 mostra permitindo o movimento de linhas de uma tabela, seguido por um espaço
recupera
reduzir
o espaço
esse a partir tanto da mesa e o seu índice.
TIP compressão é incompatível com ESPAÇO encolher. Você vai precisar para descomprimir antes
encolhendo. Para fazer isso, use ALTER TABLE. . . Nocompress e ALTER TABLE. . . MOVER.
DICA É possível para um processo a ser suspensa e retomada muitas vezes sem o seu conhecimento.
A visão DBA_RESUMABLE vai mostrar detalhes de somente a suspensão atual ou passado.
Também é possível habilitar espaço resumable para todas as sessões, definindo um parâmetro de
Esteinstância.
é um parâmetro dinâmico. Por exemplo, aqui é como definir um tempo limite de um minuto:
Isso fará com que todas as sessões que atingiram um problema de espaço a ser suspenso por até um
minuto.
TIP O expdb e impdp utilidades da bomba de dados tem a opção de linha de comando Y =
(O padrão é N), o que permitirá que os trabalhos de bombagem de dados para suspender se bater
RESUMABLE
problemas de espaço.
extremamente útil. Isto é
Há pouco ponto em permitir a alocação de espaço resumable para uma sessão ou a instância se
não você
fazer nada sobre o problema que causou a sessão ser suspensa. sessões suspensas vontade,
por padrão, ser comunicados através do sistema de alerta do servidor, será exibido pelo controle de
banco de
listado nadados,
vista dicionário
e ser de dados DBA_RESUMABLE. Tendo descoberto um problema, você
pode corrigi-lo
interativa a partir de outra sessão. Ou você pode criar um após suspender ON gatilho DATABASE,
que será executado sempre que a sessão está suspensa. Esse gatilho poderia relatar o problema
(talvez por
gerando um e-mail), ou poderia incluir código para investigar o problema e corrigi-lo
automaticamente.
Broca Two-Minute
Descrever o armazenamento de tabela de dados Row nos Blocos
• Um espaço de tabela pode se estender por muitos arquivos de dados.
• Uma tabela pode ter vários segmentos.
• Um segmento é um ou mais extensões.
• Uma medida é muitas blocos consecutivos em um arquivo de dados.
• Um bloco do Oracle deve ser um ou mais blocos do sistema operacional.
• O bloco Oracle é a granularidade do banco de dados de I / O.
• Um espaço de tabela smallfile pode ter muitos arquivos de dados, mas um espaço de tabela
bigfile só pode ter
1.
• padrão Tablespaces à gestão extensão local e gerenciamento de espaço de segmento
automático,
não para um
mastamanho uniforme medida.
• arquivos de dados OMF são automaticamente nomeado, são inicialmente 100 MB, e pode
autoextend
limite. sem
• Um espaço de tabela que contém segmentos não pode ser descartado, a menos que um
DATAFILES
cláusula é especificado.
INCLUINDO
• Espaços de tabela pode ser on-line ou off-line e leitura-gravação ou somente leitura.
• Qualquer um espaço de tabela pode armazenar apenas um tipo de objeto: objetos permanentes,
objetos temporários,
ou desfazer segmentos.
A exposição mostra o modelo de armazenamento Oracle, com quatro entidades tendo letras
para nomes.
B. On Demand
C. automaticamente quando uma tabela cruza um limite para a utilização do espaço
D. automaticamente quando uma sessão é suspensa pela alocação de espaço resumable
mecanismo
16 . Qual dos seguintes comandos irá encolher o espaço em um segmento de tabela ou índice e
mudaro HWM? (Escolha a melhor resposta.)
A. ALTER tabela Empregados ENCOLHA espaço compacto HWM;
B. ALTER TABLE TRABALHADORES ENCOLHA ESPAÇO HWM;
C. ALTER TABLE TRABALHADORES ENCOLHA espaço compacto;
D. ALTER TABLE TRABALHADORES ENCOLHA ESPAÇO CASCATA;
E. ALTER TABLE TRABALHADORES ENCOLHA ESPAÇO;
17 . O que é necessário antes de encolher a mesa? (Escolha todos os que se aplicam.)
A. Triggers deve ser desativado.
B. Os índices devem ser descartados.
C. movimento Row deve estar habilitado.
D. gerenciamento de espaço de segmento automático deve ser ativado.
E. colunas LOB deve ser descartado.
18 . Como você pode permitir a suspensão e retomada das declarações que atingiram erros de
espaço?
(Escolha todas as respostas corretas.)
A. Issue um ALTER SESSION comando ENABLE RESUMABLE.
B. Issue um sistema ALTER comando ENABLE RESUMABLE.
C. Defina as RESUMABLE_STATEMENTS parâmetro de instância.
D. Defina a RESUMABLE_TIMEOUT parâmetro de instância.
E. Use o procedimento DBMS_RESUMABLE.ENABLE.
19 . Se uma declaração é suspenso por causa de um erro de espaço, o que vai acontecer quando o
problema
fixo? (Escolha
é a melhor resposta.)
A. Após o tempo limite resumable expirou, a declaração vai continuar a execução do
apontar que tinha alcançado.
B. Após o tempo limite resumable expirou, a instrução irá iniciar a execução do
começando novamente.
C. A declaração vai começar a executar desde o início imediatamente após o problema é
fixo.
D. A declaração vai continuar a executar a partir do ponto em que havia atingido
imediatamente
problema seja
após
corrigido.
a
Respostas de auto-teste
1. Um é SEGMENTO, B é medida, C é ORACLE BLOCO, e D é DATAFILE.
Nem ROW nem TABLE está incluído no modelo.
2. A e E . Uma medida é de vários blocos consecutivos da Oracle, e um segmento consiste
uma ou mais extensões.
B , C , e D estão incorrectos. Eles interpretam mal o modelo de armazenamento Oracle.
3. C e D . Uma tabela pode ser um tipo de segmento, como pode uma partição tabela (caso
própria
em tabela
que o não será um segmento).
A , B , e E são incorrectas. Eles só existem como objetos definidos dentro do dicionário
O próprio
de dados.
dicionário de dados é um conjunto de segmentos.
4. C e D. extensão local de gestão e gestão automática espaço segmento são
ativado por padrão.
A , B , e E são incorrectas. A e B estão incorretas porque, por padrão, autoextension é
Desativado. E é incorrecta porque fornecer um nome de ficheiro irá substituir o mecanismo
5. OMF. B e D . Um espaço de tabela smallfile pode ter muitos arquivos e todos os arquivos de
paradados
cima. podem ser redimensionadas
A e C são incorrectas. A está incorreta porque você não pode converter entre smallfile
e BIGFILE. C está incorreta porque um espaço de tabela bigfile pode ter apenas um arquivo.
6. B . Os objetos podem ser caiu de espaços de tabela somente leitura.
A , C , D , e E são incorrectas. Todos estes comandos irá falhar porque eles exigem
paraescrita
a mesa, ao contrário de uma gota, que escreve apenas para o dicionário de dados.
7. B . Não é possível alterar o método de gerenciamento de espaço de segmento após a
criação.
A , C , D , e E são incorrectas. A e C são incorrecta porque uma tabela pode ser
convertidos em gestão extensão local ou renomeado a qualquer momento. D é incorrecta
porque um
arquivo de dados pode ser redimensionada para baixo, embora apenas se o espaço a ser
liberado
sido nãoEtem
usado. estájáincorreta porque você não pode mudar a gestão do espaço segmento sem
recriar a tabela.
8. E e F . Juntando esses pontos de vista vai dar as informações necessárias.
A , B , C , e D estão incorrectos. A , B , e C são vistas incorrecta porque estes não será
disponível no modo de montagem. D está incorreta porque não há nenhuma informação
V $ DATABASE.
relevante
9. B , D , F , e H . V $ TABLESPACE e DBA_TABLESPACE irá listar o temporário
tablespaces e V $ tempfile e DBA_TEMP_FILES irá listar seus arquivos.
A , C , E , e G estão incorrectos. A e E são incorrecta porque V $ DATAFILE e
DBA_DATA_FILES não incluem tempfiles. C e G são incorrecto porque não existem
pontos de vista com esses nomes.
10. A e E . Uma medida é de vários blocos consecutivos da Oracle, e um segmento consiste
uma ou mais extensões.
B , C , e D estão incorrectos. Eles interpretam mal o modelo de armazenamento Oracle.
11. C e D. A tabela pode ser um tipo de segmento, e pode assim uma partição tabela.
A , B , e E são incorrectas. Estes existem apenas como objectos definidos no dicionário
O próprio
de dados.
dicionário de dados é um conjunto de segmentos.
12. C . Compressão colunar híbrido é verdade compressão.
A , B , D , e E são incorrectas. A e B são ambos incorrecta porque BASIC e
Compressão avançada são, de fato, com base em de-duplicação. D e E são incorrectos
porque a Oracle pode usar qualquer técnica.
13. A e B . Ambos purga caiu objetos e tabelas encolhendo vai liberar espaço
imediatamente, sem tempo de inatividade.
C , D , e E são incorrectas. Um índice pode ser reduzido, mas isso vai liberar espaço
índice,
dentro
não do
o envie para o espaço de tabela. Deslocalização tanto índices ou tabelas tem
aimplicações
disponibilidade
para dos dados.
14. C . O processo de fundo MMON levanta alertas.
A , B , D , e E são incorrectas. A está incorreta porque, apesar de relatórios de controle
de banco
alertas, de dados
não criá-los. B está incorreta porque a API DBMS_SERVER_ALERT é
usado para configurar o sistema de alerta-lo não implementá-lo. D e E são incorrecta porque
processos de primeiro e segundo plano vai encontrar problemas, não avisar de sua
15. iminência.
A e B . A menos que o Autotask foi desativado, ele será executado em todos os
janela.
manutenção
Ele também pode ser invocada sob demanda.
C e D são incorrectas. C está incorreta porque, apesar de um alerta uso de tabela será
fazer com que o Autotask para analisar todos os objetos no espaço de tabela na janela de
manutenção
isso seguinte,
não acontece quando o alerta é gerado. D está incorreta porque a única ação
por suspensão de uma sessão está executando o após suspender ON gatilho DATABASE.
desencadeada
16. D . PSIQUIATRA ESPAÇO ambos os pactos os dados e move o HWM. Enquanto o
HWM
sendo é operações DML em cima da mesa estão bloqueadas.
movido,
A , B , C , e E são incorrectas. A , B , e E são sintacticamente incorrecta. C é incorrecta
porque COMPACT só executa a operação de redução, mas não move o HWM depois
encolhendo o segmento.
17. C e D . Movimento Row é necessário porque um psiquiatra vai mudar IDs de linha.
necessário
ASSMparaé dar as informações necessárias sobre como completo um bloco é.
A , B , e E são incorrectas. A está incorreta porque gatilhos não dispara para a operação;
eles vão continuar a disparar para qualquer outro DML. B é incorrecta porque os índices são
mantidas
durante um psiquiatra. E é incorrecta porque segmentos LOB não bloqueará uma retracção
tabela.
ser Elas vão
reduzido a si mesmos se CASCADE for especificado.
18. A e D . Estes são os dois únicos métodos que permitam a alocação de espaço resumable.
B , C , e E são incorrectas. B e C são incorrecta porque a alocação de espaço é
recuperável
habilitado no nível do sistema com o RESUMABLE_TIMEOUT parâmetro de instância. E
éincorreto porque embora haja um pacote chamado DBMS_RESUMABLE, isso não
(Em vez irritante) incluir um procedimento para permitir a alocação de espaço recuperável.
acontece
19. D . Como “suspenso” implica, a declaração continuará a partir do ponto em que
parado.
A oracle Segurança
Objetivos do exame
• 062.6.1 criar e gerenciar contas de banco de dados de usuários
• Grant 062.6.2 e revogar privilégios
• 062.6.3 criar e gerenciar funções
• 062.6.4 Criar e gerenciar perfis
• 062.9.1 Explique Responsabilidades DBA para a Segurança e Auditoria
• 062.9.2 Habilitar Auditoria Database Standard e Unified Auditoria
segurança de banco de dados tem vários aspectos. Primeiro, há a autenticação: Quem pode se
conectar? Como
identificá-los? Em é que
segundo
um lugar, não há autorização: O que são os usuários autorizados a fazer?
Comoações?
Suas é que Finalmente,
se restrinja há a auditoria: Dado que os usuários podem se conectar e executar
determinadas
você acompanharações, como
o que eles estão fazendo? Estes aspectos são abordados neste capítulo.
Quando um usuário fizer logon no banco de dados, seguindo alguns meios de identificação, eles
conta
se de
conectam
usuárioa, umque define suas permissões de acesso iniciais e os atributos da sessão.
Associado a uma conta de usuário é um esquema. Os termos do usuário, conta de usuário , e
esquema
usados muitas vezes pode
alternadamente ser
no ambiente Oracle, mas eles nem sempre são a mesma coisa. Um utilizador
é um que se conecta a uma conta de usuário ao estabelecer uma sessão com a instância eo logon
pessoa
com o nome da conta do usuário. Um esquema é um conjunto de objetos pertencentes a uma conta
de usuário.
A conta de usuário deve ser concedido privilégios antes de uma sessão (ou sessões) conectado à
podeconta
fazer nada. Muitos privilégios diferentes podem ser concedidos para muitos objetos e ações
diferentes, e de privilégios, individualmente, não é prático para qualquer mas os sistemas mais
gerenciamento
simples. privilégios
geralmente agrupados sãoem papéis, que fazem administração de privilégios muito mais fácil.
Você pode usar perfis para gerenciar senhas e (de forma limitada) controlar os recursos que um
usuárioconsumir
permitido está dentro da instância e o banco de dados.
Em muitos ambientes, os usuários terão permissão para fazer certas coisas, mas isso não
devesignifica que
ser capaz deeles
fazê-las sem um registro que está sendo mantido. Por exemplo, um administrador
da base de dados
(geralmente) ser capaz
(DBA)de ler e escrever qualquer linha em qualquer tabela no banco de dados. Esta é
parteexemplo,
Por de seu trabalho.
se a corrupção de dados de negócios ocorre (talvez por erro do usuário ou através da
problemas de software), a DBA precisará usar SQL * Plus ou alguma outra ferramenta que pode
aplicação
ignorar todo
segurança deoaplicativos e regras e editar os dados para corrigi-lo. Mas isso não significa que o DBA
deve ser em tabelas de dados sensíveis, sem uma boa razão. Ações como esta não pode ser evitado,
mergulho
eles podem, e devem, ser rastreado. Este é o propósito da auditoria: para gravar ações que são
mas
permitidas, masprejudiciais.
potencialmente
• Nome de usuário
• Método de autenticação
• espaço de tabela padrão
• quotas Tablespace
• tabela temporário
• Perfil de usuário
• Status da Conta
Todos estes devem ser especificado ao criar o usuário, embora apenas usuário e autenticação
métodos são obrigatórios; os outros têm padrões.
Nome de Usuário
O nome de usuário deve ser exclusivo no banco de dados e deve obedecer a certas regras. Um nome
de usuário
começar com
deve
uma letra, não devem ter mais de 30 caracteres, e pode consistir apenas de letras,
algarismos,
cifrão ea
($) e caracteres de sublinhado (_). Um nome de usuário não pode ser uma palavra reservada.
As letras sãoe minúsculas, mas será convertido automaticamente para maiúsculas. Todas estas regras
maiúsculas
(com
o comprimento)
a exceção depode ser interrompida se o nome de utilizador é especificada dentro de aspas, como
se mostra na Figura 16-1 .
No primeiro exemplo, na figura, o nome de utilizador JOÃO é criado. Este foi inscrito em letras
masminúsculas
terá sido convertido para maiúsculas, como mostrado na primeira consulta. O segundo exemplo
aspas duplas para criar o usuário com um nome em letras minúsculas. Os terceiro e quarto exemplos
utiliza
usampara
cita duplo
ignorar as regras de caracteres e palavras reservadas; ambos falharia sem a
aspas duplas. Se um nome de usuário inclui letras minúsculas ou caracteres ilegais ou é uma palavra
em seguida, aspas duplas devem ser usadas para se conectar à conta posteriormente.
reservada,
DICA É possível usar nomes de usuários fora do padrão, mas isso pode causar confusão terrível.
aplicações contam com a conversão caso; outros sempre usar aspas duplas. Pode ser considerado
Alguns
bom
prática sempre usar letras maiúsculas e apenas os caracteres padrão; isto significa que as aspas
duplas
ser usado
pode
ou não.
Se um espaço de tabela padrão não é especificado quando o banco de dados é criado, ele será
tablespace.
ajustado para o sistema
CUIDADO Depois de criar um banco de dados, não deixe o espaço de tabela padrão como sistema;
isto é mau
prática. Quer mudá-lo, logo que tiver criado um outro espaço de tabela ou usar uma forma do
Comando CREATE DATABASE que cria um espaço de tabela padrão.
Uma quota é a quantidade de espaço de uma tabela que um utilizador está autorizado a ocupar. O
criarusuário
objetospode
e alocar extensões para eles até que a cota seja atingido. Se o usuário não tem cota em
tabela, o usuário não pode criar quaisquer objetos em tudo. As quotas podem ser alteradas a qualquer
uma
momento.
quota é reduzida
Se um ausuário
menos do que o tamanho dos objetos que o usuário já possui (ou mesmo reduzido
a zero),
os objetos vão sobreviver e ainda será utilizável, mas eles não serão autorizados a ficar maior.
Figura 16-2 mostra como para investigar e definir quotas.
Os dois comandos alter user na Figura 16-2 dar JOÃO a capacidade de levar até 10MB
de espaço na tabela USERS e ter uma quantidade ilimitada de espaço no EXEMPLO
tablespace. A consulta contra DBA_TS_QUOTAS confirma isso; o número -1 é como “ilimitado” é
representados. Na época, a consulta foi executada, João não tinha criado qualquer objeto, de modo
que ossão
Bytes números
zeros, para
indicando que ele não está usando todo o espaço em qualquer espaço de tabela.
EXAME DICA Antes de criar um segmento, você deve ter tanto permissão para executar CRIAR
TABLE e uma cota em uma tabela em que para criá-lo.
tabela temporário
objetos permanentes (como tabelas) são armazenados em tablespaces permanentes; objetos
temporários
na tabela temporários.
são armazenados
A sessão terá espaço em um espaço de tabela temporário se ele precisa de
espaçooperações
certas para que excedem o espaço disponível no Programa Global Area da sessão (PGA).
Cada conta de usuário é atribuído um espaço de tabela temporário, e todas as sessões de usuário se
conectar
conta irá àcompartilhar este espaço de tabela temporário.
A consulta contra DBA_USERS na Figura 16-2 mostra tabela temporário utilizador de JOÃO,
nesteque
caso, é o espaço de tabela temporário padrão de banco de dados porque uma tabela temporário
Não foi especificado quando o usuário foi criado. Isso é mostrado pela última consulta na Figura 16-
alternativa
2 , contra
DATABASE_PROPERTIES.
Um usuário não precisa de ser concedida uma cota em sua tabela temporário. Isso ocorre porque
objetos
o não são realmente de propriedade do usuário; são de propriedade do usuário SYS, que tem
uma
cota ilimitada em todos os espaços de tabela.
EXAME DICA Os usuários não precisam de uma quota em seus espaços de tabela temporários.
Para alterar tabela temporário do usuário (o que afetará todas as sessões futuras que se conectam
à use um usuário comando ALTER.
conta),
DICA Se muitos usuários estão se conectando à mesma conta de usuário, eles irão compartilhar o
uso de um temporário
tablespace. Isso pode ser um gargalo de desempenho, que pode ser evitado pelo uso temporário
grupos tabela.
Status da Conta
Cada conta de utilizador tem um certo status, conforme listado na coluna ACCOUNT_STATUS de
DBA_USERS. Há cinco possibilidades:
• ABRIR A conta está disponível para uso.
• BLOQUEADO Isso indica que o DBA deliberadamente bloqueado a conta. Nenhum usuário
pode
paraseuma
conectar
conta bloqueada.
• EXPIRADA Isso indica que o tempo de vida expirou. As senhas podem ter um limitado
tempo de vida. Nenhum usuário pode se conectar a uma conta expirada até que a senha é
redefinida.
• expirado (GRACE) Isso indica que o período de carência está em vigor. Uma senha não
precisa
expiram imediatamente quando termina a sua vida útil; ele pode ser configurado com um
período
quais de carência
usuários durante
que ligam para a conta tem a oportunidade de alterar a senha.
• bloqueado (TIMED) Isto indica que a conta está bloqueada por causa de login falhou
tentativas. Uma conta pode ser configurado para bloquear automaticamente durante um
período após
password é apresentado
uma incorrecta
um determinado número de vezes.
Isto irá iniciar imediatamente o período de carência, forçando o usuário a alterar sua senha em
próxima
seu tentativa de login. Não existe tal comando como ALTER ... cancelar o vencimento. A única
maneira
conta totalmente
de fazer funcional
a novamente é para redefinir a senha.
Métodos de autenticação
Uma conta de utilizador tem de ter um método de autenticação, em outras palavras, alguns meios
pelos quais
banco de dados
o pode determinar se o usuário tentar criar uma sessão de conexão com a conta é
permissão para fazê-lo. A técnica mais simples é através da apresentação de uma senha que será
comparado
senha armazenada
com umno banco de dados, mas existem alternativas. Estas são as possibilidades:
As duas primeiras técnicas são utilizadas apenas para os administradores; o último requer um
Directory
leve Access Protocol (LDAP) servidor de diretório. O servidor de diretório LDAP é o Oráculo
Internet Directory, enviado como parte do Oracle Fusion Middleware Suite.
Concessão de qualquer (ou todos) desses privilégios irá copiar a senha do usuário do dicionário
paradeo dados
arquivo de senhas externo, onde pode ser lido pelo exemplo, mesmo que o banco de dados
não está
Após a criação
aberto.do banco de dados, o único usuário com esses privilégios é SYS. Ele também permite
que a instância
autenticar os usuários,
para verificando se o usuário do sistema operacional tentando a conexão é um
membro do grupo de sistema operacional mapeado para o nome do grupo Oracle. No Linux, o
operacional
grupos de sistemas deve ser especificado durante a instalação do Oracle Home. No Windows, não há
Os grupos são criados implicitamente com esses nomes:
escolha.
Para usar a autenticação de arquivo de senha, o usuário pode se conectar com esta sintaxe com o
SQL * Plus:
Note que você pode usar a autenticação do arquivo de senha para uma conexão com um banco de
Oracle
dados
Net.
remoto
Esta éatravés
uma impossibilidade lógica com a autenticação do sistema operacional porque ao
utilizar um
A senha do sistema operacional não é armazenado pelo Oracle, e, portanto, não há problemas
alteração
com de senhas.
O equivalente dessas sintaxes também está disponível quando se conectar com banco de dados
a caixa
Express,
de seleção
por AS SYSDBA na janela de login Expresso banco de dados. Para determinar a
quem
os privilégios SYSDBA e SYSOPER foram concedidos, consultar os $ PWFILE_USERS vista V.
conexão com o sistema operacional ou a autenticação de arquivo de senha é sempre possível, não
UMA
importaa oinstância
estado que e banco de dados estão em, e é necessário para a emissão de inicialização e
comandos.
desligamento
TIP EXAME Todas as sessões de usuário deve ser autenticado. Não existe tal coisa como um
login, e alguns método de autenticação deve ser usado. Há, no entanto, um usuário anônimo,
“anônimo”
que é a conta utilizada pelas aplicações Oracle Application Express (APEX).
autenticação de senha
A sintaxe para uma conexão com autenticação de senha usando SQL * Plus é a seguinte:
Quando o usuário se conecta com autenticação de senha, a instância irá validar a senha
dada contra o hash de senha armazenada com a conta de usuário no dicionário de dados. Para que
isso
o banco
funcione,
de dados deve ser aberto; é logicamente impossível a emissão de inicialização e
desligamento
comandos quando conectado com autenticação de senha. O SYS usuário não tem permissão para se
com autenticação de senha; único arquivo senha, sistema operacional e autenticação LDAP são
conectar
possível para SYS.
Nomes de usuários são sensíveis, mas são convertidos automaticamente para maiúsculas a menos
dentro
quedeespecificado
aspas duplas. As senhas são caso sensível, e não há nenhuma conversão caso automático.
Isto é necessário usar aspas duplas; a senha será sempre ler exatamente como entrou.
não
Qualquer usuário pode alterar a senha da conta de usuário, a qualquer momento, ou um usuário
SYSTEM)
altamente
pode
privilegiado
alterar qualquer
(comosenha da conta do usuário. A sintaxe (se você está mudando o seu
próprio
senha ou outra) é a seguinte:
Autenticação externa
Se uma conta de usuário é criada com autenticação externa, a Oracle vai delegar a autenticação para
serviço externo; ele não vai pedir uma senha. Se a opção de segurança avançada tem sido
um
licenciado, então o serviço externo pode ser um número de serviços de terceiros, tais como um
servidor
ou um servidor
Kerberos
RADIUS. Quando um usuário tenta se conectar à conta de usuário, em vez de
autenticação
o próprio utilizador, o banco de dados irá aceitar exemplo (ou rejeitar) a autenticação de acordo com
se o
serviço de autenticação externo autenticou o usuário. Por exemplo, se o Kerberos está a ser utilizado,
banco de dados irá verificar se o usuário tem um token Kerberos válido.
o
Sem a opção de segurança avançada, a única forma de autenticação externo que pode ser
autenticação
utilizado do
é sistema operacional. Este é um requisito para contas SYSDBA e SYSOPER (como
já discutido), mas também pode ser usado para usuários normais. A técnica é criar um usuário do
Oracle
conta com o mesmo nome da conta de usuário do sistema operacional, mas prefixado com uma
cadeia
pela OS_AUTHENT_PREFIX
especificada parâmetro de instância. Este parâmetro padrão para a OPS string $.
verificar o seu valor, use uma consulta como esta:
Para
Note que o nome de usuário deve ser em letras maiúsculas, e por causa dos caracteres ilegais
e um(uma
espaço),
barraele
invertida
deve ser colocado entre aspas duplas.
DICA Usando autenticação externa pode ser útil, mas apenas se os usuários realmente fazer logon
hospeda
na máquinao banco de dados. Os usuários raramente vai fazer isso, então a técnica é mais provável que
seja de usadas
contas valor para
para executar manutenção ou de lote empregos.
criando contas
O comando CREATE USER tem apenas dois argumentos necessários: um nome de usuário e um
método de Opcionalmente, ele pode aceitar uma cláusula para especificar um espaço de tabela
autenticação.
padrão ede
espaços uma
tabelas,
temporária
uma ou mais cotas cláusulas, um perfil com o nome, e comandos para bloquear a
aconta
senha.
e expiram
Este é um exemplo típico (com os números de linha adicionados):
Apenas a primeira linha é necessária; existem padrões para tudo o resto. Aqui está o que o
faz,comando
dividido linha por linha:
Todos os atributos de uma conta pode ser ajustado posteriormente com comandos alter user, com
exceção
o do nome. Isto é como mudar os atributos:
Depois de criar uma conta de utilizador, pode ser necessário para soltá-lo.
Este comando só terá sucesso se o usuário não possuir quaisquer objetos-se o esquema está
vocêvazio.
não quer
E seidentificar todos os objetos pertencentes e soltá-los em primeiro lugar, eles podem ser
descartados
usuário especificando
com o CASCADE.
Exercício 16-1: Criar usuários Neste exercício, você irá criar alguns usuários a serem utilizados
para a exercícios neste capítulo. Supõe-se que há um espaço de tabela permanente chamada
restantes
EXEMPLO e uma tabela temporário chamado TEMP. Se estes não existirem, crie-los ou uso
quaisquer outros espaços de tabela apropriadas. Aqui estão os passos a seguir:
1. Conecte-se ao seu banco de dados com SQL * Plus como um usuário altamente privilegiado,
como o sistema ou
SYS.
2. Crie três utilizadores.
3. Confirme se os usuários foram criados com Banco de Dados expresso. A partir da página de
banco
página,
de dados
o caminho de navegação é a guia Segurança | Link Usuários. Os usuários deve ser
algo
os mostrados
como na Figura 16-3 .
5. Quando solicitado, selecione uma nova senha (como o Oracle). Isso não vai chegar a
qualquer
porquelugar
ALOIS não tem o privilégio CREATE SESSION.
6. Atualize a janela Expresso do banco de dados e observe que o status da conta ALOIS há
já expirado (indicado com o símbolo do relógio), mas sim ABERTO (indicado com um
porque a sua senha foi alterada.
carrapato)
privilégios de sistema
Existem mais de 200 privilégios de sistema. A maioria aplicam-se a ações que afetam o dicionário
de dados,
como a criação
tais de tabelas ou usuários. Outros afetam o banco de dados ou a instância, como a
criação deos
ajustando espaços
valoresdedos
tabela,
parâmetros de instância e estabelecer uma sessão. Estes são alguns dos mais
privilégios comumente usados:
• CRIAR
logon noSESSÃO
banco deEste privilégio permite que o usuário se conectar. Sem ele, o usuário não
dados.
pode sequer
• RESTRICTED SESSION Se o banco de dados é iniciado com a inicialização RESTRINGIR
oucom
ajustado
ALTER SYSTEM ATIVAR RESTRICTED SESSION, somente os usuários com esse
privilégio
será capaz de se conectar.
• ALTER DATABASE Isto dá acesso a muitos comandos necessários para modificar
estruturas físicas.
• ALTER SYSTEM Isto dá controle sobre os parâmetros de instância e estruturas de memória.
• CREATE TABLESPACE Isto é usado junto com o ALTER TABLESPACE e soltar
privilégios TABLESPACE; esses privilégios permitirá que um usuário gerenciar tablespaces.
• CREATE TABLE Isso permite que o beneficiário criar tabelas no seu próprio esquema; que
inclui
capacidade
o de alterar e soltá-los, para executar SELECT e Data Manipulation Language
(DML)
comandos sobre eles, e de criar, modificar, ou eliminar índices sobre eles.
• conceder qualquer privilégio de objeto Deixa as permissões de objeto de concessão
outorgado
objetos, incluindo
em todos aqueles que não possuem, para os outros (mas não para si mesmo).
• CRIAR QUALQUER TABELA O beneficiário pode criar tabelas que pertencem a outros
usuários.
• soltar qualquer TABLE O beneficiário pode descartar tabelas pertencentes a quaisquer
outros usuários.
• inserir qualquer TABLE, atualizar qualquer TABLE, DELETE ANY TABLE O
beneficiário
executar estes
podecomandos DML contra tabelas de propriedade de todos os outros usuários.
• SELECT ANY TABLE O beneficiário pode selecionar qualquer tabela no banco de dados,
com
prestação:
um Tabelas de propriedade de SYS, incluindo as tabelas de dicionário de dados, não
são visíveis.
A sintaxe para a concessão de privilégios do sistema é o seguinte:
Depois de criar uma conta de usuário, um comando como o seguinte irá conceder os privilégios
de sistema
comumente atribuídas aos usuários que estarão envolvidos no desenvolvimento de aplicações:
Estes privilégios permitem que o usuário se conectar e configurar uma sessão e, em seguida,
e objetos
criar objetos
PL / SQL.
paraEsses
armazenar
objetosdados
podem existir apenas em seu próprio esquema; eles não terão
contra qualquer outro esquema. A criação do objeto também será limitada pelas quotas que pode (ou
privilégios
não pode)
foram atribuídos em vários espaços de tabela.
Uma variação na sintaxe permite que o beneficiário passar seu privilégio para um terceiro. Isto é
um
exemplo:
Isto dá SCOTT a capacidade de criar tabelas em seu próprio esquema e também para emitir o
CREATE
GRANT TABLE para comandar a si mesmo.
EXAME TIP revogação de um privilégio de sistema não serão em cascata (ao contrário de
revogação de um objeto
privilégio).
Os quaisquer privilégios dar permissões contra todos os objetos relevantes na base de dados.
seguinte
Assim,vaiodeixar SCOTT consultar cada mesa em cada esquema no banco de dados:
É frequentemente considerado má prática para conceder os privilégios para qualquer usuário que
equipe
nãode
seja
administração.
o sistema
CUIDADO Na verdade, qualquer não é tão perigoso agora como era em versões anteriores. Já não
inclui
tabelas no esquema SYS, então o dicionário de dados ainda está protegida. No entanto, qualquer
ainda deve
usado com ser
extrema cautela porque remove toda a proteção de tabelas de usuário.
Privilégios de objeto
privilégios de objeto dar a capacidade de executar SELECT, INSERT, UPDATE e DELETE
contra tabelas e objetos relacionados, bem como para executar objetos PL / SQL. não existem esses
privilégios
para objetos em próprios esquemas dos usuários; se um usuário tiver o privilégio de sistema
CREATEoperações
executar TABLE, eles
SELECT
podeme DML contra tabelas que eles criam com mais necessidade de
permissões.
EXAME TIP O quaisquer privilégios, que concedem permissões contra objetos em cada conta de
usuário
o banco no
de dados, não são objeto de privilégios; eles são privilégios de sistema.
Variações incluem o uso de todos, que irá aplicar todas as permissões relevantes para o tipo de
objeto, ea capacidade de nomear colunas específicas de vistas ou tabelas.
Este código vai deixar SCOTT consultar todas as colunas da tabela funcionários da HR, mas
escrever
coluna para salário.
indicado, apenas umEntão SCOTT é dado todos os privilégios de objeto (SELECT e DML)
mesa regiões da HR.
sobre
TIP Conceder privilégios no nível da coluna é frequentemente dito ser má prática por causa da
maciça
carga de trabalho envolvida. Se for necessário restringir o acesso das pessoas para determinadas
colunas,
que mostra
criando
apenas
uma
as colunas,
visão muitas vezes, ser uma alternativa melhor.
Usando COM OPÇÃO GRANT (ou com Banco de Dados Express, navegue para Segurança |
Privilégios
Usuáriose Funções
| | Edit) permite que um usuário passar o privilégio de objeto para um terceiro.
Oracle manterá
registro de quemum concedeu privilégios de objeto para quem; isto permite uma renúncia de um
objecto
todos aqueles
para a na
cascata
cadeia. Considere esta seqüência de comandos:
Na conclusão desses comandos, nem SCOTT nem JON nem SUE tem o SELECT
privilégio contra a HR.EMPLOYEES.
EXAME TIP A revogação de um privilégio de objeto serão em cascata (ao contrário de revogação
de um sistema
privilégio).
Exercício 16-2: Conceder privilégios diretos Neste exercício, você irá conceder alguns privilégios
para o criado em Exercício 16-1 e provar que eles funcionam. Siga esses passos:
usuários
1. Ligue para o seu banco de dados como usuário SYSTEM com o SQL * Plus e conceder
CRIAR
SESSÃO ao usuário ALOIS.
2. Abra outra sessão SQL * Plus e conectar como ALOIS. Desta vez, o login será bem
sucedida.
3. Como ALOIS, tentar criar uma tabela.
Isto irá falhar com a mensagem “ORA-01950:. Nenhum privilégio na tabela 'exemplo'”
6. Na sessão SYSTEM, dar ALOIS uma quota na tabela EXEMPLO.
7. Na sessão ALOIS, tente novamente. Desta vez, a criação será bem sucedida.
8. Como ALOIS, conceder privilégios de objeto na nova tabela.
9. Para recuperar informações sobre estes subsídios, como SYSTEM, execute essas consultas:
Em seguida, conceder privilégios para o papel com a sintaxe de costume, incluindo COM
GRANT opção, como
administração
Por exemplo, ou com
suponhadesejado.
que o esquema HR está a ser usado como um repositório para os dados a
grupos
ser utilizada
de pessoal:porostrês
quadros tenham pleno acesso, pessoal administrativo sênior têm acesso
limitado,administrativo
pessoal e júnior ter acesso restrito. Em primeiro lugar, criar uma função que pode ser
adequado
eles podempara os éfuncionários
fazer responder a júnior; todos
perguntas por execução de consultas.
Qualquer concedido esse papel será capaz de fazer logon no banco de dados e executar
contra
instruções
as tabelas
SELECT
de RH. Em seguida, crie um papel para os funcionários seniores, que também pode
gravar dados no
Funcionários e mesas JOB_HISTORY.
Este terceiro papel é dado o papel HR_SENIOR com a capacidade de transmiti-la e, em seguida,
controle
fica cheia
sobre o conteúdo de todas as tabelas. Mas note que o único privilégio de sistema este papel
tem é
CREATE_SESSION, adquirido através HR_SENIOR, que adquiriu através HR_JUNIOR. Não
mesmo esse papel pode criar ou excluir tabelas; que deve ser feito pelo usuário de RH ou um
administrador
CRIAR QUALQUER
com TABLE e soltar qualquer privilégios de sistema TABLE.
Observe a sintaxe COM OPÇÃO ADMIN, que é a mesma que para a concessão de privilégios de
Tal sistema.
como acontece com privilégios de sistema, a revogação de um papel não serão em cascata; não
há nenhumum
concedeu registro
papel amantido
quem. de quem
Finalmente, conceda as funções ao pessoal relevante. Se Scott é um gerente, SUE é um
Jon funcionário
e ROOP sãosênior,
pequenos
e funcionários, o fluxo seria como se mostra na Figura 16-5 .
Figura 16-5 Concessão de papéis com SQL * Plus
funções predefinidas
Existem dezenas de funções pré-definidas em um banco de dados Oracle. Aqui estão alguns que
cada DBA
ciente de: deve ser
• CONECTAR existe Este papel apenas para compatibilidade com versões anteriores. Nas
versões
os privilégios
anteriores,
de ele
sistema
tinhanecessários para criar objetos de armazenamento de dados, como
tabelas; com
liberação, eleasócorrente
tem CREATE SESSION.
• RECURSOS Também para compatibilidade com versões anteriores, esse papel pode criar
ambos
comoostabelas)
objetosede
objetos
dadosprocessuais
(tais (tais como procedimentos PL / SQL).
• DBA Este tem a maioria dos privilégios de sistema, bem como vários privilégios de objeto e
papéis.
Qualquer concedido usuário DBA pode gerenciar virtualmente todos os aspectos do banco de
dados, com exceção de inicialização e
desligar.
• SELECT_CATALOG_ROLE Isto tem milhares de privilégios de objeto em relação aos
dados
objetos do dicionário, mas não privilégios de sistema ou privilégios em relação aos dados do
usuário.administrativo
pessoal Isso é útil parajúnior que deve monitorar e informar sobre o banco de dados, mas não
ser capaz
dados de ver
do usuário.
• SCHEDULER_ADMIN Isto tem os privilégios de sistema necessários para a gestão do
Scheduler serviço de agendamento de tarefas.
Além disso, a função predefinida público é sempre concedido a cada conta de usuário do banco
que de
se dados.
um privilégio
Segue-se
é concedido para PUBLIC, ele estará disponível para todos os usuários.
Portanto, após o
comando seguinte, todos os usuários serão capazes de consultar a tabela de HR.REGIONS:
NOTA o papel público é tratado de forma diferente de qualquer outro papel. Não se trata, por
exemplo,
nas DBA_ROLES
aparecemvista. Isso ocorre porque o código fonte para DBA_ROLES, que pode ser visto
o script cdsec.sql chamado pelo script catalog.sql, exclui especificamente.
em
permitindo Roles
Por padrão, se um usuário tiver sido concedido um papel, o papel será ativado. Isto significa que
momento
sessão a um
é estabelecida a conexão com a conta de usuário, todos os privilégios (e outras funções)
concedidos
papel será ativo.
ao Este comportamento pode ser modificado, tornando o não padrão papel. Seguindo o
exemplo dado na seção anterior, esta consulta mostra o que os papéis tenham sido concedidos para
JON:
JON foi concedida HR_JUNIOR. Ele não tem administração sobre o papel (para que ele não
pode para qualquer outra pessoa), mas é um padrão role-ele vai ter esse papel, sempre que ele se
passá-lo
conecta. pode
situação este muito bem não ser o que quiser. Por exemplo, JON tem que ser capaz de ver as tabelas
de RH
seu trabalho),
(é mas isso não significa que você quer que ele seja capaz de discar de casa, à meia-
noite,ase tabelas
para cortar com SQL * Plus. Você quer organizar as coisas de tal forma que ele pode ver as
tabelas
está emsó umquando eleno escritório pessoal, executando o aplicativo de RH durante o expediente.
terminal
Aqui é como mudar o comportamento padrão:
Agora, quando JON faz logon, ele não terá quaisquer funções ativado. Infelizmente, isso
logon
significa
em tudo,
queporque
ele nãoé pode
apenas HR_JUNIOR que lhe dá o sistema CREATE SESSION
privilégio. Isto é facilmente corrigido.
Agora, quando JON liga, apenas o seu papel CONNECT está habilitado, e a versão atual do
CONNECT não é perigoso em tudo. Dentro do aplicativo, comandos de software pode ser
incorporado
habilitar a função
para HR_JUNIOR. O comando básico para permitir um papel dentro de uma sessão,
que podepelo
emitido ser usuário a qualquer momento, é a seguinte:
Assim, não há nenhuma segurança ainda. Mas se o papel é criado com a seguinte sintaxe, em
ativado
seguida,
somente
o papel
através
podedaser
execução do procedimento PL / SQL nomeado pelo procedure_name :
Este procedimento pode fazer qualquer número de controlos: a de que o usuário está trabalhando
sub-rede
em umaquerede
o usuário
TCP / está
IP específico
executando um processo de usuário particular (provavelmente não SQL
* Plus), que ointervalo,
determinado tempo está em um
e assim por diante. Incorporação chamadas para os procedimentos que
permitem pode
aplicação em pontos
trocarapropriados
de papéis dentro
em um e fora, conforme necessário, deixando-os com deficiência em
todos os momentos
conexão é feita comemumaqueferramenta
um SQL ad hoc, como o SQL * Plus.
Análise Privilege
Às vezes é difícil identificar o que os privilégios de um usuário tem e quais privilégios o usuário
realmente
usa, particularmente quando os papéis estão envolvidos. Por esta razão, a Oracle oferece a Análise
mecanismo. O fluxo é como se segue:
Privilege
1. Definir o escopo do que deveria ser analisado, como o uso de privilégio ao longo do todo
banco de dados, privilégios usadas que foram acessados através de determinadas funções e
privilégios usado por
aplicações particulares.
2. atividade de monitoramento em Iniciar, permitem aos usuários trabalhar por um período, e
parar a atividade
3. Gerar relatóriosdesobre
monitoramento.
o que foram usados privilégios, e quais privilégios não foram
utilizados,
durante o período de análise.
• dbms_privilege_capture.create_capture
• dbms_privilege_capture.enable_capture
• dbms_privilege_capture.disable_capture
• dbms_privilege_capture.generate_result
• dba_used_privs
• dba_unused_privs
Exercício 16-3: criar e conceder Roles Neste exercício, você criará alguns papéis, conceder-lhes a
os usuários, e demonstrar a sua eficácia. Siga esses passos:
1. Conecte-se ao seu banco de dados com SQL * Plus como usuário SYSTEM.
2. Criar dois papéis, como segue:
7. Confirmar que ANJA pode se conectar e consultar ALOIS.T1 mas fazer mais nada.
8. Como o sistema do usuário, ajustar ANJA de modo que, por padrão, ela pode fazer logon,
mas fazer mais nada.
DICA Você também pode usar perfis para limitar o uso de recursos, mas uma ferramenta muito mais
sofisticada
alcançar este
para
objetivo é Gerenciador de recursos.
Para ver qual perfil está atribuído a cada usuário, execute esta consulta:
Por padrão, todos os usuários será atribuído o perfil chamado DEFAULT. Em seguida, a visão de
exibir
queosvai
perfis de si mesmos é DBA_PROFILES.
Estas restrições não são muito rigorosos; uma senha pode ser inserido incorretamente dez vezes
antes
consecutivas
de a conta é bloqueada por um dia, e uma senha expira após cerca de seis meses, com um
período de carência de uma semana para mudá-lo depois disso. Não há nenhuma verificação de
complexidade de senha.
Criação e atribuição de Perfis
A maneira mais simples para permitir o gerenciamento de senhas mais sofisticado é executar código
fornecido
roteiro fornecido.
em um No Unix ou Linux, é como segue:
Em qualquer plataforma, o script cria um conjunto de funções que oferece vários graus de senha
complexidade verificação.
Para criar um perfil com o SQL * Plus, use o comando CREATE PROFILE, estabelecendo
quaisquer limites
é requerido. Quaisquer limites não especificados serão apanhados a partir da versão atual do
PADRÃO
perfil. Por exemplo, pode ser que as regras do estado organização que contas devem ser bloqueadas
depois de cinco tentativas de login falhas consecutivas por uma hora, exceto para os
administradores,
trancado depois de
que
duas
deve
tentativas
ser para um dia inteiro, e que todas as senhas devem ser sujeitos ao
algoritmo de verificação de complexidade de senha padrão.
previsto
Exercício 16-4: Criar e usar perfis Neste exercício, você vai criar, atribuir e testar um perfil
que obriga algum controle senha. Aqui estão os passos a seguir:
1. Conecte-se ao seu banco de dados com SQL * Plus como usuário SYS.
2. Execute o script que irá criar as funções de verificação fornecidos e depois aplicar um para
o perfil padrão. Confirmar que a função foi criada e aplicada.
3. Criar um perfil que vai bloquear contas após duas senhas erradas para 10 minutos.
técnicas de auditoria
Várias técnicas de auditoria estão disponíveis em um ambiente Oracle. O mais poderoso é o de
Cofre. Este é um produto instalado separadamente e licenciado que está muito além do alcance da
Auditoria
Certified Professional (OCP) syllabus. A maioria dos ambientes não vai precisar deste; as técnicas
Oracle
internas
descrito nesta seção será suficiente para a maioria das necessidades de negócios. introduz liberação
um novo método de auditoria: auditoria unificada . É esta técnica que é testada.
12c
• O acesso a uma tabela de dados dos funcionários é bom em geral, mas se uma coluna
SALÁRIO
que deve éser
acessado,
gravado.
• Talvez um usuário tem direitos para ler uma tabela ao executar um aplicativo aprovado. Mas
seconsultar
eles a tabela de SQL * Plus, que deve ser conhecido.
• Pode não ser necessário o registro de acesso que ocorre através de meios normais no dia de
trabalho,
mas fora-de-horas de acesso de um dispositivo fora da rede corporativa deve ser rastreado.
FGA irá gerar um registro de auditoria quando estiverem reunidas determinadas condições. A
em um
condição
predicado
podeeser
também
baseado
em uma lista de colunas. Bem como a auditoria do evento, FGA pode
executar um user-
procedimento definido. Esta é uma instalação poderosa. Com efeito, é um gatilho em SELECT. É
definir políticas de auditoria diferentes para declarações diferentes. Por exemplo, você pode querer
possível
gravar
de dados,
mudanças
mas não lê.
A interface para FGA é uma interface de programação de aplicativo-to simples de usar (API) -a
DBMS_FGA Package, com quatro procedimentos:
O código anterior define três políticas sobre uma mesa, SCOTT.EMP. A primeira política,
EMP_D10_POL, irá gerar um registro de auditoria sempre que qualquer instrução é executada que
acessa um no Departamento 10. Note que a política não inclui MERGE. Um MERGE é capturado
empregado
segundo o comunicado subjacente DML que os implementos MERGE. Usando o padrão de NULL
para AUDIT_COLUMNS significa que não há nenhuma restrição em coluna; não importa o que
colunas sãoa declaração será auditada.
projetada,
A segunda política irá capturar todas as instruções SELECT (SELECIONAR é o padrão para o
argumento statement_type) que leia a coluna SAL. O padrão de NULL para
AUDIT_CONDITION significa que a auditoria será feita para qualquer linha.
A terceira política irá gerar um registro de auditoria e também irá executar um procedimento,
sempre
SEC.EMPDEL,
que uma linha é excluída. O procedimento deve obedecer a uma interface definida. Deve
aceitar três VARCHAR2, que será preenchido com o esquema do objeto (neste caso, Scott), o
argumentos
nome de objeto (neste caso, EMP), e o nome da política (neste caso, EMP_DEL_POL).
Os registros de auditoria são visíveis no dicionário de dados vista DBA_FGA_AUDIT_TRAIL.
inclui
este
a instrução SQL real, junto com detalhes como quem executou e quando. o
armazenamento subjacente para a vista é a tabela SYS.FGA_LOG $, que por padrão reside no
tablespace SYSTEM.
Auditoria Value-Based
As técnicas declarativas para auditoria (auditoria padrão, FGA e auditoria unificada) não capturam
os próprios dados. Eles capturar a ação: quem, o quê, quando e com que privilégio. Isso significa
a instrução executada, e não os valores que foram realmente visto ou atualizados. Se for necessário
para ver você
valores, o deve recorrer a auditoria valor-base, que é implementado com gatilhos.
Um gatilho DML projetado para disparar sempre que qualquer instrução DML é executado pode
capturar
valores a linha a uma tabela de auditoria definido pelo usuário. Veja este exemplo:
e escrevê-los
Dependendo da natureza do DML, o gatilho irá capturar valores apropriados em uma madeireira
mesa. O disparador dispara como parte do LMG, e a inserção será comprometida (ou revertida) com
a transação chamada. Portanto, é possível que o desempenho pode degradar. Este não deve ser o
caso com padrão ou FGA auditoria, onde a captura é realizado por rotinas que são internas
para a instância, não pelo código PL / SQL definida pelo usuário.
Unified Auditoria
Unified auditoria é uma nova técnica que substitui a auditoria padrão, embora os dois podem
trabalhar
ao mesmo tempo. Unified auditoria declara políticas, que são habilitados para particulares (ou todos)
os usuários.
Cinco políticas pré-configuradas estão disponíveis a serem implementadas:
O mecanismo de auditoria unificada é eficiente. Por padrão, os registros de auditoria não são
mesaescritos
de pista
para
(noaesquema
auditoriaAUDSYS) em tempo real, mas através de uma fila de buffer. Assim, as
sessões estão escrevendo
apenas para uma estrutura de memória em System Global Area (SGA). Um processo em segundo
plano, o Gen0
processo genérico, leva a tensão de escrever os registros da fila para a mesa de forma assíncrona.
Esta gravação atrasada levanta a possibilidade de perder registros de auditoria em caso de um
acidente ativado
Embora de instância.
por padrão, isso pode ser mudado. Para alternar do modo de gravação atrasada de
modo de escrever, usar um procedimento no pacote DBMS_AUDIT_MGMT. Este exemplo permite
imediato
gravação imediata e, em seguida, muda novamente o padrão na fila de gravação:
registros de auditoria unificadas são gravados em uma tabela no esquema AUDSYS. A tabela
nome
temgerado
um sistema-
que pode ser diferente em cada banco de dados e é só de leitura a qualquer regular de
dados
Definição DML Language (DDL) ou. Ele pode ser gerenciado somente através
DBMS_AUDIT_MGMT.
Auditoria obrigatória
Um pequeno número de operações são sempre auditadas, se configurada ou não:
• Execução dos comandos unificados auditoria CRIAR POLÍTICA FISCAL / ALTER / GOTA
• Execução da auditoria comandos padrão AUDITORIA / NOAUDIT
• Execução do FGA Package DBMS_FGA
• A execução do pacote de gestão DBMS_AUDIT_MGMT
Além disso, todas as declarações de nível superior executados por usuários administrativos
SYSDBA,
(sessõesSYSOPER,
ligada comoSYSBACKUP, SYSDG, SYSKM, ou SYSASM), enquanto a base de dados
modo MOUNT NOMOUNT ou são auditados para a trilha de auditoria do sistema operacional. No
está
Unix ou Linux,
registros são gravados
o em arquivos no diretório especificado pelo parâmetro AUDIT_FILE_DEST;
em
Janelas, eles são escritos no registo de aplicações do Windows. Estas declarações incluem conectar
tentativas, inicialização ou desligamento, e qualquer sistema ALTER e comandos ALTER
DATABASE.
Habilitar Auditoria Database Standard e Unified
Auditoria
auditoria padrão é possível (embora não pode ser activada ou configurado) apenas se o banco de
dados
foi convertido
não possui
para auditoria unificada. Unified auditoria requer uma biblioteca dinâmica adequada
para ser
disponível, o que não é o caso após a instalação do Oracle Home.
Os valores apresentados na Figura 16-6 são típicos de muitas instalações. Uma vez que os
(Todos
parâmetros
os quaisforam
são estáticos),
definidoso comando AUDIT ativa a auditoria da execução de certas
declarações,
o uso de certos privilégios, ou o acesso a determinados objetos.
A Figura 16-7 mostra a criação de políticas de cada tipo, seguido por uma política mista que
três combina
tipos. Finalmente,
o ele mostra um exemplo de uma política de ação que será aplicado a apenas
uma mesa.
Figura 16-7 Definindo unificada políticas de auditoria
Tendo criado a política, ele deve ser ativado, globalmente ou para usuários individuais. Por
um padrão,
registo de auditoria é gerado sempre que o estado de auditoria é satisfeita, se o resultado foi bem
sucedido ou16-8 mostra as políticas de ativação de várias maneiras.
não. Figura
O primeiro exemplo na figura permite a política privpol para todos os usuários. Toda tentativa de
dos usar
privilégios, se bem sucedido ou não, será gravado. O exemplo seguinte permite a actpol
política, mas vai gravar apenas as tentativas bem sucedidas de executar as instruções. O terceiro
exemplo
ativar a política
vai rolepol por apenas dois usuários, registrando cada vez que usar um privilégio
através do papel nomeado. Então mixedpol está habilitado para todos os usuários quando tentativas
adquirido
falharem. A sintaxe para
desativar uma política é a política NOAUDIT < nome da política >.
O último exemplo na Figura 16-8 usa o
procedimento DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL para limpar todos os
registros
tamponado atualmente
na PIG para a pista de controlo na base de dados.
Exercício 16-5: Use Unified Auditoria Neste exercício, você vai ativar a auditoria unificada. O
difere entre Linux e Windows. Então você vai criar e configurar políticas de auditoria, bem como
método
consultar os resultados. Conectar como SYSDBA salvo indicado. Aqui estão os passos a seguir:
b. Nota para quem as políticas têm sido habilitado. São quaisquer diretivas habilitadas por
padrão? se os registros de auditoria unificadas são gerados.
6. Verifique
uma. Conectar como usuário SYSTEM e executar algumas ações. Aqui está um exemplo:
Broca Two-Minute
Criar e gerenciar contas de banco de dados de usuários
• Os usuários se conectam a uma conta de usuário, que é conectado a um esquema.
• Alguma forma de autenticação é sempre necessária.
• Um usuário deve ter uma cota em uma tabela antes que eles possam criar quaisquer objetos.
• Um usuário que possui objetos não pode ser descartado, a menos que a palavra-chave
CASCADE é usado.
Conceder e revogar privilégios
• Privilégios são de dois tipos: privilégios de objeto e privilégios de sistema.
• Por padrão, um usuário não pode fazer nada. Eles não podem sequer fazer logon.
• A revogação de um privilégio de sistema não cascata; a revogação de um privilégio de objeto
faz.
Criar e gerenciar funções
• Funções não são objetos de esquema.
• As funções podem conter tanto o sistema e privilégios de objeto, bem como outros papéis.
• Uma função pode ser ativada ou desativada para uma sessão.
Auto teste
1 . Como você pode permitir que os usuários se conectem sem exigir que eles para autenticar a
si mesmos?
(Escolha a melhor resposta.)
A. Grant CRIAR sessão para PUBLIC.
B. Criar um usuário como esta, sem uma senha:
O que mais precisa ser feito antes que o usuário pode criar uma tabela no espaço de tabela
(Escolha todas as respostas corretas.)
EXEMPLO?
A. Nada mais é necessário.
B. Dê-lhe uma quota no EXEMPLO.
C. Grant-lhe o privilégio CREATE TABLE.
D. Grant-lhe o privilégio CREATE SESSION.
E. Grant-lhe o privilégio TABLESPACE GERIR.
3 . Se um usuário possui mesas em um espaço de tabela, qual será o efeito de tentar reduzir o
A cota do usuário na tabela a zero? (Escolha a melhor resposta.)
A. As tabelas vão sobreviver, mas INSERTS irá falhar.
B. As tabelas vão sobreviver, mas não pode ficar maior.
C. A tentativa irá falhar a menos que as tabelas sejam eliminadas em primeiro lugar.
D. As tabelas serão removidas automaticamente se a palavra-chave CASCADE é usado.
4 . Se você criar um usuário sem especificar um espaço de tabela temporário, o espaço de
tabela
serátemporário
atribuído? (Escolha a melhor resposta.)
A. Você deve especificar um espaço de tabela temporário.
B. SISTEMA.
C. TEMP.
D. O banco de dados padrão de tabela temporário.
E. O usuário não terá um espaço de tabela temporário.
5 . Você emitir estes comandos:
Que as subvenções devem ser revogado para evitar JON de ver o conteúdo do
(Escolha a melhor resposta.)
HR.REGIONS?
A. a, b, c, e d
B. a, c, e d
C. a e b
D. c e d
E. a, b, e c
6 . Qual destas declarações sobre privilégios de sistema estão corretas? (Escolha todas as
respostas corretas.)
A. Apenas os usuários SYS e sistema pode conceder privilégios de sistema.
B. Se um privilégio sistema é revogada a partir de um usuário, ele também será revogada a
partir
quemde todos
o usuário
os usuários
concedeu.
para
C. Se um privilégio sistema é revogada a partir de um usuário, ele não será revogada a
partir
quemde todos
o usuário
os usuários
concedeu.
para
D. CREATE TABLE é um privilégio de sistema.
E. QUALQUER TABELA é um privilégio de sistema.
7 . Estudar esse roteiro (números de linha foram adicionadas):
O que você deve fazer para ativar a auditoria unificada? (Escolha a melhor resposta.)
A. Run ALTER SYSTEM SET AUDIT_TRAIL = DB, âmbito alargado = SPFILE; e
reinicie o banco de dados.
B. Revincular os executáveis Oracle com as bibliotecas de auditoria unificados.
C. Criar e habilitar uma ou mais políticas de auditoria unificados.
D. desativar a auditoria padrão.
12 . É necessário controlar todas as execuções do SELECT por quaisquer usuários contra uma
tabela
Qual
específica.
ferramenta de auditoria vai fazer isso? (Escolha a melhor resposta.)
A. auditoria Padrão
B. grão fino Auditoria
C. Unified auditoria
D. Tudo o que precede
13 . Que tipos de atividade são obrigatoriamente auditadas? (Escolha três respostas.)
A. Criando, alterando, ou deixar cair uma política de auditoria
B. Criando, alterando, ou deixar cair um usuário
Respostas de auto-teste
1. D . Todos os usuários devem ser autenticados.
A , B , e C são incorrectas. A está incorreta porque embora isso vai dar a todos os
usuários
permissão para se conectar, eles ainda terão que autenticar. B é incorrecta porque um NULL
énão é aceitável como uma senha. C está incorreta porque um perfil só pode gerenciar
senhas,
não desativá-los.
2. C e D . Todas essas ações são necessárias.
A , B , e E são incorrectas. A está incorreta porque sem privilégios e uma quota, JON
Não é possível conectar e criar uma tabela. B não é necessário porque uma cota ilimitada é
implicitamente
concedida na tabela exemplo para usuário JON. E é incorreto porque este privilégio permite
você gerencia um espaço de tabela, não criar objetos nele.
3. B . Não será possível alocar mais extensões para as mesas.
A , C , e D estão incorrectos. A está incorreta porque inserções terá sucesso enquanto há
espaço nas extensões já alocados. C está incorreta porque não há nenhuma necessidade para
soltar aD é incorrecta porque CASCATA não pode ser aplicado a um comando de cota.
mesas.
4. D . Há sempre um padrão de todo o banco de dados, que (por padrão) é SYSTEM. Em
casos,
muitos
terão sido definida para TEMP.
A , B , C , e E são incorrectas. A está incorreta porque há um padrão. B é incorrecta
porque a tabela temporário padrão pode ter sido alterado. C é incorrecta porque
embora TEMP é frequentemente usado por padrão, pode não ser. E é incorreto porque todos
os usuários
contas devem ter um espaço de tabela temporário.
5. B . A concessão do papel DBA ea concessão para PUBLIC deve ser removido, bem
como adirectamente privilégio SELECT.
concedido
A , C , D , e E são incorrectas. C , D , e E estão incorretas porque todos saem de uma
Bolsaque deve ser revogada. A está incorreta porque não é necessário revogar a ALL
no lugar
bem como selecionar; quer seria suficiente.
como
CAPÍTULO 17
Movendo e Re-organização de dados
Objetivos do exame
• 062.17.1 descrevem formas de se mover dados
• 062.17.2 criar e usar objetos de diretório
• 062.17.3 Use SQL * Loader para carregar dados de um banco de dados não-Oracle
• 062.17.4 Tabelas uso externo para mover dados através de arquivos Platform-Independent
• 062.17.5 Explicar a Arquitetura Geral do Oracle Data Pump
• 062.17.6 Use Data Pump Export e Import para mover dados entre bancos de dados Oracle
• 063.15.1 Use Bomba dados em um ambiente multitenant
• 063.15.2 Use SQL * Loader em um ambiente multitenant
Uma necessidade comum em um ambiente de base de dados é para mover os dados de um banco de
dados para
fornece outro.
duas Oráculopara isso: Bomba de Dados e SQL * Loader. Bomba de dados pode
instalações
transferir
bancos dedados
dadosentre
Oracle (em todas as versões e plataformas), ao passo que o SQL * Loader pode ler
conjuntos
por sistemas
de não-Oracle.
dados gerados
O capítulo termina com uma discussão sobre usar essas duas instalações
em um multitenant. Recipiente multitenant e bases de dados passíveis de ligação são discutidos no
ambiente
Capítuloo32
Usando . Pump e SQL * Loader em um ambiente multitenant são medidos no Avançada
Data
exame de administração.
EXAME TIP Diretórios são sempre propriedade do usuário SYS, mas qualquer usuário a quem
você concedeu o
CRIAR QUALQUER privilégio diretório pode criá-los.
Figura 17-1 demonstra como criar diretórios usando SQL * Plus. Na figura, o utilizador SCOTT
tenta criar um apontador diretório para seu diretório home sistema operacional no servidor de banco
de dados Esta falha porque, por padrão, os usuários não têm permissão para fazer isso. Depois de ter
máquina.
sido concedido
permissão, ele tenta novamente. Ele, então, concede permissão de leitura no diretório (e, portanto,
todos os
dentro arquivos
dela) a todos os utilizadores e subvenções ler e escrever permissão para um usuário.
Figura 17-1 Gerenciamento de diretórios com SQL * Plus
TIP diretório um oráculo sempre aponta para um diretório do sistema operacional no servidor de
bancohádemaneira
Não dados. de escrever para um diretório no cliente.
TIP EXAME Só UNIQUE, PRIMARY KEY, e NOT NULL são aplicadas durante uma
carga caminho direto. acionadores INSERT não disparam, e a tabela está bloqueada para o DML.
SQL * Loader utiliza um número de arquivos. Os arquivos de dados de entrada são os dados de
origem
o banco de que eleOvai
dados. carregar em
controlfile é um arquivo de texto com as directivas dizendo SQL * Loader
como interpretar
conteúdo dos arquivos
o de entrada e o que fazer com as linhas extrai deles. arquivos de log resumir o
sucesso (ou não) do trabalho, com detalhes de quaisquer erros. Fileiras extraídos a partir dos
ficheiros
ser rejeitado
de entrada
pelo SQL pode
* Loader (talvez porque eles não se conformam com o formato esperado pelo
controlfile) ou pela base de dados (por exemplo, a inserção pode violar uma restrição de
integridade);
caso, eles sãoemgravados
ambos em um arquivo ruim. Se as linhas são extraídos com êxito a partir da entrada,
mas rejeitou
porque eles não se encontraram algum critério recorde de seleção, eles são gravados em um arquivo
de rejeitar.
O controlfile é um arquivo de texto instruindo SQL * Loader sobre como processar os arquivos
possível
de dados
incluir
de os
entrada.
dados Isto
reaisé a serem carregados no controlfile, mas você normalmente não faria
Geralmente, você irá criar um controlfile e reutilizá-lo, numa base regular, com diferentes arquivos
isso;
devariedade
A dados de entrada.
de formatos de entrada que o SQL * Loader pode entender é limitado apenas pela sua
acriatividade
construçãoem de um controlfile.
EXAME TIP Todos os arquivos relacionados a SQL * Loader são arquivos do lado do cliente, não
os arquivos do lado do servidor.
Considere esta tabela:
Um carregador controlfile SQL * (com os números de linha adicionado) que poderia carregar
mostrado
esses dados
aqui: é DEPTS.CTL,
Para executar a carga, executar este comando a partir de um prompt do sistema operacional:
Este comando inicia o processo de usuário SQL * Loader, se conecta ao banco de dados local
SCOTT
comosenha tigre, e em seguida, executa as ações especificadas na DEPTS.CTL controlfile.
usuário
Adicionando um argumento = TRUE DIRECT iria instruir SQL * Loader para usar o caminho direto
em vez de
pastilha convencional
um (que é o padrão). A seguir explica a linha controlfile por linha:
Este é um exemplo simples. A sintaxe do controlfile pode lidar com uma ampla gama de
análise
formatos
inteligente
com para corrigir quaisquer desvios em formato, tais como tipos de comprimento e
dados. Em
assumir quegeral,
é possível
você pode
construir um controlfile que vai entender praticamente qualquer arquivo de
dados
No de entrada.
entanto, não acho que é sempre fácil.
DICA Pode ser difícil de obter um direito controlfile, mas uma vez que você tem, você pode usá-lo
repetidamente,
diferentes ficheiros
com de dados de entrada para cada passagem. É, em seguida, a responsabilidade do
sistema dedealimentação
arquivos de entrada para
dados que correspondem produzir
à sua controlfile, ao invés do contrário.
A listagem de diretório em Figura 17-2 mostra que há um arquivo presente: dept.dat. Isto tem
criada
sidode acordo com a descrição dada anteriormente. Em seguida, o executável sqlldr.exe é lançado,
conectando como usuário SCOTT com o orclz seqüência de conexão e nomeando tabela DEPT e
outro. O resultado mostra que duas linhas foram carregadas, embora existam três no arquivo de
nada
dados. o lista de diretórios mostra que um arquivo sufixo BAD foi gerada que, quando digitado,
próxima
uma linha a partir do ficheiro de dados de entrada. Esta é a terceira fila, que estava incompleta
contém
porquepara
valor nãoahá
coluna da tabela LOC.
Modo Express é fácil de usar, mas é exigente em suas exigências:
• Deve haver um arquivo de dados com o mesmo nome que a tabela a ser carregado, o sufixo
.DAT.
• As colunas deve ser um tipo de dados escalar: caráter, número ou data.
• Os campos no arquivo deve ser delimitado por vírgulas e não entre aspas.
• As linhas de entrada devem ter valores para cada coluna da tabela.
• O usuário deve ter o CRIAR QUALQUER privilégio DIRECTORY.
Os arquivos de log gerados pelo modo expresso pode ser instrutivo. Entre outras coisas, eles
SQLincluem
* definição
uma carregador controlfile, que pode ser usado (ou editado) para trabalhos posteriores.
Exercício 17-1: Use Diretórios, SQL * Loader, e tabelas externas Neste exercício, você vai
instalar e usar o SQL * Loader para inserir dados em uma tabela e também para gerar o CREATE
roteiro para uma tabela externa.
TABLE
1. Ligue para o seu banco de dados como usuário SYSTEM (nos exemplos, a senha do sistema
é Oracle) com SQL * Plus.
2. Criar uma tabela a ser usada para o exercício.
3. O uso de qualquer editor que irá criar arquivos de texto simples, crie um arquivo chamado
names.txt
valorescom
(ou semelhante):
estes
Note que este controlfile irá truncar a tabela de destino antes de realizar a inserção.
5. A partir de um prompt do sistema operacional, execute o SQL * Loader da seguinte forma:
8. Para gerar uma declaração de que irá criar uma tabela externa, você pode usar SQL * Loader
e um
controlfile existente.
9. Este terá gerado uma instrução CREATE TABLE na names.log arquivo de log, que será
algo parecido com isto:
10. A partir da sua sessão SQL * Plus, criar um diretório do Oracle apontando para o sistema
operacional
diretório onde o arquivo names.txt é. Aqui está um exemplo:
11. Faça as edições que você quer o comando mostrado na etapa 9. Por exemplo, você pode
querer
mudar o nome da tabela que está sendo criado (SYS_SQLLDR_X_EXT_NAMES não é
útil) para algo mais significativo. Você vai precisar para mudar tanto o PADRÃO
muito
Configurações do diretório e BADFILE para apontar para o diretório criado na etapa 10.
12. Executar a declaração criou na etapa 11 do seu sessão SQL * Plus.
13. Consulta a tabela com algumas instruções SELECT e DML. Você vai descobrir que um
arquivo de log
gerado paraé cada SELECT e que a DML não é permitido.
14. Arrumar apagando os arquivos Nomes.txt e names.ctl, deixando cair as tabelas e, como SYS,
largando o diretório.
Finalmente, há a mesa de controle. Isto é criado para você pelo DM nn quando você iniciar um
trabalho
é usado tantoe para gravar o progresso do trabalho e para descrevê-lo. Ele está incluído no arquivo de
despejodocomo
artigo trabalho.
a final
Bomba de dados tem dois métodos para o carregamento e descarregamento de dados: o caminho
caminho.
directoOecaminho
a tabela externa
directo ignora a cache da memória intermédia de banco de dados. Para uma
exportação
os blocos dedearquivo
caminho de direto,
dados diretamente
o Data Pumpdolêdisco, extratos e formata o conteúdo, e escreve-lo
como um Para
Arquivo. despejo
uma importação de caminho direto, o Data Pump lê o arquivo de despejo, usa o seu
conteúdo
os dados da para montar
tabela blocos de diretamente para os arquivos de dados. A gravação está acima da
e escreve-los
marca com
mesa, de água
os mesmos
alta do benefícios como as descritas anteriormente para um SQL * Loader carga
direta.
O caminho tabela externa utiliza a memória cache do banco de dados. Mesmo que o Data Pump
arquivos
está manipulando
que são externos ao banco de dados, ele usa o cache de buffer do banco de dados como se
estivesse lendo
escrevendo umaetabela interna. Para uma exportação, o Data Pump lê blocos de arquivos de dados
no cachede um processo de comando SELECT normal. A partir daí, formata os dados para a saída
através
para um arquivo
importação, de Pump
o Data despejo. durante
constrói uma
instruções INSERT padrão a partir do conteúdo do arquivo de
despejo
os executa
e através da leitura quarteirões dos arquivos de dados no cache, em que a inserção é feita
a forma normal. Na medida em que o banco de dados está em causa, os trabalhos de bombagem
em
Tabela de dados externos parecer
absolutamente comum (embora talvez um pouco grande) SELECT ou operações INSERT. Ambos
desfazer
redo são egerados, como seria para qualquer instrução normal de DML. Os usuários finais podem
muito bem
reclamar enquanto estes trabalhos estão em andamento. O processamento de consolidação é
absolutamente
Então, o quenormal.
determina se o Data Pump usa o caminho direto ou o caminho tabela externa? Você
DBA como
não tem controle; Data Pump em si toma a decisão com base na complexidade dos objetos.
Únicas estruturas simples, como tabelas de heap sem gatilhos ativos, podem ser processadas através
caminho direto; objetos mais complexos, tais como mesas de cluster forçar Data Pump para usar a
do
tabela externa
caminho porque requer interação com o SGA, a fim de resolver as complexidades. Em ambos os
o arquivo de despejo gerado é idêntico.
casos,
capacidades
Seja qual for a interface é usada, o Data Pump tem esses recursos:
• refinadas objeto e seleção de dados instalações significa que o Data Pump pode exportar tanto
o banco de dados completo ou qualquer parte dele. É possível exportar as definições da tabela
(com ou semobjectos PL / SQL, pontos de vista, as sequências, ou qualquer outro tipo de
suas linhas),
objecto.
• Se exportar uma tabela, é possível aplicar uma cláusula WHERE para restringir as linhas
exportados
(Embora isso possa fazer o caminho direto impossível) ou para instruir o Data Pump para
exportar aleatória
amostra um da tabela expressa como uma percentagem.
• O processamento paralelo pode acelerar as operações de bombagem de dados. Paralelismo
pode
o número
vir em de
dois
processos
níveis: de trabalho da bomba de dados e o número de servidores de execução
paralela cada
processo de trabalho usa.
• Uma facilidade estimativa pode calcular o espaço necessário para uma exportação de bomba
deexecução
dados, sem
do realmente
trabalho.
• O Modo de Rede permite a transferência de um conjunto de dados Bomba dados de um banco
semoutro
para nunca encenando-lo em disco. Isso é implementado por um trabalho de exportação de
bombade
banco dedados
dadosgravar
na fonte
os dados em um link de banco de dados para o banco de dados de
destino, onde
trabalho uma bomba
de importação de dados
lê os dados do link de banco de dados e insere-lo.
• Instalações de remapeamento significa que os objetos podem ser renomeados ou transferidos
deoutro
um esquema
e, no caso
para
de objectos de dados, a partir de uma tabela movido para outro à medida que
importado.
são
• Quando os dados está sendo exportado, os arquivos de saída podem ser compactados e
criptografados.
Usando o Data Pump com os utilitários de linha de comando
O expdb executáveis e impdp são instalados no diretório / bin ORACLE_HOME. o
Seguem-se alguns exemplos de utilização. Note-se que em todos os casos o comando deve ser um
comando de uma linha; as quebras de linha são puramente para legibilidade.
único
Aqui é como exportar todo o banco de dados:
Este comando irá se conectar ao banco de dados como usuário SYSTEM e lançar uma
utilizando
exportação
dois completa
processosData
de trabalho
Pump, que trabalham em paralelo. Cada trabalhador irá gerar seu
próprio conjuntonomeados
exclusivamente de arquivos
de de despejo,
acordo com o modelo U%, o que gera cadeias únicas de oito
Cada trabalhador vai quebrar a sua saída em arquivos de 2 GB (talvez por causa do sistema de
caracteres.
arquivos subjacente
restrições) de dados compactados.
A tarefa de importação correspondente (que assume que os arquivos gerados pela exportação
colocado
foramemtodos
um diretório) seria a seguinte:
Este comando faz uma exportação seletiva dos objetos PL / SQL pertencentes a dois esquemas.
Este comando irá extrair tudo de uma exportação de bomba de dados que estava no esquema HR
e
importá-lo para o esquema DEV.
Um passo adicional que pode ser necessário quando o transporte de tabela de uma plataforma
para
outra é para converter o formato endian dos dados. Uma plataforma de big-endian (como Solaris em
chips) armazena um valor de vários bytes, tal como um inteiro de 16-bit com o byte mais
SPARC
significativoendian
plataforma em primeiro
(como olugar.
Windows
Um pouco-
em chips Intel) armazena o byte menos significativo primeiro.
tablespaces em várias plataformas com um formato endian diferente requer converter os arquivos de
transporte
dados.
isto comVocê faz
o comando Converter Recovery Manager (RMAN).
Para determinar a plataforma na qual um banco de dados está em execução, consultar o
em VPLATFORM_NAME
$ DATABASE. Então, coluna
para ver a lista de plataformas suportadas atualmente (que irá variar de
em seu lançamento exata) e sua ordenação, consultar a visão V $ TRANSPORTABLE_PLATFORM.
acordo
• Os espaços de tabela deve ser auto-suficiente. Isso significa que os objetos dentro dos espaços
dedeve
tabela
ser completa, em outras palavras, que não depende de quaisquer outros objetos. Por
exemplo,
estão em umse tabelas
espaço de tabelas e índices nas tabelas em outra, ambos os espaços de tabela
deve
no conjunto
ser incluído
para ser transportado.
• O banco de dados de destino deve usar o mesmo (ou um compatível) conjunto de caracteres
como a fonte
base de dados.
• Os esquemas que possuem os objetos nos espaços de tabela deve existir no banco de dados de
destino,
a operação
ou irá falhar.
• Todos os objetos no banco de dados de destino com o mesmo proprietário e nome do objeto
como
conjunto
objetos
de no
tabela transportáveis não serão perdidas; eles serão ignorados durante a
importação.
• Um espaço de tabela com o mesmo nome não deve existir. Lembre-se de que é possível mudar
o nome
tablespaces.
A Figura 17-3 mostra os passos para gerar um conjunto de transporte. Na Figura 17-3 , o
PL chamada
primeiro comando
procedimento
é a / SQL para confirmar que um conjunto de espaços de tabela (no exemplo,
éapenas um espaçoEm
auto-suficiente. de tabela:
seguida,TS1)
a tabela é feita só de leitura. O trabalho de Data Pump, lançado com o
expdp utilitário de linha de comando, liga como SISTEMA utilizador e, em seguida, especifica a
tabela a ser Isso irá gerar um arquivo de despejo com metadados que descrevem o conteúdo da
transportado.
espaço de tabelas no diretório DP_OUT Oracle. Então, enquanto a tabela ainda é somente leitura,
TS1
copie a sua
arquivos de dados e o arquivo de despejo Data Pump para um local adequado no servidor de banco
de dados de destino.
Figura 17-3 Usando utilitários de linha de comando para criar um conjunto de tabela transportável
Este comando irá escrever uma cópia do arquivo com o endianness alterado. Como alternativa,
o arquivo
copie inalterado ao banco de dados de destino, conecte com o RMAN e executar um comando
como este:
Este comando irá ler o arquivo de dados nomeado e convertê-lo do formato plataforma nomeado
novo
para
arquivo
um no formato que é necessário para o banco de dados de destino.
Para importar os espaços de tabela no sistema de destino, usar um comando, tal como o mostrado
17-4.
na figura
Figura 17-4 Usando o utilitário impdp para importar um espaço de tabela transportado
O comando impdp na Figura 17-4 lê um arquivo de despejo para determinar o nome e conteúdo
da que consiste no ficheiro de dados indicado (previamente convertido, se necessário).
tabela
CUIDADO Não se esqueça a etapa final! Faça a tabela de leitura e escrita, tanto a origem eo
bancos de dados de destino.
Exercício 17-2: Use Data Pump Export / Import Neste exercício, utilize a linha de comando Data
Pump
utilitários para copiar uma tabela de um esquema para outro.
4. Existe um diretório criado por padrão para o uso de bomba de dados, chamado
DATA_PUMP_DIR,
que os clientes da bomba de dados usará se nenhum outro diretório é especificado.
Confirmar
com a sua existência
esta consulta e criá-lo (usando qualquer caminho sistema operacional adequado) se ele
não existe.
1. Crie o diretório Oracle e sistema operacional para o arquivo de despejo Data Pump.
2. Exporte o banco de dados.
3. Criar o PDB alvo se ainda não existir.
4. Importe o banco de dados do arquivo de dump no PDB.
Durante a importação, quaisquer espaços de tabela que já existem não será recriada. No APO-
usuários
alvo, do
todos
não-CDB são recriados como usuários locais dos novos PDB.
Para corrigir esse problema, você pode fazer uma de duas coisas. A primeira opção é criar o
no alvo
mesmo
CDB usuário
antes comum
de iniciar a importação Data Pump. Se você não quer ter o mesmo comum
usuário no alvo CDB, use a opção REMAP_SCHEMA na linha de comando impdp para criar uma
usuário local que será o proprietário dos objetos do usuário comum no APO fonte.
Em uma nota similar, se você tem conflitos de nomes de espaços de tabelas e você não quer que
objetos
a fonte
paraPDB
acabar
de na tabela com o mesmo nome, use a opção REMAP_TABLESPACE.
Alterar espaços de tabela do banco de dados fonte de volta para ler WRITE.
Sua operação impdp será algo parecido com isto:
No banco de dados Oracle 11 g Data Pump, você poderia executar importação / exportação
atravésse
eo mesmo daaplica
rede, bem
para como,
o Oracle Database 12 c Data Pump em um cenário multitenant. Nenhum
arquivo de despejo
necessário, economizando
é tempo e espaço em disco. Apenas o arquivo de metadados para o banco
desistema
o dados de
deorigem
arquivos.
é criado no
Broca Two-Minute
Descreva maneiras de mover dados
• Bomba de dados pode transferir dados entre bancos de dados Oracle.
• SQL * Loader pode ler arquivos gerados por produtos de terceiros.
Use Data Pump Export e Import para mover dados entre bancos de dados Oracle
• arquivos de despejo Data Pump são compatíveis entre as versões e plataformas.
• Modo de rede evita a necessidade de organizar os dados no disco.
• modo de transporte Tablespace permite a cópia de arquivos de dados entre bancos de dados.
Auto teste
1 . Qual destes métodos de movimentação de dados pode transferir dados a partir de uma
plataforma
(Escolhapara outra?
todas as respostas corretas.)
A. Usando CREATE TABLE AS com uma instrução SELECT que lê a partir de um link de
banco
B. umadebomba
dadosde dados modo de rede de exportação / importação
mas quando você tentar usá-lo com bomba de dados, há um erro. Qual das seguintes poderia
verdade? (Escolha três respostas.)
ser
A. proprietário do software Oracle não tem permissões em c: \ tmp.
B. usuário de banco de dados Oracle não tem permissões em dp_dir.
C. O caminho c: \ tmp não existe.
D. O caminho c: \ tmp deve existir ou então a declaração Directory Crie teria
falhou.
E. Se você usar o Data Pump no modo de rede, não haverá necessidade de um diretório.
F. A emissão da concessão comando em 'c: \ tmp' para público; pode resolver alguma
permissão
problemas.
3 . O que é uma condição necessária para importar um arquivo Data Pump de um cliente?
(Escolha
responda.)
o melhor
A. Um objeto de diretório deve ser criado apontando para o diretório do sistema operacional
onde
o arquivo
o existe.
B. A controlfile deve existir que descreve com precisão o formato do arquivo.
C. Os sistemas operacionais cliente e servidor devem utilizar o mesmo formato endian.
D. Não é possível importar um arquivo de um cliente.
4 . Qual dos seguintes não é um arquivo * Loader SQL? (Escolha a melhor resposta.)
A. arquivo de Bad
B. cONTROLFILE
C. arquivo de Descarte
D. Boa arquivo
E. arquivo de log
5 . Você executar o SQL * Loader no seu PC para inserir dados em um banco de dados remoto.
Qual dos
seguinte é verdadeiro? (Escolha a resposta correta.)
A. Os arquivos de dados de entrada devem estar no seu PC.
B. Os arquivos de dados de entrada devem estar no servidor.
C. carga direto só é possível se os arquivos de dados de entrada estão no servidor.
D. carga direto só é possível se você executar o SQL * Loader no servidor, não no PC.
6 . Estudar este comando SQL * Loader:
Respostas de auto-teste
1. A , B , C , e D . Todas estas técnicas têm uma capacidade multi-plataforma. C (tabela
transporte) pode requerer a conversão dos arquivos, se a plataforma de destino é um endian
diferente do
fonte.
E é incorrecta. Isso é incorreto porque os conjuntos de backup são plataformas todo não
portáteis,
embora cópias de imagem pode ser.
2. A , B , e C . Estas condições poderiam causar problemas ao usar o diretório, mas não
quando criá-la.
D , E , e F são incorrectas. D está incorreta porque a existência do diretório não é
verificadas no momento da criação. E está incorreta porque embora o modo de rede não
precisa
diretóriodepara
um os arquivos de despejo, ele vai precisar de um diretório para os arquivos de
log. F estáaincorreta
confunde questão de
porque
permissões Oracle em diretórios com permissões do sistema
operacional
caminhos físicos.
no
3. D . Não é possível importar um arquivo do cliente; o despejo deve existir no servidor.
A , B , e C são incorrectas. A está incorreta porque um objeto de diretório pode apontar
apenas
diretório nopara um B está incorreta porque um controlfile é usado pelo SQL * Loader, e
servidor.
não por
Data Pump. C está incorreta porque endianness é relevante para espaços de tabela
transportáveis,
importação não
de dados.
4. D . Não há “boas” file-as linhas aceitáveis são inseridos na mesa e não são
registrado pelo SQL * Loader.
A , B , C , e E são incorrectas. Estes são os tipos de arquivo que o SQL * Loader pode
5. gerar.
Um . SQL * Loader é um processo cliente-servidor; os arquivos de entrada deve ser
local para o usuário
processo.
B , C , e D estão incorrectos. B está incorreta porque os arquivos de entrada devem estar
acessível
no PC,
relevante para
para oa localização
processo dodosladoarquivos.
do cliente. C e D são incorrecta porque a carga não é
directa
6. B . Modo expresso depende de muitos padrões, um dos quais é que o nome do arquivo
o nome
de dados
da tabela
devecom
ser o sufixo .DAT.
A , C , e D estão incorrectos. A está incorreta porque o modo expresso não usa um
controlfile. C é incorrecta porque modo expresso não é possível criar uma tabela; ela só
podetabela
uma anexarexistente. D está incorreta porque o modo expresso não solicita.
7. A e C . Qualquer coisa relacionada para SELECT, incluindo a criação de um ponto de
contra
vista,
umapode
tabela
serexterna.
executado
B e D são incorrectas. DML é impossível contra uma tabela externa, como é a
8. indexação.
C . SQL * Loader pode usar um controlfile; Data Pump não.
A , B , e D são incorrectas. Data Pump exportação gera um arquivo de despejo, uma
gerarimportação
um arquivopode
de SQL, e ambos exportação e importação gerar arquivos de log.
9. B e C . Os agrupamentos são estruturas complexas que não podem ser carregados
determina
directamente.
se uma carga
Data Pump
direta é possível automaticamente.
A e D são incorrectas. Não há nenhuma palavra-chave DIRECT porque a escolha é
Direct
automática.
é mais rápido porque ele ignora o SGA.
10. B . Esta é a sequência correcta.
A , C , e D estão incorrectos. Todas essas sequências estão errados. A única aceitável
alternativa teria sido para converter o endianness no passo a antes de copiar para a etapa b.
11. B e F . Você pode executar uma exportação de qualquer tipo (esquema, tabela, cheio
transportável)
do banco de dados versão 11 g e importá-lo para um APO. Além disso, você pode usar o
Data Pump / importação com a opção transportável completa para copiar um PDB dentro do
exportação
mesmo
A , CDB.
C , D , e E são incorrectas. A está incorreta porque você não precisa atualizar a
banco de dados antes de usar o Data Pump exportação / importação, desde que a versão do
Oracle
11 g ouDatabase é C está incorreta porque você sempre pode importar um não-CDB em
mais recente.
um novo
desde quePDB
vocêcomo
use o nome do serviço ao conectar ao APO. D está incorreta porque você
não pode usar dados de importação da bomba no recipiente raiz de um CDB. E é incorrecta
porquepode
CDBs não- ser importado para outro não-CDB ou um APO, desde que o banco de dados de
fonte
versão é de 11 g ou mais recente.
CAPÍTULO 18
Objetivos do exame
• 062.10.1 Gerenciar o Automatic Workload Repository (AWR)
• 062.10.2 usar o monitor de diagnóstico Automatic Database (ADDM)
• 062.10.3 Descrever e usar o Quadro Consultivo
• 062.10.4 Set limiares de alerta
• 062.10.5 Tarefas Use Automated
A 12 c banco de dados é amplamente auto-gestão. As tarefas de manutenção executado
automaticamente
informações de diagnóstico
(a não ser desativado),
são coletadaseem intervalos regulares. Com versões anteriores,
monitorando
para pegar desenvolver
o banco deproblemas
dados antes que eles se tornem críticos levou muito tempo. identificar e
diagnosticar problemas de desempenho não foi apenas demorado, mas também exigiu muita
habilidade.
Sistema de alerta
O uso edoos assessores de diagnóstico, instalado como padrão em todos os 12 c banco de
dados, libera ode banco de dados (DBA) a partir da necessidade de dedicar uma grande quantidade
administrador
de esforço para este trabalho.
Gerenciar o Automatic Workload Repository
A Oracle recolhe uma vasta quantidade de informação estatística em relação ao desempenho e
atividade. este
informação é acumulada na memória e periodicamente gravados em disco, especificamente, para as
tabelas queo Automatic Workload Repository (AWR). A AWR existe como um conjunto de tabelas e
compõem
objetos no espaço de tabela SYSAUX. A AWR está relacionado com o dicionário de dados, mas ao
outros
contrário dos
dicionário, a AWR
dadosnão é essencial para o banco de dados para funcionar (embora possa ser
necessário
para parabem).
funcionar ele Os dados são gravados no AWR, armazenados por um tempo, e eventualmente
substituído com
informações mais recentes.
Estatísticas são acumulados na memória em estruturas de dados dentro System Global Area
Isso(SGA).
não causa nenhum impacto no desempenho porque as estatísticas refletem apenas o que o
exemplo
de qualquer
estáforma.
fazendo
Periodicamente (por padrão, uma vez por hora) são liberadas para o disco,
especificamente,
Isto é conhecido comoaum
para AWR.
instantâneo AWR . O rubor no disco é feito pelo Monitor de
(MMON) Processo de fundo. Este uso de um processo de fundo é a chave para a eficiência do
Gerenciamento
processo de coleta de estatísticas. Em versões anteriores do banco de dados, acessando o
desempenhosódefoiajuste
estatísticas possível através da execução consultas em vários pontos de vista-o desempenho
dinâmico V $
pontos de vista. Preenchendo esses pontos de vista é um processo caro. O DBA deve iniciar uma
sessão de
banco contra
dadoso e, em seguida, emitir uma consulta. Executar esta consulta força Oracle para extrair
dados do SGA e
apresentá-lo à sessão em uma exibição. Esta abordagem ainda é possível-todos os antigos pontos de
vista, eestão
ainda muitos mais,
disponíveis, mas a abordagem AWR é muito mais eficiente.
DICA Nenhuma ferramenta de terceiros pode nunca ter o acesso direto à memória para a instância
que instância
sua MMON tem. é altamente
E se estressado, você deve pensar cuidadosamente antes de usar quaisquer
outros do
aqueles que os produtos
fornecidos de tuning
pela Oracle.
MMON tem acesso direto às estruturas de memória que compõem o SGA e, portanto, o
estatísticas dentro deles. Ele pode extrair dados do SGA, sem a necessidade de ir através de uma
sessão ouSQL.
executar para A única sobrecarga envolvida é escrever o instantâneo dos dados do AWR. Por
padrão,
isso ocorre apenas uma vez por hora e, portanto, não deve ter um efeito perceptível sobre o tempo de
desempenho.
execução
EXAME TIP estatísticas AWR são salvos como um instantâneo à AWR pelo processo MMON (por
padrão,
a cada 60 minutos). Por padrão, os instantâneos são armazenados por oito dias, antes de ser
substituído.
A AWR é um conjunto de tabelas, de propriedade de SYS e localizados no espaço de tabela
não SYSAUX.
podem ser estas
realocados.
tabelasOracle Corporation suporta acesso às tabelas AWR apenas através dos
interfaces de programação de aplicações (API) fornecida sob a forma de sistema de gestão de base
diversos
de dados pacotes ou através de vários pontos de vista.
(DBMS)
Você pode pensar de um instantâneo AWR como uma cópia do conteúdo de muitos pontos de
vista V $foi
instantâneo notirado.
momento da
No entanto, nunca se esqueça de que o mecanismo para copiar a informação
não é
consultar as visões V $; a informação é extraída diretamente das estruturas de dados que compõem o
instância. O processo que faz com que a cópia é MMON. Além de informações da dinâmica
desempenho (ou V $) vistas, a informação lojas AWR das vistas DBA, povoada do
dicionário de dados. Esta categoria de informações inclui uma história de estatísticas objeto. Sem o
o banco de dados que não têm registro de longo prazo de como os objetos estavam mudando. As
AWR,
estatísticas
com DBMS_STATS
reunidas dar informações atuais, mas também pode ser necessário ter um histórico
imagem do estado dos objetos de banco de dados. A AWR pode proporcionar isso.
Gerenciando o AWR
Instantâneos de dados de estatísticas são mantidos no AWR, por padrão, por oito dias. Este período é
configurável, e é também possível marcar um par de instantâneos como uma linha de base, para ser
mantido indefinidamente.
instantâneos de base não são eliminados automaticamente. Como um guia para o dimensionamento,
se o instantâneo
coleção é deixada em cada hora e o tempo de retenção é deixada em oito dias, então o AWR pode
muito bementre 200 MB e 300 MB de espaço no espaço de tabela SYSAUX. Mas este número é
requerem
variável e vontade, em grande medida, dependem do número de sessões. Ajustando as configurações
altamente
do AWR para
salvar instantâneos com mais freqüência vai fazer o diagnóstico de problemas mais precisos. Se os
instantâneos
várias sãointervalo, você pode perder picos de actividade (e consequentes quedas na
horas de
performance).
coleta de snapshots
Mas com muita freqüência irá aumentar o tamanho da AWR e poderia impacto
desempenho devido ao aumento da carga de trabalho de coletar e guardar a informação.
Ajustar a frequência AWR instantâneo e retenção é feito com a API PL / SQL chamada
Dbms_workload_repository. A Figura 18-1 mostra exemplos de como utilizar este pacote. Primeiro
consulta contra o ponto de vista dba_hist_wr_control mostra os valores actuais para a retenção
um
e frequência. Os valores (que são de tipo de dados INTERVALO) são os valores padrão. Em seguida,
instantâneo
uma chamada para
o procedimento
são MODIFY_SNAPSHOT_SETTINGS
minutos. Finalmente, muda-os
o procedimento create_snapshot a 30
obriga dias e de meia
o instantâneo, hora;
o que as feito
será unidades
Além das coleções regulares. Forçando um instantâneo normalmente seria feito
imediatamente antes e depois de lançar um trabalho de algum tipo de modo que os relatórios podem
ser gerados
em um determinado
com focoperíodo de tempo.
EXAME DICA Por padrão, snapshots AWR são tomadas a cada hora e salvo por oito dias. A AWR
élocalizado no espaço de tabela SYSAUX e não pode ser transferida para outros espaços de tabela.
Exercício 18-1: Monitorar o Automatic Workload Repository Neste exercício, você irá
determinar
o tamanho da AWR e monitorar o seu crescimento como ele armazena mais instantâneos. Siga esses
passos:
1. Conecte-se ao seu banco de dados com SQL * Plus como usuário SYSTEM.
2. A vista V $ SYSAUX_OCCUPANTS mostra todos os componentes instalados na SYSAUX
tablespace. Saiba quanto espaço o AWR está ocupando.
• gargalos de CPU
• problemas de contenção, tais como bloqueio de linha
• Stress on the I/O system
• SQL de alta carga
TIP EXAME relatórios ADDM são gerados sob demanda, bem como sempre que um snapshot é
Um relatório requer dois instantâneos.
recolhida.
relatórios ADDM, às vezes, dar conselhos precisos (como para alterar um parâmetro), mas vai
frequentemente
mais identificam declarações particulares e aconselhar executando outro conselheiro
contra eles.
sugerir ADDM
objetos também podepor exemplo, talvez implementar o particionamento. Ele vai
de reestruturação,
sempre dar as suas recomendações, que podem ser instrutiva, mesmo se você decidir não aplicar o
fundamentar
conselhos.
CUIDADO ADDM, muitas vezes, recomendamos o uso de instalações para as quais você pode não
estar licenciados,
como o SQL TuningtaisAdvisor ou de particionamento. Isso pode ser um pouco irritante e em violação
do seu de licença de software.
contrato
Exercício 18-2: Gerar um relatório ADDM Neste exercício, você irá gerar um relatório ADDM.
Siga esses passos:
Os Advisors SQL
Há dois assessores SQL: o SQL Access Advisor eo SQL Tuning Advisor. o SQL
Access Advisor vai observar uma carga de trabalho de instruções SQL e fazer recomendações sobre
segmentos de forma que a carga de trabalho será executado mais rapidamente. A carga de trabalho
pode
ou pode
ser ser
umaderivada
carga dea trabalho
partir do hipotético,
SQL realmente executado durante um determinado período de
tempo. o
recomendações pode ser para criar ou eliminar índices e visualizações materializadas e de fazer uso
particionamento segmento. O SQL Tuning Advisor pode analisar as demonstrações individuais, bem
de
como
recomendar alterações de esquema (como o SQL Access Advisor faz). Ele pode recomendar geração
estatísticas adicionais sobre a execução da instrução que ajudarão o otimizador na escolha do melhor
plano de execução e recomendar reescrever a declaração de eliminar algumas ineficiências inerentes
algumas estruturas SQL.
Você pode acessar os consultores SQL através das APIs PL / SQL chamados DBMS_ADVISOR
DBMS_SQLTUNE.
e O SQL Tuning Advisor também é acessível através de banco de dados Express.
O Segment Advisor
Segmentos crescer automaticamente. Como são inseridos em segmentos de mesa e chaves de índice
linhas
em segmentos
são inseridas
de índice, os segmentos encher-e, em seguida, Oracle irá alocar mais extensões como
necessário. não
segmentos Masencolhem como automaticamente dados é removida ou modificada com DELETE e
comandos; isso só acontece quando o segmento é deliberadamente reorganizada. O Segment Advisor
UPDATE
observa tabelas e índices, tanto seu estado atual e seus padrões históricos de uso e
recomenda reorganização apropriada quando necessário. Invocar o Segment Advisor com o
pacote DBMS_ADVISOR.
Mas esses scripts são propensos ao erro, ou pelo menos, má interpretação. Por exemplo, a vista
DBA_FREE_SPACE tem uma linha para cada bit de espaço livre em cada tabela. Mas se um espaço
de tabelacheios, não haveria filas em tudo. É por isso que você precisa OUTER JOIN, sem a qual o
estavam
tablespace pequenas não seria listada, mesmo que ele está em um estado crítico. Então, considere o
de permitir AUTOEXTEND sobre os arquivos de dados. Além disso, uma tabela de undo será
efeito
geralmentemas
completo, 100isso
por não
cento
é um problema, porque uma grande parte dos dados de desfazer ficará
inativa e pode
sobrescrito. E oser
que dizer de tabela temporários? A consulta teria que estar em uma união com
outra consulta contra DBA_TEMP_FILES. Esta segunda consulta teria de descobrir se o
espaço ocupado por segmentos temporários está em uso ou simplesmente esperando para ser usado.
Muitos DBAs ter escrito suites de código SQL para informar sobre o uso do espaço e aumentar
condições
avisos de
antes
erro ocorrer. Isso é bom, mas os scripts devem ser escritos, eles têm que ser executado
e eles têm de ser actualizados para ter em conta a evolução da tecnologia. Muitas empresas têm
regularmente,
escrito
e ferramentas para fazer a mesma coisa comercializado. O sistema de alerta substitui uma grande
quantidadeEle
trabalhos. desta
irá monotonia
acompanhar muitas condições que podem causar problemas e vai enviar
notificações
variedade depor
métodos.
um No que diz respeito à gestão do espaço, é por padrão configurado para emitir
um aviso
alertar quando uma tabela atinge 85 por cento completo e um alerta crítico quando um espaço de
tabela
completo,é decom
97 por cento
tendo em conta autoextension ea natureza do conteúdo.
Alertas vem em duas formas. Stateful alertas são baseados em condições que persistem e podem
ser corrigidos.
Exemplos incluem o uso de tabela espaço, o número de sessões de suspensão, e o tempo médio
leva para completar a execução da instrução SQL. Apátridas alertas são baseados em eventos; eles
acontecem
foi. A consulta
e sãofalha com “instantâneo muito antigo” e duas transações deadlocking são exemplos.
Para configurar o sistema de alerta, você definir limites. Os limiares são armazenados no AWR.
processo
Entãode o fundo MMON irá monitorar o banco de dados ea instância, em tempo quase real, e
comparar o estado atual com os limiares. Se um limite é ultrapassado, que irá aumentar o alerta. o
mecanismo pelo qual um alerta é levantada é simplesmente colocar uma entrada na fila de alerta.
Uma
de mensagens
fila é umaque mesa
outros processos podem ler. O que acontece com a mensagem de alerta ao lado é
um assunto para
configuração adicional. O comportamento padrão é que o Enterprise Manager Cloud Control vai (se
um instalado)
foi agente desenfileirar a mensagem e exibi-lo na página inicial do banco de dados, mas Empresa
Manager pode ser configurado para enviar e-mails ou mensagens SMS quando se descobre que um
alerta foi
levantadas.
Você pode ver os alertas consultando os DBA_OUTSTANDING_ALERTS vista, e é
possível escrever um manipulador de alerta em PL / SQL que irá retirar da fila as mensagens e tomar
qualquer ação
desejado.
EXAME TIP Alertas são gerados pelo processo MMON, não pelo Enterprise Manager.
Manager lê alertas, como se outros manipuladores de eventos escritos por você ou por terceiros.
Empreendimento
definindo limites
Você pode definir mais de 200 métricas para limiares. Eles são documentados na visão
V $ METRICNAME, que dá o nome da métrica, as unidades em que é medido, ea ID
número pelo qual é identificado.
Há uma API (o pacote DBMS_SERVER_ALERT) para definição de limites. Aqui está um
exemplo:
Tomando esta / SQL linha chamada execução PL por linha, aqui é o que acontece:
parâmetro.
5. O operador de comparação para o nível crítico, que é “maior ou igual a” é passado
ao parâmetro critical_operator.
6. O valor para um alerta crítico, que é 2MB por segundo, é passado para o critical_value
parâmetro.
7. O período de observação, em minutos, é passado para o parâmetro observation_period.
8. O número de ocorrências consecutivas antes de o alerta é levantada. O literal 5 é passado
para
o parâmetro consecutive_occurrences.
9. O exemplo para o qual a indicação está a ser configurado, ORCLZ, é passado para o
nome_instância
parâmetro.
10. O tipo de objecto ao qual o alerta se refere. O resultado da função
dbms_server_alert.object_type_system é passado para o parâmetro object_type.
11. O nome do objecto para o qual o alerta se refere. Neste caso, um NULL é fornecido uma vez
que um
nome do objeto não é significativo para uma métrica que mede a taxa de geração de redo.
Note que nem todos os argumentos são relevantes para todos os alertas.
O exemplo anterior configura um alerta para a taxa de geração de redo; um aviso será
levantada, se este exceder 1MB por segundo, e um aviso crítica será aumentada se ele passa sobre
por 2MB O período de observação é definido como um minuto e ocorrências consecutivas a cinco;
segundo.
Isso
se significade
a geração que
refazer acontece para bater um alto nível apenas um par de vezes, não será relatado,
maspermanece
ele se a um nível elevado constante (durante cinco minutos consecutivos), ele será relatado.
porque este
métrica é aquele que pode variar entre instâncias de Clusters ambiente RAC (Real Application),
o nome da instância deve ser especificado, mas o nome do objeto não é relevante. Se o alerta fosse
por
uso de tabela, o nome da ocorrência não seria especificado, o tipo de objecto seria de tabela, e
o nome do objeto seria definida como o nome do espaço de tabela.
Quando alertas com estado são levantadas, eles são visíveis como linhas nas
Visão.
DBA_OUTSTANDING_ALERTS
Eles vão permanecer visível até que sejam apuradas. Eles podem ser apagados porque o DBA
resolveu o problema, ou, em alguns casos, o problema vai desaparecer no curso natural dos
tem
acontecimentos.
exemplo, um alerta
Para
tablespace-uso seria normalmente requerem ação DBA (como a adição de outro
arquivo de dados), ao passo que um alerta relacionada com a actividade, tal como a taxa de geração
de refazer, pode limpar
automaticamente quando a actividade diminui. Quando um alerta é limpo, ele é removido do
DBA_OUTSTANDING_ALERTS visualizar e escrita para a exibição DBA_ALERT_HISTORY.
alertas de ir direto para o ponto de vista histórico.
stateless
Limiares são configurados por padrão para o uso de tabelas e sessões de bloqueio. Um uso do
aviso
espaço
será levantada quando um espaço de tabela é de 85 por cento cheio e uma advertência crítica
quando
por centoé 97
completo. Os valores de aviso e críticos para sessões bloqueados são 2 e 4.
Exercício 18-3: Configurar Alertas Neste exercício, você vai ativar um alerta para a taxa de
cometer e a sua utilização. Siga esses passos:
demonstrar
1. Ligue para o seu banco de dados com o Database Control como SYSTEM usuário.
2. Crie um pequeno espaço de tabela, como segue:
Dado que o arquivo de dados (por padrão) não autoextend e que cada ponto é um tamanho
fixo,
É impossível para este espaço de tabela para conter mais de oito extensões.
3. Defina um alerta a utilização do espaço que irá emitir um aviso quando a tabela está meio
cheio
aviso
e uma
crítico quando três quartos cheio. Confirmar que o limite foi definido.
4. Criar uma tabela e preencher o espaço de tabela.
5. Encha o espaço de tabela alocando extensões repetidamente até que você receber o erro
“ORA-01653:
incapaz de estender SYSTEM.BIG tabela 16 em SMALL tabela.”
os Autotasks
Há três autotasks:
DICA As janelas padrão para os autotasks supor que seus usuários são americanos e não pode ser
apropriada em um ambiente multinacional. Só porque é noite no fuso horário do banco de dados faz
não significa que é noite em outro lugar. dias Além disso, sábado e domingo estão trabalhando em
partes do mundo.
alguns
A primeira consulta na figura mostra que todos os três autotasks estão habilitados. Em seguida,
run os
do resultados
SQL Tuningda Advisor
última são mostrados. O consultor identificou oito instruções SQL como sendo
digno de atenção, mas decidiu não fazer quaisquer recomendações. Finalmente, a tarefa é
desabilitada.
CUIDADO Muitos bancos de dados está executando a Autotask SQL Sintonia todas as noites para
nenhumninguém
porque propósitonunca olha para os resultados.
Broca
GerenciarTwo-Minute
o Automatic Workload Repository
• Por padrão, os instantâneos são tomadas a cada hora e armazenadas por oito dias.
• instantâneos adicionais podem ser tomadas sob demanda.
• MMON é responsável por criar snapshots e lançamento do ADDM.
• A AWR consiste em tabelas (e objetos relacionados) no esquema SYS, na SYSAUX
tablespace.
• O parâmetro STATISTICS_LEVEL deve ser definido como ALL TÍPICA ou; caso contrário,
o snapshots não será feita.
Auto teste
1 . A AWR está localizado no espaço de tabela SYSAUX. Se você suspeitar que ele está
crescendo
tamanhoa que
tal ele vai encher o espaço de tabela SYSAUX, quais ações você pode tomar para
reduzir o
probabilidade de isso acontecer? (Escolha todas as respostas corretas.)
Respostas de auto-teste
1. C . O aumento do tempo entre snapshots irá reduzir o número armazenado e, portanto, o
espaço necessário.
A , B , e D são incorrectas. A está incorreta porque não é possível mudar o local da
AWR.
B está incorreta porque o espaço necessário para armazenar um instantâneo não está
relacionado este
freqüência; comseria
o instantâneo
realmente ter o efeito oposto ao desejado. D é incorrecta porque
as tarefas de manutenção automática não controlam instantâneos, e é instantâneos que
ocupam quantidades
grandes o do espaço no AWR.
2. Um . Este é exatamente o tipo de situação para a qual linhas de base se destinam.
B , C , e D estão incorrectos. B iria funcionar, mas você precisaria de um espaço de
tabeladeSYSAUX
tamanho o é uma boa solução. C está incorreta porque o espaço disponível não
Júpiter; não
tem
efeito sobre o tempo de retenção. D está incorreta porque STATISTICS_LEVEL controla
a informação é recolhida, não por quanto tempo ele é mantido.
quanto
3. C . O ADDM é executado automaticamente sempre que um instantâneo é gerado, que
snapshot
contrastante
com o instantâneo anterior.
A , B , e D são incorrectas. A está incorreta porque não há integração entre o alerta
sistema e ADDM. B está incorreta porque ADDM não é uma Autotask. D é incorrecta
porque
embora você possa solicitar relatórios ADDM explicitamente, eles também são gerados
4. automaticamente.
A , C , B , E , D é a sequência correcta.
Todas as outras seqüências estão errados.
5. C e E . Estes funcionam em cada janela de manutenção, mas a implementação do
recomendações é até o DBA.
A , B , D , e F são incorrectas. A está incorreta porque MMON invoca o ADDM. B , D ,
e F estão incorretas porque são conselheiros que devem ser invocadas manualmente.
6. B . Os conselheiros são dependentes da STATISTICS_LEVEL.
A , C , e D estão incorrectos. A está incorreta porque as estatísticas do otimizador não
são requeridas
os assessores, pelas
embora possam recomendar coletá-los. C é incorrecta porque a
assessores sempre pode ser invocado usando a informação actualmente disponível na
incorreto
instância. porque
D é embora Enterprise Manager pode invocar os assessores, não há nenhuma
dependência entre eles.
7. Um . MMON levanta alertas por escrever uma mensagem para a fila de alerta.
B , C , e D estão incorrectos. B está incorreta porque Enterprise Manager não levanta
alertas; os divulga. C e D estão incorretas porque nem sessões de servidor nem o SMON
fazem parte do sistema de alerta.
8. D . “Snapshot muito velho” é um alerta sem estado e, portanto, vai diretamente para o
histórico
A ,B,eC desão
alertas.
incorrectas. Um é incorrecta porque a STATISTICS_LEVEL refere-se a
estatísticas, não alerta. B está incorreta porque alertas pendentes não se purgado em qualquer
cronograma, apenas por ser resolvido. C está incorreta porque “instantâneo muito antigo” é
um apátrida
alerta, e os limites podem ser aplicados apenas aos alertas com estado.
9. B. A trabalho será executado nas janelas de manutenção a menos STATISICS_LEVEL
está definido para
BASIC.
A , C , e D estão incorrectos. A e C estão incorretas porque eles especificar o errado
componente para realizar a tarefa. D está incorreta porque embora você pode agendar um
-se, deixando a instalação Autotask fazer isso é a melhor opção.
trabalho
10. B. O otimizador utiliza as mais recentes estatísticas publicadas, que são armazenados
dicionário.
nos dados
A , C , e D estão incorrectos. A está incorreta porque as estatísticas são armazenados de
forma independente
dos segmentos reais. C está incorreta porque os valores históricos armazena AWR, que são
não utilizado para análise em tempo real. D está incorreta porque as lojas PIG o plano de
em si, não a informação usada para gerá-la.
execução
11. A e B. Ajuste STATISTICS_LEVEL = BASIC irá desativar as autotasks (e alguns
outras coisas). As tarefas também pode ser desativado com o
procedimento DBMS_AUTO_TASK_ADMIN.DISABLE.
C , D , e E são incorrectas. C está incorreta porque Enterprise Manager não é obrigado a
autotasks executados. D e E são incorrecta porque, embora o Scheduler e o Recurso
Gerente de Controle de quando e como autotasks será executado, eles não ativar ou
desativá-los.
CAPÍTULO 19
Performance tuning
Objetivos do exame
• 062.11.1 Use Enterprise Manager para monitorar o desempenho
• 062.11.2 gestão do uso de memória automática
• 062.11.3 Use o Memory Advisor para buffers de memória Tamanho
• 062.12.1 Gerenciar Optimizer Estatísticas
• 062.12.2 Use o SQL Tuning Advisor
• 062.12.3 Use o SQL Access Advisor para Tune Workload
De um modo geral, a abordagem a tomar em direção ajuste de SQL é confiar o otimizador. oracle
Custo Optimizer base (CBO) pode muito bem ser a parte mais complexa de software com o qual
sempre trabalhar. Muitos DBAs passaram anos estudando o funcionamento do CBO. Claramente,
você
conhecimento abrangente do CBO está fora do âmbito da OCP-e o Oracle Certified
um
Master (OCM) -da análise. Mas um aspecto é discutido: a necessidade de abastecer o CBO com o
informação estatística de que necessita para tomar decisões. Estas decisões são sobre a melhor forma
de executar SQL
declarações, e se esta informação estiver ausente ou inexata, o desempenho pode cair drasticamente.
Desenvolvimento de planos de execução com base em estatísticas é conhecido como otimização
baseada
temas emquentes
mais custo e em
é um dos da computação.
ciência
Dois assessores são relevantes para o desempenho do SQL: o SQL Tuning Advisor, que analisa a
dadaforma como aé executado, eo SQL Access Advisor, que olha para as estruturas do segmento
declaração
que a declaração é executado. Ambos estes conselheiros são licenciados como parte do ajuste Pack,
contra
disponível para
instalações Enterprise Edition.
Um erro cometido no início pode ser difícil de corrigir posteriormente. Por exemplo, se a análise
assume
de negócios
que um nome de cliente é único e, portanto, em sistemas de tempo de análise “nome do
cliente”
usado como é uma chave primária, será difícil ajustar a aplicação quando em tempo de
Acontece que vários clientes podem ter o mesmo nome. Da mesma forma, o desempenho deve ser
implementação,
direito ponderada no início. Por exemplo, os analistas de sistemas irão modelar as estruturas de
(Tipicamente) para a terceira forma normal. Mas, embora a terceira forma normal pode ser ideal,
dados
teoricamente,
óptima para o édesempenho.
raramente desnormalização seletiva deve ocorrer na fase de concepção do sistema.
Se isso
não for éfeito, os problemas de gestão mais normalizada de dados vai ser difícil de corrigir mais tarde.
A metodologia de ajuste deve, portanto, ter duas características principais. Primeiro, ele deve ser
de cima
aplicado
para baixo. Em segundo lugar, deve concentrar-se nas necessidades dos negócios.
NOTA Para dizer que ajuste deve ser de cima para baixo é tudo muito bem, mas em muitos casos, o
DBA é
presenteado com um produto acabado e é forçado a ajustá-lo de baixo para cima, reagindo a
problemas
ocorre que como
talvezeles
não foram devidamente considerados anteriormente.
• Resumo Esta guia mostra uma visão geral da atividade do sistema sobre o desempenho
período de tempo seleccionado.
• Atividade Essa guia exibe sessões ativas, mostrando o SQL que estão em execução e
os eventos de espera que estão experimentando.
• Carga de trabalho Esta guia exibe gráficos mostrando o padrão de chamadas do usuário, a
taxa
geração,
de início
eo de
SQLsessão,
sendooexecutado.
redo
• SQL monitorado Todas as declarações que consomem mais de cinco segundos de
processamento
unidade (CPU)central
ou o tempo de I / O são monitorados, com dados sobre I / O, eventos de
espera, ea execução
plano.
• ADDM Este guia dá acesso a ADDM relatórios sobre qualquer período de tempo tem sido
selecionado.
Exercício 19-1: Use Enterprise Manager para monitorar a atividade Neste exercício, você gerar
carga de trabalho e fiscalizar a atividade no Enterprise Manager. Siga esses passos:
um
3. Conecte-se ao banco de dados Express, logon como usuário SYSTEM, com o URL
apropriado.
são dois exemplos:
Aqui
http://127.0.0.1:5500/em
https://127.0.0.0:5501/em
4. Na sessão SQL * Plus, lançar uma consulta de longa duração que deve colocar algum stress
no sistema.
uso de memória na instância Oracle cai em duas categorias: Programa Global Áreas (PGAs) que
são particulares para cada sessão e área do sistema global (SGA) que é compartilhado por todos
processos. De liberação 9 i tem sido possível para automatizar a gestão da PGA. A partir de
Oracle
liberar 10 g , tem sido possível para automatizar a gestão do SGA. Liberta 11 g e 12 c pode
gerenciar tanto o PGA e SGA em conjunto, de forma totalmente automática.
CUIDADO Todos uso de memória do Oracle é a memória virtual. Os processos Oracle não têm
formase
saber dea memória para o qual eles estão se conectando está na memória de acesso aleatório (RAM)
foi trocado (ou paginado) para o disco. No entanto, a troca vai paralisar o desempenho e deve ser
ou
evitado.
• linhas Classificando
• bitmaps Mesclando
• Variáveis
• A pilha de chamadas
Para alguns dados na PGA, o uso de memória não é negociável. Por exemplo, se as necessidades
memória
de sessão
para a sua pilha de chamadas, que a memória deve ser disponibilizado. Para outras
estruturasuso
espaço), (tais
decomo
PGA tipo
é preferível, mas não essencial, porque se necessário, os dados podem ser
gravados
uma estrutura-embora
para armazenamento baseado em disco isso vai impactar negativamente no
desempenho.
Cada instrução SQL usa memória na SGA (especificamente, a área SQL compartilhada no
piscina)
compartilhada
e também irá exigir uma quantidade mínima de memória PGA (por vezes referido como o
área de SQL), sem o qual não pode executar. Tornando mais memória PGA disponível, muitas vezes,
privado
tempo de execução, mas a redução não é linear. Tipicamente, haverá três fases de memória
reduzir
alocação: estes são conhecidos como óptimo, de uma passagem, e de passagem múltipla. A alocação
de memória
permitir que ideal
a instrução
será seja executada puramente na memória, sem necessidade de fazer uso de
armazenamento em disco. A atribuição de memória óptima é suficiente para acomodar todos os
temporários
dados de entrada
quaisquer estruturas
e de dados auxiliares que a declaração deve criar. A alocação de memória de uma
passagem é para execução ideal e, portanto, força uma passagem extra sobre os dados. o Multipass
insuficiente
alocação de memória é ainda menor e significa que várias passagens sobre os dados serão
necessários.
Como exemplo, considere uma operação de classificação. A situação ideal é que todas as linhas
ser lido
de ser
noresolvido
PGA e ordenados
pode lá. A memória necessária para isso é a memória ideal
alocação. Se a alocação de memória ideal não está disponível, em seguida, as linhas devem ser
separadas
lotes. Cadaem lote será lido na memória, classificadas e escrita para o disco. Isso resulta em um
conjunto
lotes ordenados
de no disco, que deve, então, ser lido de volta para a memória e se fundiram em uma
listatodas
de ordenada
as linhas.
final,A memória PGA necessária para isso é a alocação de uma passagem; a operação
de classificação
tinha de se tornartem
vários tipos seguido por uma fusão. Se a alocação de memória de uma passagem
não é
disponível, então a fase de fusão, bem como a fase de sorte vai exigir o uso de armazenamento em
discoétemporário.
Esta uma execução multipass.
EXAME TIP área SQL compartilhada de uma declaração está na piscina comum do SGA; sua área
SQLna
está privada
PGA da sessão.
A situação ideal é que todas as instruções SQL deve ser executado da melhor maneira, mas essa
impossível
meta pode
de alcançar.
ser Nas operações de armazenamento de dados, a alocação de memória ideal
podem serse
gigabytes muitos
as consultas estão abordando grandes mesas. Nesses ambientes, as execuções de uma
passagem
o pode
melhor que ser ser alcançado. execuções Multipass deve ser evitado, se possível. Por exemplo,
pode
classificação 10GB de dados pode exigir mais de 10GB de memória para executar de forma
otimizada
com uma passagem.
mas apenasSó40MB
se menos
parade
executar
40MB está disponível será o tipo tornar multipass, e execução
vezes, então, aumentar substancialmente.
Gerir a memória PGA pode ser automática, e Oracle Corporation recomenda vivamente que
deveria estar. As técnicas de gerenciamento manuais mais velhos são suportados apenas para
ecompatibilidade comaqui.
não será discutido versões
Paraanteriores
implementar o gerenciamento de memória PGA automática, você
definir
para a alocação
uma metade memória total de PGA, resumiu para todas as sessões. A instância Oracle passará
memória fora deste total para sessões sob demanda. Quando uma sessão terminar a execução sua
então
comunicado, a PGA foi usando podem ser alocados para outra sessão. Este sistema baseia-se no fato
adequalquer
que momento, apenas algumas das sessões conectadas terá qualquer memória PGA
negociável.
todos precisarão
Eles de uma certa quantidade de memória PGA para manter o estado da sessão, mesmo
quandoestá
sessão a ocioso, mas isso vai deixar o suficiente, do total de modo que as sessões realmente
declarações podem ter o que precisam. Pelo menos, isso é o que se espera.
funcionando
NOTA Àspodem
requisitos vezes éser
impossível
enormes.de alcançar de
execuções alocações de memória
uma passagem ideal mas
são ruins, porque a memória
pode ser inevitável.
execuções
são desastrosas,
multipass
e se estes estão ocorrendo, você deve conversar com os administradores de sistema
sobre disponíveis
hardware e aos programadores sobre a optimização do seu SQL.
• WORKAREA_SIZE_POLICY
• PGA_AGGREGATE_TARGET
• PGA_AGGREGATE_LIMIT
O valor PGA_AGGREGATE_LIMIT é um limite rígido no PGA total que pode ser usado. o
padrão é o maior de 2 GB, ou o dobro do PGA_AGGREGATE_TARGET, ou 3MB multiplicado por
o parâmetro de processos. Ele não pode ser definida para menos de 2 GB. Se este limite for
ultrapassado,
terminar chamadas
a Oracle
em curso, a fim de trazer o uso PGA abaixo do limite.
• A piscina comum
• O cache de buffer do banco de dados (conjunto padrão)
• A grande piscina
• A piscina streams
• A piscina Java
• O buffer de log
Como regra geral, a alocação de memória para o grande piscina, a piscina Java, e os fluxos
não piscina
é uma questão
é de negociação, seja a memória é necessário ou não é. Se estas estruturas são
subdimensionado, não haverá erros; se eles são grandes, não haverá melhoria de desempenho.
A
se alocação
é inferiorde memória
a ideal, não para a piscina
haverá comum,
erros, mas o cache deirá
o desempenho buffer do banco
degradar. de dados,é ae o buffer de
A excepção
log é negociável;
piscina comum; se este é cronicamente subdimensionado, ocorrerão erros.
DICA Não jogue memória na Oracle desnecessariamente. Uma piscina comum de grandes
dimensões
ruim para oou
desempenho.
buffer de log
Um pode
buffer
ser cache de grandes dimensões é menos provável de ser um
problema,
de grandesadimensões
menos quequesejao assim
sistema está tendo que trocar.
gerenciamento de memória SGA pode ser automática (e Oracle Corporation informa que deveria
comser),
a excepção do tampão de registo e os invulgares piscinas cache da memória intermédia. O DBA
define
para o PIG,
um tamanho
e a instância
total irá distribuir esse total para as várias estruturas, garantindo assim que
não há erros de componentes do SGA sendo subdimensionadas e que a memória acima deste mínimo
éalocados onde ele vai fazer o melhor. Os componentes serão redimensionadas na demanda, por isso,
se um
componente precisa de mais memória, ele vai ser tirado de um componente que pode poupar-lo. O
tampão
o componente
é de logde um SGA cujo tamanho é fixo na inicialização da instância e que não podem ser
gerenciou.
automaticamente
EXAME TIP O tampão de registo é a única estrutura PIG que não pode ser ajustado
dinamicamente.
portanto, ser gerenciado
Eu não posso
automaticamente.
• SHARED_POOL_SIZE
• DB_CACHE_SIZE
• LARGE_POOL_SIZE
• STREAMS_POOL_SIZE
• JAVA_POOL_SIZE
Para habilitar o gerenciamento de memória compartilhada automática (ASMM), deixe tudo isso
definido
definido
parapara
zero)o padrão
e definir(ou
um parâmetro em vez disso: SGA_TARGET. Opcionalmente, definido
como SGA_MAX_SIZE
bem.
Quando ASMM é usado, a instância irá monitorar a demanda por memória nos vários SGA
componentes e passar para fora memória para os componentes, conforme exigido, downsizing
componentes
necessário semanter
para isso é a memória total alocada dentro da meta. Também incluídos dentro do alvo é
alog buffer. Esta é dimensionada com o parâmetro LOG_BUFFER, que é estático; o tampão de
registo
na inicialização
é criado da instância e não pode ser redimensionada posteriormente.
DICA O padrão para LOG_BUFFER é provavelmente correta. Você pode definir o parâmetro a mais
elevada
o padrão,domas
queisso pode causar uma degradação no desempenho. Se você configurá-lo para menos
do que
sua definição,
o padrão,
muitas vezes, ser ignorado.
O parâmetro SGA_TARGET é dinâmico; ele pode ser ajustado para um valor mais baixo, e a
irá redimensionar
instância os componentes variáveis para baixo para atender o novo alvo. Ele também pode
ser levantada,
não é levantadadesde
acima do valor do parâmetro SGA_MAX_SIZE. O parâmetro SGA_MAX_SIZE
Por padrão o valor SGA_TARGET e é um parâmetro estático. Portanto, por padrão, você nunca pode
fazer o SGA total maior do que era no tempo de inicialização de instância.
DICA Para tornar a sua vida mais fácil, definir apenas o MEMORY_TARGET parâmetro e não
defina qualquer um dos
AMM não é apenas uma ferramenta para tornar a administração de banco de dados fácil. É,
benefícios
muitas de
vezes,
desempenho
fornecer perceptível
também. Muitos bancos de dados irá experimentar diferentes padrões de
atividade nodiferentes, que poderiam se beneficiar de configurações de memória diferentes. Por
momentos
exemplo, não
incomum paraéum banco de dados usado para o processamento de fim de experimentar um
processamento
carga de trabalhodedurante
alta transação
a maior parte do mês e, em seguida, um processamento de carga de
trabalho deé executado.
relatórios consulta pesado
processamento
durante o final
de transações
do mês normalmente não irá ser exigente na memória
PGA, masum
requerem vaigrande cache buffer do banco. processamento de consultas, muitas vezes, requerem
grandes
não alocações
muito PGA, mas
buffer cache.
EXAME TIP O parâmetro MEMORY_TARGET é dinâmico-lo pode ser ajustado sem desligar
para baixo a instância, mas apenas dentro de um limite fixado por outro parâmetro:
MEMORY_MAX_TARGET.
Esta é estático, para que possa ser gerado apenas ajustando com o escopo = cláusula SPFILE e
reiniciar o
instância.
transferir manualmente memória entre SGA e PGA em resposta a mudanças nos padrões de
não atividade
é uma opção prática e muitos sistemas não será capaz de alocar memória suficiente para ambos
simultaneamente para satisfazer suas demandas de pico. Gerenciamento automático de memória é
capaz de transferir
memória entre SGA e PGA conforme necessário para otimizar o desempenho dentro de uma
memória global
limitação. Esta restrição global deve ser determinada pelo DBA e o administrador do sistema
juntos. Há pouco ponto na DBA definir um limite superior que é tão grande que a operação
sistema tem a página SGA e PGA para um dispositivo móvel; o administrador do sistema será capaz
de aconselhá
em um valor máximo apropriado.
AMM é implementado pelo corretor de memória , que consiste em dois processos em segundo
MMONplano.atividade
o monitores de processos e, quando aconselhável, instrui o Gerenciador de memória
processo para realocar memória entre componentes. transferências de memória deve ocorrer, no
(Mman)
máximo,
alguns minutos
apenaspara
a cada
fins de ajuste e geralmente ocorrem com muito menos frequência, talvez nunca
uma
o sistema
vez tenha se estabilizado. Haverá, no entanto, ser uma transferência imediata em caso de um
erro
condição a ser levantada por uma sessão. Em vez da falha declaração, a sessão irá travar enquanto
memória é disponibilizado e, em seguida, retomar.
NOTA AMM tem variações de plataforma. Por exemplo, no Linux, não é possível habilitar
AMM se Hugepages está em uso. No Solaris, segmentos íntimos dinâmicos adequados de memória
compartilhada
ser configuradodeve
para o projecto em que a instância estiver em execução.
Exercício 19-2: Defina os parâmetros de gestão de memória Neste exercício, você irá desativar
Gerenciamento automático de memória (se estiver ativado) e definir as metas do SGA e PGA de
formatodas
Faça independente.
as alterações usando a sintaxe que afetarão somente a instância em execução; não
propagar ono spfile, a menos que você está preparado para revertê-las mais tarde. Aqui estão os
alterações
passos a seguir:
1. Conecte-se ao seu banco de dados com SQL * Plus como usuário SYSTEM.
2. Certifique-se de que nenhum dos parâmetros para gerenciar as estruturas de memória SGA
dinâmicos
manualmente estão definidas.
O segundo comando pode demorar alguns minutos para ser concluído, e pode falhar se a
Oracle não
reduzir o SGA
podeao mínimo. Neste caso, tente um valor maior.
5. Determine o tamanho real dos PGAs actualmente afectados pela soma-se o valor para a
estatística “sessão memória pga” em todas as sessões.
A figura será significativamente superior ao 10MB solicitado no passo 4. Isso ocorre porque
10MB é um valor que é tão baixo que a Oracle não pode manter a ele. O alvo PGA é de
apenas
não umumlimite
alvo,
rígido.
A primeira consulta na Figura 19-1 mostra o assessor PGA. A terceira coluna mostra um
seleccionado
estimativa para a quantidade de disco de I / O que seria necessária se o alvo PGA foram definidas
para a figura
mostrado na primeira coluna. A segunda coluna nesta figura expressa como uma proporção da real
configuração. A quinta linha da saída é o cenário atual: a PGA_TARGET_FACTOR de 1. Como
vocêsepode
ver, outro 30MB de memória foram adicionados ao alvo, seriam necessários menos I / O, mas
acrescentando
do que isso daria
mais
nenhum benefício adicional.
A segunda consulta na Figura 19-1 mostra o assessor PIG. Isto relaciona-se o tamanho da PIG
valorpara
previsto
uma para DB_TIME, que é um valor global para a quantidade de tempo gasto pela base de
dados
para executar SQL; minimizando DB_TIME é o objectivo global de todos tuning. Como você pode
ver, seforam
SGA o levantados a partir de seu valor atual de 196MB para 294MB, DB_TIME reduziria, mas
haveria nenhum ponto em ir mais longe.
há
A terceira consulta é contra o conselheiro alvo de memória, que dá conselhos sobre o total (SGA
PGA) mais
alocação de memória. Isto mostra que o valor ideal é de 450 MB, ao contrário do actual
valor de 300MB. Se Gerenciamento automático de memória está em uso (ativado com a
MEMORY_TARGET
parâmetro), então esta última consulta é tudo o que seria necessário. Como você pode ver,
praticamente
DB_TIME poupança
toda a poderia ser alcançado através do aumento da meta de 375 MB, e se os
administradores
dizem memória suficiente
de sistemanão está disponível para alocar a quantidade ideal, então este é o que o
deve pedir.
DBA
EXAME TIP Os assessores não será habilitado a menos que o parâmetro STATISTICS_LEVEL
está definido
TÍPICO ou ALL.
para
Exercício 19-3: Use o Advisors Memória Neste exercício, você irá reunir conselhos sobre memória
alocação consultando os pontos de vista relevantes. Este exercício assume que Exercício 19-2 foi
completou. Aqui estão os passos a seguir:
1. Conecte-se ao seu banco de dados como SYSTEM usuário com SQL * Plus.
2. Executar esta consulta para ver os resultados do conselheiro SGA:
DICA As estatísticas não são relevantes para PL / SQL, apenas para SQL tão estatísticas coleta não
vai performance
PL melhorar / SQL. Mas o código mais PL / SQL irá incluir chamadas para instruções SQL;
estatísticas são
importante paratão
estas declarações como para quaisquer outros.
objeto Estatísticas
Analisando uma mesa reúne estatísticas sobre a tabela que vai ser de utilidade para o otimizador.
Alguns dos são visíveis na vista DBA_TABLES; eles incluem o seguinte:
estatísticas
Para além das estatísticas sobre a mesa como um todo, cada coluna da tabela é também
estatísticas
analisada.
de coluna são visíveis na vista DBA_TAB_COLUMNS; eles incluem o seguinte:
Quando uma tabela é analisada, seus índices são analisados implicitamente. Também é possível
reunir índiceexplicitamente. As estatísticas sobre os índices são mostrados na vista DBA_INDEXES;
estatísticas
elesseguintes:
Os incluem
Estas estatísticas, que são armazenados dentro do dicionário de dados, dar o otimizador as
informações
precisa tomarque
decisões vitais sobre a melhor forma de executar instruções. Se as estatísticas estão
ausentes ou
incorreto, o desempenho pode cair drasticamente.
estatísticas de objetos são muitas vezes imperfeita, em primeiro lugar, porque eles são estática
Issoaté
significa
que sejam
que reunidos
eles se tornam
novamente.
obsoletos ou fora da data, como resultado de Data Manipulation
Language
contra (DML) Em segundo lugar, as estatísticas de objetos são muitas vezes imperfeita, porque,
os objetos.
como
são recolhidos
regra geral,
através
as estatísticas
de um processo de amostragem. Se um objeto é muitos gigabytes grande, uma
análise
leva muito
completa
temposerá
e recursos e, possivelmente, ter um impacto sobre outros trabalhos. Análise de
uma amostra
objeto irá normalmente
do dar estatísticas que são representativos do conjunto a um custo muito menor.
Em muitos
casos, as estatísticas obsoletos ou amostrados são perfeitamente adequada. Por exemplo, se uma
tabelapode
você tem ser
um capaz
bilhãodedeadicionar
linhas, milhões mais sem perturbar a eficiência dos planos de execução,
que os valores da coluna nas novas linhas caber dentro das distribuições de freqüência já descoberto.
desde
em outros casos, uma quantidade relativamente pequena de DML pode ter um efeito significativo.
Mas
EXAME TIP estatísticas de objetos são estáticos. Eles devem ser regenerado regularmente para
pegar mudanças no
o estado dos dados.
A primeira consulta (quase certamente) ser mais rápido se executado usando o método do índice.
que assumindo
há poucos funcionários que atendem o critério, não há nenhum ponto em ler a tabela inteira para
encontrá-los. Pesquisar o índice para encontrar os empregados relevantes será mais rápido. A
segunda
no entanto,
consulta,
vai ser mais rápido (assumindo que todo mundo tem um salário positivo) se a tabela
inteira é
digitalizada. Todos os funcionários vão ser recuperada, e não há nenhum ponto em usar o índice.
Ao fazer esta escolha de método de acesso, você está usando estatísticas de objetos . Estatísticas
A Oracle
objetoquantas
contar linhas estão em cima da mesa, quantos blocos de segmento tabela está ocupando, o
valores máximos e mínimos das colunas, a profundidade dos índices, e muito mais. Se o objeto
estatísticas estão ausentes ou imprecisas, o otimizador irá desenvolver um plano inadequada. Para
levar pouco
(Um isso artificial) exemplo um passo adiante, considere a situação em que as estatísticas de
objetos
que a tabela
dizemé muito pequena que contém apenas uma linha e ocupa apenas um quarteirão. Nesse
não existe um ponto no meio do índice. toda a tabela pode ser lido por uma única leitura bloco.
caso,
acessando
índice o
significaria, pelo menos, uma leitura do índice, possivelmente seguido por uma outra leitura
da tabela.
nunca poderia
este ser mais rápido, para que o otimizador sempre optar por digitalizar a tabela não
importafoi.
critério o que
Masa se as estatísticas eram, na verdade, errado ea tabela consiste em vários milhões de
ocupando muitos megabytes de espaço, esta decisão seria desastroso para alguns critérios. Se torna
linhas
evidente que as estatísticas devem estar ambos presentes e precisas se o otimizador é desenvolver
planos de execução.
eficiente
O otimizador baseia suas decisões em estimativas de cardinalidade . Usando as estatísticas
faz suposições
disponíveis,sobre quantas linhas e blocos serão acessados por vários métodos de execução. o
precisão dessas suposições é fundamental para o desempenho e é geralmente dependente da
frequência
coleta de estatísticas
de e do tamanho da amostra. Em alguns casos, essas estimativas venham a ser
errado. Por quê? Tipicamente, porque as estatísticas são ou envelhecer ou com base em uma amostra
Oracle tem duas instalações que lhe permitem corrigir este: directivas do Plano de SQL e execução
insuficiente.
planos.
adaptativa
Durante a execução de uma instrução, o CBO monitora quantas linhas são retornadas em cada
e compara
etapa esse valor para cardinalidade real para a cardinalidade estimada utilizado para derivar a
plano de execução. Se os números desviar suficientemente, o CBO irá gerar uma directiva plano de
SQL para A directiva é uma instrução para o otimizador para reunir informações adicionais sobre o
uso futuro.
objectos através de um mecanismo conhecido como amostragem dinâmica . Um exemplo simples
seria que costumava
anteriormente: As estatísticas dizem que a tabela EMP tem uma linha, mas ao consultar-se o
otimizador encontra
que, na verdade, ele tem milhões de linhas. Neste caso, a Oracle irá gerar uma directiva que, no
futuro,
instruirá o otimizador para verificar o tamanho da tabela ao decidir sobre um plano de execução.
Exemplo mais complexo pode ser recuperando empregados por cidade, estado e país. Os seres
UMA
humanos ésabem
Munique a capital
que da Baviera e que a Baviera é na Alemanha. Mas a Oracle não. Isso vai
distorcer suas suposições sobre o número de linhas retornado se um predicado especifica valores
para os três
colunas. A directiva iria instruir o CBO para gerar estatísticas adicionais sobre o
correlação dos valores entre colunas. As directivas são salvos no AWR na SYSAUX
tabela e associada com a tabela a que se referem e, assim, ser um benefício para qualquer
declarações que atingiram a mesa a partir de então.
TIP EXAME directivas do Plano de SQL estão vinculados às tabelas, não para declarações. Eles
são persistentes no
AGORA.
TIP O plano de execução adaptativa permite a comutação entre os modos de associação: quer
aninhada
juntar ou hash.
circuito
Ambos podem começar a digitalização, e contando, as linhas de uma tabela. Ele
também opode
alternar método de distribuição de linha para uma consulta paralela.
EXAME TIP estatísticas de objeto são o tempo não real; eles são estáticos até refrescado por uma
novanão
isso análise.
é feito
E com
se frequência suficiente, eles serão seriamente fora da data, e o otimizador pode
consequentemente, desenvolver planos de execução inadequados.
estatísticas de objetos podem ser recolhidas em vários níveis. Estes são os procedimentos
pertinentes,
pacote no
DBMS_STATS:
Quando as estatísticas são recolhidas em qualquer nível, uma série de argumentos podem ser
especificado
passados.naEstes
chamada
podemdeser
procedimento ou definir como preferências salvas em cada nível.
Consideredeo procedimento,
chamada seguinte que especifica os argumentos comumente usados dando o valor padrão:
Tendo estes argumentos, por sua vez, aqui está o que acontece:
• CASCADE irá analisar índices, bem como mesas. A definição dada permite que o Oracle
decidir
índices
qual
(se houver) deve ser analisado.
• controles ESTIMATE_PERCENT quanto de cada tabela para analisar. A definição dada
instrui Oracle para fazer uma suposição inteligente na quantidade necessária para uma
amostraespecifica
• GRAU significativa.
se realizar a análise com o processamento paralelo. A definição dada
deixa a Oracle decidir o número de processos paralelos de acordo com o ambiente e o
de cada mesa.
tamanho
• controles NO_INVALIDATE se reanalisar qualquer SQL com dependências nos objetos
analisado imediatamente. A definição dada permite que o Oracle decidir.
• GRANULARITY refere-se a melhor forma de analisar objetos constituídos por um número de
sub-objetos,
tais como uma tabela que é dividido em partições. A definição dada permite que o Oracle
decidir. METHOD_OPT para as quais colunas para construir histogramas e quantos baldes
• controles
Eles deveriam ter. A definição dada permite que o Oracle decidir, de acordo com a natureza
do SQL
sendo executado e a distribuição de valores dos dados.
• OPÇÕES determina quais objetos de analisar. A definição dada instrui o Oracle para analisar
todos os objetos.
O ponto restante a considerar é como frequentemente para executar o comando. Um Estatísticas-
reunindo
automática
tarefa vai fazer isso todos os dias durante a janela de manutenção. A janela de manutenção
é executado
por quatro horas todos os dias úteis noite (a partir de 2200) e por 20 horas no sábado e domingo
(A partir de 0600), embora normalmente apenas uma pequena proporção deste intervalo de tempo
serácorrer
vai necessário.
bem commuitos bancos de
estatísticas dados pela tarefa automática, eliminando qualquer necessidade
recolhidas
de reunir estatísticas
manualmente.
Há uma interface gráfica para o SQL Tuning Advisor e também um conjunto de APIs PL / SQL.
TIP EXAME conselho segmento de The Tuning Advisor é limitado a criação do índice.
• CREATE_TUNING_TASK Cria uma tarefa de ajuste para uma instrução SQL ou SQL
Ajuste de Sincronização
• EXECUTE_TUNING_TASK Executa uma tarefa de sintonia criada com
CREATE_TUNING_TASK
• REPORT_TUNING_TASK Mostra os resultados e recomendações do ajuste de SQL
Orientador
Além disso, você pode usar as seguintes visualizações de dicionário de dados para consultar o nome
eo status de ajuste
empregos:
Exercício 19-4: Execute o SQL Tuning Advisor para uma instrução SQL Neste exercício, você
vai usar
DBMS_SQLTUNE para gerar recomendações para uma instrução SQL.
3. Estes comandos, executados no prompt do SQL, irá criar uma variável para armazenar o
nome
tarefa,
do criar uma tarefa para sintonizar uma instrução, e em seguida, executar a tarefa.
4. Recuperar as recomendações da tarefa tuning, primeiro configurar SQL * Plus para exibi-los.
5. Estudar a saída da tarefa tuning, como recuperado na etapa 4. Após o detalhe da tarefa,
haverá umacriação.
declaração recomendação
Note-separa
que criar umpara
a razão índice e um exemplo
a criação de índicedeirá
um adequado
incluir index-
esta frase
(Que, na versão atual, inclui um erro de digitação menor):
É sempre possível que as recomendações que melhoram algum aspecto da carga de trabalho pode ter
impacto negativo sobre o outro. Isso deve ser destacado nos relatórios.
um
DICA Um conselheiro nunca vai dar conselhos que é definitivamente errado, mas muitas vezes você
pode
os conselheiros,
fazer melhor.
e ao
Corre
olhar para os relatórios, sempre considerar se as recomendações poderia
ser ainda melhorada.
A Tuning Advisor tem sua própria API: DBMS_SQLTUNE. O Assessor de acesso não. Para
invocar o Advisor Access, usar a interface do Enterprise Manager ou o DBMS_ADVISOR
API. O pacote DBMS_ADVISOR é uma API genérica para executar qualquer um dos conselheiros.
CUIDADO Você não pode executar o Conselheiro Acesso contra objetos pertencentes a usuários
internos, taisSecomo
SISTEMA. você tentar fazer isso, você receberá o erro “QSM-00794: a declaração não pode ser
armazenado devido a uma violação do filtro de referência de tabela inválido.”
Broca Two-Minute
Use Enterprise Manager para monitorar o desempenho
• As estatísticas são acumulado na memória e métricas são calculadas a partir destes.
• Banco de Dados Expresso expõe determinadas estatísticas e métricas-chave, representados
graficamente.
Use Gerenciamento automático de memória
• Todas as estruturas PIG, exceto o buffer de log podem ser redimensionadas dinamicamente.
• PGA é passado para fora, sob demanda, a sessões.
• AMM pode transferir memória entre SGA e PGA, dentro de um objectivo global.
• estruturas individuais podem ser dadas tamanhos mínimos com seus próprios parâmetros.
Auto teste
1 . Que os assessores pode ser invocado através de banco de dados Express? (Escolha duas
respostas.)
A. O SQL Access Advisor
B. O SQL Tuning Advisor
C. O Undo Advisor
D. Os assessores de memória
2 . Onde estão as áreas SQL privadas armazenadas? (Escolha a melhor resposta.)
A. Em PGA de cada sessão, sempre
B. Em PGA de cada sessão, a menos que um valor PGA agregada alvo foi definido
Respostas de auto-teste
1. B e C . A Tuning Advisor está disponível na guia Desempenho, e o Undo Advisor
está disponível na guia Armazenamento.
A e D são incorrectas. O Assessor de acesso e os vários assessores de memória pode ser
alcançado através de Cloud Control mas não através de banco de dados Express.
2. Um . Áreas SQL privadas são privadas para cada sessão no PGA da sessão.
B , C , e D estão incorrectos. B está incorreta porque o gerenciamento automático PGA
não é para onde a área SQL privada é armazenada, só para como ele é gerenciado. C e
relevantes
D sãoSQL incorreta porque privados estão sempre no PGA.
áreas
3. D . O buffer de log não pode ser alterado após a inicialização.
A , B , C , e E são incorrectas. A , B , e C são incorrecta porque todas estas estruturas
pode
ser redimensionada. E é incorreto, pois nem mesmo Gerenciamento automático de memória
faz comredimensionável.
tampão que o log
4. E . A memória pode ser transferido entre todas as estruturas (excepto o tampão de log),
podeeser
o total
aumentada.
de
A , B , C , e D estão incorrectos. Estes são incorrecta porque todos são possíveis,
(O aumento
embora D do uso de memória total) só é possível até ao valor especificado pela
parâmetro MEMORY_MAX_TARGET.
5. B , C , D , e E . Estas são todas as estruturas de memória PGA, embora possam
derramar
segmento a um na tabela temporário dos usuários.
temporário
A e F são incorrectas. Estas estruturas ambos existem na piscina comum do SGA.
6. C . STATISTICS_LEVEL deve ser em TÍPICA ou total; caso contrário, os conselheiros
não correr.
irão
O Gerenciador de recursos
Objetivos do exame
• 062.13.1 Configurar o Database Resource Manager
• Acesso 062.13.2 e criar planos de recursos
• 062.13.3 Monitorar o Gerenciador de recursos
Muitos sistemas de computador terá vários grupos de usuários, cada um com diferentes padrões para
o nível
de serviço que requer. Se o sistema como um todo é altamente estressado, pode ser impossível para
entregar
nível desejado
o de serviço para todos os grupos. Mas se uma estrutura de prioridade pode ser
negociado,
possível garantir ser
deve um certo nível de serviço para determinados grupos, talvez à custa de outros
grupos.
CUIDADO Não ajustar as prioridades de processos Oracle usando o comando renice Unix ou
o equivalente do Windows. A Oracle assume que o sistema operativo é o tratamento de todos os
eprocessos igualmente,
se você interferir com isso, pode haver inesperados (e desastrosas) efeitos colaterais.
O que é necessário é uma técnica para garantir que se as sessões de banco de dados de suporte de
funcionários
entrada deprecisam
dados de recursos de computação, eles obtê-los, não importa o quê. Isto poderia
significar
do dia em que
que em
o call
determinados
center é muito
momentos
ocupado, os funcionários precisam de 100 por cento dos recursos
de computação.
Resource Manager pode lidar com isso, e durante esse tempo de uso máximo as sessões de apoio ao
contadores de gestão pode travar completamente. Mas durante outros momentos do dia, quando o
call center
Não ocupado,
é abundância de recursos estará disponível para ser direcionado para o trabalho dos
contabilistas
No final do mês,
de gestão.
uma outra tarefa se tornará prioridade, especificamente, os de faturamento de fim
aderolagem
mês é executado
dos livrosepara o próximo exercício. Resource Manager precisa ser versátil
o suficiente para gerenciar isso também.
Claramente, Resource Manager é necessário somente em sistemas altamente estressados, mas
não quando
há alternativa.
você precisar
Na verdade,
dele, você está usando o Gerenciador de Recursos se você sabe ou não;
isto é
configurado por padrão em todas as bases de dados para controlar os recursos utilizados pelo sistema
Autotask, maspadrão
configuração o tem um efeito mínimo sobre o trabalho normal.
Grupos de consumo
Um grupo de consumidores Resource Manager é um conjunto de usuários com necessidades de
recursos
pode conter
semelhantes.
muitos utilizadores,
um grupo e um utilizador pode ser um membro de diversos grupos, mas em
qualquer
cada sessão
dado
terámomento,
um grupo como o seu grupo eficaz. Quando um usuário cria primeiro uma sessão, o
seu
associação de grupo consumidor padrão será ativo, mas se ele é um membro de vários grupos, ele
alternar para outro grupo, ativando sua participação desse grupo. O interruptor pode ser manual ou
pode
automática, dependendo de uma série de fatores.
No exemplo televendas, os funcionários 200 de entrada de dados pode ser em um grupo
contadores
chamado deOLTP,
gestãoedúzia
a meiapoderia estar em um grupo chamado DSS. Alguns usuários poderia ser
em ambos osdo
dependendo grupos;
que o trabalho que estão fazendo, eles vão ativar a participação no grupo apropriado.
De outros
grupos podem ser LOTE, a ser dada prioridade para o processamento do final do mês, e LOW, para
as pessoas
que acontecer de ter contas no sistema, mas não são de grande importância.
Dezoito grupos são criados por padrão quando um banco de dados é criado:
Um plano Resource Manager é de um certo tipo. O tipo mais básico (e mais comumente usada) de
plano
é aquele que aloca recursos da CPU, mas existem outros métodos de alocação de recursos. Muitos
planos pode
existem no banco de dados, mas apenas um plano está ativo a qualquer momento. Este plano se
aplica a toda
instância; todas as sessões são controladas por ele.
A seguir estão os recursos que podem ser controlados por um plano:
No exemplo de televendas, poderia haver três planos com base no uso da CPU. Um plano de dia
dar faria
prioridade ao grupo OLTP. Em momentos de pico de atividade, com o sistema funcionando à
capacidade, é possível que as sessões de usuários em outros grupos iria pendurar. À noite, um plano
plena
diferente
seria ativado que garante os empregos DSS será executado, embora talvez ainda não com a
prioridade
o grupo OLTP.
de Um plano de final de mês daria 100 por cento dos recursos para o grupo LOTE, se
exige isso.
Um plano é constituído por um número de directivas. Cada directiva atribui recursos a um
em um
determinado
nível de prioridade
grupo particular. Onze planos são configurados no momento da criação do
banco de dados:
• O INTERNAL_PLAN não é para uso normal; ele desabilita o Gerenciador de recursos.
• O DEFAULT_PLAN tem três directivas (ver Figura 20-2 ). A primeira afirma que a prioridade
nível 1, a mais alta prioridade, todas as sessões ligada ao grupo SYS_GROUP consumidor
tomar 90 por cento dos recursos da CPU. sessões OTHER_GROUPS são garantidos pelo
pode
menos
por cento,
9 eo ORA $ Autotask grupo 1 por cento.
• A DEFAULT_MAINTENANCE_PLAN (mostrado na Figura 20-2 ) aumenta a percentagem
derecursos garantidos para tarefas de manutenção e outros usuários a 25 por cento.
• O plano INTERNAL_QUIESCE tem uma finalidade específica coberto mais tarde neste
capítulo;
congelarserá
todas as sessões, exceto aquelas dos membros SYS_GROUP.
• A MIXED_WORKLOAD_PLAN (também mostrado na Figura 20-2 ) dá prioridade ao
SYS_GROUP, então o INTERACTIVE_GROUP, e então o BATCH_GROUP. De outros
planos de demonstração são DSS_PLAN e ETL_CRITICAL_PLAN.
• A ORA $ AUTOTASK_PLAN é usado pelo sistema Autotask e não pode ser ajustado.
• A ORA $ ROOT_PLAN é relevante apenas para o banco de dados recipiente multitenant.
• A ORA $ QOS_PLAN é usado pela qualidade do sistema de serviço.
EXAME TIP Os RESOURCE_LIMITS parâmetro de instância não tem nada a ver com Resource
Gerente. Ele pertence ao antigo método de controlar os recursos através de perfis de banco de dados.
Aqui é como dar usuário JOHN a capacidade de administrar Resource Manager, com o
capacidade de repassar o privilégio de outros usuários:
Esta chamada acrescenta Roopesh ao OLTP grupo, mas sem dar-lhe a capacidade de adicionar outros
usuários
o grupo. Se
a Roopesh é agora um membro de vários grupos, você deve nomear um como seu padrão
• método de CPU
• Número de sessões ativas
• Grau de paralelismo
• tempo de execução da operação
• Tempo ocioso
• Volume de dados undo
Método CPU
Continuando o exemplo de televendas, o plano de dia daria o máximo de recursos para o OLTP
grupo. Todas as outras sessões irá travar se os usuários OLTP realmente precisa fazer toda a
máquina. O único
excepção é o SYS_GROUP. Você deve sempre dar a prioridade SYS_GROUP sobre qualquer outra
coisa.
Se você, o DBA, precisa fazer algo no sistema de produção (como reconstruir um índice quebrado
Fazendo uma restauração e recuperação), você deve ser capaz de fazê-lo o mais rápido possível. O
ou
plano poderia ser semelhante
esta:
Há oito possíveis níveis de prioridade; este plano utiliza quatro deles. Todos os recursos da CPU
Umnãonívelutilizado
escorremnapara o próximo nível. Quando este plano estiver ativa, o SYS_GROUP no nível
1 pode, se assumir toda a máquina; todas as outras sessões irá travar. Mas isso não deve acontecer;
necessário,
funcionamento normal, há ciclos de CPU será tomada pelo SYS_GROUP, por isso toda a máquina
dentro
disponível no nível 2, onde os usuários OLTP pode usar tudo. Quaisquer recursos da CPU eles não
será
precisam
para baixodepara
queda
o nível 3, onde são divididos 50/50 entre o DSS e as sessões de lote. Se, após
os OLTP, DSS e usuários LOTE ter tomado o que eles precisam, alguma capacidade ainda resta, será
disponível para membros de outros grupos. É possível, nos momentos em que os usuários OLTP
estãosem
uso trabalhando
parar e CPU atingiu 100 por cento, que as sessões DSS e batch irá travar.
EXAME TIP A CPU total atribuído em cada nível não pode exceder 100 por cento. Se isso
acontecer,
área pendente
o irá falhar para validar, e o plano não serão salvas no dicionário de dados. É possível
ter um plano que aloca menos de 100 por cento em um nível, mas há pouca finalidade em fazer isto.
Tal como acontece com o plano durante o dia, se o SYS_GROUP precisa fazer algo, ele vai ter
no nível
prioridade.
2, os usuários
Mas DSS e batch são garantidos o tempo de processamento. Eles ainda não têm
tão alto umque o grupo OLTP, mas suas sessões não irá travar. O plano final do mês pode mudar esta
prioridade
mais distante.
Quando este plano está ativo, os trabalhos em lote terá prioridade sobre todos os outros, levando
máquina,
a todase necessário. Este seria aconselhável se o processamento do final do mês significa
realmente
sistema não
que
é utilizável,
o por isso é vital para fazê-lo o mais rápido possível.
DICA Se a CPU não está funcionando a utilização de 100 por cento, estes planos não terá nenhum
efeito. Eles
impactar somente
têm uma
se a capacidade da CPU não pode satisfazer as exigências sobre ele.
Uma variação do método de CPU é que o “grupo” em si pode ser um plano. É possível por este
método para configurar uma hierarquia, onde um plano de nível superior aloca recursos entre
subplanos.pode
subplanos Estesentão alocar recursos entre grupos de consumidores. Um caso em que isso pode ser
aplicável seria um provedor de serviços de aplicação. Talvez você tenha instalado um aplicativo,
como um conjunto de contabilidade, e você aluga tempo com ele para vários clientes. Cada cliente
terá a sua
grupos próprios de usuários. Seu plano de alto nível vai dividir recursos entre subplanos para cada
cliente,
talvez de acordo com a quantidade que eles estão pagando para o acesso ao serviço. Então, dentro
dessa
os clientes
divisão,
podem cada alocar recursos entre os grupos de consumidores.
EXAME TIP Cada plano deve incluir uma directiva para os OTHER_GROUPS grupo; caso
contrário, falhará,
validação o e você não pode salvar o plano da área pendente para o dicionário de dados.
Criação de um plano como o plano durante o dia que acabamos de descrever requer uma série de
através
chamadas
da API.deOprocedimento
primeiro passo é criar a área pendente.
Finalmente, validar a área pendentes e (se a validação retorna com êxito) salvar o plano para o
dicionário de dados.
Aqui está como ativar o plano:
• OLTP 50%
• DSS 25%
• LOTE 25%
Se você decidir adicionar um quarto grupo (chamemos-lhe WEB) e quer torná-lo igual em
e DSS
prioridade
casal e de
à OLTP
lote, você vai ter que mudar todas as directivas para alcançar este objectivo.
• OLTP 33%
• WEB 33%
• DSS 17%
• LOTE 17%
O método da razão permite especificar proporções. Os valores absolutos não têm nenhum
exemplo,
significado.
as proporções
Para originais poderia ter sido como segue:
• OLTP 20
• DSS 10
• LOTE 10
Agora, para adicionar o grupo WEB com uma prioridade igual a OLTP, você tem que adicionar
directiva-WEB
apenas um novo
20 e deixar os outros inalterados.
TIP Quiesce é inestimável para operações DDL que requerem um curto bloqueio objeto exclusivo,
como um
índice online reconstruir: imobilizar o banco de dados, lançar a operação, e depois unquiesce. a
reconstrução
operação continuará, e os usuários podem não ter notado que eles nunca foram bloqueados.
• MAX_IDLE_TIME
• MAX_IDLE_BLOCKER_TIME
DICA Também é possível desconectar sessões usando perfis atribuídos a usuários nomeados, o que
deve habilitar com as RESOURCE_LIMITS parâmetro de instância. No entanto, o Gerenciador de
você
Recursos
melhor é uma para isso.
ferramenta
EXAME TIP A piscina desfazer por grupo não tem nada a ver com quotas de espaços de tabelas,
que utilizador.
por são atribuídas
Você não pode sequer conceder quotas em espaços de tabela de undo.
Quando a quantidade de dados de desfazer ativa gerada por todas as sessões de um determinado
limite
grupo
de piscina,
de consumidores
ele não será
atinge
maisopossível
seu para os membros desse grupo para adicionar mais
desfazer a atual
transações ou para iniciar novas transações. Eles vão pendurar até que uma transação seja
confirmada,
espaço dentroliberando
da piscina. Enquanto isso, outros grupos podem continuar a trabalhar no restante do
undo
tablespace. Isto restringe o efeito de gerar muito desfazer a um grupo, em vez de ter ele
afetar todos os usuários. O argumento para o DBMS_RESOURCE_MANAGER.CREATE_PLAN
procedimento directiva que definirá uma piscina de desfazer é UNDO_POOL.
Exercício 20-1: Criar e implementar um plano Gestor de Recursos Não é um atalho para a
criação
um planodeResource Manager: uma única chamada de procedimento, CREATE_SIMPLE_PLAN.
Utilize de
gestão este para permitir
recursos em seu banco de dados.
3. Criar dois grupos de consumidores. É necessário criar uma área pendente em primeiro lugar.
4. Atribua os usuários a grupos e definir seu grupo de consumidores inicial.
5. Criar o plano.
6. Ative o plano.
NOTA É difícil testar o efeito de uma configuração Resource Manager, porque até que o sistema
torna-se estressado, ele não terá nenhum efeito. Isso pode significar que você não vê nenhuma
ocorrênciaevento
quantum do resmgr:
esperacpu
por meses, e então um dia todo mundo recebe-lo.
Exercício 20-2: testar e monitorar um Plano Gestor de Recursos Este exercício continua a partir
Exercício 20-1 , testando o efeito do plano.
3. Em mais dois SQL sessões * Plus, faça login como os usuários ACCT e balconista.
4. Na sessão SISTEMA, executar esta consulta para confirmar as associações de grupo de suas
sessões:
5. Na sessão SISTEMA, executar esta consulta para mostrar o uso da CPU por cada grupo até
agora:
7. Repetir a consulta do passo 5. Note-se que o grupo OLTP usou aproximadamente quatro
vezes
tanto
mais
CPU como o grupo DSS.
8. Executar esta consulta para ver o tempo de espera em sessões causadas pelo Gerenciador de
Recursos:
9. Arrumar soltando os usuários e, em seguida, retornar o banco de dados ao seu recurso padrão
Manager e configuração de CPU, reiniciando o exemplo.
Broca Two-Minute
Configurar o Database Resource Manager
• Gerente de Configuração dos Recursos com duas APIs: DBMS_RESOURCE_MANAGER e
DBMS_RESOURCE_MANAGER_PRIVS.
• Habilitar Resource Manager, definindo a instância RESOURCE_MANAGER_PLAN
parâmetro, de forma interativa ou através do Scheduler.
• Um plano é um conjunto de directivas alocação de recursos para grupos de consumidores.
• Para configurar o Gerenciador de recursos, faça o seguinte: Em primeiro lugar, criar grupos de
consumidores;
criar um plano;
segundo,
Em terceiro lugar, criar as directivas do Plano que alocam recursos para
grupos.
Acesso e criar planos de recursos
• Um plano pode limitar vários recursos: CPU, sessões ativas, o tempo de execução de instrução
SQL, o uso paralela, e desfazer espaço.
de consulta
• O plano padrão (chamado DEFAULT_PLAN) dá prioridade à SYS_GROUP e menor
prioridade ao grupo ORA $ Autotask.
• Resource Manager não parece ter qualquer efeito até que o sistema está sob stress.
Auto teste
1 . Há várias etapas envolvidas na configuração do Gestor de Recursos:
uma. Atribuir usuários a grupos de consumidores.
b. Criar grupos de consumidores.
c. Criar directivas.
d. Criar a área pendente.
e. Criar o plano.
f. Submeter a área pendente.
g. Validar a área pendente.
Qual é a ordem correta para realizar estes passos? (Escolha a melhor resposta.)
A. d, e, g, f, c, b, um
B. d, b, A, E, C, G, F
C. d, b, a, c, e, g, f
D. e, c, d, b, a, f, g
E. b, a, d, e, c, f, g
2 . Qual das seguintes afirmações estão corretas sobre os usuários e grupos de consumidores?
(Escolha tudocorretas.)
respostas
A. Um usuário pode ser um membro de apenas um grupo de consumidores.
B. Um usuário pode ser um membro de vários grupos de consumidores.
C. O SYS_GROUP é reservado para o utilizador SYS.
D. Por padrão, o grupo inicial para todos os usuários é DEFAULT_CONSUMER_GROUP.
3 . Algumas ações na API do Gestor de recursos são feitas com os procedimentos no pacote
DBMS_RESOURCE_MANAGER_PRIVS, e outros são feitos com procedimentos no
pacote DBMS_RESOURCE_MANAGER. Qual pacote é necessário para cada uma delas
ações? (Escolha a melhor resposta.)
A. Conceder o privilégio de administrar Resource Manager
B. Colocar usuários em grupos
C. Remoção de grupos de utilizadores
D. comutação grupo efetivo de uma sessão
E. Criação de grupos de consumidores
F. Configurando como mapear sessões para grupos
4 . Planos gerenciador de recursos pode usar uma série de métodos para controlar recursos.
Qual dos
seguinte são possíveis? (Escolha três respostas corretas.)
A. uso da CPU
B. uso da cota Tablespace
C. Número de sessões ativas
D. Número de sessões ociosas
E. O volume de dados de redo gerado
F. volume de dados de desfazer gerado
5 . Um plano método CPU aloca recursos em dois níveis, como segue:
Nível 1: SYS_GROUP, 50% OLTP, 50%
Nível 2: DSS, 50% LOTE, 50%
Se os únicos usuários conectados são do grupo LOTE, qual a percentagem de CPU que
usar? (Escolha a melhor resposta.)
podem
A. Eles podem usar de 12,5 por cento.
B. Eles podem usar 25 por cento.
C. Eles podem usar 50 por cento.
D. Eles podem usar 100 por cento.
E. O plano não irá validar porque ele tenta alocar 200 por cento de recursos da CPU.
6 . Você cria um plano Resource Manager limitando a piscina sessão ativa para o DSS grupo 3.
O que acontecerá se três membros do grupo está conectado e uma quarta tentativa membros
conectar? (Escolha a melhor resposta.)
A. A nova sessão não será capaz de conectar até que um desconecta sessão existentes.
B. A nova sessão será capaz de se conectar, mas irá travar imediatamente.
C. A nova sessão será capaz de se conectar, mas será capaz de executar apenas consultas,
nãoafirmações.
DML
D. Quaisquer declarações as novas questões de sessão pode travar, dependendo de outra
atividade.
7 . Se o plano Resource Manager ativa especifica que as sessões pertencentes a um
determinado
pode ter apenas
grupo quatro servidores de execução paralela, o que acontecerá se uma sessão
nesse grupo
emite uma declaração que pede seis servidores de execução paralela? (Escolha a melhor
resposta.)
A. A declaração não será executado.
B. A declaração será executado com quatro servidores paralelos.
C. Ele vai depender da configuração do parâmetro instância PARALLEL_MIN_PERCENT.
D. Ela dependerá da configuração do exemplo PARALLEL_AUTOMATIC_TUNING
parâmetro.
8 . Ao usar o Gerenciador de recursos para definir uma piscina desfazer, o que acontece?
(Escolha
responda.)
o melhor
A. Se um usuário excede sua cota na tabela de undo, sua sessão irá travar.
B. Se um usuário excede sua cota na tabela de undo, a declaração corrida vai ser rolada
para trás, mas o resto da declaração permanecerá intacto.
C. Se um grupo preenche a sua piscina desfazer, todas as operações do grupo irá travar até
quecompromete,
uma sessão rola para trás, ou é encerrado.
D. O efeito depende se retenção de garantia está habilitado para o undo
tablespace.
9 . Como você pode determinar qual é o plano Resource Manager ativo? (Escolha duas
respostas.)
A. Use parâmetro show RESOURCE_LIMIT.
B. Use parâmetro show RESOURCE_MANAGER_PLAN.
C. Pesquisa da vista DBA_RSRC_PLANS.
D. Pesquisa a vista V $ RSRC_PLAN.
10 . Você percebe que as sessões foram esperando na resmgr: cpu quantum esperar evento. o que
isso pode indicar? (Escolha a melhor resposta.)
A. Que nenhum plano Resource Manager foi habilitado
B. Que o sistema atingiu a utilização da CPU de 100 por cento
C. Que o número de sessões atingiu o limite imposto pelo parâmetro SESSIONS
D. Que o cpu_count foi excedido
Respostas de auto-teste
1. C . Esta é a sequência correcta, apesar d, b, e, c, g, f, a, também irá funcionar.
A , B , D , e E são incorrectas. Nenhuma dessas seqüências vai funcionar porque o
área pendente
deve estar ativo quando se trabalha com grupos e planos e não pode ser validada após
ele submetido.
foi tem
2. B . Um utilizador pode ser um membro de diversos grupos, embora apenas uma adesão
a qualquer
é activamomento.
em
A , C , e D estão incorrectos. A está incorreta porque pode haver uma relação muitos-
para-muitos
relação entre os utilizadores e os grupos. C está incorreta porque é possível colocar outros
usuários
no grupo SYS. D está incorreta porque SYS e SYSTEM são, por padrão, na
grupo SYS_GROUP.
3. A , B , e C : DBMS_RESOURCE_MANAGER_PRIVS; D , E , e F :
DBMS_RESOURCE_MANAGER. O pacote DBMS_RESOURCE_MANAGER_PRIVS
trabalha com a segurança, enquanto o pacote DBMS_RESOURCE_MANAGER administra
todo o resto.
Todas as outras possibilidades estão incorretas.
4. A , C , e M . O método ênfase controla o uso da CPU. Sessões ativas e o volume
de desfazer os dados são dois dos métodos absolutos.
B , D , e E são incorrectas. Uso de espaço de tabela pode ser limitada por quotas, e não
Gerente.
por recurso
sessões ociosas podem ser cronometrado para fora, mas não em número limitado.
volumepossível.
limite de Refazer não é um
5. D . Se não houver outras sessões estão conectados, todos os recursos da CPU estará
sessões conectados.
disponível para o
A , B , C , e E são incorrectas. A , B , e C são incorrecta porque a interpretar mal
“Trickle-down” natureza da alocação de recursos. E é incorrecta porque ele não tem em
consideração
CPU é alocadaque
em cada nível de prioridade, não entre níveis de prioridade.
6. D . O pool de sessão não limita o número de sessões, apenas o número de ativo
sessões.
A , B , e C são incorrectas. A está incorreta porque ele descreve o efeito de limites de
sessõesnão Resource Manager. B está incorreta porque este resultado poderia ocorrer
em perfis,
apenas se
piscina o ativa estavam cheios. C está incorreta porque Resource Manager não faz
sessão
distinção
entre os tipos de instruções SQL.
7. B . O limite substituirá o pedido.
A , C , e D estão incorrectos. A está incorreta porque a intenção do Gestor de recursos
paranão é
bloquear declarações, mas para controlá-los. C e D são incorrecta porque eles referem-
se a
parâmetros de instância que impulsionam o otimizador, não Resource Manager.
8. C . Desfazer piscinas referem-se a grupos inteiros, e não a usuários individuais ou
a suasessões.
piscina,Setodas
um as
grupo
sessões
preenche
que fazem parte do grupo irá travar até que um emite um
COMMIT ou um
ROLLBACK.
A , B , e D são incorrectas. Quotas de espaços de tabelas são relevantes para não
desfazer
Gerente em geral,Retenção
de Recursos. nem de garantia não se aplica qualquer um.
9. B e C . O plano ativo é definido com o parâmetro RESOURCE_MANAGER_PLAN e
exibidas na vista de desempenho dinâmico V $ RSRC_PLAN.
A e D são incorrectas. A está incorreta porque o parâmetro RESOURCE_LIMIT é
relevantes para os perfis, não para Resource Manager. D é incorrecta porque a
DBA_RSRC_PLANS vista dicionário de dados mostra a configuração do Gestor de
não seu estado atual.
Recursos,
10. B . Uma vez que um sistema atinge a utilização da CPU de 100 por cento, um plano de
CPUaentrará
começar limitarem vigor
o uso de esessões.
A , C , e D estão incorrectos. A está incorreta porque se nenhum plano está activada,
nãosobre
espera podeeste
haver
evento. C e D são incorrecta porque, embora estes parâmetros do controlo
o uso de recursos, eles não fazem isso através do plano de Gerenciador de recursos.
CAPÍTULO 21
o Scheduler
Objetivos do exame
• 062.14.1 usar o Oracle Scheduler para simplificar as tarefas de gerenciamento
• 062.14.2 Chains Use trabalho para executar uma série de tarefas relacionadas
• 062.14.3 Use Scheduler Jobs em sistemas remotos
• 062.14.4 Uso avançado Scheduler recursos para Priorizar Jobs
Este capítulo introduz o Scheduler, que é uma facilidade para automatizar a execução dos trabalhos.
estes postos
podem ser procedimentos
de trabalho que são executados dentro do banco de dados, ou podem ser os comandos
do sistema
scripts. Elesoperativo
podem ser
e executados localmente ou em máquinas remotas e bases de dados. Eles
podem ser executados
programação, decom
de acordo acordo com um de um trabalho anterior, ou em resposta a eventos. O
os resultados
Schedulercom
integrado é o Gerenciador de recursos.
A Arquitetura Scheduler
O dicionário de dados inclui uma tabela que é o ponto de armazenamento para todos os trabalhos
Scheduler.
tabela através
Você
dapode
vista consultar
DBA_SCHEDULER_JOBS.
este O processo de fundo fila de trabalho do
coordenador
(o processo CJQ0) monitora esta tabela e, quando necessário, inicia os processos de fila de trabalho
(o J nnn para executar os trabalhos. O processo CJQ0 é iniciado automaticamente se houver
processos)
algum definido
trabalhos do Agendador
e de ativos. Os J nnn processos são lançados sob demanda, embora o número
máximo pelo
limitada é parâmetro job_queue_processes exemplo, que pode ter qualquer valor de 0 a
1000 (o padrão). Se definido como zero, o Scheduler não funcionará.
O coordenador fila de trabalhos pega empregos da tabela de fila de trabalhos e os passa para a
fila de para
processos trabalho
execução. Ele também lança e finaliza os processos de fila de trabalhos na demanda.
os processos em execução, consultar a visão V $ PROCESS.
Ver
Esta consulta mostra que o coordenador fila de trabalhos e dois processos de fila de trabalho
Unixestão em execução.
exemplo, Em um
os processos serão os processos do sistema operativo separadas (como neste
consulta);do
instância emWindows,
um eles são executados como threads dentro do processo ORACLE.EXE.
EXAME TIP O parâmetro exemplo job_queue_processes deve ser maior que zero ou o
Scheduler não pode ser executado. Ele é 1000 por padrão. O coordenador fila de trabalhos será
sempre correndo,
nenhum definidosse houverempregos.
e ativos
Jobs definidos como procedimentos executados dentro do banco de dados. Jobs também pode ser
Comandos
definidaoucomo
shellsistema
scripts operacional
de; estes irão executar como tarefas do sistema operacional externas. O
fatoremprego
um desencadeante
pode serpara
um tempo ou um evento. empregos baseados no tempo pode executar uma ou
várias vezes
empregos de acordo
baseados em com um cronograma.
eventos executar quando surgem determinadas condições. Há alguns eventos
pré-configurados,
usar eventos definidos
ou você
pelopode
usuário. Jobs pode ser conectado em uma cadeia usando regras simples
para a ramificação
dependendo o sucesso ou fracasso de um trabalho.
Um recurso avançado do Scheduler é associá-lo com o Gestor de Recursos. Pode ser que
determinados postos de trabalho deve ser executado com certas prioridades, e isto pode ser
conseguido
grupo de consumidores
ligando um Resource
trabalho para
Manager
um via uma classe trabalho. Também é possível usar o
Scheduler
um para ativar
plano Resource Manager, ao invés de ter de ativar um plano manualmente, alterando o
parâmetro de instância RESOURCE_MANAGER_PLAN ou usando o
DBMS_RESOURCE_MANAGER.SWITCH_PLAN chamada de procedimento.
A interface de programação de aplicações (API) para administrar o Scheduler é o
pacote DBMS_SCHEDULER. Além disso, Enterprise Manager fornece uma interface gráfica.
Scheduler Objects
O objeto mais básico no ambiente Scheduler é um trabalho. Um trabalho pode ser completamente
auto-suficiente,
definir a ação a ser tomada e quando a tomá-lo. Em uma configuração mais avançada, o trabalho é
parte da estrutura que consiste de uma série de objectos de vários tipos Scheduler.
apenas
Empregos
Um trabalho especifica o que fazer e quando fazê-lo. “O que” pode ser um bloco PL anônima / SQL
(que
poderia consistir em apenas uma única instrução SQL), a / procedimento armazenado SQL PL (que
poderia invocararmazenado
procedimento um Java ou um procedimento externo), ou qualquer arquivo executável
armazenado
(Seja um binário
no sistema
executável
de arquivos
ou um script
do servidor
shell). Uma capacidade particularmente forte (para além do
âmbito
o OracledoCertified Professional [OCP] currículo) é o trabalho remoto externo, que é executado em
um
máquina separada. O “quando” especifica o timestamp em que para lançar o trabalho e uma
intervalo para corridas futuras ou o fato gerador.
repetição
Você tem várias opções ao criar um trabalho, como mostra de olhar para o
procedimento DBMS_SCHEDULER.CREATE_JOB. Este procedimento está sobrecarregado; ele
tem nada
seis formas.
menos
A Figura
que 21-1 mostra parte da saída a partir de um DESCREVER do
embalagem, com as duas primeiras formas de CREATE_JOB.
DBMS_SCHEDULER
Figura 21-1 A especificação do procedimento CREATE_JOB
horários
A programação é uma especificação para quando e com que frequência a tarefa deve ser executada.
O princípio
programação
com básico
é paradepuxar
o procedimento um a parte “quando” fora de um trabalho, associando-se assim com trabalhos
DBMS_SCHEDULER.CREATE_SCHEDULE.
diferentes. Ele é criado
Os padrões START_DATE até a data e hora atual. Este é o momento que todos os trabalhos
comassociados
este cronograma será executado. O REPEAT_INTERVAL especifica com que frequência o
trabalho
até a END_DATE.
deve ser executado
Horários sem END_DATE especificado será executado para sempre.
O argumento REPEAT_INTERVAL pode tomar uma grande variedade de expressões de
consistem
calendário.
em até
Estes
três elementos: uma frequência, um intervalo (em falta para 1), e, possivelmente,
especificadores. A frequência pode ser um dos seguintes valores:
várias
• ANUAL
• POR MÊS
• SEMANAL
• DIARIAMENTE
• HOURLY
• minuciosamente
• SEGUNDO LUGAR
• POR MÊS
• byweekno
• BYYEARDAY
• BYMONTHDAY
• BYHOUR
• BYMINUTE
• BYSECOND
Usando estes elementos de uma REPEAT_INTERVAL torna possível a criação de horários que
satisfazer
deveriam
qualquer exigência. Por exemplo, o seguinte irá executar o trabalho a cada 12 horas, a
partir da
DATA DE INÍCIO:
O próximo exemplo será executado o trabalho no segundo dia de cada um dos nomeados três meses,
começando
no início docomo
dia como os recursos permitirem:
A Job Auto-Contido
Para criar e programar um trabalho com uma chamada de procedimento, utilize o procedimento
CREATE_JOB.
exemplo, Paraserá criar um trabalho permitiu que chama o procedimento
o seguinte
HR.REFRESH_SUMMARIES em 11 PM . às segundas-feiras e sextas-feiras, a partir de hoje:
Exercício 21-1: criar um trabalho com a API Scheduler Use o pacote DBMS_SCHEDULER para
criar um trabalho e confirmar que ele está trabalhando.
1. Ligue para o seu banco de dados como usuário SYSTEM usando SQL * Plus.
2. Criar uma tabela para armazenar vezes e definir o formato de data para mostrar a data e hora.
4. Consulta tabela de trabalho algumas vezes para ver que o trabalho está programado e
executado.
Consultar a tabela de tempos para demonstrar que as inserções estão a ocorrer.
5. Desative o trabalho.
6. Volte a executar as consultas a partir do passo 4 para confirmar que o trabalho está
desativado
ocorrendo.
e que não mais inserções são
7. Solte o trabalho.
Estes comandos criar e ativar uma cadeia simples de três passos. A execução, quer do
segundo ou terceiro passo é dependente do resultado do primeiro passo. A sintaxe para a criação de
permite o uso de palavras-chave como prosperou e fracassou, que irá testar o resultado do
regras
outro passo. Neste exemplo, assume-se que os programas já foram criados com
procedimento CREATE_PROGRAM chama.
Para iniciar a cadeia, você deve criar um trabalho. Isto pode ser baseado em uma agenda ou um
trabalho
evento.
seráeste
executado a cadeia na última terça-feira de meses alternados:
Use Scheduler Jobs em sistemas remotos
É possível programar e executar trabalhos em sistemas remotos. Estes trabalhos podem ser postos de
trabalhoum
chamar de banco
procedimento
de dadosPL
(tipicamente
/ SQL) ou empregos externos (tipicamente roteiros shell). A definição
de trabalhobanco
chamando existedenadados, mas o script procedimento ou shell devem residir no local remoto.
Cada máquina na qual um trabalho remoto é executar requer um agente Scheduler. Instalar este
o CD agente
Oraclea partir
Client,
deselecionando a opção Instalação personalizada. O processo agente irá, por
padrão,
porta escutar
1500, embora qualquer porta pode ser seleccionado no momento da instalação. O protocolo
éentre
Hypertext
o agenteTransfer
e base Protocol
de dados (HTTP). A base de dados e ouvinte já será configurado para
aceitar HTTP se banco de dados Express foi configurado. Para confirmar a porta de escuta e
não foi configurado, utilizar procedimentos no pacote DBMS_XDB_CONFIG.
colocou-se
Uma vez que as comunicações foram estabelecidas entre o banco de dados e agente, criar postos
o argumento
de trabalho
DESTINATION_NAME
que especificam do procedimento CREATE_JOB, dando o nome de rede
a máquina remota.
• classes de trabalho Jobs pode ser atribuída uma classe, e uma classe pode ser ligado a um
gerenciador
grupo de consumidores.
de recursos Classes também controlar o nível de registo para os seus empregos.
• Grupos do Consumidor Recursos grupos de consumidores Manager são restrita nos recursos
que
pode usar, sendo limitado em, por exemplo, a unidade de processamento central (CPU) ou o
número de
Sessões ativas.
• Resource planeja um plano Resource Manager define como repartir os recursos para grupos.
Apenas um plano está ativo na instância a qualquer momento.
• o Windows Uma janela é um período definido (provavelmente recorrentes) de tempo durante
o qual
trabalhos
certa serão executados e um determinado plano estará ativo.
• grupos de janela É possível combinar janelas em grupos de janelas para facilitar a
administração.
Priorizando trabalhos dentro de uma janela é feito em dois níveis. Dentro de uma classe, os
trabalhos
diferentes podem ser
prioridades pordadas
parte do Scheduler, mas porque todos os postos de trabalho em uma classe
estão no mesmo
Resource Managergrupo
não de
fará
consumidores,
distinção entre eles. Mas se postos de trabalho em diferentes classes são
dentro da mesma janela, Resource Manager irá atribuir recursos para cada classe de acordo com o
programadas
grupos de consumidores para essa classe.
Se houver vários empregos no uma classe, priorizá-los com mais chamadas SET_ATTRIBUTE.
Se vários trabalhos na mesma classe estão programadas para serem executadas ao mesmo tempo,
determina
a prioridade
a ordem
da tarefa
em que os postos de trabalho a partir dessa classe são apanhados para execução
pelo coordenador
processo. Pode sertrabalho
um valor de 1 a 5, sendo 1 o primeiro a ser pego para execução do trabalho. o
padrão para todos os trabalhos é 3. Isso pode ser crítico se, por exemplo, grupo de consumidores da
classe tem
piscina umaativa que é menor do que o número de postos de trabalho; esses trabalhos com a
sessão
maior vontade
executado primeiro,
prioridade
enquanto os outros estão na fila.
TIP EXAME Não é possível atribuir prioridades ao criar empregos com o CREATE_JOB
procedimentos; você deve usar o procedimento SET_ATTRIBUTE da API posteriormente.
Os níveis de log também são controlados por classe do trabalho. Há três opções:
usando o Windows
Criar janelas com o procedimento CREATE_WINDOW. Aqui está um exemplo:
Esta janela ativa um plano de Gestor de Recursos chamado NIGHT_PLAN. Isso pode ser um
plano que aos grupos de consumidores DSS sobre o grupo OLTP. Ele abre acordo com o
dá prioridade
WEEKDAY_NIGHTS, que podem ser de segunda a sexta às 20:00. A janela permanecerá
cronograma
abrir durante quatro horas; o argumento DURAÇÃO aceita um INTERVAL DAY TO valor segundo,
faz o REPEAT_INTERVAL para uma programação. Definir a prioridade para LOW significa que se
como
esta janela
sobreposições com outra janela, a outra janela será autorizado a impor o seu Gestor de Recursos
plano. Este seria o caso se você criou uma janela diferente para o processamento de fim de mês e
o mês fim-de-passou a ser em um dia útil. Você poderia dar a janela de alta final do mês
prioridade para garantir que o plano de Gestor de Recursos do fim-de-mês, o que poderia dar
prioridade
grupo LOTE,à se entrar em vigor.
EXAME TIP Mesmo se um trabalho tem prioridade 1 dentro de sua classe, ele ainda pode ser
executado apenas
prioridade 5 em outra
depois
classe-se
de um atrabalho
classe do
com
segundo trabalho está em um grupo de consumidores
com um recurso
prioridade maior
Manager.
Se duas janelas com igual sobreposição prioridade, a janela com a duração mais longa irá abrir
permanecer
(ou aberto). Se ambas as janelas têm o mesmo tempo para ser executado, a janela aberta no
momento permanecerá
aberto.
CUIDADO Oracle Corporation informa que você deve evitar o uso de janelas sobrepostas.
Exercício 21-2: Use Scheduler Windows para controlar o Gerenciador de Recursos Neste
exercício,
usar o Scheduler
você vai
para automatizar a ativação do MY_PLAN plano Resource Manager criado em
20-1 exercício .
1. Conecte-se ao seu banco de dados como SYSTEM usuário com SQL * Plus.
2. Execute esta consulta para determinar se uma janela é aberta no momento:
3. Execute esta consulta para determinar qual plano Resource Manager está ativa:
4. plano Temporariamente claro o que quer Resource Manager pode ser ativo no momento.
Isto irá abrir a janela de agora em diante todos os dias às 6 AM por 12 horas.
7. Forçar o banco de dados para abrir a nova janela imediatamente.
Esta chamada de procedimento irá abrir a janela imediatamente e ativar seu plano, mas
apenas por cinco
minutos.
8. Execute novamente as consultas de etapas 2 e 3 para confirmar que a janela durante o dia é
aberto ea MY_PLAN está ativo.
plano
9. Depois de cinco minutos, repita o passo 8. Você vai ver que a janela foi fechada e que
nenhum
ativo.plano
Esta situação
é vai persistir até a próxima abertura programada de uma janela.
10. Arrumar.
Broca Two-Minute
Usar o Oracle Scheduler para simplificar as tarefas de gerenciamento
• Um trabalho pode especificar o que fazer e quando fazê-lo, ou pode apontar para um
programa ou uma
• Um trabalho (ou agenda.
seu programa) pode ser um bloco PL anônima / SQL, um procedimento
armazenado
comando do
ousistema
um linkoperacional
externo ou script.
• Os trabalhos são lançada pelo processo de fundo CJQ0 e executado por J nnn processos.
• J nnn processos são lançados sob demanda, até o limite estabelecido pelas
job_queue_processes
parâmetro. Definir como zero desativa o sistema de trabalho.
responda.)
A. Os job_queue_processes parâmetros da instância deve ser definido.
B. plano de Gerente Um recurso deve ser ativado.
C. Um cronograma deve ter sido criado.
D. Todas as anteriores.
E. Nenhuma das anteriores.
3 . Um trabalho Scheduler pode ser de vários tipos. (Escolha todos os que se aplicam.)
A. Um anónimo PL / SQL bloco
B. Um arquivo executável do sistema operacional
C. Uma PL / SQL procedimento armazenado
D. A Java procedimento armazenado
E. Um comando do sistema operacional
F. Um script shell sistema operacional (Unix) ou arquivo de lote (Windows)
4 . Como pode empregos melhor ser encadeados? (Escolha a melhor resposta.)
A. Coloque-os na mesma classe e usar prioridades para controlar a ordem de execução.
B. Criar-los como programas, ligados em uma cadeia.
C. atribuir-lhes diferentes horários, cronometrado para começar consecutivamente.
D. Execute-os dentro de uma janela, dando-lhes as prioridades da janela.
5 . Qual processo executa um trabalho de banco de dados remoto? (Escolha a melhor resposta.)
A. Um processo de fila de trabalho na máquina originário
B. Um processo de fila de trabalhos na máquina de destino
C. O Agente Scheduler na máquina de destino
D. agente O Enterprise Manager na máquina de destino
6 . Você criar um trabalho com a sintaxe
e descobrir que ele não está sendo executado quando esperado. O que poderia ser uma razão
para isso?
melhor resposta.)
(Escolha o
A. A programação está associada a uma janela, o que não foi aberto.
B. O trabalho não foi ativado.
C. A classe é parte de um grupo de consumidores Resource Manager com baixa prioridade.
D. As permissões no trabalho não estão corretas.
7 . Quais são os possíveis níveis de prioridade de um trabalho dentro de uma classe? (Escolha a
melhor resposta.)
A. 1-5.
B. 1 a 999.
C. alto ou baixo.
D. Depende do plano de Gestor de Recursos em vigor.
8 . Você quer um trabalho para ser executado a cada 30 minutos. Qual das seguintes
possibilidades
argumento REPEAT_INTERVAL
para o estão corretas sintaticamente e irá alcançar este resultado?
(Escolha três respostas.)
A. 'freq = minuciosamente; intervalo = 30'
B. 'freq = hora; intervalo = 1/2'
C. '0 00:30:00'
D. 'freq = minuciosamente; byminute = 30'
E. 'freq = byminute; intervalo = 30'
9 . Você cria uma classe trabalho, e você definir o argumento logging_level para
LOGGING_RUNS.
Qual será o resultado? (Escolha a melhor resposta.)
A. Haverá uma entrada de registro para cada execução de cada trabalho na classe, mas
nenhuma
se o trabalho
informação
foi bem
sobre
sucedida.
B. Haverá uma entrada de registro para cada execução de cada trabalho na classe e
informações
o trabalhosobre
foi bem
se sucedida.
C. Haverá uma entrada de registro único para a classe sempre que ele é executado.
D. Você não pode definir o registo por classes, apenas por trabalho.
Respostas de auto-teste
1. B . Os trabalhos são executados por processos de fila de trabalho.
A , C , e D estão incorrectos. O coordenador da fila de tarefas não executa trabalhos; ele
atribui-losde fila de tarefas. Estes são processos efêmeras, e não os processos de fundo
aos processos
que funcionam e eles não são processos do servidor.
continuamente,
2. E . A Agenda estará disponível por padrão, sem etapas de pré-configuração necessários.
A , B , C , e D estão incorrectos. A está incorreta porque as job_queue_processes
padrões de parâmetros exemplo a 1000; portanto, não precisa ser definido. B e C são
incorreto porque Resource Manager não é necessário, e nem são horários. Portanto, D
está incorreta também.
3. A , B , C , D , E , e F . O JOB_TYPE pode ser PLSQL_BLOCK,
STORED_PROCEDURE (que pode ser PL / SQL ou Java), executável (que inclui
arquivos e comandos do sistema operacional executável) ou EXTERNAL_SCRIPT (seja um
shell script
SQL * Plusou
script).
um
Todas as respostas estão corretas.
DBA2
Estas categorias de falhas estão na ordem de menos grave e mais fácil de recuperar-se de que o
gravemais
e mais difícil de recuperar. Especificamente, as falhas de declaração são os mais fáceis de se
recuperar
uma vez que
de são quase sempre gerenciados pelo usuário: você reescrever a instrução SELECT ou
INSERIR
não gerar um
paraerro
quedeelesintaxe.
faz Acidentalmente cair uma tabela importante pode ser recuperado pelo
utilizador ou
pelo administrador de banco de dados, dependendo se a tabela eliminada ainda está na lixeira ou
se o DBA tem dado os privilégios de usuário para usar vários recursos de flashback. A recuperação
rede, instância ou mídia falha exigirá acções diferentes, a escolha de qual dependerá
de
na importância e gravidade de quaisquer dados perdidos.
Sua estratégia de backup e recuperação será necessário ter em conta todas estas falhas, embora
algumas dessas falhas são mais fáceis de recuperar do que outros. Por exemplo, uma falha da
instância
por causapode
de umaser queda de energia. A recuperação de transações confirmadas é relativamente
indolor e desde que seus arquivos de log de redo on-line estão intactos e multiplexado.
automática,
A Oracle Backup and Recovery Solutions
Seu objetivo de tempo de recuperação (RTO) é o alvo no qual uma operação de recuperação deve ser
preenchido
conhecer o seu
paracliente ou acordo de nível de serviço do cliente (SLA). Várias ferramentas da Oracle
etecnologias serão aplicadas dependendo da RTO:
• dias ou horas Recovery Manager (RMAN) e, opcionalmente, Oracle Secure Backup, pode
recuperar a sua base de dados em dias ou horas, se toda a base de dados é perdido por causa
de desastres
ou falhas de naturais
disco.
• horas ou minutos Várias tecnologias de flashback, seja iniciado pelo usuário ou DBA
iniciado,
pode recuperar objetos de banco de dados normalmente enquanto o banco de dados ainda está
disponível
Embora para outros
o banco usuários.
de dados precisa ser temporariamente desligado, usando um banco de dados
de flashback
DBA pode reverter
do todo o banco de dados para um ponto no tempo no início do dia ou
mesmo semanas
dependendo do armazenamento
atrás disponível na Área de Recuperação Rápida e os pontos de
restauração
• minutos definidas. Se o banco de dados devem estar disponíveis de forma contínua com
ou segundos
períodos
mais dodeque
inatividade
alguns minutos,
não as soluções Oracle, como Data Guard ou cluster Real
Application
(RAC) pode falhar ao longo de um banco de dados de cópia de segurança ou uma execução
alternativa exemplo com mínima ou
nenhuma intervenção do DBA.
• análise de Recuperação Independentemente do tipo de falha ou RTO, o Oracle Data Recover
Advisor facilita para determinar rapidamente o tipo de falha eo caminho mais rápido para se
a partir de um tipo específico de falha.
recuperar
Recovery Manager
O Recovery Manager é a principal ferramenta que você usa para fazer backup, restaurar e recuperar
objetos
o de tabela
nível de banco (novo
de para Oracle Database 12 c ) para o arquivo de dados, tabela, e, claro, banco
de dados
nível. RMAN tem muitos usos fora de backup e recuperação, incluindo a clonagem ou a duplicação
de um de dados para outro local.
banco
Um componente chave do RMAN é um local especial para objetos de backup e recuperação
Áreachamado
de Recuperação
Rápido (FRA). Embora esta área é idealmente um grupo de discos no ASM, ele
tambémoperacional
sistema pode ser localizado
do sistema
emde
umarquivos (OS). Independentemente da localização, é um lugar
centralizado
objetos para todas backup
de recuperação. O FRAeé gerido com base no tamanho e seus objetivos de recuperação, se
isso ébase na janela de recuperação ou sobre o número de backups que você precisa para manter.
com
Usando um
opcional, masFRA
é considerada
está a melhor prática.
System Global Area (SGA) para ser destruído, tudo isso sem qualquer tentativa de liberar buffers
alterados em os arquivos de dados ou para reverter as transações em voo. Em princípio, recuperação
o cache para
de instância
nada mais doé que usando o conteúdo dos arquivos de log on-line para reconstruir o cache de buffer
do banco
estado emdeque
dados
estava
paraantes
o do acidente. Isto irá reproduzir todas as alterações extraídos dos arquivos
de log
que se de
referem
redo on-line
a blocos que não tinham sido gravados no disco no momento do acidente. Uma vez
que isso de
o banco tenha sidopode
dados feito,
ser aberto. Esta fase de recuperação, conhecido como o rolo para a frente ,
retoma todaspara
-Mudanças as alterações
blocos de dados e mudanças para desfazer blocos-para ambos comprometidos e não
transações. Cada registro de redo tem o mínimo de informações necessárias para reconstruir uma
comprometidos
o endereço do bloco e os novos valores. Durante um rolo para a frente, cada refazer registro é lido, o
mudança:
bloco apropriado é carregado a partir dos arquivos de dados para o tampão de cache do banco de
dados, e aEm
aplicada. mudança
seguida,é o bloco é escrito de volta para o disco.
Uma vez que a frente do rolo é completa, é como se o acidente nunca tivesse ocorrido. Mas
haverá
nesse
transações
ponto, não confirmadas no banco de dados; estes devem ser revertidas, e Oracle irá fazer
que automaticamente na fase de reversão de recuperação de instância. No entanto, o que acontece
após a de dados foi aberto para uso. Se um usuário se conecta e atinge alguns dados que precisa ser
banco
revertida
e ainda assim não foi, este não é um problema; a fase de avanço terá povoaram o undo
segmento que estava protegendo a transação não confirmada, de modo que o servidor pode reverter a
mudançanormal
maneira no para ler consistência.
recuperação de instância é automático e inevitável, assim como você chamá-lo? Emitindo um
comando de inicialização. Ao iniciar um exemplo, após a montagem do controlfile e antes de abrir o
banco de dados, o processo Monitor do Sistema (SMON) verifica os cabeçalhos de todos os arquivos
de dados
refazer e on-line
arquivos dede arquivos
log. Neste ponto, se não tivesse havido uma falha da instância, é evidente porque
o arquivo são todos fora de sincronia. Então, SMON entra na rotina de recuperação de instância eo
cabeçalhos
banco de
aberto somente
dados após
é a fase de roll-forward foi concluída.
Ajustando o processo de recuperação de exemplo pode (teoricamente) ser realizado por ajuste do
parâmetro de instância RECOVERY_PARALLELISM para especificar o número de processos que
participar na operação de recuperação de exemplo. A definição dessa explicitamente a 0 ou 1 irá
irão
desativar paralelo
recuperação. No entanto, do lançamento 10.1, deixando este parâmetro sobre o padrão permitirá que
a Oracle
lançar qualquer número de processos são adequados. Esse número real usado é escrito para o
log de alerta. Este é um trecho de um log de alerta após um comando SHUTDOWN ABORT:
DICA Você nunca tem nada a perder emitindo um comando de inicialização. Depois de qualquer
tipo de
Uma startup
acidente,
e vertente
até onde ele fica. Pode ficar todo o caminho.
Agora deve ser evidente que há sempre informações suficientes no fluxo de logs refazer a
reconstruir todo o trabalho feito até o ponto em que o acidente ocorreu e, além disso, que este
inclui reconstruir as informações de desfazer necessária para reverter transações que estavam em
curso
o momento
no do acidente. Mas para a prova final, considere o seguinte cenário.
Usuário JOHN iniciou uma transação. Ele actualiza uma linha de uma tabela com alguns novos
e seuvalores,
processo de servidor tenha copiado os valores antigos para um segmento de desfazer. Mas
antes que
feito, estas alterações
o processo foram
do servidor escreveu as alterações no buffer de log. Roopesh usuário também
iniciou umNem se comprometeu; nada foi gravado no disco. Se a instância caiu agora,
transação.
não haveria nenhum registro que seja de qualquer transação, nem mesmo nos redo logs. Então, nem
transação seria recuperado, mas isso não é um problema. Nem foi comprometida, então eles devem
não ser recuperado; trabalho não confirmadas não deve nunca ser salvo.
Então o usuário JOHN compromete sua transação. Isso desencadeia LGWR para liberar o buffer
de log
refazer para o on-line
os arquivos de log, o que significa que as alterações tanto na mesa e os segmentos de
desfazer tanto
transação e transação
para JOHNde Roopesh
de estão agora nos arquivos de log redo, bem como um relatório
para a transação de John. Somente quando a gravação foi concluída é a mensagem “completa
cometer
voltou ao processo de usuário de John. Mas ainda não há nada nos arquivos de dados. Se a instância
cometer”
falhar neste
ponto, a fase de avanço irá reconstruir ambas as transações, mas quando toda a refazer tem sido
processado, não haverá ser cometer registro para atualização do Roopesh; que sinaliza SMON para
mudança de Roopesh mas deixar João no lugar.
reverter
Mas o que se DBWR tem escrito alguns blocos para o disco antes do acidente? Pode ser que
outroJOHN
usuário)
(ou foi continuamente requerying seus dados, mas que Roopesh tinha feito sua
mudar e não olhou para os dados novamente. DBW n , portanto, decidir escrever alterações de
descompromissada
Roopesh
para o disco de preferência a João; DBW n será sempre tendem a escrever blocos inativos em vez de
blocos. Então, agora, os arquivos de dados estão armazenando transação não confirmada de Roopesh
ativo
mas faltando JOHN
comprometidos transação.
de Isso é tão ruim a corrupção como você pode ter. Mas pensar sobre isso. Se
a instância
trava agora um corte de energia, talvez, ou um shutdown abort-o rolo para a frente ainda será capaz
para resolver a confusão. Sempre haverá informações suficientes no fluxo de redo para reconstruir
mudanças cometido; isso é óbvio, porque a cometer não está concluído até que a gravação é feita.
porque LGWR libera todas as alterações em todos os blocos para os arquivos de log, também haverá
Mas
informações
para reconstruir
suficientes
o segmento desfazer necessária para reverter transação não confirmada de Roopesh.
Para resumir, porque LGWR escreve sempre à frente de DBW n e porque escreve em tempo real
em cometer, sempre haverá informação suficiente no fluxo de redo para reconstruir qualquer
comprometida
mudanças que não tinham sido escritos para os arquivos de dados e reverter as alterações não
confirmadas
foi escrito paraqueostiveram
arquivos de dados. Este mecanismo de recuperação de exemplo de refazer e
reversão torna impossível de corromper um banco de dados Oracle-contanto que não houve nenhum
absolutamente
dano
no logfísico
de redo.
EXAME DICA Pode um shutdown abort corromper o banco de dados? Absolutamente não! É
corromper o banco de dados. O mecanismo de recuperação instância irá sempre reparar quaisquer
impossível
danos, desde
arquivos queon-line
de log o estão disponíveis.
O Mecanismo Checkpointing
A posição do ponto de verificação (o ponto no fluxo de refazer a partir da qual a recuperação
exemplo
após um acidente)
deve começar
é avançada automaticamente pelo DBW n . Este processo é conhecido como
incrementais
checkpointing . Além disso, pode haver pontos de verificação completos e parciais pontos de
verificação.
Um ponto de verificação incrementais faz parte da atividade de banco de dados normal. Os
DBWblocos
existem n processos decidir
suficientes no cache que foram actualizadas (estes são conhecidos como buffers sujos
que
e é tempo
)baseado para escrever
em quanto algunsa deles
tempo atrás, parafoi
alteração o disco.
feita eOcomo
algoritmo
ativo para selecionar
o buffer que mudou
é. Em geral, buffers
um tampão
para escrever é
escrita somente se ele foi alterado (não há nenhum ponto em escrever um tampão que não tenha sido
será
alterado)
idle e nenhum ponto em escrever um buffer se ele está continuamente a ser utilizado). Nunca
(não há
se esqueça entre
correlação de quea cometer
não há mudanças e escrita dos blocos para disco e que DBW n escreve apenas o
número mínimo de blocos necessários.
Um ponto de verificação completa ocorre quando todos os buffers sujos são gravados no disco.
ser 100.000
Em funcionamento
buffers sujos
normal,
no cache,
podemas o DBW n iria escrever apenas algumas centenas deles para o
checkpoint incremental. Para um posto de controle completo, ele vai escrever o lote. Isto implica
uma grande
incluindo quantidade
alta CPU e usodedetrabalho,
disco, enquanto o ponto de verificação está em andamento e
desempenho
sessões de usuário.
reduzido
checkpoints
para completos são ruins para os negócios. Devido a isso, nunca haverá
uma completa
checkpoint, exceto em duas circunstâncias: um desligamento ordenado e, a pedido do DBA.
TIP manualmente checkpoints iniciadas nunca deve ser necessário em funcionamento normal,
embora
ser útil quando
possamvocê quiser testar o efeito do ajuste. Não há ponto de verificação completo seguir um
interruptor. Este tem sido o caso desde o lançamento 8 i , embora até hoje muitos DBAs não
registo
percebem isso.
Quando o banco de dados é desligado com o NORMAL, imediato ou TRANSACTIONAL
opção, há um posto de controle; todos os buffers sujos são liberadas para o disco pelo DBW n antes
de a base de dados está
fechada e desmontada. Isto significa que quando o banco de dados é aberto novamente, nenhuma
recuperação serádesligamento normal é sempre desejável e é necessário antes de algumas operações
necessário. Um
(tais como archivelog modo). Um ponto de verificação completa pode ser sinalizado a qualquer
permitindo
momento com este comando:
EXAME TIP checkpoints completa ocorrer apenas com um desligamento ordenado ou por
solicitação. Parcial
checkpoints ocorrer automaticamente, conforme necessário.
A única coisa que um DBA não é permitido fazer é perder todas as cópias do arquivo de log on-
lineSe
grupo. atual
isso acontecer, você perderá os dados. A única maneira de proteger contra a perda de
dados quando
membros do grupo
você atual
perdeétudo
para configurar um ambiente de Data Guard para perda de dados zero, o
que um
não é exercício trivial. Por que é tão importante que você não perca todos os membros do grupo
atual? Pensar
sobre a recuperação de exemplo. Depois de um acidente, SMON vai usar o conteúdo do arquivo de
log on-line
grupo atual
para recuperação de avanço para reparar quaisquer corrupção na base de dados. Se o arquivo
de log não
grupo on-line
estáatual
disponível, talvez porque não foi multiplexados e danos na mídia destruiu a
um membro, em seguida, SMON não pode fazer isso. E se SMON não pode corrigir corrupções com
rolo para
você não pode
a frente,
abrir o banco de dados.
Se um membro de um grupo de arquivo de log redo estiver danificado ou faltando, o banco de
é umdados
membro permanecerá
de sobrevivência.
aberto se Isto
houver
contrasta com a controlfile, onde os danos a qualquer cópia irá
falhar ode dados imediatamente. Da mesma forma, os grupos podem ser adicionados ou removidos e
banco
os membrosou
adicionado dos
movido
gruposenquanto
podem sera base de dados está aberto, enquanto há sempre, pelo menos, dois
grupostem
grupo e cada
pelo menos um membro válido.
TIP EXAME O redo log on-line pode ser reconfigurado enquanto o banco de dados é aberto sem
tempo de inatividade,
Considerando as operações no controlfile pode ser realizada somente quando o banco de dados está
no desligar
ou modo nomount
completamente.
Se você criar um banco de dados com o banco de dados Assistente de Configuração (DBCA),
tempor
trêspadrão
grupos,você
masvai
a menos que você instruído DBCA para usar o Oracle Managed Files e uma
recuperação
Área, eles terão
rápida
apenas um membro cada. Duas visões irá dizer-lhe o estado de seus redo logs:
V $ LOG terá uma linha por grupo e V $ LOGFILE terá uma linha por membro do arquivo de log.
A Figura 22-1 mostra um exemplo de configuração de redo log on-line.
A primeira consulta mostra que esta base de dados tem três grupos de arquivo de log. O grupo-a
LGWR
corrente
está gravando
de um no momento, é o grupo 2; os outros grupos são inactivas, o que significa que o
primeiro
LGWR não está escrevendo para eles e segunda que, no caso de um SMON falha da instância não
obrigá-los
faria para recuperação de instância. Em outras palavras, a posição checkpoint tem avançado em
2. A seqüência # coluna diz que houve 497 interruptores de registro uma vez que o banco de dados
grupo
criado (ou uma vez que a sequência de registo foi reajustado utilizando ALTER DATABASE
foi
Resetlogs
número abertos). este com cada switch log. A coluna MEMBROS mostra que cada grupo consiste
é incrementado
de apenas um membro, e isso é sério má notícia e deve ser corrigido o mais rápido possível.
A segunda consulta mostra os arquivos de log redo online individuais. Cada arquivo é parte de
(Identificado
um dos grupos
pelo GRUPO #, que é a junção da coluna volta a V $ LOG) e tem um nome exclusivo.
coluna STATUS deve ser sempre nula, como mostrado. Se o membro ainda não foi utilizado,
o
porque o banco de dados só agora foi aberto e ter ocorrido sem opções de log, o status será
tipicamente
INVÁLIDO; este vai estar lá apenas até o interruptor de log primeiro. Se o status for
persistentemente
ter um problema. inválido,
DICA Como com o controlfile e arquivos de dados, a Oracle não aplicar qualquer convenção de
nomenclatura
arquivos, mas para o log das organizações têm normas para isso.
a maioria
Depois, há um comando de sistema de comutação LOGFILE ALTER para forçar uma mudança
interruptor
de diário.
queOaconteceria
registro automaticamente, finalmente, se houvesse quaisquer declarações DML
em andamento.
consulta anterioro mostra que, após o interruptor de log, o grupo 3 é agora o grupo atual que LGWR
está escrevendo
para, pelo registo sequência de mudança 498. O grupo anteriormente corrente, grupo 2, tem estado
ACTIVO.que
significa esteainda seriam necessários pelo SMON para recuperação de instância se a instância não
agora.espaço
curto Em umde tempo, como a posição do ponto de verificação avança, torna-se inativo. Emitir um
comando CHECKPOINT SISTEMA forçaria a posição do ponto de verificação para vir até à data, e
ALTER
grupo 2, então, tornar-se inativo imediatamente.
Para proteger o banco de dados contra a perda de dados em caso de danos a um arquivo de log
redomultiplex-lo.
grupo, online Seguindo o exemplo na Figura 22-1 , para adicionar cópias multiplexados para
o on-line
log, você usaria um comando como este para cada grupo de arquivo de log:
EXAME TIP Um arquivo de log redo online pode ser substituído somente se ele está inativo e (se o
banco
no modo
de archivelog)
dados é se tiver sido arquivado.
Por padrão, um banco de dados é criado no modo NOARCHIVELOG . Isto significa que os
arquivos por
substituídos de log de redo on-line
interruptores de logsão
com nenhuma cópia que está sendo feita pela primeira vez.
Ainda de
banco é impossível
dados, mascorromper
os dados seriam
o perdidos se os arquivos de dados foram danificados por falha
adetransição
mídia. Uma
paravez
o modo
que oarchivelog
banco de dados
, é impossível
é perder-forneceu dados que todos os arquivos de
log arquivados
gerados desde o último backup estão disponíveis.
Uma vez que um
automaticamente. Estebanco de dadosdeé convertido
é o processo arquivador,para
ARCo nmodo
. Porarchivelog, um vai
padrão Oracle novo processo
começar de
a quatro
fundo
destes começará
processos, mas você pode ter até 30. Em versões anteriores do banco de dados, foi necessário para
iniciar esteou usando um comando SQL * Plus ou definindo o parâmetro de inicialização
processar
LOG_ARCHIVE_START, mas de liberação 10 g em diante a Oracle inicia automaticamente o
processa, se o banco de dados estiver no modo archivelog.
arquivador
DICA No modo archivelog, a recuperação é possível, sem perda de dados de até e incluindo o
cometer. Como regra geral, todos os bancos de dados onde você não pode dar ao luxo de perder
último
dados archivelog.
modo deve ser executado
Não excluem
em sistemas de teste e desenvolvimento a esta regra; eles também são
importantes.
Os processos de archiver irá copiar o arquivo de log redo online atual para um arquivo de log
log arquivo
interruptor,
apósgerando,
cada assim, uma corrente contínua de ficheiros de registo que pode ser utilizado
para
O nome
a recuperação
ea localização
de uma
desses
cópia
arquivos
de segurança.
de log arquivados são controlados por parâmetros de
inicialização.
segurança, os Para
arquivos de log arquivados podem ser multiplexados, assim como os arquivos de log
on-line podem ser
eventualmente, elesmultiplexados, mas para o armazenamento offline, como uma biblioteca de
devem ser migrados
fitas. Adeinstância
cuidar criar os Oracle
logs deleva
arquivo com o ARC n processo, mas a migração para a fita deve ser
pelo DBA, usando os comandos do sistema operativo ou utilizando o utilitário Gestor de
controlado
RMAN.
recuperação
EXAME TIP processos Archiver iniciar automaticamente se o banco de dados estiver no modo
archivelog.
A transição para o modo archivelog só pode ser feito enquanto o banco de dados está no modo
de montagem
desligamento depois
normal, de um
e deve, portanto, ser feito por um usuário com uma conexão SYSDBA. Isso é
necessário definir os parâmetros de inicialização que controlam os nomes e localizações dos logs de
também
gerado. Claramente, esses nomes devem ser exclusivos ou logs de arquivo pode ser substituído por
arquivo
outro arquivo
toras. Para assegurar nomes de ficheiros originais, é possível incorporar variáveis, tais como a
sequência
número denomes
nos mudança de registode log de arquivamento. Estas variáveis podem ser usados para
de arquivos
incorporar
nomes de arquivos
valores exclusivos
de log: em arquivo
DICA Um ponto de terminologia: alguns DBAs dizer que um banco de dados deve ter várias
enquanto outros vão dizer que ele deve ter várias cópias do controlfile. Este livro usa o último
controlfiles,
terminologia. A documentação do Oracle é inconsistente.
Para determinar os nomes e localizações dos CONTROLFILE cópias, consultar uma visão ou
parâmetro.
um
As consultas anteriores mostram que esta base de dados está sendo executado com duas cópias
do controlfile.
Exercício 22-1: Investigar e ajustar a configuração de Redo Log Neste exercício, você vai
investigar a configuração do log de redo.
1. Ligue para o seu banco de dados como usuário SYSTEM usando SQL * Plus.
2. Documento a configuração de log redo com esta consulta:
Isto irá mostrar os membros de arquivo de log, o seu estatuto, o seu tamanho, e o grupo a
pertencem. Se o seu banco de dados é o banco de dados padrão, ele terá três grupos, cada
que
um de umcom um tamanho de 50 MB.
membro,
3. Determinar o modo archivelog da base de dados e se ARC n estiver em execução com estes
comandos:
5. Execute esta consulta para verificar o status de seus membros de arquivo de log:
Note-se que os novos membros será inválido.
6. Ciclo através dos grupos de arquivo de log executando este comando algumas vezes:
7. Execute novamente a consulta a partir do passo 5. O status de cada membro deve agora ter
limpado. Se algo
inválida, aindaestá
é errado. Olhe para log de alerta a instância de banco de dados para
diagnosticar
problema pode
o que
ser.a
• db_recovery_file_dest
• DB_RECOVERY_FILE_DEST_SIZE
O primeiro desses parâmetros nomeia o local. Isso pode ser um diretório de sistema de arquivos
Automatic
ou um Storage Management (ASM) grupo de discos. É possível que várias bases de dados para
compartilhar
destino comum;umacada banco de dados terá a sua própria estrutura de diretório (criado
automaticamente)
o destino. O segundo
em parâmetro limita a quantidade de espaço no destino que o banco de dados
ocupará; não diz nada sobre quanto espaço está realmente disponível no destino. o
configuração e uso da Área de Recuperação Rápida são mostrados em dois pontos de vista:
• v $ recovery_file_dest
• v $ recovery_area_usage
TIP lançamento 10. x introduziu o flash Área de Recuperação. Em libertação 11,2. x , foi renomeado
para
Área ode Recuperação Rápida (uma grande atualização). Alguns pontos de vista antigos (e alguns
DBAs de idade) ainda usam o original
nome.
Os arquivos que serão gravados para a área de recuperação rápida (salvo indicação em contrário)
Segue:
incluem o
RMAN pode gerenciar todo o ciclo, ou seja, backup do banco de dados do primário para o
e migração
secundário
de cópias de segurança do armazenamento secundário para terciária. Esse sistema pode
ser implementado
moda que vai permitir
em uma recuperação quase instantânea após uma falha, combinada com a capacidade
de tomar
banco de adados de volta no tempo, se isso é sempre necessário.
A área de recuperação rápida pode ser reconfigurado a qualquer momento, sem afetar qualquer
Alterações
arquivoserão
dentroaplicadas
dele. apenas para arquivos criados posteriormente. Figura 22-2 mostra como
configuração da área de recuperação, seguido de declarações para ajustar tanto a sua localização e
determinar o rápido
seu tamanho.
Após uma instalação padrão, os logs de arquivo será gravado em apenas um destino, que
será a Área de Recuperação rápida. Isso é especificado por uma definição implícita para o
parâmetro LOG_ARCHIVE_DEST_1, visível na vista V $ ARCHIVE_DEST. Se os parâmetros que
habilitar a Área de Recuperação Rápida não foram definidos, eles vão para um destino específico da
plataforma$ (o
Diretório ORACLE_HOME / dbs para sistemas Unix). O comando final na Figura 22-3 ,
ARQUIVO
LOG LIST, mostra informações resumidas sobre a configuração de arquivamento, incluindo o banco
de dados
está em execução no modo archivelog, que o ARC n processo está em execução, e que os arquivos
de log escrito
sendo arquivados
para são
a área de recuperação rápida.
Figura 22-3 Ativação e verificação archivelog modo com o SQL * Plus
TIP EXAME A mudança para o modo archivelog pode ser feito apenas no modo de montagem
depois de uma limpa
desligar.
Um backup completo é um passo essencial para a transição para o modo archivelog. Após a
transição,
todos os backups feitos anteriormente são inúteis. O backup pode ser feito enquanto o banco de
dadosatéé que
mas aberto
eleou fechado,
é feito, o banco de dados não está protegido em tudo.
TIP Se o encerramento não é limpo (por exemplo, shutdown abort), a transição irá falhar.
Isso não é um problema a abrir o banco de dados e desligá-lo novamente, desta vez de forma limpa.
Exercício 22-2: Ativar o modo ARCHIVELOG Neste exercício, você fará a transição seu banco
de dados
modo em
archivelog. Este é um procedimento essencial para completar capítulos posteriores no apoio e
recuperação.
1. Ligue para o seu banco de dados com o Database Control como usuário SYS. (Por SYS?
Porque
tem que
vocêparar
vai e iniciar a instância.)
2. Seguir os passos mostrados na Figura 22-3 para activar o modo archivelog.
3. Confirme se o arquivamento estiver trabalhando, forçando uma mudança de diário e um
arquivo.
4. Confirme se o arquivo de log acumulativo foi gerado na área de recuperação rápida.
Broca Two-Minute
Possíveis Falhas e sua resolução
• falhas de SQL normalmente irá ser reparado pelos usuários e desenvolvedores.
• falha Instância pode resultar em corrupção de dados, mas o processo de recuperação de
instância
sempre automática
reparar estes, contanto que os arquivos de log redo online estão disponíveis.
• danos aos arquivos exige ação DBA para reparar. Esta normalmente será restaurar o banco de
dados
a partir de backup e aplicar refazer.
• Recuperação de falha da instância é automática e imparável. Se ele falhar (normalmente por
causa
problema
de uma
com os arquivos de log on-line), então o banco de dados não pode ser aberto.
• Os arquivos de log redo online conter vetores alteração aplicada recentemente para buffers em
cache. Eles são
necessária para a recuperação de instância. Quando um grupo de arquivo de log on-line é
preenchido,
arquivo de log
eleacumulativo.
será copiado Nesse
para um
ponto, ele se torna disponível para reutilização.
• arquivos de log arquivados não são reutilizados. Eles são um registro ininterrupto de todas as
alterações
blocos e aplicadas
utilizado para
aos dados
a recuperação do banco de dados após uma operação de restauração.
Os membros podem ser removidos, como desde que haja sempre pelo menos um membro de
cada grupo.
Auto teste
1 . Quando é que um posto de controle completo ocorrer? (Escolha todas as respostas corretas.)
A. Como parte de um desligamento normal
B. Como parte de um encerramento imediato
C. Quando a tabela for colocado offline
D. Quando um interruptor de registo ocorre
2 . Qual destas operações não pode ser realizado enquanto o banco de dados é aberto? (Escolha
tudorespostas corretas.)
A. Adicionando uma cópia controlfile
B. Adição de um membro do arquivo de log on-line
C. A alteração do local da área de recuperação flash
D. Mudar o modo archivelog da base de dados
3 . Qual destes arquivos é não necessário para recuperação de instância? (Escolha a melhor
resposta.)
A. arquivos de log Arquivo
B. cONTROLFILE
C. Datafiles
D. arquivos de log on-line
4 . Se o banco de dados estiver no modo archivelog, o que acontecerá se o arquivamento falhar
por(Escolha
qualqueramotivo?
melhor resposta.)
A. A instância será interrompida.
B. Todas as sessões não-SYSDBA irá travar.
C. operações DML irá travar.
D. O banco de dados irá reverter modo a noarchivelog.
5 . Para configurar o banco de dados para recuperação, que tipos de arquivos pode (e deve) ser
multiplexado? (Escolha três respostas.)
A. arquivo de log redo Arquivo
B. cONTROLFILE
C. arquivo de redo log on-line
D. arquivo de parâmetro de servidor
E. Sistema de arquivo de dados de tabela
F. Anular arquivo de dados de tabela
6 . Que tipos de arquivo, por padrão, ser armazenados em área de recuperação flash se tiver
sido(Escolha
definido?
todas as respostas corretas.)
A. arquivos de log redo Arquivo
B. arquivos de rastreamento processo em segundo plano
C. conjuntos de backup do RMAN
D. RMAN cópias de imagem
E. dados Anular
7 . Vários passos estão envolvidos na transição para o modo archivelog. Coloque-as na ordem
correta:
Uma base de dados alterar archivelog
2 alter database aberto
3 sistema alter de início de registo de arquivo
4 backup completo
5 desligamento imediato
6 startup mount
A. 5, 6, 1, 2, 4; 3 não necessário
B. 5, 4, 6, 1, 2, 3
C. 6, 1, 3, 5, 4, 2
D. 1, 5, 4, 6, 2; 3 não necessário
E. 5, 6, 1, 2, 3; 4 não necessário
8 . Que condições devem realizar antes de um membro do arquivo de log on-line pode ser
reutilizado
operandosenoo banco
modo archivelog?
de dados é (Escolha todas as respostas corretas.)
A. Deve ser inativo.
B. Deve ser multiplexados.
C. Deve ser arquivado.
D. O arquivo deve ser multiplexados.
9 . Qual dos seguintes espaços de tabela são necessários em uma instalação do Oracle Database
12 (Escolha
c? todos os que se aplicam.)
A. USUÁRIOS
B. SISTEMA
C. SYSAUX
D. TEMP
E. UNDOTBS1
F. RMAN
falha do banco de dados principal. Qualquer local de espera pode ser configurado para
aplicar ologs
refazer arquivados
após um atraso predefinido para evitar corrupções lógicas potenciais para o
banco
se não de
houver
dados,
uma
mesmo
falha catastrófica do banco de dados principal.
A , B , e C são incorrectas. Um é adequado para acesso de leitura e escrita para relatar
escritores ou mas não será uma cópia física exata do banco de dados principal. B é
desenvolvedores,
porque usar um banco de dados Active Data Guard para consultas somente leitura não está
incorrecta
failover depois
fornecendo de umaoufalha
umalguns
descarregando catastrófica,
todos a carga de mas complementa
trabalho o banco
de relatórios. de dados
C é uma opçãoprimário para
viável para
a recuperação
banco detabela
de dados, um ou objeto de banco de dados individuais para um estado anterior, mas
não fornece
failover em tempo real a partir de uma falha do banco de dados principal.
CAPÍTULO 23
Objetivos do exame
• 63.1.1.1 Explicar o Oracle Backup e Recuperação Solutions
• 63.1.2.1 backup e recuperar um banco de dados NOARCHIVELOG
• Definições 63.1.3.1 configurar e gerenciar RMAN
• 63.1.4.1 criar e usar um Catálogo de Recuperação RMAN
• 63.1.5.1 usar vários tipos de backup do RMAN e Estratégias
• 63.1.6.1 executar backups completos e incrementais
• 63.1.6.2 gerenciar backups
• 63.1.7.1 Usar técnicas para melhorar Backups
Mesmo que a lista de objetivos do exame para este capítulo é longo, a maioria dos objectivos
envolver
apenas uma
adicionar
ou duas palavras-chave para o seu comando BACKUP. Usando o Recovery Manager
(RMAN)eferramenta
simples, com um pouco
é de prática você vai se familiarizar com todas as suas funções.
Conceitos de backup
A base de dados em que backup ou restaurar operações devem ser realizadas é conhecido como o
alvo . Dentro
alguns ambientes haverá muitos bancos de dados e, portanto, muitos alvos RMAN. Você irá
conectar a cada banco de dados, por sua vez. Cada cópia de segurança de um alvo terão certos
atributos:
• Aberto ou fechado
• Whole ou parcial
• completa ou incremental
• Para disco ou para a fita
• Copiar ou backupset
RMAN Arquitetura
O executável RMAN é um processo de usuário como qualquer outro. Ele faz logon em um banco de
dados Oracle
banco de dados),
(o alvo
quer localmente usando comunicação entre processos (IPC) ou remotamente
utilizando
Control Protocol
a Transmissão
(TCP) e um ouvinte de banco de dados. Uma vez conectado, o usuário pode emitir
comandos
realizar operações
para de backup e restauração. Estas operações são realizadas por servidor adicional do
Oracle
processos lançado como necessário, conhecidos como canais . Um canal é um processo do servidor
comosua
mas qualquer
função outro,
é restrita a copiar os arquivos.
Uma característica importante do RMAN é o uso de um repositório . O repositório RMAN
sobreconsiste
backups.de metadados
Isso inclui detalhes do que foi feito backup, onde os arquivos de backup são,
que existem arquivos de log de arquivo, quais configurações persistente foram feitas, e tudo
RMAN vai precisar para compreender o banco de dados e os backups tais que restauram e
recuperação
as operações podem ser completamente automatizadas. O repositório existir em um ou dois locais.
Uma cópia édosempre armazenado no controlfile do banco de dados alvo. Baseando-se
repositório
exclusivamente
tem dois problemas.
sobrePrimeiro,
este podea potencialmente
informação pode ser armazenada por um período limitado.
Especificamente,
número de dias especificados
este é o pelo parâmetro exemplo CONTROLFILE_RECORD_KEEP_TIME,
que
defaults a sete dias. Se você estiver usando apenas o repositório baseado em controlfile, você
provavelmente
para ajustar issovai
para
querer
permitir RMAN para “lembrar” informações por um período mais longo. Por
exemplo,
este período
para
deelevar
um mês, você usaria o seguinte:
RMAN também pode utilizar um local de armazenamento secundário para o repositório sob a
baseforma
de dados.
de umIsso
Oracle
requer a criação de um esquema no banco de dados conhecido como o RMAN
catálogo
deve ser criado
. o catálogo
em um banco de dados utilizado exclusivamente para esta finalidade. O catálogo
pode
muitasgravar
metasmetadados
e age como para
um repositório central de todas as informações de backup. Ao usar um
catálogo,limite
nenhum há eficaz para o período de tempo para o qual as informações de backup podem ser
armazenados.
permite que algumas
Usandodasumfuncionalidades
catálogo também do RMAN mais avançados.
Um backup RMAN pode ser dirigido para um local disco ou para um local fita. Backup em disco
é disponível e não requer nenhuma configuração. Para usar um dispositivo de fita, RMAN
sempre
o fabricante
necessitar
certamente dedo hardware.
auxílio
cobrado) de Este é na forma
pelo fornecedor de uma biblioteca
do hardware. ligada
Por exemplo, se dinamicamente,
você estiver indodesde
para (e quase
usar uma
fita automatizado
biblioteca fabricado pela IBM, você vai precisar comprar agente do Tivoli Storage Manager da IBM
para Oracle.
Este código permitirá RMAN para dirigir a biblioteca de fitas. Dentro do ambiente RMAN, há
diferença mínima ao utilizar dispositivos de fita. RMAN oculta toda a complexidade do
gerenciamento
hardware partido
dedo
terceira
DBA.
RMAN pode criar dois tipos de backup: cópias de imagens e conjuntos de backup . Um backup
geracópia
um ficheiro
de imagem
de saída que é byte-por-byte idêntico ao ficheiro de entrada. A backupset é uma
estrutura inteligente. Pode combinar vários arquivos de entrada em um arquivo de saída, não vai
mais
incluir
dos blocosde entrada que nunca foram usados, pode ser compactados e criptografados, e pode ser
arquivos
em vários pedaços . As peças são os arquivos físicos que compõem o backupset.
dividido
Todos os três vão fazer logon em um banco de dados destino como SYS usuário com o privilégio
caso,SYSDBA. Emuma
o alvo será primeiro
ocorrência de banco de dados local correndo na mesma máquina, identificada
ORACLE_SID variável de ambiente, e o usuário é autenticado pela sua conta do sistema
pela
O segundo exemplo também se conecta a um exemplo da base de dados local, mas autentica usando
operacional.
a base dededados
arquivo senha. O terceiro exemplo se conecta a um banco de dados remoto através de uma rede
usandodoum
nome tnsnames
serviço e também vai usar a autenticação de arquivo de senha.
Uma vez conectado, você pode emitir comandos ad hoc SQL contra o banco de dados destino,
seriaassim como
dentro vocêsessão SQL * Plus (embora a exibição de resultados podem não ser os mesmos,
de uma
e alguns SQL * Plus, tais como aqueles para a formatação de colunas, não estão disponíveis) ou
Comandos
emissão RMAN
comandos para operações de backup e restauração.
Fazendo backup no modo NOARCHIVELOG
Fazendo-se no modo noarchivelog só pode ser realizado no modo de montagem. Considere o
exemplo
Figura 23-1
na .
Figura 23-1 Um fechado, inteiro, backup completo com o RMAN
Uma especificação de backup parcial pode ser uma lista de um ou mais arquivos de dados
ou pelo
(identificado
número do pelo
arquivo),
nome deumarquivo
ou mais espaços de tabela, ou o controlfile. Um backup de todo é
todo o banco
arquivos de log
de de
dados.
arquivo pode (e deve) ser também apoiada, ou seja, ou todos os arquivos de log
de arquivamento
subconjunto ou de umde registo de arquivo. É também possível (como no exemplo a seguir)
dos ficheiros
para remover
arquivos de log
o arquivo
como eles são apoiados. O destino de backup padrão é para o disco, especificamente,
aos arquivos
peças de backup
(o de conjuntos de backup) na Área de Recuperação rápida.
Normalmente comandos de linha única não será suficiente. Para encadear vários comandos
devejuntos,
agrupá-los
você em um bloco. Um bloco é precedida por RUN e fechado com {}. considere o
exemplo na Figura 23-2 .
Figura 23-2 Uma aberta, toda, backup, incluindo backup completo do arquivo do arquivo de log e
exclusão
Os dois primeiros comandos no bloco prazo são ALLOCATE CHANNEL. Atribuir um canal de
inicia um processo servidor. Cada canal tem um nome (apenas uma seqüência arbitrária, neste
exemplo D1 especificar se ele vai estar usando fita ou disco como destino de backup (na
e D2) e deve
exemplo, disco). O lançamento de múltiplos canais permite paralelismo para o backup. vontade
distribuir a carga de trabalho entre os canais, como mostrado mais adiante na saída: Datafiles 3, 1 e 6
RMAN
sendo apoiada por canal D1, enquanto o canal D2 faz-se arquivos de dados 7 e 5. A terceira linha na
são
corrida
bloco especifica um backup de banco de dados inteiro, usando o formato de indicar o nome pedaço
de saída.
quarta linha
o especifica que todos os arquivos de log de arquivo deve ser apoiado e excluídos. O
especificação inclui% L. Esta é uma variável que será expandido para um nome que inclui um
formato
oito caracteres seqüência aleatória para garantir que se o bloco é executado muitas vezes, diferentes
nomes peça
sempre vai
ser gerado. O tipo de backup é comprimido Backupset. compressão vai
em geral, não só reduzir o tamanho dos pedaços de backup, mas também melhorar a velocidade da
operação.
maioria das
Dentro
circunstâncias, o gargalo no backup é escrever as peças de backup, e meios de
que há muito menos dados para escrever.
compressão
O tipo de backup padrão é um backupset. A alternativa é a cópia da imagem. Para criar cópias,
comandos,
utilize tais como: estes
Este bloco vai lançar dois canais de fita (a palavra-chave SBT significa Backup System para fita
epara
instrui RMAN para
a biblioteca vincular
de fitas. Vocêanormalmente
biblioteca MML no processo
relacionam de canal)
o número que irá
de canais fazer
para o backup
o número de do
banco de
aunidades dados
biblioteca.
de fita
Na maioria
em dos casos, o uso de dispositivos de fita é consideravelmente mais
complicado
opções específicas
do que da
isso,
plataforma
com muitos
que devem ser especificados.
• política de retenção especifica o que backups RMAN deve tentar criar e quando eles
pode ser excluído. O padrão é uma cópia de cada arquivo.
• OTIMIZAÇÃO determina se RMAN deve fazer backup de arquivos, a pedido, mesmo se
backups suficientes já existem. O padrão é para apoiá-los de qualquer maneira.
• padrão do dispositivo TIPO DE DISCO significa que a menos que dirigido de outra forma, o
RMAN
lançar apenas os canais de disco e não vai escrever para a fita.
• CONTROLFILE AUTOBACKUP OFF impede RMAN de backup automático do
controlfile como parte de qualquer outra operação de backup.
• AUTOBACKUP FORMATO gera um nome e local para os autobackups CONTROLFILE, se
eles foram ativados.
• tipo de dispositivo DISK PARALLELISM 1 BACKUP TIPO DE Backupset significa que,
default apenas um canal será lançado ao executar um backup em disco e que o
backup será a um backupset descompactado.
• CÓPIAS DE SEGURANÇA especifica quantas cópias de conjuntos de backup deve ser
gerado
backup
quando
de arquivos de dados e arquivos de log de arquivo.
• MAXSETSIZE pode restringir o tamanho de cada backupset. Se este tamanho é atingido, o
backupset
peça (s) irá ser fechada, e a cópia de segurança irá continuar para um novo backupset.
• criptografia dos conjuntos de backup está desativado por padrão.
• Compressão (se solicitado) vai usar o algoritmo básico, que é livre de licença.
• RMAN controles de saída quanto tempo manter os resultados de um trabalho RMAN em
tabelas
repositório
no RMAN.
• ARCHIVELOG política de exclusão permite RMAN para apagar automaticamente
archivelogs
não são mais
quenecessários, de acordo com vários critérios.
• INSTANTÂNEO CONTROLFILE especifica um nome e local para ser usado para uma cópia
temporária
do controlfile criado como parte do mecanismo de backup controlfile.
Ao projetar uma estratégia de backup, um exemplo dos requisitos poderia ser a seguinte: deve
sempre será possível restaurar o banco de dados a qualquer momento nas últimas duas semanas; não
criar maisdo que o necessário para atingir esse objetivo; backups vai para o disco, utilizando grau de
backups
paralelismo
quatro canais;
deo controlfile sempre deve ser incluído com qualquer backup; backups será tão
conjuntos de backup compactados, armazenados no diretório C: \ db_backups; peças Backupset será
de acordo com o nome do banco de dados, a data do backup, e uma cadeia exclusiva; e archivelogs
nomeado
serão eliminados quando eles foram copiados para o disco duas vezes. Para configurar esse requisito,
estes
os comandos
são para executar:
Usando MOSTRAR TODOS irá exibir os novos valores. Estes dois comandos simples agora
estão
o que todos
é necessário para cumprir a exigência:
definições de configuração persistentes são configuradas para cada base de dados de alvo e
repositório,
armazenado
especificamente,
no RMAN no controlfile do banco de dados de destino eo catálogo de recuperação
caso tenha
criada. Parasido
devolvê-los aos padrões, conectar-se ao alvo e emitir comandos clara.
O exemplo a seguir define a política de retenção a uma janela de recuperação de quatro dias:
Da Oracle melhores práticas recomendo usar uma janela de recuperação (um período de tempo
em que é
possível descobrir qualquer problema com o banco de dados, como uma tabela inadvertidamente cair
ou
linhas excluídas em uma tabela) e realizar uma recuperação point-in-time em apenas antes que o erro
ocorreu.
Em alguns ambientes, você pode querer desativar a política de retenção completamente. Isso é
um útil em onde um sistema de backup fora do RMAN armazena os backups em disco para fita e
ambiente
eles. Como resultado, o RMAN não precisa decidir quando um backup é obsoleto, e, portanto, não
exclusões
política de retenção é necessária. Como resultado, os detalhes de backups do RMAN são mantidas
até o momento
especificada pelo CONTROL_FILE_RECORD_KEEP_TIME parâmetro de inicialização. Aqui está
como
você pode desativar a política de retenção:
especificadores de formato
Geralmente, você vai querer automatizar a nomeação de peças Backupset. Isso permitirá que você
para executar
mesmos scripts
o repetidamente, gerando nomes de arquivos diferentes de cada vez. Você não vai
saber o(embora você possa decodificá-los), mas RMAN. Esta é uma parte importante da
nomes
automatização
processo de backup.
do Para gerar nomes, configurar especificadores de formato persistentes, usando
uma combinação
literais (como nomesde de diretório) e variáveis. As variáveis são as seguintes:
Exercício 23-1: Configurar RMAN e execute um backup Para este exercício, presume-se que o
banco de dados está no modo archivelog. Caso não seja, completar os exercícios no capítulo 22 .
Observe a alocação automática de canais e a maneira pela qual os arquivos são distribuídos
para
canais, os nomes dos ficheiros de peças de saída, e o backup automático do controlfile e
Note-se que a exclusão de arquivos de log de arquivo não ocorrer até que você execute o
spfile.
arquivo dedelog
comando backup
de arquivo
mais algumas vezes.
5. substituir os padrões configurados.
Executar um backup que não permite RMAN para usar os padrões configurados
eespecificando alguns um bloco de processamento.
os valores utilizando
Observe os nomes dos arquivos de saída e comparar os seus tamanhos entre si e com a fonte
arquivo de dados.
O Catálogo de Recuperação
Se você gerenciar mais de um banco de dados em seu ambiente e você quer manter sua recuperação
informações por mais tempo do que CONTROLFILE_RECORD_KEEP_TIME, então você precisa
de um
catálogo de recuperação para armazenar o repositório RMAN. Um catálogo de recuperação única
pode armazenar
informações paraRMAN
um número virtualmente ilimitado de bancos de dados de destino.
Usando scripts armazenados é outra razão para usar um catálogo de recuperação; você não pode
alvoarmazenar
controlfilescripts no de dados. Você pode salvar uma seqüência de comandos como um único
do banco
scriptexecutar
para para tornar
a seqüência
mais fácil
de comandos sob demanda ou talvez em um horário específico. Um script
podebanco
um ser vinculada
de dados aespecífico alvo (um script local), ou pode estar disponível para todos os bancos
de dados de destino (a global
roteiro).
Porque você pode colocar os metadados de várias bases de dados em um único catálogo de
visualizações,
recuperação, como
o RC_
RC_ARCHIVED_LOG, RC_BACKUP_FILES e RC_DATABASE, são criados
em
o banco de dados do catálogo de recuperação para recuperar metadados para todos os bancos de
dados deo destino.
usando controlfileCaso
do contrário,
banco de dados
quandodevocê
destino,
está você deve se conectar a cada banco de dados alvo
separadamente
os $ vistas V baseado
e consulta
em controlfile do banco de dados alvo.
Finalmente, usando um catálogo de recuperação permite que você use os seguintes comandos do
RMAN:
• BACKUP ... MANTENHA até o tempo de manter um backup por um período de tempo que
difere
política
do de retenção configurado.
• BACKUP ... manter para sempre manter um backup indefinidamente ou até que você
remover
isto. manualmente
• ESQUEMA RELATÓRIO ... AT mostram a estrutura do banco de dados em um momento
específico
passado. na
Configurar o Recovery
Conecte-se ao banco Catalog
de dados repositório (nesteDatabase
caso, o banco de dados RCAT) com privilégios
SYSDBA
criar o catálogo
e de recuperação na tabela RMAN da seguinte forma:
• ALTER SESSION
• CRIAR CLUSTER
• CRIAR BANCO DE DADOS LIGAÇÃO
• CRIAR PROCEDIMENTO
• CREATE SEQUENCE
• CRIAR SESSÃO
• CREATE SYNONYM
• CRIAR A TABELA
• CREATE TRIGGER
• CREATE TYPE
• CREATE VIEW
Deste ponto em diante, usando um repositório é tão fácil quanto especificar o nome de usuário e
senha na linha
repositório
comando de comando
CATALOG do sessão
em uma RMANRMAN.
com o parâmetro CATÁLOGO ou usando o CONNECT
Todos os bancos de dados registrados com o repositório deve ter dbids únicas; tentando registrar
banco
o de dados novamente produz a seguinte mensagem de erro:
EXAME TIP O RMAN catálogo de recuperação registros de informações sobre estruturas de banco
de dados deredo
arquivados destino,
logs e backups quando você executar um comando RMAN BACKUP ou executar
um manual
ressincronização.
Além disso, você pode executar backups freqüentes e confiar em arquivos de log redo
arquivados
cenário. para
Este não uma
é um recuperação
problema em si, mas a lista de recentes arquivos de log redo arquivados não é
automaticamente no catálogo de recuperação.
registrada
Finalmente, você pode, ocasionalmente, fazer alterações na estrutura física do banco de dados
informação
alvo. esteé automaticamente gravado no controlfile dados de destino, mas não na recuperação
Catálogo.
Manualmente resynchronizing o catálogo de recuperação é um processo simples. Depois de
RMANiniciar
(e se conectar a um catálogo de recuperação, é claro), execute o comando RESYNC
CATÁLOGO,
Neste exemplo:como em
Se você queria o script para estar disponível para apenas um banco de dados alvo específico,
palavra-chave
você omitirGLOBAL.
o Se você já tem um script RMAN em um arquivo de texto em um sistema
descript
o arquivos, você
em um pode
script importar
global ou local RMAN usando a seguinte sintaxe:
Executar um script armazenado RMAN global ou local é simples; no entanto, você deve executar
o dentro de um bloco prazo. A sintaxe é como se segue:
roteiro
Você também pode usar os parâmetros dentro de um script do RMAN armazenados. Em outras
palavras,
mudará dentrosede
umumouscript,
dois valores
tal como o valor para um canal particular ou o valor de um objecto para
-se, em seguida, você pode usar o & personagem como um indicador de substituição, assim como
trás
você faria em um SQL * Plus
roteiro.
É possível recuperar o conteúdo de roteiros armazenados RMAN usando os comandos de
comando
impressão
PRINTe Lista.
mostra
o o conteúdo de um script individual e o comando LIST mostra os nomes
de roteiros globais ou ambos os scripts globais e locais.
Este exemplo usa o script de lista de nomes de comando para mostrar ambos os scripts locais e
globais:
Lista global SCRIPT NOMES retorna apenas os nomes de script globais.
Para mostrar o conteúdo real de um script, use o comando de impressão. Porque um script global
e uma
script local pode ter o mesmo nome, você qualifica o comando de impressão com a opção global se
que pretende imprimir a versão global em vez da versão local. Este exemplo recupera o conteúdo
do script global_backup_db:
Você pode enrolar o conteúdo de um roteiro global ou local para um arquivo usando a opção do
comando
TO FILE
de impressão.
Como você poderia esperar, você usa o comando DELETE script para excluir um script global
ou local.
backups incrementais
Um backup incremental pode ser um dos dois tipos: nível 0 ou nível 1. A nível 0 de backup
incrementais
inclui todos os blocos em arquivos de dados especificadas, excepto para os blocos que nunca foram
usados. éAfisicamente
backup nível 0 idêntico a um backup completo dos mesmos arquivos de dados, exceto que um
backup
ser usadocompleto
em um backup
não podeincremental de estratégia em que fica sozinho. Uma cópia de segurança de
nívelbackup
um 1 podediferencial
ser um dosque
dois
faztipos:
o backup de blocos alterados desde o último backup no nível 0 nível 1
ou
uma cópia de segurança cumulativa que faz o backup de todos os blocos alterados desde o último
pode
nível ser um
usa backupset
0 backup.
Você as A nívelou uma
0 de
seguintes cópia de imagem;
backup
palavras-chave um nível
no comando 1 podeBACKUP
do RMAN ser apenaspara
umaespecificar
backupset.um
nível
incremental
0 nível 1 backup:
Você vai aprender como configurar uma estratégia de backup incremental para a tabela USERS
seguinte
na seções.
Subsequentes nível 1 backups vai usar esse backup como o ponto de partida para identificar
blocos.
mudou
2. Não é possível realizar um backup de nível 1 se não há nenhum nível 0. Até agora, tudo que
você
backup
tem écompleto.
um Tentar executar um backup de nível 1.
outros Recursos
RMAN oferece uma série de opções para fazer várias cópias de backup simultaneamente,
criar backups de seus conjuntos de backup existentes e para pular backups desnecessários de
somente leitura
tablespaces. Como o banco de dados cresce em tamanho, você inevitavelmente tem alguns realmente
grandes
levar umarquivos
longo tempo
de dados
para que
fazerirábackup como parte de um backup de banco de dados completo se
apoiado suporta
RMAN como um backups
todo. Assim
multisection
sendo, modo que um grande arquivo de dados podem ser copiados em
pedaços em
backups paralelo.
de arquivamento dar-lhe a flexibilidade para tirar um instantâneo de banco de dados e
mantê-la
ou por umindefinidamente
período específico de tempo. Por último, somente leitura de tabela pode exigir atenção
especial.
Criando Duplexada conjuntos de backup
Para fazer várias cópias de segurança do mesmo backupset simultaneamente, você pode configurar o
RMAN
até para
quatro fazerfrente e verso de cada peça backup. Tal como acontece com a maioria dos
cópias
comandos
valor padrão
dopara
RMAN,o parâmetro
você podede especificar
cópias utilizando
um o comando configure, como neste exemplo:
Duplex tem algumas restrições. Você não pode duplex backups para a área de recuperação
não rápida,
pode duplex
e vocêimagem cópias só de conjuntos de backup. Para backups em disco em dúplex, você
localizações para um backup usando a cláusula de formato. Você pode especificar vários locais, quer
especifica múltipla
comando BACKUP ou ao definir os valores padrão para o tipo de dispositivo de disco no
na
comando.
CONFIGURAR
Neste exemplo, você fazer backup do espaço de tabela USERS para dois locais diferentes de
simultaneamente:
disco
Note-se que mesmo que você tenha o mesmo formato para cada cópia do backupset, formato do
especificador%
RMAN U irá gerar nomes únicos para cada peça.
Uma opção para a criação de uma segunda cópia de um backup é criar uma cópia de segurança de
existentes.
conjuntos de backup estão Se seu
no disco (você não pode fazer backup de conjuntos de backup existentes
que estãoDE
CÓPIA naSEGURANÇA
fita), você pode. usar
. . comandar
o Backupset para copiar todos os conjuntos de backup em
um disco
Este comando
para outro
copia disco
todos ou
os para
conjuntos
a fita.de backup baseado em disco existentes para o dispositivo de
fita padrão e canal:
Se você quiser manter conjuntos de backup recentes no disco e conjuntos de backup mais antigos
CONCLUÍDA
em fita, você
e DELETE
pode usar opções
o de entrada. No exemplo a seguir, todos os conjuntos de backup
com maissão
semanas de copiados
dois para fita e excluído do disco:
DICA Você pode usar um backup de arquivo para migrar uma cópia do banco de dados para outro
sistema
fins sempara
afetar
testes
a política de retenção do banco de dados original. Depois de ter criado o
banco de dados no sistema de teste, você pode apagar o backup de arquivo.
A restrição para backups de arquivamento é que você não pode usar a área de recuperação rápida
cópia
para
de armazenar
segurança.um
Se você
arquivo
tem uma área de recuperação rápida configurado, você terá que usar o
parâmetro de
especificar umformato
local alternativo
para do disco para o backup. Além disso, um dispositivo de fita pode ser
o melhor
opção para o armazenamento de longo prazo de backups de arquivamento.
Este exemplo cria um backup de arquivo a ser retido por um ano usando o MANTER ATÉ
cláusula:
Desde que o banco de dados RPT12C tem uma área de recuperação rápida definido, você usar a
especifique
cláusulaumFORMATO
local no qual
paraarmazenar a cópia de segurança de arquivo. Note-se também que o
RMAN
logs, quefaz
seriam
o backup
necessários
de qualquer
para usar
arquivado
o backup em um possível cenário de recuperação futura.
Dependendo da política de retenção e os outros backups mais antigos ou mais recentes para esta
de backup
base depode
dados,
seroexcluído da próxima vez RMAN começa. O backup pode ser retida por mais
tempo sedeo retenção configurado precisa deste apoio para cumprir a política de retenção.
política
Você também pode usar o comando CHANGE para mudar todos os backups de um certo tipo.
que Por
deseja
exemplo,
remover
se a bandeira de arquivo de todas as cópias de imagens do banco de dados, você
usa o nokeep
parâmetro.
Neste exemplo, o banco de dados HR, o espaço de tabela USERS é de aproximadamente 250MB
façaebackup
você quer
com um tamanho de seção de 100MB:
Este backup criou três peças de backup; os dois primeiros eram 100 MB cada, e a terceira peça
aproximadamente
era 50 MB, que é o restante do arquivo de dados. Os backups multisecção permitem o
para o backup de um único arquivo de dados. Se a operação for realizada por vários canais (como no
paralelismo
exemplo anterior), as seções serão lidas e escritas simultaneamente.
DICA Não use um alto valor para o paralelismo em seus backups multisection para fazer backup de
um arquivo
pequeno número
grande
deem
discos.
um A contenção de entrada / saída (I / O) de vários canais RMAN atingindo
o mesmo
O arquivo no mesmo disco pode apagar qualquer economia de tempo obtida usando um alto valor
para o paralelismo.
Compressão de backups
Além de ignorar blocos não utilizados durante um backup, o RMAN também pode aplicar um
método
para os blocos
de compressão
usados em um backup quando você especifica o parâmetro COMPRESSED com um
dos quatro
valores:
• BASIC Similar à compressão MEDIUM mas usa mais CPU
• BAIXO Razões de compressão mais rápidas mas baixas
• Uso médio moderado da CPU; bom para restrições de largura de banda de rede
• ALTO Mais uso da CPU; ideal para restrições de largura de banda de rede
• RMAN pode compactar backups de blocos usados usando quatro níveis de compressão:
básico,
Médiabaixa,
e alta.
• Todos os métodos de compressão, exceto para o BASIC exigem a opção Advanced
Compression.
Use Técnicas para melhorar Backups
• Os canais podem ser persistentes com o comando configurar ou atribuído dentro do bloco
prazo
usando o comando ALLOCATE CHANNEL.
• usando o disco como o tipo de dispositivo padrão não requer qualquer alocação de canal.
• RMAN usa otimização de backup para pular backups de um ou mais arquivos se arquivos
idênticos
Já foi feito
têmbackup em disco ou fita.
• otimização de backup leva em conta políticas duplex e retenção antes de pular uma
arquivo fonte.
• Você define otimização de backup no RMAN com o backup comando configure
OTIMIZAÇÃO ON.
Auto teste
1 . Quais tipos de arquivos podem ser copiados pelo RMAN? (Escolha todas as respostas
corretas.)
A. arquivos de log Arquivo
B. cONTROLFILE
C. arquivos de log on-line
D. arquivos senha
E. datafiles tablespace Permanente
F. arquivos de parâmetros do Servidor
G. arquivos de parâmetros estáticos
H. tempfiles tabela temporário
2 . Por que são conjuntos de backup do RMAN menores do que cópias de imagens do RMAN?
(Escolha a melhor
A. Eles sempre resposta.)
usar compressão.
B. Eles sempre ignorar blocos não utilizados.
C. Eles nunca incluem tempfiles.
D. Eles podem ser escritos diretamente em fita.
3 . Qual das seguintes afirmações está correta sobre o backup RMAN offline? (Escolha tudo
respostas corretas.)
A. O banco de dados deve estar no modo NOMOUNT.
B. O banco de dados deve estar no modo MOUNT.
A. ver todas as listas todas as configurações atuais para o banco de dados destino conectado.
B. Você pode usar a configurar. . . Comando CLEAR para definir um valor de configuração
parastring
um vazia.
C. MOSTRAR TODOS mostra os valores de configuração que se aplicam a todos os
bancos
D. Vocêde dados
pode deadestino.
usar configurar. . . Comando CLEAR para definir um valor de configuração
paravalor
a suapadrão.
E. ver todas as listas todas as configurações RMAN que são diferentes do valor padrão.
12 . Qual das seguintes é a variável de substituição padrão para a cláusula de formato do
comando BACKUP? (Escolha a melhor resposta.)
A. % T
B. % d
C. % u
D. % U
E. %I
13 . Qual das seguintes são candidatos para cópias de imagens RMAN? (Escolha duas
respostas.)
A. Datafiles
B. arquivados refazer os arquivos de log
C. arquivos de log redo online
D. arquivos senha
14 . Você execute o seguinte comando para criar um backup de todo o banco de dados: RMAN>
backup
spfile
como
banco de dados de cópia mais archivelog excluir a entrada; O que a cláusula
ENTRADA
(Escolha a melhor
APAGARresposta.)
fazer?
A. Após a conclusão do backup, o RMAN exclui os arquivos de log arquivados de todo
arquivados
destinos de arquivo de log, exceto para a área de recuperação rápida.
B. Após a conclusão do backup, o RMAN exclui os arquivos de log arquivados a partir da
recuperação
área só. rápida
C. Após a conclusão do backup, o RMAN exclui os arquivos de log arquivados a partir da
recuperação
área e quaisquer
rápida outros destinos de arquivo de log arquivados.
D. RMAN exclui todas as cópias obsoletas de backups de banco de dados após a conclusão
do backup.
15 . Qual é a diferença entre um backup completo e um backup de todo o banco de dados?
(Escolha
responda.)
o melhor
A. Um backup de todo o banco de dados pode ser usada como base para uma estratégia de
backup
mas incremental,
um backup completo não pode.
B. Um backup completo pode ser usada como base para uma estratégia de backup
incremental,
backup demas
todoum
o banco de dados não pode.
C. Um backup de todo o banco de dados pode ser apenas uma cópia de imagem. Um
backup completo pode ser uma imagem
cópia ou uma backupset.
D. Uma cópia de segurança completa consiste de uma cópia de segurança de um ou mais
arquivos
backupdede
dados
todoouo banco
de tabela,
de dados
enquanto
contém
quetodos
um os arquivos de dados para todos os
espaços de tabela mais o controlfile.
16 . O que é verdade sobre um backup incremental nível 0? (Escolha todas as respostas
corretas.)
A. A nível 0 backup inclui todos os blocos em um arquivo de dados, incluindo blocos que
nunca foram
usava.
B. A nível 0 backup inclui todos os blocos em um arquivo de dados, exceto para os blocos
queusava.
nunca foram
C. Um backup de nível 0 pode ser usado com um backup cumulativo nível 1.
D. Uma cópia de segurança de nível 0 pode ser utilizado com uma cópia de segurança
diferencial
E. A nível 0nível 1. de um arquivo de dados tem informações adicionais que o diferencia de
backup
um backup
completo
do mesmo arquivo de dados.
17 . Identificar a verdadeira declaração sobre backups incrementais e diferenciais. (Escolha o
melhor
responda.)
A. Um backup diferencial é o tipo padrão de backup incremental e faz o backup de tudo
mudou
blocos desde o último nível 0 nível 1 backup incremental.
B. Um backup cumulativo é o tipo padrão de backup incremental e faz o backup de tudo
mudou
blocos desde o último nível 0 nível 1 backup incremental.
C. Um backup diferencial é o tipo padrão de backup incremental e faz o backup de tudo
mudou
blocos desde o último nível 0 backup incremental.
D. Um backup cumulativo é o tipo padrão de backup incremental e faz o backup de tudo
mudou
blocos desde o último nível 1 backup incremental.
18 . Quando você quiser criar um backupset frente e verso, o que é o número máximo de cópias
de cada peça de backup que você pode criar com um comando BACKUP? (Escolha a melhor
resposta.)
A. Dois para locais de disco e quatro para destinos de fita.
B. Um máximo de quatro.
C. Dois para locais de fita e quatro para locais de disco.
D. O máximo é limitado apenas pelo número de discos de destino ou unidades de fita.
19 . Identificar as verdadeiras declarações sobre backups de arquivamento. (Escolha todas as
respostas corretas.)
A. backups de arquivo pode ser mantido indefinidamente.
B. Você pode deixar uma cópia de segurança de arquivo usando a mudança. . . CAIR
comando.
C. backups de arquivo incluem todos os logs redo arquivados a partir da data de arquivo
para o presente.
D. Depois de criar um backup de arquivo, você deve mantê-lo para o período de retenção
especificado ou soltá-lo.
E. Você pode usar um backup de arquivo para migrar uma cópia do banco de dados sem
afetar
política
o de retenção.
F. Você pode alterar o período de retenção de um backup de arquivo, uma vez que foi
criado.
20 . Você tem um arquivo de dados por parte dos utilizadores do espaço de tabelas smallfile que
tem execute
um tamanho
o seguinte
de 90MB,
comando
e você
RMAN:
RMAN> tablespace usuários de backup dimensão da secção de 40m;
Quantas seções que esta cópia de segurança criar? (Escolha a melhor resposta.)
A. O comando não é executado porque backups multisection se aplicam apenas a BIGFILE
tablespaces.
B. Duas seções de 45MB cada.
C. Duas seções de 40MB cada e uma seção de 10MB.
D. O comando não é executado porque você pode fazer backup de todo o banco de dados
apenas
de backup
como um
multisection.
21 . O que acontece quando você execute os seguintes comandos do RMAN?
RMAN> executar
{Configurar disco CH2 tipo de dispositivo de canal;
banco de dados de backup; }
(Escolha a melhor resposta.)
A. Um backup completo é criado na Área de Recuperação rápida.
B. A base de dados é apoiada a todos os canais padrão configurados do lado de fora do
bloco de processamento
o canal mais
adicional dentro do bloco de processamento.
C. O comando falha porque você não pode usar CONFIGURAR dentro de um bloco prazo.
D. O comando falha porque você não pode usar o backup dentro de um bloco prazo.
22 . Você configurou otimização de backup para o seu banco de dados usando configurar o
backup
OTIMIZAÇÃO ON. Para qual dos seguintes comandos RMAN não pular um backup
se os arquivos são idênticos?
A. DATABASE BACKUP;
B. UTILIZADORES DE BACKUP TABLESPACE;
C. BACKUP ARCHIVELOG ALL;
D. BACKUP Backupset ALL;
Respostas de auto-teste
1. A , B , E , e F . Estes são os tipos de arquivo de banco de dados que o Recovery
e restaurar.
Manager pode fazer backup
C , D , G , e H estão incorrectos. RMAN nunca vai fazer o backup on-line redo logs ou
tempfiles
porque não é necessária para apoiá-los, e não pode fazer backup de um arquivo de parâmetro
estático
o arquivooude senhas externo.
2. B . A backupset nunca vai incluir blocos que nunca foram usados.
A , C , e D estão incorrectos. A está incorreta porque a compressão é uma opção, não
habilitado
por padrão. C é incorrecta porque isso aplica-se a cópias de imagem, assim como conjuntos
de backup.
incorreta porque
D é não é relevante; uma cópia de imagem não pode ir para a fita; se o fizesse,
não seria um
imagem.
3. B , D , e F . Backups off-line deve ser feito no modo de montagem. Este é o único tipo
parade
umbackup
banco de dados de modo noarchivelog, mas pode ser incremental.
A , C , e E são incorrectas. Um é incorrecta porque a base de dados deve ser montado;
caso contrário, o RMAN não será capaz de se conectar ao seu repositório ou encontrar a
localização
arquivos de do
dados. C é incorrecta porque um encerramento imediato é limpa-lo é apenas um
abortar
que poderia causar problemas. E é incorreta porque um banco de dados modo archivelog
pode
o backup
certamente
off-line não é apenas necessário.
4. D . Neste caso, nenhuma das respostas vai funcionar.
A , B , e C são incorrectas. A está incorreta porque uma cópia do controlfile pode ser
criadoo banco de dados é aberto, através de um instantâneo de leitura consistente. B está
enquanto
incorreta porque
comando irá geraresta
um Criar script CONTROLFILE, não uma cópia de arquivo. C é
incorrecta
porque a multiplexação de arquivo é uma precaução adicional, não o único.
5. E . RMAN detectará a ausência de um apoio apropriado para servir de base a
e, portanto,
incrementais
fazer um backup de nível 0.
A , B , C , e D estão incorrectos. A está incorreta porque isso irá ocorrer
automaticamente.
incorrecta B é não pode ser usado como a base para qualquer backup
porque completo
incremental.
incorreto porque
C é redo é necessário para preencher a lacuna entre o último backup
incremental
hora atual. Deaé incorrecta porque uma estratégia incremental pode ser utilizado com
modo NOARCHIVELOG, desde que o backup é feito enquanto o banco está fechado.
6. A , B , e C . Enterprise Manager irá instruir o agente para executar o backup. O banco
de dados
instância deve estar em execução, ou o agente não será capaz de entrar em contato com ele e
começar RMAN.
D está incorrecta. Backups do Oracle-agendados não usar o programador do sistema
7. operacional.
C . O comando crosscheck verifica se o repositório não reflete com precisão a realidade.
A , B , e D são incorrectas. A está incorreta porque crosscheck não validar se
os backups são bons somente se eles existem. B está incorreta porque crosscheck não
Deletar menções a backups em falta; Ele só sinalizadores-los como expirado. D é incorrecta
crosscheck confirma a existência de ambos os conjuntos de backup e cópias de imagem.
porque
8. D . Backups que são obsoletos de acordo com a política de retenção do RMAN será
removido.
A , B , C , e E são incorrectas. A está incorreta porque isso descreve arquivos de dados,
área não o jejum
de recuperação. B está incorreta porque a operação não será necessariamente fail-lo
pode ser liberar espaço automaticamente. C está incorreta porque o sistema de alerta só irá
possível
relatar o problema; ele não vai corrigi-lo. E é incorrecta porque EXPIRADA refere-se ao
estado dode backup no repositório, e não o próprio backup.
registro
9. A , E , e H . RMAN faz o backup do controlfile atual eo spfile (se você usar um) depois
um backup com êxito, quando você voltar explicitamente o controlfile atual, e quando o
estrutura das alterações da base de dados.
Objetivos do exame
• 63.1.10.2 Executar recuperação completa e incompleta
• 63.1.1.12 recuperar arquivos usando o RMAN
• 63.1.12.1 Executar recuperação para spfile, senha do arquivo, CONTROLFILE e Redo Log
Files
• 63.1.12.2 Executar recuperação Tabela de Backups
• 63.1.12.3 Executar recuperação de Índice e de leitura apenas Tablespaces, Tempfile
• 63.1.12.4 Restaurar um banco de dados para um novo hospedeiro
Este capítulo detalha usando Recovery Manager (RMAN), em um cenário de recuperação. Isso é
necessárioum
perderam se você
ou mais arquivos de dados, um CONTROLFILE, ou, eventualmente, todo o banco de
dados. Dois
definido pelatermos
primeira
devem
vez: ser
restaurar e recuperar . Para restaurar um arquivo significa para substituir
o arquivo
uma cópiadanificado
extraída deoualguma
faltando
forma
comde backup. Para recuperar um arquivo significa aplicar vetores
dearquivo
o mudançarestaurado,
refazer a a fim de trazê-lo para frente no tempo, de preferência ao estado em que estava
antes queRMAN
ocorreu. o dano automatiza todo o processo de restauração e recuperação.
Executar recuperação completa e incompleta
Nas seções seguintes, você vai aprender como usar os comandos de restauração e recuperação para
banco de dados em execução no modo ARCHIVELOG. Primeiro, você vai ler sobre as funções
um
ebásicas
recuperar
do RESTAURAR
e como eles funcionam. A seguir, você verá como recuperar tanto um não-crítica e uma
crítica
arquivo de dados com sucesso. Você vai usar recuperação incompleta quando tanto mais recentes
redodisponível
não logs são ou você deseja restaurar e recuperar a um tempo no passado antes de algum tipo de
ocorreu um erro.
lógica
Estas são as diferenças: A recuperação completa pode (normalmente) ser feito enquanto o banco
recuperação
de dados incompleta
está aberto;é feito no modo de montagem. A granularidade de restauração para a
recuperação
arquivo danificado
completa(ouéarquivos);
a a granularidade de recuperação incompleta é toda a base de dados.
recuperação utiliza a palavra-chave ATÉ para parar a recuperação em um número determinado de
Incompleto
alteração
ou do sistema
log número (SCN), odetempo,
de sequência interruptor; recuperação completa não. Após a recuperação completa,
nenhuma outra
ação é necessária, é como se nada tivesse dado errado; recuperação incompleta termina por re-
criando os arquivos de log redo online, com o comando RESETLOGS.
Porque o banco de dados está no modo ARCHIVELOG, a recuperação até a última transação
confirmada
possível. é palavras, os usuários não tem que digitar novamente todos os dados para
Em outras
transações
Note que é,anteriormente
estritamente falando,
cometidos.
não é necessário tomar todo o espaço de tabelas offline. Se o
espaço dedetabela
consiste múltiplos arquivos de dados e apenas um dos arquivos de dados está danificado, é
possível
um off-line
ter arquivo
apenas que
de dados. Isto irá resultar em apenas alguns objetos no espaço de tabela (aqueles
que
o têm extensões
arquivo em estar indisponíveis. Como o seu software irá reagir a esta situação é difícil de
danificado)
prever.
Exercício 24-1: Restaurar e recuperar os USUÁRIOS Tablespace Neste exercício, o arquivo de
dados para o tabela foi acidentalmente excluído pelo administrador do sistema. Restaurar e recuperar
USUÁRIOS
tablespace enquanto o banco de dados ainda está aberto para acesso a outros espaços de tabela. É
o
assumido que
exercícios anteriores foram concluídos.
TIP Começando com Oracle Database 12 c , você pode executar a maioria dos comandos SQL
dentro RMAN
usando sem RMAN sql. No entanto, você ainda pode optar por usar o comando sql para
o comando
claro que você está executando um comando não-RMAN.
torná-lo
Todos os usuários tentando acessar a tabela enquanto está offline receberá uma mensagem
semelhante
Os seguintes:
à
3. Recuperar a tabela USERS para aplicar os arquivos de log redo arquivados e online.
1. Desligue o banco de dados com shutdown abort se ele já não estiver desligado.
2. Abra novamente o banco de dados com STARTUP MOUNT.
3. Use o RMAN RESTAURAR comando para copiar (restaurar) o arquivo de dados (ou
arquivos
tablespace
de dados)
críticapara
a partir
o da localização de backup.
4. Use o RMAN RECUPERAR comando para aplicar qualquer arquivado ou refazer on-line
arquivos de log. o banco de dados para usuários com ALTER DATABASE ABERTO.
5. Abra novamente
Todas as transações confirmadas são recuperados até o momento da falha, para que os usuários
reinserir
não terão
quaisquer
que dados.
No modo de montagem (necessária quando reparar danos em um arquivo crítico), ALTER
comandos
TABLESPACE
não estão disponíveis, por isso, restauração e recuperação deve ser feito no nível de
arquivo. o ALTER
comandos TABLESPACE pode ser usado somente quando o banco de dados é aberto.
Para criar um ponto de restauração para um determinado SCN, use as a partir de sintaxe.
Os pontos de restauração também são úteis quando você quiser usar a tecnologia de Flashback da
Oraclede
banco para
dados
flashpara
backuma ponto no tempo no passado.
A Oracle mantém pontos de restauração para, pelo menos, desde que o tempo especificado no
parâmetro de inicialização CONTROL_FILE_RECORD_KEEP_TIME. Se você quiser
explicitamente
ponto de restauração
para manter
mais, use
um a palavra-chave PRESERVAR quando você criar o ponto de
restauração.
Como você poderia esperar, você pode remover explicitamente um ponto de restauração com a
queda ponto de restauração
comando.
1. Determinar o ponto de destino para o restauro (SCN, tempo, ponto de restauração, ou log
número de sequência).
É importante especificar as variáveis NLS corretos para que o RMAN interpretar os textos de
vocêdata
fornecer corretamente; aqui estão alguns valores de exemplo:
Observe também que a abertura do banco de dados como somente leitura após a sua recuperação
incompletadedá-lhe
oportunidade a outro recuperação incompleta para um SCN ou horário diferente. Uma vez
executar
banco de dados
que você abrir opara leitura e escrita com RESETLOGS, a seqüência de log atual é definido como 1,
e qualquer refazer
informação não aplicada durante a recuperação é descartado. Isso impede que você executar outra
recuperação usando um redo gerado após o SCN ou timestamp de sua recuperação incompleta.
Exercício 24-2: Executar recuperação incompleta para restaurar o espaço de tabela USERS
Neste
exercício, você irá criar um ponto de restauração e usá-lo mais tarde para se recuperar da eliminação
acidental
tabelas e exibições
de na tabela de exemplo.
1. Conecte-se com o SQL * Plus e criar um ponto de restauração para o atual SCN.
4. No prompt do RMAN, crie um bloco de execução que usa o ponto de restauração criado
anteriormente
e recuperar para restaurar
o banco de dados para o tempo do ponto de restauração.
Note-se que vários métodos menos draconianas estão disponíveis para restaurar e recuperar essas
pontos
tabelas
de vista,
e tais como a utilização Flashback Database, restaurando e recuperando cada tabela,
enquanto
banco de dados
o ainda está online, ou recuperar as tabelas da lixeira. Cada situação de recuperação
deve ser separadamente, o equilíbrio entre estes factores:
avaliadas
Aqui está um exemplo de script RMAN para implementar uma estratégia de cópia de imagem
incrementalmente
base: atualizado diariamente
Aqui está um resumo do que acontece neste bloco prazo. A primeira vez que você executá-lo,
cópia
nãodahá
imagem
nível 0para restaurar e, da mesma forma, nenhum backup incremental nível 0 Ainda, de
modo a obter estas mensagens:
RMAN cria automaticamente um backup de nível 0 sempre que ocorre um backup de nível 1 e
nível
não
0 backup.
há A próxima vez que você executar o script, o nível existe 0 backup, mas não
incremental
backup existe
nível
ainda.
0 Assim, o comando RECUPERAR no bloco de partida ainda gera estas
mensagens:
1. Leve o datafiles faltando offline. Você pode usar uma das vistas de desempenho dinâmico
V $ RECOVER_FILE, V $ DATAFILE_HEADER, ou V $ TABLESPACE para identificar
quais
arquivos de dados precisam de recuperação.
2. CHAVE Use RMAN. . . PARA COPIAR para apontar para a cópia de imagem dos arquivos
de dados em falta.
3. Recuperar os arquivos de dados usando o comando RMAN RECUPERAR.
4. Traga os arquivos de dados de volta online.
Exercício 24-3: Usar o comando Mudar para recuperar um arquivo de dados rapidamente o
arquivo
USUÁRIOS de dados para
tabela o
desaparece misteriosamente. Os usuários começam a reclamar imediatamente,
reportar estequando tentar criar ou atualizar uma tabela:
mensagem
Além disso, você verá esta mensagem no log de alerta. Este alerta também deve ser visível como
a home
um alerta
page Enterprise
sobre Manager.
Descubra o que o número arquivo de dados que você precisa para restaurar, mudar para uma
cópiadededados
arquivo imagem, e ema tabela
e trazer seguida,
derecuperar o
volta online.
1. Prepare-se para o exercício através da criação de uma cópia de imagem do banco de dados
Noa área
para prompt do RMAN, utilize
de recuperação rápida.o seguinte:
Alternativamente, você pode tomar o arquivo de dados offline a partir de dentro de uma
sessãopara
4. Mude RMAN.
o arquivo de dados copiar para a tabela USERS.
NOTA Você pode usar o comando switch com qualquer arquivo de dados ou TABLESPACE
parâmetro, o que for mais fácil ou mais conveniente. Além disso, você não precisa saber onde seu
arquivo
cópia é. de
RMAN
dadossabe onde ele está e vai ligá-lo e atualizar o catálogo controlfile e recuperação
automaticamente com o novo local.
5. Recuperar o arquivo de dados usando os últimos arquivos de log redo arquivados e online.
Alternativamente, você pode trazer o arquivo de dados on-line novamente usando o SQL>
Umaprompt.
vez que seu banco de dados é voltar a funcionar depois de mudar para uma cópia de
paraimagem,
mudar ovocê provavelmente
arquivo de dados devai querer
volta para seu local original após o disco de origem tenha sido
reparado. Isto éverdadeiro se a cópia da imagem que você mudou para reside na área de recuperação
especialmente
rápida. Para
arquivos de dados
moverdeo volta para o local original, siga estes passos:
Exercício 24-4: Usar o comando CHAVE Depois de criar o arquivo de dados USUÁRIOS do
Tablespace
o em Neste exercício, você vai mudar o arquivo de dados para o espaço de tabela de
local original
usuários
seu local de volta para
original após o disco de origem tenha sido reparado (ou você ter descoberto por que
arquivos de dados
desaparecendo do disco
são de origem). Desta vez, fazer o trabalho no nível de tabela. o arquivo de
locais para cada espaço de tabela estão atualmente como segue:
dados
Note que você pode nomear a cópia da imagem que quiser. Neste caso, você vai usar o
nome do arquivo de dados para ser consistente com os outros nomes de arquivo de dados.
original
2. Leve o USUÁRIOS tabela desligada em preparação para o comando switch.
6. Verifique se o arquivo de dados para a tabela USERS está de volta em seu local original.
7. Criar uma nova cópia da imagem para estar pronto quando ou se o arquivo de dados
desaparece
também novamente, embora
pode usar a cópia davocê
imagem que você acabou comutada de.
O DBID deve ser parte de sua documentação mais básico e terá sido exibida cada
vez que ligou com o RMAN. Em seguida, reiniciar o banco de dados com um spfile padrão (você vai
algo semelhante no final do capítulo, quando se recuperando para um novo hospedeiro).
fazer
Restaurar o CONTROLFILE
Se o controlfile é multiplexada (como deveria ser), a recuperação da perda de uma cópia é trivial;
copiar uma cópia controlfile sobrevivendo sobre a cópia controlfile danificado ou faltando. Isso deve
simplesmente
ser feito que o banco de dados é desligado ou em modo NOMOUNT (que será sempre o caso,
enquanto
porque o terá falhado quando a cópia controlfile foi danificado e não pode ser posteriormente
instância
montado). Em seguida, montar e abrir o banco de dados. Somente se todas as cópias do controlfile
são perdidos
mais complexo
é nada
necessário. A rotina é como se segue:
A parte estranho é o segundo passo. Porque o banco de dados não pode ser montado, o RMAN
nãoao
acesso temseu repositório e não, portanto, saber onde as peças de backup que contêm o
backups CONTROLFILE realmente são. Há três maneiras de contornar isso.
Primeiro, use o RESTAURAR CONTROLFILE DA comando AUTOBACKUP. Os autobackups
parairum nome bem conhecido, com base na DBID e RMAN pode encontrá-los automaticamente.
Em segundo lugar, use um catálogo de recuperação. O catálogo contém uma cópia do repositório
estão
RMAN,
conectados
entãoase
ele,
você
o RMAN pode interrogar o repositório para encontrar os locais de backup.
Em seguida,
comando RESTAURAR
use o CONTROLFILE ;.
Em terceiro lugar, nomear um pedaço de backup que você sabe inclui um backup controlfile.
mantido
Desdea saída
que você
de seus
tenhacomandos de backup executados anteriormente, você terá esta informação:
RESTAURAR CONTROLFILE FROM '......';.
Restaurar o controlfile a partir de um backup automático é semelhante aos passos que você usar
a partir
paraderestaurar
um autobackup.
um spfileAqui estão os comandos de amostra do RMAN:
Note-se que já que não há controlfile, você tem que abrir o banco de dados com NOMOUNT e
restaurar
depoiso controlfile. Depois de montar o banco de dados com o controlfile backup restaurado,
recuperar
você deveo banco de dados porque o controlfile backup contém informações sobre uma versão mais
o banco de dados. Pela mesma razão, você deve abrir o banco de dados com RESETLOGS.
antiga do
RMAN restaura o controlfile a todos os locais especificados pelo parâmetro de inicialização
CONTROL_FILES. Se um ou mais desses locais ainda não estão disponíveis, você terá que editar o
parâmetro CONTROL_FILES para especificar locais alternativos ou restaurar temporariamente o
controlfile
um local diferente.
para
1. Identificar os locais CONTROLFILE onde todas as cópias do controlfile usados para residir.
Alguns pontos são dignos de nota aqui. RMAN pode se conectar à instância, mesmo que não
émontado. Na verdade, o RMAN tem que conectar a um banco de dados desmontado para ser
capaz de restaurar
controlfile. RMANaencontra o autobackup controlfile na área de recuperação rápida e
escreve-o
os três destinos
para CONTROLFILE especificados pelo parâmetro de inicialização
CONTROL_FILES.
4. Monte o banco de dados, recuperar o banco de dados (para sincronizar os arquivos de dados
com
controlfile)
o restaurado
e abra o banco de dados com RESETLOGS.
Um grupo de redo log pode ter uma de seis estados na visão V $ LOG.
Em um determinado ponto no tempo, os estados mais comuns são atuais e ativos, e inativos.
Um grupo de redo log está no estado não utilizado após a criação, e uma vez que é usado, ele nunca
vai voltar ao que
Estado. Os estados de compensação e CLEARING_CURRENT existir quando você recriar um log
corrompido
arquivo, que idealmente não ocorrerá muitas vezes!
O banco de dados de exemplo tem três grupos de arquivo de log redo, e esta consulta de V $
cadaLOG
log: mostra o status de
Os dois grupos de arquivo de log com um status de inativos foram arquivados. Dependendo do
de entrada / saída (I / O) de carga do sistema e outros factores, o estado ARCHIVED será NO até o
log
arquivo foi gravado com êxito para todos os destinos de arquivo de log arquivados obrigatórios.
Você também pode identificar o membro perdido ou danificado arquivo de log redo utilizando o
V vista $ LOGFILE:
A solução para este problema é simples. Largar o membro inválido e adicionar um novo membro
para o grupo, como neste exemplo:
Note-se que a redundância fornecida pelo grupo de arquivo de log redo reparado não estará
da próxima
disponível
vezaté
que este grupo arquivo de log está ativo. Se o próprio disco de destino não está
danificado
redo arquivo
e odeoriginal
log é logicamente corrompido de erro do usuário ou um processo não autorizado,
você pode
arquivo de reutilizar o redo originais
log, especificando a cláusula de reutilização como segue:
Se a instância é baixo, iniciar o banco de dados no modo de montar e executar este comando.
podeCaso
executar
contrário,
o comando
você quando o banco de dados está aberta. Todos os membros do grupo de
arquivo de log redo são
reinicializado. Se qualquer um ou todos os membros do grupo de redo log estão faltando, então eles
são recriados,
desde que os diretórios de destino estão disponíveis.
O grupo de redo log foi arquivado. Assim, sem perda de dados irá resultar, e todos os backups
em
combinação com arquivos de log redo arquivados podem ser usados para a recuperação completa do
banco de dados
dados.reutiliza
Até o o grupo arquivo de log redo, tem um status de UNUSED, como você pode
ver nesta consulta:
Se você tem um grupo nonarchived danificado redo log inativo, você não perderá nenhum
comprometido
transações. No entanto, você deve executar um backup completo depois de limpar o grupo de redo
log para
você podegarantir
executar
queuma recuperação completa. Se você não fizer isso, você terá uma lacuna em
arquivos de
Portanto, você
logserá
redocapaz
arquivados.
de executar apenas incompleta recuperação até o SCN da última transação
no arquivo de log redo arquivados criado antes que o arquivo de log ausente.
Para limpar o segundo grupo de log unarchived, iniciar o banco de dados no modo de montagem
up) (se
e use o seguinte
ainda comando:
não estiver
Note-se a palavra-chave não arquivadas neste comando. Ele executa a mesma ação que ocorre
vocêquando
cancelou um grupo de redo log arquivados, mas esta é a maneira de forçá-lo a reconhecer que
da Oracle
você terá uma lacuna em seus arquivos de log redo arquivados.
Depois de limpar o grupo de arquivo de log, executar um backup completo. Isso fornece um
parabackup que vocêcompleta,
a recuperação pode usarjuntamente com todos os arquivos de log redo arquivados sucessivas.
Um fator complicador para considerar quando você está limpando um redo log inativo
nonarchived
grupo danificado
é se um arquivo de dados fora de linha precisa do grupo arquivo de log apagada antes que
possaacontecer,
isso ser colocado
vocêonline.
pode ter
E se
que soltar o arquivo de dados. Segmentos na tabela contendo o arquivo
de dados
pode existir
desligada
em outros arquivos de dados on-line que pertencem a este espaço de tabela e podem ser
realocados para
tablespaces. A tabela
outra pode ter que ser recriado utilizando backups lógicos ou algum outro método.
Não é possível recuperar o arquivo de dados e, portanto, a tabela que contém o arquivo de dados,
porque o redo
obrigados a trazer o arquivo de dados on-line novamente se foi. A Oracle faz você reconhece que o
seu arquivo deneste
irrecuperável dadoscenário,
é bem como, e você deve usar o DATAFILE UNRECOVERABLE
palavras-chave quando você limpar o grupo de arquivo de log:
tornar-se inativo. Limpar o grupo arquivo de log redo como você fez com um grupo de redo log
inativo.
não Você
perder irá
quaisquer transações. Além disso, seu redo arquivado fluxo de arquivo de log será
intacto, sido
tinham se o arquivados
grupo no momento da ocorrência do problema.
Se o local para o grupo arquivo de log redo online danificado está disponível, a Oracle irá
log reinicializar
grupo ficheiro o juntamente com todos os outros grupos, redefinindo o número de sequência de
registo de 1 eSeiniciando
encarnação. o local não
umestá
novomais disponível, renomear os arquivos de log redo online e apontá-
los para
novo umcomo no presente exemplo, ao passo que a base de dados está montado e antes de abrir a
local
base de dados com
RESETLOGS:
Quando você abrir o banco de dados com RESETLOGS, a Oracle re-cria e inicializa qualquer
arquivos
falta de log redo online.
Perder um Tempfile
Uma das consequências da perda de um tempfile é que quaisquer instruções SQL que precisam disco
espaço para triagem (em outras palavras, a memória insuficiente disponível no espaço de memória
temporário
do Oracle)
falhou. Se um
vai ou todos os arquivos de dados para o espaço de tabela TEMP é eliminado no nível do
sistema
pode criar
operacional,
um novo arquivo
você temporário no mesmo diretório que o original usando o TABLESPACE
ALTER
comando. Se o local do diretório original não está disponível, você pode criá-lo em um local
Depois disso, você pode soltar o tempfile original usando um comando semelhante ALTER
diferente.
TABLESPACE.
Exercício 24-6: Criar uma substituição Tempfile para o Tablespace TEMP Neste exercício, a
tempfile para o espaço de tabela TEMP foi acidentalmente apagado, então você deve criar outro
tempfile paraenquanto o banco de dados ainda está em execução.
substituí-lo,
2. Crie um novo arquivo temporário com um nome diferente para o espaço de tabela TEMP.
3. Solte o tempfile anterior. Isto irá atualizar apenas o controlfile porque o original
tempfile está faltando.
Se a localização do diretório do disco original não está mais disponível, o banco de dados ainda
usarcomeça,
as etapase você pode
a partir da secção anterior para recriar os tempfiles manualmente para a área de tabela
TEMP.
Broca Two-Minute
Executar recuperação completa e incompleta
• Use RMAN restaurar e recuperar para a recuperação completa de um crítico e não crítico
perda de arquivo de dados.
• Datafiles a partir do sistema e desfazer tablespaces são arquivos de dados críticos.
• Ao restaurar e recuperar um arquivo de dados críticos, o banco de dados deve estar no modo
MOUNT.
• É possível recuperar completamente qualquer arquivo de dados se o banco de dados está no
modo
• VocêARCHIVELOG.
usa pontos de restauração para recuperar um banco de dados para um SCN ou um tempo
no passado.
• Use CRIAR ponto de restauração para criar um ponto de restauração.
• Você deve abrir o banco de dados com RESETLOGS se você executar a recuperação
incompleta.
• Você pode recuperar cópias de imagens com as recentes 1 backups mais nível incremental.
• RMAN determina automaticamente a melhor cópia da imagem a ser usada se mais de um
estiver disponível.
• Use tags com uma estratégia de cópia de imagem incrementalmente atualizado para garantir
que
backup
o correto
incremental atualiza a cópia de imagem.
• Usando cópias de imagens pula a etapa de restauração e economiza tempo de recuperação
global.
• Use o comando CHAVE RMAN TO. . . COPY para alternar para a cópia mais recente imagem
para
um arquivo de dados, tabela ou banco de dados.
• RMAN aplica automaticamente backups incrementais e arquivos de log redo arquivados
quando
recuperar
vocêcom uma cópia de imagem.
• Utilizar a vista de desempenho V $ TABLESPACE dinâmico e V $ DATAFILE_HEADER
para
determinar a tabela e número precisando de arquivo de dados recuperação.
• Depois de mudar para uma cópia de imagem, você pode voltar para uma cópia de imagem
para
localização
o originalquando ele se torna disponível.
• Você usa o comando SET NEWNAME no RMAN para identificar novos locais para
restaurada
arquivos de dados.
• Depois de restaurar um ou mais arquivos de dados com restauração, você usar o comando
mudar
atualizar
parao controlfile e catálogo de recuperação com os novos locais arquivo de dados.
• Você pode usar um backup automático RMAN para restaurar qualquer um spfile ou controlfile
quando
cópiastudo
são online
perdidas.
• RMAN restaura o controlfile a todos os locais especificados pelo parâmetro de inicialização
CONTROL_FILES.
• Se o spfile está perdido, RMAN usa um spfile padrão quando você iniciar o banco de dados
com
• UseNOMOUNT.
RESTAURAR SPFILE DE AUTOBACKUP para restaurar o spfile.
• Use RESTAURAR CONTROLFILE DE AUTOBACKUP para restaurar o controlfile.
• Ao restaurar um controlfile de autobackup, você deve abrir o banco de dados com
• Opcionalmente, é possível restaurar uma cópia do controlfile para um local alternativo.
RESETLOGS.
2 . Quais espaços de tabela contêm arquivos de dados críticos que devem ser recuperados
quando
desligada?
o banco
(Escolha
de dados
a melhor
é resposta.)
A. SYSTEM e SYSAUX
B. SISTEMA e desfazer
C. SISTEMA, SYSAUX, e desfazer
D. sistema e usuários
3 . Durante a recuperação completa de um arquivo de dados não crítico, qual dos seguintes
passos não são (Escolha duas respostas.)
requeridos?
A. Use o RMAN RESTAURAR comando para carregar os arquivos de dados perdidos a
partir
B. Abradonovamente
backup. o banco de dados com RESETLOGS.
Quantas vezes você precisa executar este script antes da cópia de imagem terá sido
com um nível 1 backup incremental? (Escolha a melhor resposta.)
atualizado
A. Uma vez
B. Duas vezes
C. vezes Três
D. Pelo menos quatro vezes
8 . O comando RMAN interruptor é equivalente ao comando o SQL? (Escolha o melhor
responda.)
A. ALTER DATABASE RENAME ARQUIVO
B. ALTER DATABASE ARCHIVELOG
C. alter database open resetlogs
D. ALTER SYSTEM LOGFILE CHAVE
9 . Qual é a ordem correta dos comandos a seguir para restaurar um controlfile de um
autobackup RMAN? (Escolha a melhor resposta.)
1. recuperar banco de dados
2. ALTER DATABASE ABERTO RESETLOGS
NOMOUNT 3. STARTUP
4. ALTER DATABASE MOUNT
5. RESTAURAR CONTROLFILE DE AUTOBACKUP
A. 5, 3, 4, 1, 2
B. 3, 5, 4, 1, 2
C. 3, 5, 4, 2, 1
D. 5, 1, 3, 4, 2
10 . Quando você executa o RMAN comando RESTORE CONTROLFILE, onde é que RMAN
colocar
versão
o anterior do controlfile? (Escolha a melhor resposta.)
A. Em todos os locais disponíveis definidas pelo parâmetro de inicialização
CONTROL_FILES
Respostas de auto-teste
1. D . Quando você restaurar e recuperar um arquivo de dados crítica, todo o banco de
paradados
baixo deve
e reaberto
ser fechado
no modo MOUNT para abrir o controlfile e tornar os locais arquivo de
disponível para RMAN.
dados
A, B, e C são incorrectas. A está incorreta porque todo o banco de dados deve estar
offline
aquando a recuperação de arquivo de dados críticos. B é incorrecta porque a recuperação de
um arquivo
requer apenasdeodados quedenão
arquivo é crítica
dados danificado para ser offline. C é incorrecta porque a base
de dados
no modo deve
MOUNT ser para recuperar um arquivo de dados crítica e pode estar no modo OPEN
para recuperar
arquivo umnão crítico.
de dados
2. B. O sistema de tabela e desfazer conter arquivos de dados críticos e, portanto,
a base
requerem
de dados para estar no modo de montagem durante o processo de recuperação.
A, C, e D são incorrecta porque as áreas de tabela SYSAUX e os utilizadores não
arquivos
contêm
de dados críticos.
3. B e C. O banco de dados não precisa ser aberto com RESETLOGS porque você é
não executar a recuperação incompleta. Para um arquivo de dados que não é crítica, apenas
espaço de
o arquivo detabelas contendo
dados em falta ou danificado precisa ser offline.
A, D, e E são incorrectas. Estes passos são todos necessários.
4. D. V $ DATABASE contém o mais recente SCN na coluna CURRENT_SCN.
A , B , C , e E são incorrectas. A e B são incorrecta porque a coluna
Não CURRENT_SCN não existe em qualquer V $ DATAFILE_HEADER ou V $
INSTANCE.
incorreto, poisCVé $ DATABASE não tem uma coluna chamada LAST_SCN. E é incorrecta
porque quando RMAN é iniciado, ele mostra apenas o DBID e não o atual SCN.
5. C. A palavra-chave Preserve mantém o ponto de restauração após o tempo especificado
CONTROL_FILE_RECORD_KEEP_TIME.
pelo
A , B , e D são incorrectas. A está incorreta porque a palavra-chave MANTER não é
válida para o
comando. B é incorrecta porque PRESERVAR não foi especificado. D é incorrecta porque
Até sempre não é válido para o comando.
6. B e D. Tanto NLS_LANG e NLS_DATE_FORMAT deve ser definido de modo que o
RMANcorretamente cordas data prevista durante uma operação de recuperação.
interpretar
A, C, e E são incorrectas. ORACLE_SID e ORACLE_BASE são necessários para
paraconectar
o software de banco de dados e banco de dados correto, mas eles não estão
directamente
Com base no relacionadas
tempo de recuperação.
com o RMAN
NLS_TIME_FORMAT não é uma variável de ambiente
7. válida.
C . A primeira vez que o script é executado, não há nível 0 cópia de imagem ou um
cópianível
de segurança.
de 1 incrementais
A segunda vez que o script é executado, a cópia de imagem de nível 0
existe, mas não
incremental existe1 de backup para aplicar a ele. O terceiro tempo sucessivos, o primeiro
de nível
nível 1 de backup é aplicado à cópia da imagem.
periódica
A , B , e D são incorrectas. Todos eles especificar o número incorreto de execuções.
8. A. Tanto o INTERRUPTOR RMAN eo SQL ALTER DATABASE RENAME
comandos
ARQUIVOatualizar o local do arquivo de dados, tanto no controlfile eo catálogo de
recuperação.
B , C , e D estão incorrectos. B está incorreta porque este comando coloca o banco de
Mododados em
ARCHIVELOG. C é incorrecta porque o comando é usado apenas após incompleta
recuperação. D está incorreta porque as chaves de comando on-line arquivos de log redo,
não DATAFILE
nomes.
9. B. A fim especificado está correcto. Você deve abrir o banco de dados com
RESETLOGS
seu controlfile desde tem informações sobre uma versão mais antiga do banco de dados.
restaurado
A, C, e D estão incorrectos vez que especificam uma sequência incorrecta de comandos.
10. C. O comando restaura o controlfile de autobackup a todos os locais definidos pelo
CONTROL_FILES de parâmetros de inicialização. Se qualquer um desses locais não
estiverem
o valor de disponíveis,
CONTROL_FILESa mudança
ou usar o '<TO filename opção>'.
A, B, e D são incorrectas. A está incorreta porque o comando falhará se qualquer um
dos
locais definidos por CONTROL_FILES não estão disponíveis. B é incorrecta porque a
autobackup do controlfile provavelmente dará origem a partir da área de recuperação rápida.
Dé
incorreto porque RMAN restaura o controlfile a todos os locais definidos pela
CONTROL_FILES.
11. C . O INVALID estatuto só é válido para um membro do grupo de redo log on-line, não
grupo
para
inteiro.
o
A , B , D , e E são incorrectas. Eles são estados válidos para um grupo de redo log
12. online.
D . V $ registo contém o estado de grupos de redo log, incluindo se o grupo é
atualmente sendo escrito. V $ LOGFILE contém o estado de grupo redo log indivíduo
membros.
A , B , e C são incorrectas. A vista V $ LOG e V $ LOGFILE não contêm
informações sobre arquivos de log redo arquivados, embora a vista V $ LOG tem uma
se o grupo
coluna paradeindicar
arquivo de log redo foi arquivado ou não.
13. A e D . Qualquer método pode ser usado para recuperar o arquivo de senhas, mas
comando
usando
requer
o orapwd
que você recriar as contas de usuários privilegiados que precisam
SYSOPER, SYSADM, SYSBACKUP, SYSDG e SYSKM privilégios.
SYSDBA,
B e C são incorrectas. B está incorreta porque você não aplicar arquivos de log redo ao
arquivo de senha. C está incorreta porque orapwd é válido apenas em um comando do
sistema operacional
pronto.
14. B. Não existe tal comando.
A , C , e D estão incorrectos. A está incorreta porque cria um arquivo baseado em texto
dois contendo
criar comandos CONTROLFILE diferentes, dependendo da disponibilidade do seu
arquivos de dados e arquivos de log redo online. C está incorreta porque é uma das muitas
maneiras
faz que do
o backup o RMAN
controlfile. D está incorreta porque cria uma cópia do binário do controlfile
o local especificado.
em
15. D . Tabela temporários fornecer espaço de classificação para consultas que usam
GROUPORDERBY quando
BY e a operação de classificação não vai caber na memória. Outras
operações
bem: SELECTcausar
DISTINCT,
tipos comocriações de índice, eo índice reconstrói.
A, B, e C são incorrectas. A está incorreta porque o banco de dados permanece
disponível
algumas parae mais atividade DML mesmo se o espaço de tabela TEMP não está
consultas
disponível.
incorreto B é os usuários ainda podem executar instruções SELECT que não precisam de
porque
triagem oudea classificação vai caber na memória. C está incorreta porque a maior atividade
operação
DML não
exigem que o espaço de tabela TEMP.
16. B . Uma vez que o tempfile faltando é descartado e um novo adicionado, o espaço de
automaticamente
tabela TEMPdisponível
é para os usuários.
A, C, e D estão incorrectos. A está incorreta porque deixar cair o espaço de tabela não é
necessário, e você não pode largar a tabela temporário padrão. C está incorreta porque você
Não é possível recuperar um espaço de tabela temporário; não há objetos permanentes em
uma temporária
tablespace. D está incorreta porque o banco não precisa ser desligado para recuperar um
tabela temporário.
CAPÍTULO 25
diagnosticar falhas
Objetivos do exame
• 63.1.9.1 Descrever o fluxo de trabalho automático de diagnóstico
• Bloco de corrupção 63.1.9.2 Handle
Quando você tem que lidar com erros de banco de dados ou até mesmo um banco de dados que é
completamente
quer para
gastar tempo baixo,
extra você nãouma ou mais condições de erro de banco de dados para Oracle
documentar
Support. primeiro
capítulo este dá-lhe uma visão geral de como a Oracle reporta problemas com o banco de dados
e, em seguida,
mostra como ela categoriza erros em problemas e incidentes.
Além disso, o quadro Health Monitor fornece ambas as ferramentas proativas e reativas para
comlidar
erros de banco de dados. O administrador de banco de dados (DBA) pode executar uma
verificação
usando Enterprise
de saúde
Manager
pró-ativa
Nuvem
manualmente
de Controle 12 c (Cloud Control) ou pacotes PL / SQL. Em
contraste,
Health Monitor
o pode executar verificações de diagnóstico em resposta a erros de banco de dados
críticos.
Finalmente, o capítulo mudará de relatórios, gerenciamento e enviar solicitações de serviço para
problemas de banco de dados e incidentes para recuperar blocos individuais depois de ter
identificadoGestor
problema. o de recuperação (RMAN) suporta a detecção e recuperação de blocos individuais
usando
o parâmetro de inicialização DB_BLOCK_CHECKING eo RMAN RECUPERAR. . . QUADRA
comando. RMAN também torna mais fácil para identificar falhas e implementar reparos usando os
Conselheiro de recuperação.
dados
Compreender o ADR
O ADR é um repositório baseado em arquivo de informações não-crítica de diagnóstico e outros
paraambiente.
seu todos os produtos
Cada instância de banco de dados e Automatic Storage Management (ASM) instância
tem o seude diretório próprio chamado de casa ADR dentro de um diretório de nível superior
estrutura
conhecida
um ambiente
como
Real
a base
Application
de ADRClusters
. Dentro(RAC), cada instância tem seu próprio subdiretório, que não
só torna mais fácil de visualizar diagnósticos para uma instância individual, mas também torna mais
ferramentas
fácil para o de diagnóstico para analisar dados em casos de problemas de todo o cluster.
O diretório base ADR também é conhecido como o diretório ADR raiz . A localização para a
base ADR
é definido de acordo com os valores de parâmetros de inicialização e variáveis de ambiente. Se o
parâmetro de inicialização DIAGNOSTIC_DEST estiver definido, o diretório base ADR está
definido
todos os outros
para este
locais
valor,
de earquivo são definidas em relação a este local. Se DIAGNOSTIC_DEST
não está definido, entãoestá definido para o ORACLE_BASE variável de ambiente. A Figura 25-1
DIAGNOSTIC_DEST
mostra o de diretórios ADR para o banco de dados COMPLREF.
estrutura
Você pode recuperar os valores para cada diretório de diagnóstico usando a exibição desempenho
V $dinâmico
DIAG_INFO, como neste exemplo:
Note-se a INST_ID coluna. Em um ambiente RAC, este valor diferencia o valor de cada
anuário por nó. Por exemplo, se COMPLREF eram o nome do banco eo banco de dados continha
os três casos COMPLREF1, COMPLREF2, e COMPLREF3, o valor para o segundo
diretório de rastreamento de diagnóstico de exemplo seria o seguinte:
Observe que a ferramenta ADRCI rastreia todos os diretórios home ADR dentro do diretório
Portanto,
ADR raiz.
você deve selecionar qual banco de dados, ASM, ou diretório ouvinte que deseja visualizar
ADRCI.
com
Claro, você pode executar a mesma tarefa de Nuvem de Controle 12 c . Na parte inferior da
home
nuvem
page de Controle, clique no link Conteúdo do registro de alertas. Em seguida, seleccionar o
número de
Registro delinhas
alertasnaque
extremidade
você quer do
ver e clique em Ir. Você verá a página mostrada na Figura 25-2 .
Figura 25-2 Visualizar o conteúdo do log de alerta de Cloud Control
• Arquivos de dados
• Memória
• integridade da transação
• Metadados
• uso de Processo
Você pode executar verificações de saúde usando Cloud Control através do Support Workbench,
ou você
executar umapode manualmente
verificação de saúde usando o pacote DBMS_HM PL / SQL. Algumas verificações
apenasde
banco quando
dadosoé pode
aberto.
serOutras
executado
verificações estão disponíveis quando a instância está em execução,
mas o banco
Modo NOMOUNT.
de dadosVocê
estápode
em listar os cheques disponíveis e se eles estão disponíveis em off-line
modo on-line por meio de consulta a dinâmica vista do desempenho V $ HM_CHECK.
ou
Note-se que todos, mas oito dos cheques são INTERNAL_CHECK = 'Y'. O DBA não pode
invocar
controlos a
internos. Você pode ver os resultados de exames de saúde a partir da ferramenta ADRCI
com o show
comando. Nos
hm_run
exemplos a seguir, você recupera os resultados de um Health Monitor executado pela
primeira vez
formato, e então
em texto
você gerar um relatório Health Monitor em formato XML.
Para executar uma verificação manualmente, use o pacote DBMS_HM. Por exemplo, esta é uma
corrida dos de
verificação Dados
integridade do dicionário, ID 24 na listagem anterior:
Lidar com bloco Corrupção
Muitos dos erros que você vai encontrar estará relacionada com blocos ruins em seus arquivos de
dados
por do banco
causa de dados
de qualquer falhas de mídia, erros de memória do servidor, ou corrupção lógica causadas
por erros
(Não que do
a Oracle
Oracletem bugs-meramente anômalos e comportamento em situação irregular). Depois
de identificar
esses problemas usando os métodos de diagnóstico previstos anteriormente neste capítulo, você pode
usar
as seções
as ferramentas
a seguir para
em corrigir os problemas.
Tal como acontece com quase todos os recursos Oracle, você pode ajustar o nível de controle e
A Oracle
monitoramento
executa; bloco
que de dados de verificação não é excepção. Independentemente das
configurações
logo, a Oracle que vocêexecuta
sempre vai aprender sobre verificações em um bloco de dados quando são lidos ou
as seguintes
para um arquivo de dados:
escritos
Você pode reparar um bloco corrupto ou por recuperar o bloco ou soltando o objeto
contendo o bloco ruim. As seções a seguir lhe dizer mais sobre a corrupção bloco, como controlar
a quantidade da Oracle sobrecarga irá utilizar para garantir a integridade dos blocos, e como corrigir
um corrompido
quadra.
Bloquear a Corrupção
Quando a Oracle detecta um bloco corrompido, ele registra um erro ORA-01578 no log de alerta e
na
home page EM. Incluído na mensagem de erro são o número de arquivo e bloco número absoluto do
mau bloco. Além disso, a leitura sessão ou escrever o bloco ruim vê a mesma mensagem de erro.
Aqui está um exemplo de uma mensagem de bloqueio corrupção de erro:
Na maioria das vezes, a corrupção é causada por falhas no sistema operacional ou hardware de
saída
disco,
(I / O)
taishardware
como defeito
de entrada / ou firmware, problemas de cache do sistema operacional,
memória ououpaginação
problemas erros causados por utilitários de reparação de disco.
Dois parâmetros de instância controlar as verificações de bloco de corrupção:
DB_BLOCK_CHECKING.
DB_BLOCK_CHECKSUM e
DB_BLOCK_CHECKSUM tem três valores possíveis:
Note que mesmo que este parâmetro é OFF, checksums ainda são computados para todos os
tablespace
blocos na
SYSTEM.
O DB_BLOCK_CHECKING parâmetro de inicialização controla quão completamente Oracle
a estrutura
verificalógica de cada bloco de dados. O nível de verificação de habilitar depende do nível de
falha tolerável
controlos blocoem seu ambiente
contínuo. equilibrado
Os valores contra
possíveis paraaDB_BLOCK_CHECKING
sobrecarga necessária para são
executar
comoase segue:
EXAME DICA Verifique somas e validação bloco lógico são sempre habilitado para o SISTEMA
tabela, mas pode ser ativada ou desativada para o restante do banco de dados.
EXAME TIP recuperação de mídia de bloco está disponível apenas a partir do aplicativo RMAN.
Para recuperar um ou mais blocos de dados, o RMAN deve saber o número arquivo de dados e
dentro
número
do arquivo
do bloco
de dados. Como mencionado anteriormente, esta informação está disponível em
um
o arquivoque
exemplo de rastreamento
se segue: do usuário, como em
identificando falhas
Tal como acontece com a maioria dos conselheiros e recursos do Oracle, você pode usar o Cloud
Control
para ou ferramentas
executar de linhaAdvisor,
o Data Recovery de comando
mostrar os erros e reparar as falhas.
Uma vez que o Consultor de Recuperação de Dados identificou uma falha, você pode rever os
detalhes
usando da falha
a interface de EM ou RMAN. De RMAN, você pode usar o fracasso LIST, aconselhar
Falha, falha REPAIR e insuficiência CHANGE comandos. Tabela 25-2 sumariza o
finalidade destes comandos.
O comando LIST FALHA tem uma série de opções, dependendo do que tipos de erros que você
quero ver:
Por exemplo, LIST FALHA 2097 lista os detalhes para uma falha com um identificador de 2097.
Além
LISTA NÃOdisso,
todas as listas de falhas todos abertos de qualquer prioridade.
implementação Reparos
Uma vez que o Consultor de Recuperação de Dados identificou uma falha, você pode usar o fracasso
RMAN ADVISE
comando para recomendar uma opção de reparo para a falha especificada. RMAN irá sugerir um
reparo e
criar um script com o reparo recomendado. Se o reparo é aceitável (em termos de tempo de
inatividade
outros fatores),
ou então você pode executar FALHA REPAIR (dentro da mesma sessão RMAN) para
realizar
ação recomendada.
a Após a ação de reparo for concluído com êxito, o fracasso é automaticamente
fechadas. Os comandos devem ser sempre executados na ordem correta: LIST, aconselhar, em
seguida,
Você reparar.
também pode alterar a prioridade de uma falha usando CHANGE FALHA. Por exemplo,
bloco
umserá
corrompido
gravado como um fracasso alto, mas se ele estiver em um espaço de tabela pouco usado,
então você
alterar a suapode
prioridade para baixa para que você vê falhas única outra mais graves no fracasso
comando. No entanto, você não pode alterar a prioridade de uma falha crítica. Você pode alterar a
LISTA
prioridade de uma falha de apenas a partir de alto para baixo, ou vice-versa. Aqui está como você
pode
do número
alterardea prioridade
falha 307 de ALTO para BAIXO:
Você pode usar vários pontos de vista de desempenho dinâmico para recuperar informações sobre as
afalhas detectadas
recuperação dospelo
dados Advisor:
Por exemplo, para recuperar as informações para a falha com um ID de 37305, consulta
V$IR_FAILURE as follows:
Exercício 25-1: Use o DRA para diagnosticar e resolver problemas Neste exercício, você vai
um problema com o banco de dados e usar o DRA para relatar e corrigi-lo.
causar
Se isso não retornar pelo menos um conjunto de backup de tipo completo, crie um.
Isto irá parar no modo de montagem, com um erro sobre o arquivo ausente. Se utilizar o
verifique se o serviço foi iniciado.
Windows,
6. Inicie o executável RMAN e se conectar, como no passo 1.
7. diagnosticar o problema.
Isso irá retornar uma mensagem para o efeito que um ou mais arquivos de dados não
pertencentes
8. Gerar ao sistema
conselhos estão faltando.
sobre a falha.
Isto irá sugerir que você deve restaurar e recuperar o arquivo de dados e gerar um script de
Abra o script com qualquer editor de sistema operacional e estudar seu conteúdo.
reparo.
9. Execute os comandos no script gerado para restaurar o arquivo ausente, recuperá-lo, e trazê-
lo conectados.
Broca Two-Minute
Descrever o fluxo de trabalho automático de diagnóstico
• ADR é um mecanismo always-on que captura erros no traço e arquivos de despejo a primeira
e qualquer
tempos posteriores eles ocorrem.
• ADR usa um local no disco para armazenar as informações de diagnóstico e vem com uma
ferramenta
faz com que
queseja fácil de consultar o repositório mesmo quando o banco de dados não está
disponível.
• Cada instância de banco de dados ou instância Automatic Storage Management tem seu
próprio diretório
estrutura chamada casa ADR dentro de um diretório de nível superior conhecida como a base
de ADR .
• O diretório base ADR também é conhecido como o diretório ADR raiz .
• Se o DIAGNOSTIC_DEST parâmetro de inicialização é definida, o diretório base ADR está
definido
este valor,
parae todos os outros locais de arquivo são definidas em relação a este local.
• Se DIAGNOSTIC_DEST não está definido, então DIAGNOSTIC_DEST está definido para o
ambiente
ORACLE_BASE variável.
• Se ORACLE_BASE não está definido, DIAGNOSTIC_DEST está definido para o valor
$ ORACLE_HOME / log.
• As informações de diagnóstico ADR é particionado. Todos os traços nonincident são
armazenados
subdiretório,notodos
rastreamento
os depósitos centrais são armazenados no diretório cdump, e todos os
depósitos de como
armazenado incidentes
diretórios
são individuais dentro do subdiretório incidente.
• A ferramenta ADR Command Interpreter torna mais fácil para consultar o conteúdo do ADR.
Você
usarpode
ADRCI mesmo quando o banco de dados é baixo.
• ADRCI não exige um login ou qualquer outra autorização. O conteúdo do ADR são
protegido apenas por permissões do sistema operacional no diretório que contém o arquivo de
estruturas.
ADR
• Um problema , como definido pelo quadro de apoio Workbench, é um erro crítico na
base de dados. Um exemplo é o erro interno ORA-00600 ou algum outro evento grave, como
a falta de memória no pool compartilhado ou talvez uma exceção sistema operacional.
• Um incidente é uma única ocorrência de um problema.
• Cada problema tem uma chave problema , que é uma cadeia de texto que contém o código de
erro e
Auto teste
1 . O valor da DIAGNOSTIC_DEST parâmetro de inicialização é NULL, o ambiente
ORACLE_HOME variável é definida como /u01/app/oracle/product/12.1.0/db_1, e o valor
o ORACLE_BASE variável de ambiente é definido como / u01 / app / oracle. Na
de
inicialização,
atribuído pelaoOracle
valor épara DIAGNOSTIC_DEST? (Escolha a melhor resposta.)
A. / u01 / app / oracle / diag
B. / u01 / app / oracle / log
C. /u01/app/oracle/product/12.1.0/db_1/log
D. / U01 / app / oráculo
2 . Qual das seguintes tarefas que você pode realizar usando a ferramenta ADRCI? (Escolha
tudoAplique.)
o que
A. Package informações de incidentes em um arquivo ZIP para enviar para Oracle Support
B. Visualização de dados de diagnóstico dentro de ADR
C. Executar uma verificação de integridade no banco de dados enquanto ele está
executando
D. Run recomenda correções a partir do exame de saúde mais recente sobre o banco de
3.A dados
visão V $ DIAG_INFO mostra a localização dos vários arquivos. Qual dos seguintes
arquivo
tipos não são identificados em V $ DIAG_INFO? (Escolha a melhor resposta.)
A. arquivos de rastreamento de diagnóstico
B. arquivos incidentes de diagnóstico
C. arquivos problema de diagnóstico
D. O log de alerta XML banco de dados
4 . escritos
Qual dasouseguintes verificações
lidos? (Escolha todosbásicas
os que de
se consistência
aplicam.) são executadas por padrão quando
um bloco é
A. Bloco de soma de verificação.
B. endereço de bloco de dados no cache corresponde ao endereço no disco.
C. versão Block.
D. O bloco de dados está abaixo da marca de água alta, quando a leitura ou a actualização
deque
5.O um ébloco.
um pré-requisito para a utilização de recuperação de mídia de bloco? (Escolha a
melhor resposta.)Database deve ser habilitado.
A. Flashback
B. O banco de dados deve estar no modo ARCHIVELOG.
C. A (ou nível 0) backup completo de antes que o dano deve estar disponível.
D. DB_BLOCK_CHECKING deve ser ajustado para baixo, médio ou CHEIO.
6 . Você pode usar o comando RMAN MUDAR DE FALHA para alterar a prioridade de quais
tipos
de falhas? (Escolha todos os que se aplicam.)
A. ABERTO
B. ALTA
C. CRÍTICA
D. LOW
E. FECHADO
7 . Ao usar o Data Recovery Advisor, você corre o comando lista das falhas, e reporta
um problema com um arquivo de dados. Então, depois de um segundo arquivo de dados está
danificado,
FALHA. você
Para quecorre ADVISE
as questões serão o assessor gerar conselho? (Escolha a melhor resposta.)
A. Apenas o primeiro arquivo
Respostas de auto-teste
1. D . O directório raiz ADR (também conhecido como a base ADR) é definido pelo
DIAGNOSTIC_DEST.
parâmetro Se não estiver definido, a Oracle define DIAGNOSTIC_DEST para
o meio ambiente
ORACLE_BASE variável.
A , B , e C são incorrectas. Todos os três locais não são atribuídos, dados os valores de
DIAGNOSTIC_DEST, ORACLE_BASE, and ORACLE_HOME.
2. A e B . A ferramenta ADRCI permite visualizar informações de diagnóstico na raiz
diretório,
ADR além de embalagem ambas informações problema e incidente de Apoio Oracle.
C e D são incorrectas. A ferramenta ADRCI não podem iniciar verificações de saúde ou
recomendada
correções por
executados
outras ferramentas de diagnóstico Oracle.
3. C . Será que a visão V $ DIAG_INFO não especificar um diretório para os problemas,
Cadaapenas incidentes.
incidente é marcado com uma cadeia de texto que representa o identificador de
problema.
A , B , e D são incorrectas. Eles estão listados em V $ DIAG_INFO com o operando
nomesistema-
do caminho específico. Note-se que a versão de texto do log de alerta do banco de
dados não é especificamente
mencionado; ela existe com os arquivos de rastreamento. A versão XML do log de alerta do
banco de dados édada.
especificamente
4. A , B , e C . A Oracle realiza todos esses cheques com o valor padrão de
DB_BLOCK_CHECKSUM = TÍPICA.
D está incorreta porque a Oracle não verifica se um bloco está abaixo da alta de água
marca ao atualizar ou ler um bloco.
5. B . Uma cadeia completa de refazer é necessário para recuperar o bloco restaurado com
ponto.
a presente
A, C, e D estão incorrectos. A e C são incorrecta porque o bloco pode ser extraída a
ou um backup completo (nível 0) ou de log flashback; quer é suficiente, mas apenas um está
partir de
necessário. D está incorreta porque DB_BLOCK_CHECKING não tem que ser ativado
todos usarem recuperação do bloqueio, embora possa ajudar com a detecção de danos.
6. B e D . Você pode alterar a prioridade de uma falha de alto para baixo, e vice-versa.
A , C , e E são incorrectas. A está incorreta porque OPEN não é um estado de falha. C é
incorreto porque você não pode alterar a prioridade de uma falha crítica. E é incorrecta
porque uma vez fechado, não pode ainda ser ajustado.
7. Um . Aconselhamento é somente para problemas detectados anteriormente com LIST.
B , C , e D estão incorrectos. B e C estão incorretas porque o conselho não pode ser
gerado para
um problema que não foi listado. D está incorreta porque não há limite de tempo entre
e aconselhar.
LISTA
CAPÍTULO 26
Flashback
Objetivos do exame
• 63.1.14.1 Descrever as tecnologias Flashback
• 63.1.14.2 Use Flashback para consultar dados
• 63.1.14.3 Executar operações Flashback Table
• 63.1.14.4 Executar recuperação Tabela de Backups
• 63.1.14.5 Descrever e usar Flashback Data Archive
• 63.1.14.6 Execute Flashback Database
Para se proteger contra perda de dados por causa de danos físicos ao banco de dados, você pode usar
backups
log de arquivamento.
e Se forem geridos de forma adequada, você pode garantir que seu banco de
dados nunca
perder uma linha
será de dados comprometidos. Mas o que sobre danos causados por usuários? E se
alguém tem
acidentalmente (ou deliberadamente) cometeu uma má transação? Caiu uma tabela? Quaisquer tais
ações
não erros,
são tanto quanto a base de dados está em causa, e o D (durabilidade) do ensaio significa que
Oracle não é permitida para reverter essas ações. No entanto, as várias tecnologias de flashback
ÁCIDO
deixar o
administrador de banco de dados (DBA) fazer exatamente isso: tomar todo o banco de dados, ou
talveztransação,
uma apenas uma tabelanooutempo
de volta mesmo
para reverter o efeito do erro. A capacidade relacionada é a
capacidade
consultar o banco
de de dados, uma vez que foi em algum momento no passado.
Descrever as tecnologias Flashback
Quatro tecnologias de flashback distintos estão disponíveis, cada implementado com um subjacente
arquitetura. Cada tecnologia tem diferentes capacidades e limitações, mas não há sobreposição
diferente
funcionalidade entre eles. O motivo comum para a utilização de qualquer tipo de tecnologia de
flashback
erros-é vital
é corrigir
para compreender que tipo de tecnologia de flashback é apropriado para corrigir
diferentes tipos de erros.
Flashback Database
Flashback Database é, por analogia, como pressionar um botão de rebobinagem no banco de dados
(se você não
lembre-se pode de um botão de rebobinar, a investigação do uso de gravadores). O banco de
o conceito
dados atual
tomada como é o ponto de partida, e é levado de volta no tempo, a mudança pela mudança, revertendo
todo o trabalho feito
sequencialmente. O resultado final é como se você tivesse feito uma recuperação incompleta: todo o
trabalho
ponto de subsequente
flashback está
aoperdido, eo banco de dados deve ser aberto com RESETLOGS. Claramente,
esta é uma drástica
coisa para fazer. Ele permite que você voltar para fora mudanças que resultaram em corrupções
lógicastransações
como (em um sentido
inadequadas
do negócio)
(por exemplo, executando seus fim de ano rotinas arquivo-e-purga
antes de executar seus relatórios de fim de ano).
EXAME TIP Flashback Database não vai recuar a corrupção física, apenas a corrupção lógica
causado por erro do usuário.
EXAME TIP Flashback Query, em suas três variações, depende da utilização de segmentos de
desfazer.
Flashback Gota
Agora é possível “undrop” uma mesa. Isso é implementado mapeando o comando DROP em um
RENAME comando. Ao invés de deixar cair a tabela, a tabela é renomeado para um nome gerado
epelo
só caiu
sistema
mais tarde, quando o seu espaço de armazenamento é necessário para um objeto vivo. Se
necessário
espaço de armazenamento
e se o seu não foi reutilizado, o objeto pode ser renomeado de volta para o seu nome
original e, portanto,
restaurado. Sem esta capacidade, a única maneira de obter uma mesa de volta depois de uma queda
seria fazer uma
recuperação incompleta para o ponto no tempo, pouco antes da mesa foi descartado. Este foi
geralmentee oisso
consumir, tempo
significou a perda de todo o trabalho feito posteriormente. O novo banco de dados
capacidade de atingir o mesmo resultado que a recuperação incompleta e deve ser muito mais
Flashback
rápido,
em outras
mastabelas
o trabalho
a seguir
feitoa queda está perdido, eo banco de dados não estará disponível até que a
operação é
completou.
Flashback Gota permite restabelecer a mesa como foi no momento em que foi deixada cair, sem
perda de qualquer natureza; o banco de dados permanece atual. Isto não requer qualquer uso de
de dados
cópias
nem hádequalquer
segurança,
tempo
e de inatividade para os usuários. Note-se que Flashback Drop é
especificamente
comando; você não
parapode
o GOTA
flash back um comando TRUNCATE. Junto com a tabela em si, qualquer
índices, restrições, gatilhos e permissões também irá ser restaurada.
associado
EXAME DICA Você não pode flash back um truncamento da tabela, apenas uma gota mesa.
O Data Archive Flashback é para armazenamento de longo prazo. Normalmente, este será por
muitasrazões legais; dentro
jurisdições existem requisitos para manter os dados por anos e, em seguida, para destruí-la
(também conhecido como trituração digitais ). A Data Archive Flashback pode ativar esse modo
O DBA pode garantir, assim, o cumprimento legal, sem a necessidade de qualquer esforço de
transparente.
programação.
Em alguns casos, você terá uma escolha de tecnologias de flashback. Considere um exemplo
trabalho
onde em
umlotes é executado duas vezes. Talvez você importar algumas centenas de milhares de
facturas anapartir
sistema sua contabilidade
do seu sistema de faturamento a cada dia, e através de algum erro e falta de
validação, o mesmo
faturamento prazo é importado duas vezes. Se a importação é feita como um enorme transação,
então Flashback
Transação revertê-la. Mas se for feito como muitas transações pequenas, em vez de reverter todos
pode ser mais fácil de fazer um flashback em nível de tabela de todas as tabelas afetadas. Pode ser
eles,
que algumas tabelas
faturamento das de interface do sistema são descartados após o run-Flashback Gota vai recuperá-
alos. Mas se
corrida envolve um truncamento, a única opção é Flashback Database. Além disso, pode ser que o
não foi descoberto por algum tempo e uma quantidade significativa de trabalho tem sido feito com
erro
base na
erroneamente dados importados; então Flashback Database pode ser a única maneira de garantir que
você um
com acabar
banco de dados que é consistente em termos de negócios.
Ao escolher uma técnica de flashback, lembre-se sempre que a Oracle vai garantir transacional
integridade, mas que os resultados em termos de negócios pode não ser o que quiser. Flashback
Database,
fato ou
recuperação incompleta, é a única maneira de garantir absolutamente a integridade do banco de
dados e
conformidade com as suas regras, mas de negócios o preço na hora e os dados perdidos pode ser
muito alto.
TIP EXAME No caso de danos na mídia, como a perda de um arquivo de dados, nenhuma
tecnologiaÉ de
Socorro. issoflashback pode de backup, restauração e procedimentos de recuperação são para.
que o padrão
EXAME TIP Todas as formas de Flashback Query dependem de dados de desfazer para reconstruir
os dados, uma vez que estava em um
Deste ponto em diante, todas as consultas vai ver o banco de dados como era no tempo
sessões
especificado.
verá dadosTodos
em tempo
os outros
real, mas uma sessão verá uma versão congelada do banco de dados
até
o flashback é cancelada.
Enquanto no modo de flashback, é impossível executar comandos DML. Eles vão lançar um
Apenas
erro.instruções SELECT são possíveis.
Quão longe você pode levar uma consulta Flashback (ou uma consulta ou usando
DBMS_FLASHBACK) depende do conteúdo dos segmentos de desfazer. Se os dados necessários
para desfazer
construir o conjunto de resultados out-of-data não está disponível, em seguida, a consulta falhará
com um ORA-08180:
snapshot encontrado com
“Nãobase no tempo especificado,”erro.
A sintaxe para permitir Flashback Query irá aceitar um timestamp ou um SCN. Se você usar um
SCN, então o ponto para o qual o flashback vai é preciso. Se você especificar um tempo, ele será
para um SCN com uma precisão de três segundos.
mapeado
EXAME TIP Você pode consultar o banco de dados a partir de um ponto anterior no tempo, mas
você nunca
DML contrapode
as versões
executar
mais antigas dos dados.
linha que é excluído, a operação de flashback vai inseri-lo de volta para a mesa. Ele terá o mesmo
valor da chave primária, mas um ID de linha diferente.
No exemplo que se segue, há duas tabelas: EMP e DEPT. Há uma chave estrangeira
relação entre eles, afirmando que todos os funcionários da EMP deve ser um membro de um
departamento em
DEPT.
Primeiro, insira um novo departamento e um empregado nesse departamento e observe o tempo.
Agora tente piscar de volta as mesas para o momento em que o departamento e empregado
existiu.
Esta falha
habilitado paraporque, pormesa,
qualquer padrão, o movimento
então de linha,
habilitá-lo para ambasqueasétabelas.
um pré-requisito para flashbacks
mesa, não é
Desta vez, o flashback falhar por uma razão mais sutil. A recapitulação está a tentar inverter o
exclusão de empregado 8000, inserindo-lo, mas empregado 8000 estava no departamento 50, que
sido excluídos e assim não existe. Então, há uma violação de chave estrangeira. Você pode evitar
tem
este problema
piscando de volta tabela DEPT primeira, que iria inserir departamento de 50. Mas se o seu de
envolve muitas mesas e muitas declarações DML, pode ser logicamente difícil encontrar uma
flashback
sequência
vai que A resposta é a piscar de volta ambas as tabelas juntos.
funcionar.
Isto sucede porque ambas as tabelas são piscou de volta em uma transação, e as restrições são
verificadas apenas no final da transação, altura em que os dados são logicamente consistente.
O flashback ainda pode falhar por outros motivos:
• violações de chave primárias irá ocorrer se um valor de chave foi reutilizados entre uma
exclusão
flashback.
ea
• Um ORA-08180: “Não snapshot encontrado com base no tempo especificado,” erro será
levantada se houver
não o suficiente desfazer informações voltar para o tempo solicitado.
• Se quaisquer linhas afetadas pelo flashback são bloqueados por outros usuários, o flashback
falhará
ORA-00054:
com “recurso ocupado e adquirir com NOWAIT especificado.”
• As definições de tabela não deve mudar durante o período em causa; de flashback não pode
atravessar
(DDL) Data Definition Language. A tentativa de fazer isso irá gerar ORA-01466:
“Não é possível ler a definição da tabela de dados foi alterado.”
• Flashback não funciona para tabelas no esquema SYS. Tente imaginar o efeito de piscar
parte de trás do dicionário de dados.
Se um flashback da tabela falhar por qualquer motivo, a operação de flashback será cancelada.
que Quaisquer
teve sucesso
partes
serádele
revertida, e as tabelas serão como eram antes de o flashback
foi emitido comando.
Variações na sintaxe permitir flashback de um número de alteração do sistema e o disparo de
durante
gatilhos
a operação.
DML
• VERSIONS_STARTSCN O SCN em que esta versão da linha foi criada, quer por
Inserir ou por ATUALIZAÇÃO
• VERSIONS_STARTTIME O timestamp em que esta versão da linha foi criada
• VERSIONS_ENDSCN O SCN em que esta versão da linha expirou, por causa de qualquer
DELETE ou UPDATE
• VERSIONS_ENDTIME O timestamp em que esta versão da linha expirou
• VERSIONS_XID O identificador exclusivo para a transação que criou esta versão do
linha
• VERSIONS_OPERATIONS A operação feito pela transação para criar esta versão do
a linha, ou INSERT ou UPDATE ou DELETE
Para ver essas pseudocolunas, você deve incluir as versões ENTRE palavras-chave em sua
inquerir. Por exemplo, a Figura 26-1 mostra todas as versões da linha de empregado 8000.
As versões são classificados em ordem da existência descendente; eles devem ser lidas de baixo
parainferior
A linha cima. mostra que o empregado 8000 foi inserido (o que na última coluna) no SCN
pelo número de transação 01000E0002180000. O funcionário foi dada a ENAME de RAMKLASS
95828152
eo SAL de 3000. Esta versão da linha existiu até SCN 95.828.273, o que leva você para o
terceira fila. Neste SCN, a linha foi atualizado (o L na última coluna) com um novo salário. este
versão da linha persistiu até SCN 95828279, quando foi suprimida, conforme mostrado na segunda
A coluna VERSIONS_ENDSCN é sempre nulo para a eliminação. A fila superior dos programas do
linha.
conjunto
uma novadeinserção,
resultados
que reutiliza o número de funcionários. Para esta linha, o VERSIONS_ENDSCN
é também
nulo porque a linha ainda existe nessa versão no final do intervalo de tempo especificado na
consulta.
No exemplo apresentado na Figura 26-1 , as versões ENTRE cláusula utiliza duas constantes
MINVALUE
para o SCN. instrui o Oracle para recuperar as primeiras informações nos segmentos de desfazer;
MAXVALUE
será o atual SCN. Em outras palavras, a consulta como está escrito vai mostrar todas as versões que
podem
ser recuperada,
eventualmente
dada a informação disponível. A sintaxe também irá aceitar um intervalo
especificado com dois
timestamps.
O exemplo anterior irá selecionar todas as versões do número de funcionário 8000 que existiu
última
durante
hora.o
EXAME TIP Flashback Versão consulta não pode trabalhar contra tabelas externas ou visões V $.
Por queasnão?
Como alterações a esses objetos não geram desfazer.
Uma vez que os dados neste vista pode ser sensível, que seja protegido por um privilégio. Você
SELECIONE
deve ser concedida
QUALQUER TRANSAÇÃO antes que você possa consultá-lo. Por padrão, este
eprivilégio
ao papel éDBA.
concedido
Haveráa SYS
uma ou mais linhas nesta vista para cada transação cujo undo
dados ainda existe nos segmentos de desfazer, e cada linha irá se referir a uma linha afetada pela
Tabela 26-1 descreve as colunas.
transação.
Tabela 26-1 As colunas da FLASHBACK_TRANSACTION_QUERY Ver
Mais tarde, suspeita-se que um erro foi cometido. Então, você consulta as versões da linha.
Isso não indica o que aconteceu e dá informações suficientes para inverter a alteração. Mas o que
a transação
se afetada outras linhas em outras tabelas? Para ter certeza, consulta
FLASHBACK_TRANSACTION_QUERY, que terá uma linha para cada linha afetada pela
transação. Uma complicação é menor que a coluna é do tipo RAW XID, ao passo que o
VERSIONS_XID pseudocoluna é hexadecimal, então você deve usar uma função de conversão de
tipos para fazer a
Junte-se.
Essa consulta retorna apenas uma linha, o que confirma que houve de fato apenas uma linha
a transação
afetada pela
e fornece uma declaração de que vai reverter o impacto da mudança. Observe o uso de
ROWID na demonstração UNDO_SQL. Desde que não houve reorganização da tabela, este
um
vai garantir que a linha correta é alterado.
O FLASHBACK_TRANSACTION_QUERY vista vai construir instruções de desfazer a inverter
transação,
um mas executá-los individualmente seria uma tarefa terrível para uma grande transação. Isto
éonde o pacote DBMS_FLASHBACK é novamente útil. Ele inclui procedimentos para trás para fora
transações. Para executar os procedimentos backout transação, você deve ter sido concedida a
FLASHBACK ANY privilégio TABLE.
Veja este exemplo:
Esta chamada de procedimento irá reverter todo o trabalho feito pelas duas transações nomeados.
Aqui está o em ordem:
argumentos
• NUMTXNS é o número de transações que devem ser invertidas; neste exemplo, duas.
• XIDs é uma lista de identificadores de transação, passado como uma variável XID_ARRAY.
Esta
foram
listaidentificados
seria com uma consulta Flashback.
• OPÇÕES pode tomar vários valores na forma de constantes do pacote. A opção CASCADE
vai tentar encomendar as mudanças para evitar conflitos.
A primeira consulta pede uma exibição da tabela, uma vez que foi de 40 minutos atrás, e ele
consegue.
porque Isto émenos, 40 minutos de dados de desfazer disponíveis nos segmentos de desfazer.
não é, pelo
A segunda
tenta voltarconsulta
40 dias, e ele falhar. Nos bancos de dados praticamente todos, seria completamente
esperar Flashback Query para trabalhar ao longo de um período tão longo. Você precisaria de uma
irrealista
tabela de de
tamanho undo
Júpiter
o para armazenar tanto desfazer de dados.
Para garantir que uma consulta Flashback sempre terá êxito durante um determinado período,
atributo
definagarantia
o de retenção para a tabela de undo em conjunto com o
parâmetro de instância UNDO_RETENTION. Isto irá assegurar que você sempre pode flash back o
de segundos especificado, mas o preço que você vai pagar é que se sua tabela de undo não é
número
adequadamente para a carga de trabalho transação, então o banco de dados pode travar durante a
dimensionada
execução de DML.
Realizar operações de Flashback Table gota
Queda acidental de uma mesa é fácil de fazer. Não é justo que você pode soltar a mesa errada por
causa
um dede digitação que poderia ser a tabela da direita, mas você está conectado ao esquema errado
erro
aouinstância
conectado
errada.
no Você pode reduzir a probabilidade de isso definindo o SQL * Plus alerta. Aqui
está um
exemplo:
DICA Para definir o sqlprompt automaticamente para todas as sessões do SQL * Plus, coloque o
comando
no arquivoanterior
glogin.sql no diretório / sqlplus / admin ORACLE_HOME.
Flashback Gota permite restabelecer uma retirada anteriormente mesa (mas não uma tabela
que truncada) exatamente
era antes da comoos índices também será recuperado e também todos os accionadores e
queda. Todos
, Chave primária única, e não nulos restrições também serão recuperados, mas não restrições de
bolsas.
chave estrangeira.
EXAME TIP O comando Flashback Gota aplica somente a tabelas, mas todos os objetos associados
também ser recuperado-excepto para chaves estrangeiras.
serão
O comando DROP TABLE foi mapeado internamente para um comando RENAME, que
afeta a mesa com todos os seus índices associados, gatilhos e restrições, com exceção de estrangeiros
restrições de chave, que são descartados. restrições de chave estrangeira têm de ser fisicamente caiu.
Se elesmantidas, mesmo com um nome diferente, então DML na tabela pai nondropped seria
foram
constrangido pelo conteúdo de uma tabela descartada, o que seria absurdo.
Subsídios em tabelas não têm nomes, para que eles não podem ser renomeados. Quando você
concedevocê
privilégio, um especificar
objeto o objeto pelo nome, e o armazenamento subjacente da subvenção faz
referência
pelo seu número
ao objeto
de objecto. Porque os números do objeto não fique alterado por uma operação de
renomeação,
subsídios permanecem
o válidas.
Tanto quanto instruções SELECT e DML normais estão em causa, uma mesa caiu é
desistiu.
definitivamente
Não há nenhuma alteração de quaisquer outros comandos, e todo o seu software irá assumir
que um
mesa caiu realmente se foi. Mas agora que a queda é de fato RENAME, torna-se possível undrop
-pela renomear a tabela de volta para o seu nome original. No entanto, isso não é garantia de
sucesso.
ser que oPode
espaço ocupado pela tabela caiu foi reutilizado. Há também complicações se em
o período intercalar outra tabela foi criada, reutilizando o mesmo nome que a tabela descartada.
Os objetos descartados podem ser consultados por olhar para a “lixeira” para obter seus novos
Estanomes.
é uma lista de todos os objetos que foram descartados, mapeando os nomes de tabelas e índices
para os nomes gerados pelo sistema dos objetos descartados. Há uma lixeira para cada usuário,
originais
visível
na visão de dicionário de dados USER_RECYCLEBIN, ou para um quadro global você pode
DBA_RECYCLEBIN. O espaço ocupado pelos objetos da lixeira será reutilizado automaticamente
consultar
quando uma tabela está sob pressão do espaço (tempo após o qual os objectos não podem ser
recuperados),
você pode forçar
ou manualmente Oracle para realmente deixar cair os objetos com o comando
PURGE.
DICA Não há garantias de sucesso com Flashback Gota, mas pode muito bem trabalhar. Quanto
mais cedo você
executá-lo, maior a probabilidade de sucesso.
O primeiro comando realmente vai cair da mesa. A palavra-chave PURGE instrui o Oracle para
reverter para
o significado original da GOTA: todas as referências à mesa são eliminados, e isso nunca pode ser
costas. O segundo comando irá piscar volta da mesa, mas dar-lhe um novo nome. Este seria
trazida
se entre a queda e o flashback outra mesa tinha sido criado com o mesmo nome que o
essencial
caiu mesa. Note que, embora a tabela pode ser renomeado durante um flashback, não pode mudar
esquemas; todas as operações de flashback ocorrer dentro do esquema ao qual pertence o objeto. Os
gatilhos e restrições que são piscou de volta junto com a mesa de manter seus nomes lixeira. Se
índices,
quer devolvê-los para seus nomes originais, você deve renomeá-los manualmente após o flashback.
vocês
Há dois pontos para enfatizar aqui. Primeiro, Flashback Gota pode recuperar apenas a partir de
não uma
podegota.
recuperar
isto de um TRUNCATE. Em segundo lugar, se você deixar cair um usuário com,
cascata,
não será como
capazmostrado
de recuperar
aqui,
qualquer
você de mesas de Scott com um flashback:
A queda do esquema significa que a Oracle não pode manter os objetos em tudo, mesmo na lixeira,
porque não há nenhum esquema para contê-los.
O SQL * Plus comando SHOW RECYCLEBIN irá exibir os objetos descartados, com o seu
nomes originais e os seus nomes lixeira. O DBA_RECYCLEBIN vista fornece a mesma
informações e muito mais.
Se uma tabela é descartado e, em seguida, uma outra tabela é criada com o mesmo nome e, em
nomeseguida,
haverá também
duas mesas
original. Por nacaiu,
lixeira.
padrão, umEles terão diferentes
comando Flashbacknomes da lixeira,
Gota sempre mas o amesmo
recuperar versão mais recente do
a mesa, mas se esta não é a versão que você quiser, você pode especificar o nome da lixeira da
que deseja recuperado, em vez do nome original. Aqui está um exemplo:
versão
Exercício 26-1: Use Flashback Largar com o SQL * Plus Criar um novo esquema e uma mesa
dentro dele.
Elimine a tabela e, em seguida, recuperá-lo com Flashback Gota.
1. Conecte-se ao seu banco de dados como SYSTEM usuário com SQL * Plus.
2. Crie um usuário para este exercício.
5. Solte a tabela.
6. Volte a executar as consultas a partir do passo 4. Note que os objetos foram removidos
USER_OBJECTS, mas a restrição ainda existe com um nome gerado pelo sistema.
7. Consulta a sua lixeira para ver o mapeamento do nome original para os nomes Lixeira.
14. Consulta a visão DBA_RECYCLEBIN para demonstrar que todos os objetos de propriedade
do usuário
CONTA-GOTAS realmente sumiram.
Gerenciando a Lixeira
A lixeira é um termo dado para o espaço de armazenamento usado por objetos descartados. Você
pode ignorar
lixeira completamente;
o sua gestão é automático, tanto em termos de transferência de objetos em
quando
eles são descartados e removê-los permanentemente quando o espaço é necessário no espaço de
tabela para
objetos. Masviver
pode haver circunstâncias em que você precisa estar ciente do conteúdo da reciclagem
bin e quanto espaço eles estão ocupando.
A lixeira pode ser desativado com o RECYCLEBIN parâmetro de instância. O padrão é ON,
o que significa que todos os esquemas terá uma lixeira. O parâmetro é dinâmico e pode ser ajustado
para OFF
uma sessãopara
ou para todo o sistema.
Consultando a Lixeira
Cada usuário tem sua própria lixeira e sempre pode ver tabelas eliminadas em seu próprio esquema.
maneira mais simples é o comando show RECYCLEBIN.
o
Isso mostra que o usuário atual tem três mesas caiu: seus nomes originais, sua lixeira
nomes, e no momento em que foram retiradas. Para informações mais detalhadas, consultar o
dicionário
vista de dados
USER_RECYCLEBIN ou DBA_RECYCLEBIN consulta para uma visão global.
A coluna é crítica CAN_UNDROP. A Oracle não está sob nenhuma obrigação de manter tabelas
índices.
eliminadas
A instalação
ou Flashback Drop é puramente uma conveniência que a Oracle fornece; que não
fazpadrão
o parte do
de banco de dados relacional. Se o Oracle precisar do espaço a ser ocupado por um objeto
caiu para
alocar mais espaço para um objeto vivo, ele vai levá-la. A partir desse ponto, o objeto caiu não pode
ser recuperado com recapitular gota, e ele será removido a partir da vista. A coluna ESPAÇO (em
unidades de blocos de arquivo de dados) mostra quanto espaço é ocupado pelo objeto caiu.
Tendo identificado o nome da tabela eliminada na lixeira, que pode ser consultado como
mesa,qualquer
emboraoutro
você terá que colocar seu nome entre aspas duplas por causa da não-padrão
caracteres usados em nomes lixeira. Mas lembre-se sempre que você tem um limitado (e
imprevisível tempo) durante o qual você pode fazer isso. Se você pensa que é provável que uma
tabela descartada
necessário, você deve
será undrop-lo imediatamente.
EXAME TIP Flashback Gota não está habilitado para tabelas armazenadas no espaço de tabela
SYSTEM.
tabelas nãoTal
serão relatados pelas consultas descritas aqui, porque eles são descartados e purgado
imediatamente.
quadro não é limitado pela disponibilidade de dados de desfazer ou se o espaço da tabela foi
reutilizado
mas sim pela disponibilidade de backups de arquivos de dados e arquivos de log de arquivo. Isso
pode significar
recuperar uma tabela
que você
parapode
o estado em que estava em semanas ou meses.
Este é o processo:
1. Criar uma instância auxiliar. Esta é uma instância começou um arquivo de parâmetro padrão
comnome
um do sistema gerado.
2. restaurar o sistema, SYSAUX, e desfazer espaços de tabela para a instância auxiliar de um
suficientemente backup antigo e recuperar para o tempo desejado.
3. Restaurar os arquivos de dados da tabela contendo a tabela e recuperar com o tempo
desejado.
4. Use o Data Pump para exportar a tabela a partir da instância auxiliar e importá-lo para o alvo
instância.
5. Gota a instância auxiliar e de banco de dados.
Esta técnica tem sido sempre possível, mas no RMAN versão atual pode automatizar o
processo inteiro.
Exercício 26-2: recuperar uma tabela de um backup Neste exercício, você vai criar um espaço de
tabelamesa,
uma e backup do espaço de tabela, apagar a tabela, e recuperá-lo a partir do backup. Observe
Windows,
que, Évocê
se trabalhar
instância. pode
em precisar
necessário executar
que o banco RMANpara
de dados comestar
privilégios
no modoelevados, a fim
archivelog, de criar
e um backupa auxiliar
completo
já deve
existir.
5. Observe a recuperação.
Estudar a saída do comando de recuperação. Não pule esta; é extremamente instrutiva.
você pode entender cada linha, você está no bom caminho para passar à final Oracle
Quando
Professional (OCP) exame.
Certified
Este comando inclui a palavra-chave DEFAULT, o que significa que ele será usado como
paraarquivo
todas as tabelas salvo indicação em contrário. O arquivo padrão pode também ser definido mais
tarde.
A cláusula QUOTA limita o espaço que o arquivo pode ocupar na tabela. Se um arquivo enche,
mais espaço pode ser adicionado quer na tabela original ou numa outra tabela. Por exemplo, este
comando irá estender o arquivo em outro espaço de tabela:
Também é possível ajustar a retenção.
Os dados são removidos de um arquivo automaticamente pelo processo de fundo FBDA, uma
que vez que é mais
o período velho indicado, mas pode ser removido manualmente antes do período expirou.
de retenção
Aqui está um exemplo:
Porque haverá frequentemente implicações legais para a capacidade de gerenciar um arquivo, ele
por éprivilégios.
protegido O privilégio de sistema ADMINISTER FLASHBACK ARQUIVO concede a
capacidade
criar, modificar,
de ou deixar cair um arquivo, bem como controlar a retenção e purga. Você deve
FLASHBACK ARQUIVO sobre o arquivo para um usuário que irá nomear tabelas a serem
conceder
arquivados.
Finalmente, para ativar a proteção de arquivo para uma tabela, use este comando:
Há três visões de dicionário de dados que documentam a configuração Flashback Data Archive:
2. Criar um Data Archive Flashback na tabela, com uma retenção de sete anos.
3. Criar um esquema para usar para este exercício e conceder-lhe o papel DBA.
5. Conecte como o FBDAUSER. Criar uma tabela e permitir que o Archive Flashback Data
para este
mesa.
6. Execute essas consultas para determinar os objetos criados pelo arquivo. Você pode ter que
esperar
vários minutos porque os objetos não são criados imediatamente.
8. executar uma consulta Flashback contra a mesa protegido usando consulta padrão Flashback
Note que estes comandos toda gerar erros relacionados com a existência do arquivo e da
tabela protegida.
10. Remova a proteção do arquivo da tabela.
EXAME TIP Ao contrário de redo logs, os logs de flashback não pode ser multiplexados e não são
arquivados.
são criados eEles
gerenciados automaticamente.
Crítico para o desempenho é que nem todas as alterações são copiados para a memória
de mudanças.
intermédiaSedetodas
recapitulação
as alterações
somente
em todos
um subconjunto
os blocos foram copiados para a memória intermédia,
depois
uso da sobrecarga
de memória em termosde
e a quantidade deentrada de disco extra / saída (I / O) necessária para limpar a
memória
seria incapacitante
intermédiapara
parao odesempenho.
disco limite de algoritmos interna que versões dos quais blocos são
colocado no buffer de recapitulação, a fim de limitar o seu tamanho e a frequência com a qual vai
encher
ser gravados
e no disco. Esses algoritmos são destinadas a garantir que não haverá desempenho
negativo
atingido quando permitindo Flashback Database; eles garantem que mesmo blocos muito ocupadas
só são registrados
raramente.
Ao realizar um flashback de banco de dados, a Oracle irá ler os logs de flashback para extrair as
versões
de cada bloco de banco de dados alterado e copiar estas versões de volta para os arquivos de dados.
Como essas
aplicado paramudanças
o banco desãodados de corrente em ordem cronológica inversa, isto tem o efeito de levar
banco de dados de volta no tempo, invertendo as gravações que o DBW n processo tem feito. Uma
o
vez quedenem
versão cada
todos
blocoosalterado é copiada para a memória intermédia retorno de chama e,
consequentemente,
não é possível a piscar
paradeosvolta
registos
parade
umflashback,
ponto exato
ele no tempo. Pode ser que um bloco foi alterado
muitas vezes
mas que log o flashback tem apenas um subconjunto dessas mudanças. Considere o caso em que o
bloco A era
mudado às 10:00 e novamente às 10:05, mas que apenas a versão 10:00 está em log o flashback.
Bloco
foi mudado
B às 10:05 e às 10:20, e ambas as versões estão em log o flashback. Todas as mudanças
sido cometido. É agora 11:00, e você quer piscar de volta para 10:15. A operação de flashback vai
têm
restaurar a versão do bloco A 10:00 e 10:05 a versão do bloco B; levará cada mudou
bloquear volta tão perto quanto possível para, mas o mais tardar, o tempo desejado. Assim, Banco de
Dados Flashback
constrói uma versão dos arquivos de dados que é um pouco antes da hora que quiser. Esta versão dos
arquivos
pode muitode bem
dadosser totalmente inconsistente. Como neste exemplo, diferentes blocos estará no
sistema diferente
alterar os números, dependendo do que aconteceu para estar disponível em log o flashback. Para
completardeo flashback, a Oracle, em seguida, usa o log de redo. Ele vai recuperar todos os blocos
processo
para o tempo
solicitada (no exato
exemplo, apenas bloquear A recuperação necessidades), sincronizando assim, todos os
mesmo
arquivosSCN. A fase
de dados final
para o é para reverter as transações que foram autorizadas no ponto, exatamente
como ocorre na última fase de uma recuperação incompleta.
Então, Flashback Database é, na verdade, uma combinação de vários processos e estruturas de
vocêdados. Primeiro,
deve alocar alguma memória na SGA (que será automática, você não pode controlar quão
o tampão é) e algum espaço em disco para armazenar os dados de retorno de chama e iniciar o
grande
processo
ativar o log
de de
RVWR
flashback. Ao fazer um flashback, a Oracle vai usar os logs de flashback para levar a
banco de dados de volta no tempo para antes da hora que quiser e, em seguida, aplicar redo logs
(usandoosqualquer
refazer arquivosarquivo
de log e refazer on-line arquivos de log são necessários) na forma usual para
recuperação
trazer os arquivos
incompleta
de dados
de para a frente para o tempo exato que você deseja. Em seguida, o banco
de dados pode
encarnação, da ser
mesma
aberto
maneira
com um como
novona sequência de uma recuperação incompleta normal.
EXAME TIP Flashback Database requer o modo archivelog eo uso de ALTER DATABASE
RESETLOGS aberta para criar uma nova encarnação do banco de dados.
Isto irá iniciar o processo de RVWR e atribuir uma memória intermédia de recapitulação na
PIG. O processo
inicialização será automática a partir de agora.
5. Abra o banco de dados.
Registro de imagens de blocos de dados a partir do cache de buffer do banco de dados para o
buffer dea flashback
ativado será
partir de agora.
O alvo de retenção de flashback é apenas uma meta-não há garantia de que você realmente pode
aflash
um back
tempo dentro dele. Por outro lado, você pode ser capaz de piscar de volta para além do alvo. a
período de flashback é uma função da quantidade de flashback informações de log está sendo gerado
possível
segunda e quanto espaço está disponível para armazenar essas informações antes de o substituir com
por
Dados recentes.
mais
O nível mais básico de monitoramento de flashback é para confirmar que ele está realmente
habilitado.
No Unix, você pode ver o processo RVWR como um processo do sistema operacional; no
Windows
outro segmentoserá
dentro ORACLE.EXE.
Para monitorar a capacidade de flashback atual e estimar o espaço necessário para logs de
flashback
atender paraconsultar a visão V $ FLASHBACK_DATABASE_LOG.
seu alvo,
V $ FLASHBACK_DATABASE_STAT dá uma visão histórica da taxa de disco I / O para o
arquivos de dados, os arquivos de log redo online, e os arquivos de log de flashback.
Na Figura 26-6 , a primeira consulta mostra a configuração para o alvo de retenção em minutos,
o parâmetro
tal como exemplo
especificado
DB_FLASHBACK_RETENTION_TARGET;
por este é o padrão de um dia.
Depois, há o espaço real que está sendo absorvido pelos arquivos de log de flashback, bem como o
tempo
que os exato para
logs de flashback pode levar o banco de dados de volta. Se a Área de Recuperação Rápida é
de forma adequada e o alvo de retenção é realista, então haverá uma relação razoável entre
dimensionada
o tempo mostrado nesta consulta ea hora actual, o objectivo de retenção.
A segunda consulta mostra o preço que está pagando para permitir Flashback Database em
bytes de I / de
termos O que o mesmo exige por hora. A linha superior será sempre uma hora incompleta, até o
hora atual. No exemplo, a base de dados foi gerando cerca de 10 MB de dados de flashback por hora
durante a noite, com taxas mais elevadas na tarde da noite e manhã. O impacto desta no desempenho
terá de ser discutido com os administradores do sistema, tendo em conta se o sistema é I / O
ligado ou não. Para comparação, o ponto de vista também mostra o I / O relacionado com a
actividade
vista terá uma
normal
linhadepor
base
hora.
de dados. o
O tamanho do buffer de flashback é fora do controle do DBA, mas para ver o tamanho atual,
consultar
você pode
a visão V $ sgastat.
Desde que todos os logs de arquivo necessários estão disponíveis, uma operação de flashback
procederá automaticamente.
completamente
Não há nenhum ponto em usar qualquer outro tipo de desligamento; todos os trabalhos em
andamento
de qualquer vai sereperdida
maneira, você precisa minimizar o tempo de inatividade. Em seguida, tomar o banco
de dados de volta às 10:00 da seguinte forma:
Note-se que ao contrário recuperar banco de dados até que o tempo, esse comando é sensível a
NLS
configurações para o formato timestamp. Enquanto no modo somente leitura, você pode executar
uma esquema.
caiu consulta contra
Se você
o descobrir que o esquema ainda está lá, talvez você possa recuperar um pouco
dados do usuário.
mais
Você executar sua consulta teste novamente, e você descobre que depois de se recuperar mais 2
esquema
minutos
estádedesaparecido.
dados, os Deve ter caído 10:00-10:02. Assim, você dividir a diferença.
Se o esquema não está lá agora, flash back alguns segundos antes. Se ele estiver lá, faça alguns
recuperação.
segundos Você
de pode repetidamente questão de flashback e recuperar comandos até encontrar o
tempotestes,
quer, que você
executando consultas enquanto em modo somente leitura. Quando você chegar a um
ponto quecom,
satisfeito vocêexecute
está um encerramento definitivo e aberto com RESETLOGS para criar uma nova
encarnação
banco de dados
do que pode ser aberta para uso normal.
Este método irá minimizar a perda de dados, e pode demorar apenas alguns minutos. um
incompleta
recuperação pode levar horas, especialmente se você precisa ter várias tentativas antes de chegar à
Tempo.
direita
DICA Muitas máquinas de nomes locais seguintes convenções como sun1p1 para o servidor de
produção,
sun1d1 para o servidor de desenvolvimento, sun1t1 para o servidor de teste, e assim por diante. As
váriaspode
casos basester
deexatamente
dados e os mesmos nomes. Obter errado chave, e está ligado ao mal
base de dados. Sempre verifique onde você está antes de fazer qualquer coisa.
Além das pequenas mudanças na sintaxe, RMAN de flashback é o mesmo que o SQL * Plus
particular,
recapitulação.
você pode
Dentro
usar a mesma técnica de aplicação repetida de flashback e recuperação até que
encontrar o ponto ideal para abrir o banco de dados.
você
Exercício 26-4: Use Flashback Database Ativar de flashback banco de dados. Simular um erro do
usuário
flash back
e o banco de dados antes da operação.
Broca Two-Minute
Descrever as tecnologias Flashback
• Flashback é para corrigir o erro do usuário (ou DBA).
• Os danos físicos requer o uso de restaurar e recuperar.
Auto teste
1 . Qual das seguintes tecnologias de flashback usar dados da tabela de undo atual?
(Escolha todos os que se aplicam.)
A. Tabela Flashback
B. Flashback Transaction Query
C. Flashback Query
D. Flashback Versão consulta
E. Flashback Gota
F. Flashback Database
G. Flashback Data Archive
Respostas de auto-teste
1. A , B , C , e D . Todas essas tecnologias contar com os dados Desfazer na tabela de
undo.
E , F , e G estão incorrectos. Flashback Gota confia na lixeira, Banco de Dados
depende
Flashback
de logs de flashback na Área de Recuperação Rápida e Flashback Data Archive
tabelas de histórico com base em uma tabela permanente em espaços de tabela designada
depende
para dados de flashback
arquivos.
2. B , D , e E . Para Flashback Query, Flashback Table, Flashback Transaction Query, e
Flashback Versão Query, você deve ter o gerenciamento automático de desfazer
configurado,
tabela definido,
umae um
undovalor de retenção de undo para especificar quanto tempo os dados de
desfazer está retido em
a tabela de undo.
A e C são incorrectas. Os parâmetros db_recovery_file_dest e
DB_RECOVERY_FILE_DEST_SIZE são usados para configurar Flashback Database, não
Flashback Query.
3. D . Pontos garantidos restaurar são usados apenas em cenários de recuperação, como
BaseFlashback
de dados.
A , B , e C são incorrectas. Todos os três podem ser usados. Você pode restringir os
Flashback
resultados
Versão
de um
Query by SCN ou timestamp. Você pode ainda filtrar as linhas usando um
ONDE cláusula sobre as colunas da tabela.
4. C . Espaço de um objeto caiu é imediatamente refletida em DBA_FREE_SPACE mas
ainda contra cota do usuário até que seja purgado da lixeira.
acusações
A , B , e D são incorrectas. Todos os três refletir declarações incorrectas sobre o espaço
gestão
livre
e gerenciamento de cota para objetos na lixeira.
5. A , B , e C . Objetos de tabela na lixeira pode ser undropped, e eles podem ser
undropped pelo proprietário original ou um usuário com privilégios de DBA.
D e E são incorrectas. D é incorrecta porque uma tabela na lixeira pode ou não pode
ter objetos dependentes na lixeira. E está incorreta porque a sintaxe undrop faz
permitir a recuperação de uma mesa, mesmo se existir um objeto com o mesmo nome
aoriginal
lixeira.como um objecto em
6. D . ORA_ROWSCN é um pseudocoluna que está disponível para todas as tabelas e
SCNcontém
passadoo que modificados ou criados a linha.
A , B , e C são incorrectas. UNDO_SQL é o SQL que você pode usar para reverter a
a linha,
mudança
XID épara
o ID da transação, ea operação é a operação DML executadas.
7. B . A coluna OPERAÇÃO em FLASHBACK_TRANSACTION_QUERY contém
DESCONHECIDO por não mais na tabela de undo dados.
A , C , D , e E são incorrectas. A está incorreta porque o ID do usuário substitui o nome
de usuário
a coluna em
LOGON_USER quando o utilizador já não existe. C é incorrecta porque o objecto
número substitui o nome da tabela na coluna TABLE_NAME quando a tabela não
existe. D é incorrecta porque a coluna OPERAÇÃO contém DESCONHECIDO, não
INDISPONÍVEL, quando a informação já não está disponível na tabela de undo. E é
incorreto porque parte de uma transação ainda pode estar disponível na tabela de undo.
8. A , C , D , e E . Você pode usar os a partir de cláusula com o TIMESTAMP ou
paraqualificador
especificar uma
SCNhora para a qual você deseja recuperar a mesa. Além disso, você pode
ponto desão
restauração
especificar
também úteis em ou
um de um ponto
operações de restauração
de banco garantida para
de dados Flashback para garantir
Tabela Flashback.
que os logs de
Garantido
flashback
na pontos
Área desão de restauração
Recuperação
mantidos Rápida, pelo menos, tanto para trás como o mais antigo garantida
pontoB de restauração.
é incorrecta. Você não pode usar uma cláusula WHERE para especificar o tempo no
operação
passado
TABLE
para oFLASHBACK.
9. Um . A tabela é recuperado ao seu estado original logo após a criação e sem índice.
B , C , e D estão incorrectos. B está incorreta porque FLASHBACK tabela não
alavancar a lixeira. C é incorrecta porque a tabela é recuperado na forma do SCN, mas não
rolou para a frente. D está incorreta porque um índice caiu não afeta a capacidade de
recuperação de um
mesa; no entanto, uma alteração na estrutura da própria tabela impede uma operação volta
ao passado
antes da mudança DDL para a mesa.
10. A , C , e E . Para executar com êxito a recuperação da tabela de backups (TRFB), o
devebanco
estar em
de dados
modo de leitura e gravação, você não pode recuperar objetos pertencentes a
SYS, independentemente
tablespace em que residem,deeo
qual
banco de dados deve estar no modo ARCHIVELOG. Além
disso, o compatível deve ser ajustado para 12,0 ou superior, e você não pode recuperar
parâmetro
objetos
o sistema ou SYSAUX tabela.
B e D são incorrectas. O parâmetro compatível deve ser de pelo menos 12,0, ea mesa
para ser recuperada não necessita de ser contida numa única tabela ou grupo de áreas de
tabelanecessário
seria como ele com o ponto de tabela tradicional no tempo de recuperação (TSPITR).
11. B . Você quer deve especificar um período de retenção padrão para o Flashback Data
si ouArchive
especificar um período de retenção ao adicionar a tabela para o arquivo.
A , C , e D estão incorrectos. A está incorreta porque você pode ter vários Flashback
Data C está incorreta porque o parâmetro de cota é necessário apenas se você quiser
Arquivos.
limitar
a quantidade de espaço usado pela Data Archive Flashback na tabela; caso contrário, ele
pode
crescer para usar todo o espaço disponível na tabela. D está incorreta porque você pode criar
Flashback Arquivos de dados só em permanentes espaços de tabela, não desfazer.
12. Um . DBA_FLASHBACK_ARCHIVE_TABLES contém uma lista de tabelas usando
Flashback
atualmente
Arquivo
um de Dados.
B , C , e D estão incorrectos. B é incorrecta porque DBA_FLASHBACK_ARCHIVE
contém uma lista de arquivos, mas não as tabelas dentro. C é incorrecta porque
DBA_FLASHBACK_ARCHIVE_TS contém o arquivo a tabela de mapeamento. D é
incorreto porque DBA_FLASHBACK_DATA_ARCHIVE_TABLES não é um dado válido
vista dicionário.
13. B . O UNDO_RETENTION parâmetro de inicialização é necessário para outro de
recursos,
flashback
mas não para Flashback Database.
A , C , e D estão incorrectos. Os parâmetros DB_RECOVERY_FILE_DEST_SIZE e
DB_RECOVERY_FILE_DEST são necessários para definir a localização eo tamanho do
Área de Recuperação e DB_FLASHBACK_RETENTION_TARGET é necessária para
Jejum
definirsuperior
limite um desejado para a janela de recuperação do Flashback Database.
14. A e D . Um ponto de restauração regular não requer uma área de recuperação rápida, e
envelhecido
pode serfora do controlfile; um ponto de restauração garantido nunca vai ser
aenvelhecido
menos que fora
seja do
explicitamente
controlfile descartado.
B , C , e E são incorrectas. B está incorreta porque um garantida ponto de restauração
pode ser para outros recursos de flashback, e não apenas Flashback Database. C é
referenciada
incorrecta
você pode porque
soltar explicitamente qualquer tipo de ponto de restauração. E é incorreta porque
você podepontos
garantida definirde restauração sem o registo de flashback habilitado; no entanto, você
aindade
Área deve ter um
Recuperação rápida habilitado.
CAPÍTULO 27
Objetivos do exame
• 63.1.16.1 Descrever e usar transportáveis Tablespaces e Bases de Dados
• 63.1.17.1 Escolha uma técnica para duplicar um banco de dados
• 63.1.17.2 Criar um banco de dados duplicados baseado-Backup
• 63.1.17.3 Duplicar um banco de dados baseado em uma instância de execução
O recurso de tabela transportável pode copiar rapidamente um ou mais espaços de tabela de um
bancosem
outro de dados
usar opara
muito mais demorado de exportação / importação. Uma extensão para transportável
tablespaces, bancos de dados transportáveis, torna mais fácil para criar um novo banco de dados e
mover todosdo
tablespaces ossistema
não- para o novo banco de dados. Relacionado a isso são técnicas para duplicar
um todo
base de dados. Se você deve ter seu banco de dados de código aberto em uma base contínua, você
pode clonar
banco seu enquanto ele estiver aberto e disponível para os usuários. Porque você está copiando
de dados
a partir
não precisa
de uma
de umbase
Recovery
de dadosManager
aberta, você
intermediário (RMAN) backup, o que pode economizar muito
tempo eem disco.
espaço
Em outras palavras, mesmo se você estiver executando o Oracle Database 12 c com conjunto
vocêcompatível
pode transportar
para 11.0.0,
em um espaço de tabela a partir de um banco de dados em uma plataforma
adiferente
10.0.0. que tem conjunto compatível
Para converter arquivos de dados de um formato endian para o outro, use o comando Converter
Neste
RMAN.
exemplo, executado em um sistema Windows, irá ler um arquivo de dados e escrevê-lo para
um novoapropriado
formato nome comendian
um para a plataforma chamado:
transportar Tablespaces
Se você usar comandos SQL ou Cloud Control para o transporte de um espaço de tabela, as etapas
gerais são a
mesmo:
1. Faça o espaço de tabela (ou espaços de tabela) somente leitura no banco de dados origem.
2. Use o Data Pump exportação para extrair os metadados de tabela do banco de dados fonte.
3. Se o alvo não tem o mesmo formato endian, converter os arquivos de dados. Isso pode ser
feito em
a origem ou plataforma de destino.
4. Copie o arquivo de arquivos de dados de espaços de tabelas e despejo de metadados a partir
da fonte para o destino.
5. Use o Data Pump para importar metadados de tabela para a tabela de destino.
6. Faça a tabela (ou espaços de tabela) ler-escrever sobre a fonte e bancos de dados de destino.
Passo 4 na lista anterior podem ser realizados com o pacote DBMS_FILE_TRANSFER. este
contém procedimentos que podem copiar arquivos entre sistemas de arquivos, entre grupos de discos
ASM, entre
sistemas e grupos
arquivo
de discos ASM, e de um servidor para outro. Uma vantagem particular no
do transporte de tabela é que, se a conversão endian é necessária quando a cópia de um servidor para
contexto
outro, a procedimentos DBMS_FILE_TRANSFER GET_FILE e put_file detectar este e
realizar a conversão ao copiar os arquivos.
Exercício 27-1: transportar um Tablespace Utilizando SQL e PL / SQL Neste exercício, você vai
simular o transporte de uma tabela através da criação de uma tabela, copiando-lo, deixando-o cair e
de volta para o banco de dados. Você vai precisar para se conectar com privilégios SYSDBA.
transportá-lo
1. Criar um espaço de tabela e alguns objetos dentro dele. Nomeie o arquivo de dados (neste
nome
caso, um do arquivo; ajustar isso de acordo para Linux) em vez de usar Oracle Managed Files
Windows
(OMF).
A vista é preenchida cada vez que a verificação for executada, relatando quaisquer questões
como dependente
objetos em outros espaços de tabela. Se não houver linhas, em seguida, o transporte pode
prosseguir.
3. Tornar o espaço de tabela somente leitura.
4. Use o utilitário expdp para exportar os metadados descrevendo o espaço de tabela e seu
conteúdo. Você
terá de fornecer um nome de usuário ea senha de um usuário altamente privilegiado, como o
O arquivo de despejo vai para o diretório DATA_PUMP_DIR padrão.
sistema.
6. Renomeie o arquivo de dados para tornar a simulação mais realista. Exemplos para Windows
e Linux
são as seguintes, respectivamente:
Exercício 27-2: Gerar Scripts de transporte Banco de Dados Neste exercício, gerar os scripts
para
transporte de um banco de dados para uma outra plataforma. Assume-se que a plataforma de origem
(e, por conseguinte
plataforma de destino) é little-endian.
Em um alto nível, estas são as cinco possibilidades para a duplicação do banco de dados:
• USAR Backupset
• tamanho da seção
• cláusula Encryption
• cláusula de Compressão
A seguir estão as etapas de alto nível para criar um banco de dados duplicado em outro host do
base de dados activa:
Tabela 27-1 os parâmetros mínimos que em geral estará especificado para uma instância auxiliar
também ser especificado quando você executa o comando via, que terá precedência sobre qualquer
valores no arquivo de parâmetro.
Usando o arquivo de parâmetro de inicialização recém-criado, criar um spfile e iniciar a instância
ModoemNOMOUNT. Se estiver trabalhando no Windows, será necessário usar o utilitário oradim para
o serviço do Windows na qual a instância será executado.
criar
Este exemplo usa Oracle Net e autenticação de arquivo de senha para se conectar tanto o alvo e
o auxiliar e um catálogo. Alternativamente, você pode usar a autenticação do sistema operacional
apara
umsedos bancos de dados e, talvez, não usar um catálogo.
conectar
Este comando irá criar a duplicata e nomeá-la dupdb copiando arquivos de dados do alvo,
imagem cópias. Não diz nada sobre o que os nomes de arquivo deve ser usado no auxiliar e terá
apenas se uma destas circunstâncias se aplica:
sucesso
Se nenhuma destas condições se aplica, em seguida, o comando duplicado terá de ser mais
Aqui
complexa.
está um exemplo:
Duplicados de backup
A chave para a duplicação baseada em backup é que todos os backups necessários de arquivos de
dadosser
deve e arquivos
visível para
de log
o exemplo
arquivados
auxiliar, de preferência no mesmo caminho que no alvo. Se os
backups são
armazenada em um dispositivo conectado à rede, este não deve ser problema. Caso contrário, eles
devem ser
servidor auxiliar.
copiadosSe para
não éo possível expor os backups no mesmo caminho, a sintaxe faz autorização
nomear o caminho onde eles existem.
Se uma conexão alvo é possível, então RMAN pode interrogar o alvo de todas as medidas
informações
necessárias
sobre a localização de backups e a estrutura eo estado da base de dados. Se um alvo
conexão não é possível, mas uma conexão catálogo é possível, então RMAN pode recuperar esse
informações do catálogo. Se nem um alvo nem uma conexão catálogo é possível, então tudo isso
informações devem ser fornecidas no comando duplicado. Ao usar backups para a duplicação
processo, você precisa configurar canais do RMAN para ser usado na instância de banco de dados
auxiliar.
canal na oinstância auxiliar restaura os backups, por isso você precisa especificar o ALLOCATE
comando no bloco prazo, como neste exemplo:
Exercício 27-3: Duplicar um banco de dados Este exercício pressupõe que você tenha um banco
de dados
que está em
chamado
execução
orclno modo archivelog e que é um banco de dados OMF, que inclui todos os
arquivos de log
dados,
e cópias
on-line
CONTROLFILE nomeados pela OMF. Ele será duplicada a um banco de
dados
em execução
chamado nodupdb,
mesmo servidor. Esteja ciente de variações para Linux e Windows, e, naturalmente,
substituto
nomes e caminhos e outros literais conforme necessário.
Reinicie o ouvinte.
Adicionar essas entradas para o arquivo tnsnames.ora:
Testar a configuração.
Observe a maneira pela qual os scripts de memória são gerados e executados. Os scripts são
instrutivo.
7. É quase inevitável que você vai precisar de várias tentativas para obter este exercício
concluído
com sucesso. Isso faz parte da vida de um administrador de banco de dados! Após uma
tentativa
ciente de fracassada,
que a duplicação
ser pode ter um êxito parcial, e você pode, portanto, precisam
excluir vários arquivos antes de tentar novamente, assim como reiniciar a instância auxiliar.
Broca Two-Minute
Auto teste
1 . Você está executando o Oracle Database 12 c com o parâmetro de inicialização
COMPATIBLE
12.0.0. Qual édefinido
o nível para
de compatibilidade mínimo para o transporte de um espaço de tabela a
partir
em umade plataforma
um banco dediferente?
dados (Escolha a melhor resposta.)
A. 8.0
B. 10,0
C. 12.0
D. 11,0
E. Todas as anteriores
2 . Ao transportar um espaço de tabela, o que é o propósito de
DBMS_TTS.TRANSPORT_SET_CHECK? (Escolha a melhor resposta.)
A. Ele assegura que o nível de compatibilidade é alta o suficiente para a operação de
transporte.
B. Ele compara o nível endian para os bancos de dados de origem e de destino e corre o
RMAN para os arquivos de dados antes do transporte.
converter
C. É valida que os metadados para o espaço de tabela não tem qualquer conflito de
nomeação
os esquemas
com de base de dados alvo.
D. Ele verifica para tabela de auto-consistência.
3 . Você deseja duplicar um banco de dados, mas maximizar a disponibilidade para o banco de
origem
seus eespaços
todos de tabela. Qual é o melhor método a utilizar para este tipo de duplicação de
banco de dados? (Escolher
a melhor resposta.)
A. cópias de imagens
B. exportação da bomba de dados com CHEIO = Y
C. RMAN conjuntos de backup porque então o tempo de inatividade será zero
D. RMAN conjuntos de backup porque então o tempo de falha será próximo de zero
4 . Identificar a instrução correta sobre bancos de dados duplicados criados com o RMAN.
(Escolher
a melhor resposta.)
A. RMAN cópias da fonte de dados para o banco de dados de alvo, e tanto pode ter a
mesma
nome.
B. RMAN cria uma instância auxiliar para a duração da operação de cópia e a deixa cair
após a operação de cópia for concluída.
C. A base auxiliar é a mesma que a base de dados destino.
D. RMAN cópias do banco de dados do alvo à base de dados duplicado, e ambos podem ter
o mesmo nome.
E. O banco de dados de origem deve ser desligado antes de iniciar-se o banco de dados de
destino.
5 . Para criar um banco de dados duplicado, coloque as seguintes etapas na ordem correta:
1. Comece o exemplo como auxiliar NOMOUNT.
2. Atribuir canais auxiliares, se necessário.
3. Execute o comando RMAN duplicado.
4. Crie um arquivo de senha para a instância auxiliar.
5. Certifique-se de conectividade de rede para a instância auxiliar.
6. Abrir a instância auxiliar.
7. Inicie o banco de dados origem no monte ou no modo de ABERTO.
8. Crie um arquivo de parâmetro de inicialização para a instância auxiliar.
9. Criar backups ou copiar backups existentes e arquivos de log arquivados para um local
comum
acessível por exemplo o auxiliar.
A. 5, 4, 8, 1, 7, 9, 3, 2, 6
B. 4, 5, 8, 1, 7, 9, 2, 3, 6
C. 4, 5, 8, 1, 7, 9, 3, 2, 6
D. 5, 4, 1, 8, 7, 9, 2, 3, 6
6 . Qual das seguintes cláusulas não é válido para o comando RMAN duplicados? (Escolher
a melhor resposta.)
A. SKIP OFFLINE
B. SKIP READONLY
C. SKIP TABLESPACE
D. NOFILENAMECHECK
E. ABERTO RESTRITO
7 . instância
Identificarbanco
a verdadeira
de dadosdeclaração sobre oum
quando duplicar status do banco
banco de com
de dados dadosbase
de origem
em umae instância
o auxiliar
em execução. (Escolha o melhor
responda.)
A. A base de dados activa deve estar no modo de montagem, e o exemplo auxiliar deve
estarmodo
em MOUNT.
B. A base de dados activa deve estar em MONTAGEM ou modo de abertura, e o exemplo
auxiliares
estar nodevem
modo NOMOUNT.
C. A base de dados activa deve estar em modo de abertura, e o exemplo auxiliar deve estar
em Modo NOMOUNT.
D. A base de dados activa deve estar no modo NOMOUNT, e o exemplo auxiliar deve estar
em modo MOUNT.
Respostas de auto-teste
1. B . Se os bancos de dados de origem e destino estão em diferentes plataformas, tanto a
deveorigem
ter um eo
nível
destino
de compatibilidade de pelo menos 10,0.
A , C , D , e E são incorrectas. Para o transporte entre as plataformas idênticas, você
apenas
precisa
compatível = 8,0. Para o transporte entre bancos de dados com diferentes tamanhos
de bloco,
precisa apenas
você compatível = 9,0.
2. D . DBMS_TTS.TRANSPORT_SET_CHECK verifica para garantir que não há objetos
no espaço de tabela para ser transportado que têm dependências de objetos em outros
espaços
o banco de tabela
dados fonte.
em
A , B , e C são incorrectas. Eles são usos não válidos para
DBMS_TTS.TRANSPORT_SET_CHECK.
3. D . Usando RMAN para a duplicação de um banco de dados com conjuntos de backup
os espaços
tem a vantagem
de tabelasde
disponíveis,
manter tanto quanto possível (em modo de escrita lido). sucessivo
backups incrementais vai ficar menor e menor até que o último backup em que você deve
tornar os espaços de tabela read-only para realizar o último backup incremental a ser
aplicada
banco deaodados de alvo.
A , B , e C são incorrectas. A está incorreta porque as cópias de imagem são um método
transporte
válido de
para
um espaço de tabela ou banco de dados, mas os arquivos de dados do espaço
de tabela
Modo paradeve estaraem
realizar READ
cópia ONLY B está incorreta porque o Data Pump pode fazer
de imagem.
backupdededados,
banco todo ummas é um backup lógico, não um backup físico. C é incorrecta porque
haverá
ainda haver alguma indisponibilidade do espaço de tabelas para realizar o último backup
incremental
aplicada a cópia
parado
serbanco de dados de destino da tabela.
4. D . Você pode manter o mesmo nome porque RMAN cria um novo DBID, e, portanto,
pode usar o mesmo catálogo de recuperação para ambos os bancos de dados.
A , B , C , e E são incorrectas. Um é incorrecta porque a base de dados destino é o
mesmo
dados que o B é incorrecta porque RMAN não eliminar a instância ou auxiliar
de origem.
banco de dados após a operação de cópia está completa. C é incorrecta porque a base de
dados é alvo
o banco de dados de origem e o banco de dados auxiliar é o banco de dados do destino. E é
porque ambos os bancos de dados podem ser abertos ao mesmo tempo, mesmo no mesmo
incorrecta
host e com
mesmo a
catálogo de recuperação.
5. B . Estes passos são na ordem correta.
A , C , e D são incorrecta porque eles são na ordem errada.
6. Um . A opção SKIP OFFLINE não é válido para o comando duplicado.
B , C , D , e E são incorrectas. B é incorrecta porque a cláusula SKIP READONLY
exclui somente leitura espaços de tabela. C é incorrecta porque SKIP TABLESPACE exclui
ou mais espaços de tabela a partir da operação de cópia; você não pode ignorar o sistema ou
uma
DESFAZER
tablespace. D está incorreta porque NOFILENAMECHECK não verifica duplicado
nomes de arquivos entre a origem eo destino. E é incorreta porque ABERTO RESTRITO
abre o banco de dados de destino com a opção sessão restrita.
7. B . Para duplicar um banco de dados com base em uma instância em execução, o banco
querde
MONTAGEM
dados de origem
ou modo
pode de
estar
abertura;
em uma vez que o banco de dados auxiliar ainda não
tem A
sequer
, C , um
controlfile, eeleDdeve
estãoser aberto no A
incorrectos. modo
está NOMOUNT.
incorreta porque a instância auxiliar não tem uma
controlfile de imediato, por isso não pode ser iniciado no modo MOUNT. C é incorrecta
porque
base de adados activa também pode ser no modo de montagem. D é incorrecta porque a base
de dados não
duplicada se opodem
banco ser
de dados fonte está no modo NOMOUNT, ea instância auxiliar não
pode
no modo
ser MOUNT quer!
CAPÍTULO 28
Objetivos do exame
• 63.1.8.1 criar cópias de segurança criptografadas pelo RMAN
• 63.1.13.1 configurar e usar o Oracle Secure Backup
Desempenho • 63.1.18.1 Tune RMAN
Este capítulo descreve algumas técnicas avançadas para o gerenciamento de backups que se
relacionam
tuning. com criptografia
Abrange e
também o Oracle Secure Backup (OSB). Oracle Database 12 c fornece dois tipos de
backups criptografados para garantir que os dados da empresa não seja comprometida ou visto pela
pessoa
O método
errada.
de backup que você usa (tanto via Oracle Advanced Security ou o Oracle Secure Backup)
sobre os tipos de dados que você está fazendo backup e seu destino. Como você viu nos capítulos
depende
anteriores,
O Recovery Manager (RMAN) pode fazer backup de grandes arquivos de dados como um backup
multisection,
vários dispositivos
alavancando
de saída (múltiplos canais, quer no disco ou em fita) para reduzir drasticamente o
leva para fazer o backup do arquivo de dados, entre outras vantagens. técnicas de compressão
tempo
ealternativos
métodos dedocriptografia
RMAN reduzir ainda mais o tamanho do backup e fazer os backups indisponível
para não
partes porautorizada
uso de senhas stand-alone ou carteira de criptografia do banco de dados.
Nas seções seguintes, você vai aprender a permitir que cada tipo de criptografia (transparente ou
senha). Para criar uma estratégia de backup e recuperação bem sucedida, você deve primeiro
entender
de falhas os
e como
tipos o Oracle responde a cada um deles. Alguns exigem nenhum usuário ou
administrador
(DBA) intervenção,
de banco
e outros
de dados
fazem. Que backup e recuperação soluções que você alavancagem
depende
muitos fatores, incluindo o quão rápido você precisa para se recuperar de uma falha e como muitos
recursos
quero dedicar
que você
à solução. Seu investimento em infra-estrutura de recuperação é proporcional ao custo
da perda de produtividade ou de negócios renda, se o banco de dados não está disponível para um
dia, uma hora, ou um minuto.
Configurando e usando criptografia transparente
Você pode configurar a criptografia transparente (baseado em carteira) como método de criptografia
RMAN padrão usando
CONFIGURAR o da seguinte forma:
comando
Tenha em mente que sua carteira de banco de dados deve estar aberto também. Se não for aberto,
você pode pensar que
tudo está indo conforme o planejado, até que o processo de criptografia tenta iniciar. Isto é mostrado
pela
mensagem de erro falha de backup no seguinte resultado:
A criação de uma carteira de criptografia para a instância é fácil. Seus pontos de arquivo
da carteira
sqlnet.ora
encriptação
para o local
com uma entrada semelhante à que se segue:
Não perca o conteúdo dos arquivos na carteira diretório back-lo. Você não será capaz de
descriptografar tablespaces criptografados ou backups RMAN criptografada sem ele.
Abrindo a carteira no SQL> prompt (e, a partir de Oracle Database 12 c , no RMAN> prompt)
e criar uma chave mestra de criptografia faz com que tudo funcione muito mais suave.
Como você poderia esperar, mesmo se a criptografia transparente não é o padrão, você pode ligá-
duração
lo apenas
de umpara
único
o backup. Como no exemplo anterior, a carteira de banco de dados deve estar
aberto. Aqui está um
exemplo:
Para restaurar ou recuperar de um backup criptografado, a carteira de banco de dados deve ser
padrão
aberto,
de criptografia
e tanto o deve ser ON ou você deve usar SET ENCRYPTION ON antes da recuperação
Operação.
Para keystores baseados em senha, você tinha que especificar com o Backup no exemplo
gerar
anterior,
a chavequando
de encriptação mestre. Uma nova chave mestra precisa ser gerado apenas quando você
pensa
que a segurança foi comprometida. Melhor ainda, alterá-lo em uma base regular como uma medida
preventiva.
Se você precisar restaurar uma cópia mais antiga do armazenamento de chaves, você pode
recuperar
em que dados antigos
você mudou a chavesomente atécriptografia.
mestra de o ponto
Se você estiver recuperando um ou mais espaços de tabelas ou todo o banco de dados a partir de
senhas
backups
diferentes,
que têm
você pode facilmente especificar todas as senhas de uma vez com SET
Descriptografia.
RMAN tentará cada senha por sua vez para cada backup criptografado até que ele encontra uma
correspondência.
terminará com um erroRMAN
somente se nenhuma senha corresponder a qualquer das senhas em qualquer
um dos backups.
Usando criptografia Dual-Mode
Você pode usar a criptografia transparente e criptografia de senha ao mesmo tempo. Isto é útil se
o backup pode ser usado para restaurar ou recuperar dentro do mesmo banco de dados, e na ocasião
ele pode
usado para
serrecuperar outro banco de dados. Quando ambos os métodos são, com efeito, você pode
usar a senha
ou a carteira de banco de dados para restaurar o backup. Ao recuperar a um banco de dados remoto,
avocê
senha
deve
antes
especificar
de recuperar, como segue:
Se você quiser usar a criptografia única baseada em senha para um backup, adicione a cláusula
Criptografia.
ONLY a SET
Como um resultado, mesmo se o padrão de encriptação para LIGADO (e, portanto, utiliza a
carteira), todos subsequente
backups usar a criptografia de senha somente até que você desativar a criptografia de senha ou saída
RMAN
completamente.
• Servidor administrativo Um servidor em algum lugar dentro da empresa que tem o software
OSB
instalado. Isso pode ser instalado em um servidor de banco de dados, mas é geralmente em
um servidor
• Servidor dedicado.
de mídia Um servidor que gerencia o armazenamento em camadas, como discos,
bibliotecas
meios de de fitas e óptica
comunicação.
• Cliente A meta para backups OSB. Isso pode ser um banco de dados Oracle ou um sistema de
arquivos
outro servidor.
OSB pode ser aproveitado de várias maneiras: via Cloud Control Enterprise Manager,
através
perfeitamente
RMAN através do SBT existente (Backup System para fita) interface, através da ferramenta
web OSB,
através e
do utilitário obtool de linha de comando.
• O usuário RMAN deve ser atribuída as classes OSB pertinentes para executar backups de
Oracle e
restaura.
• The SBT library must be available.
Por exemplo, aqui está como você usaria obtool para criar um usuário do OSB chamado
oel63
pa_rman
para permitir
no hostRMAN para realizar backups sob o oráculo usuário OS:
Deste ponto em diante, qualquer trabalho RMAN executado sob o usuário Oracle no servidor
backups
oel63de
pode
qualquer
executar
banco de dados objetos acessíveis pela sessão RMAN.
A biblioteca SBT está instalado no servidor de banco de dados como parte da instalação do
e Windows,
banco deosdados.
arquivos
no Unix
são os seguintes:
Para fazer backup de OSB, usar um script que especifica a biblioteca como um parâmetro a ser
declaração
passadoalocação
para o de canal.
Quando um backup RMAN começa, o nome do banco de dados, tipo de conteúdo e número de
OSB,cópias
o quesão
se enviadas para
traduz para um dado selector de armazenamento que define os dispositivos e as
famílias
para o backup.
dos meios para usar
• Sua empresa expande seus escritórios em todo o mundo, os usuários estarão acessando o
banco de dados
momentos do em
dia tudo
e da noite, e você não quer um tempo de resposta operação de backup de
redução.
• Novas aplicações aumentar a demanda para o sistema de biblioteca de fitas.
• Gestão exige melhorias no tempo de recuperação de banco de dados para atender o nível de
serviço
acordos (SLAs).
Otimizando as operações de backup e recuperação RMAN irá atenuar os efeitos desses eventos.
Você precisa entender a importância do RMAN sintonia e ser capaz de identificar gargalos na
diferentes fases de uma cópia de segurança RMAN.
Primeiro, você vai aprender sobre as exibições dinâmicas de desempenho que você pode usar
em andamento,
para monitorar
como
umabackup
V $ SESSION
RMAN e V $ PROCESS. RMAN torna mais fácil identificar um
trabalho de backup em V $ SESSION.
específico
Em seguida, você vai mergulhar em alguns exercícios de ajuste, usando técnicas tais como
paraalocação
melhorardeo canais
desempenho
múltiplos
de suas operações de backup. Você também vai saber onde gargalos
RMAN
ocorrer e como medir um gargalo com vistas como V $ BACKUP_SYNC_IO e
V $ BACKUP_ASYNC_IO. O comando RMAN BACKUP oferece-lhe uma grande flexibilidade,
permitindo
você controla
queo tamanho de cada peça backup, determinar quantos arquivos para colocar em um
backupset,
diminuir a carga
e sobre o sistema, definindo uma duração de cópia desejada.
Exercício 28-1: Processos Monitor de RMAN Canal Neste exercício, você vai iniciar um trabalho
que usa dois ou mais canais e recuperar os nomes dos canais de V $ SESSION e V $ PROCESS.
RMAN
1. Criar uma tarefa do RMAN que faz o backup da tabela USERS usando dois canais de disco.
Note-se que os processos de usuário do RMAN ainda existirá em V $ SESSION até sair RMAN
ou início
outra operação de backup.
Se você tiver vários empregos RMAN em execução, alguns com dois ou mais canais alocados,
difícil
podeidentificar
ser processo esse que corresponde a qual backup RMAN ou operação de recuperação.
Para
facilitar a diferenciação desejar, você pode usar o comando ID conjunto de comandos dentro de uma
executar bloco, como neste exemplo:
RMAN
Exercício 28-2: monitorar vários RMAN Jobs Neste exercício, você vai começar em dois
empregos RMAN
identificar cada trabalho
e em V $ SESSION e V $ PROCESS usando a opção SET comando no
RMAN.
1. Criar dois empregos RMAN (em duas sessões RMAN diferentes) que fazem backup de dois
espaços
usar adeopção
tabelaSET
e COMMAND.
Usando V $ SESSION_LONGOPS
A visão de desempenho dinâmico V $ SESSION_LONGOPS não é específico para RMAN também.
registra todas as operações que se estendem por mais de 6 segundos (em tempo absoluto), incluindo
Oráculo
ebackup do RMAN
operações de recuperação, as estatísticas coleta e longas consultas em V $ SESSION_LONGOPS.
Este exemplo consulta V $ SESSION_LONGOPS enquanto um backup do arquivo de dados está
em andamento:
Usando visualizações dinâmicas de desempenho, você pode identificar qual fase dos quais
o gargalo
operaçãoe dirigir-se
de canalem
é conformidade.
Em alguns cenários, você pode querer aumentar o tempo de backup para garantir que o tempo de
ser curto.
recuperação
Criandoserá
cópias de imagens e recuperar as cópias de imagens em uma base diária ou por
hora oirátempo
com adicionar
de backup, mas irá reduzir drasticamente o tempo de recuperação.
dispositivos; atribuição de dois ou mais canais (e, portanto, os processos) para um único dispositivo
físico
não melhorar o desempenho e pode até mesmo diminuir o desempenho. Se você está escrevendo
para um Management
Storage único automática
(ASM) do grupo de disco ou um sistema de arquivos distribuídos pelo sistema
operacional,
alocar mais canais
você pode
e melhorar o rendimento desde o grupo de discos ASM lógica ou arquivo listrado
sistema mapeia a dois ou mais discos físicos. Você pode alocar até 255 canais, e cada canal
pode ler até 64 arquivos de dados em paralelo. Cada canal grava uma cópia de segurança ou a
imagem
Se o cópia
número separada.
de arquivos de dados em seu banco de dados é relativamente constante, você pode
alocar um número fixoficheiro de dados para um canal específico. Aqui está um exemplo:
de canais e atribuir a cada
Note também que você pode especificar o nome do caminho para um arquivo de dados em vez
do número arquivo de dados, como neste
exemplo:
Para automatizar esse processo ainda mais, você pode usar o comando configure para aumentar a
paralelismo para cada tipo de dispositivo.
Se o backup não for concluído dentro do prazo especificado, o backup parcial ainda é utilizável
cenário
em umde recuperação após um comando sucessiva BACKUP termina o backup e você usar o
opção PARCIAL.
Broca Two-Minute
Criar backups criptografados-RMAN
• criptografia transparente usa uma carteira de banco de dados para criptografar um backup e o
backup pode apenas
restaurado ser para o banco de dados fonte.
• criptografia senha usa uma senha para criptografar um backup e o backup pode ser restaurado
quer para o banco de dados de origem ou para outro banco de dados.
• Você pode usar a criptografia transparente e criptografia de senha no mesmo backup.
• criptografia transparente pode ser ativado por um único backup usando a criptografia SET
comando.
Auto teste
1 . execute
Você temo um arquivo
seguinte de dados
comando por parte dos utilizadores do espaço de tabelas smallfile que
RMAN:
tem um tamanho de 90MB, e você
Quantas seções que esta cópia de segurança criar? (Escolha a melhor resposta.)
A. O comando não é executado porque backups multisection só se aplicam quando múltipla
canais são utilizados.
B. Duas seções de 45MB cada.
C. Duas seções de 40MB cada e uma seção de 10MB.
D. Não é possível prever o tamanho das seções.
2 . Qual dos seguintes atributos ou características são passados por RMAN a OSB quando
executar um backup? Suponha que o cliente RMAN já foi registrado com OSB.
(Escolha todos os que se aplicam.)
A. Tipo de conteúdo
B. hostname Único
C. ID de banco de dados
D. nome de banco de dados
E. Copiar número
F. Número grupo meios solicitadas
3 . Que política de retenção RMAN deverá utilizar se a backups RMAN alavancagem OSB?
(Escolher
a melhor resposta.)
A. RMAN herda a política de retenção de OSB.
B. janela de recuperação.
C. cópias.
D. OSB herda a política de retenção RMAN.
4 . Qual dos seguintes dois pontos de vista dinâmicos de desempenho que você pode usar para
identificar
relacionamento
o entre as sessões do servidor Oracle e canais do RMAN? (Escolha o melhor
responda.)
A. V $ PROCESSO e V $ SESSÃO
B. V $ PROCESSO e V $ BACKUP_SESSION
C. V $ PROCESSO e V $ BACKUP_ASYNC_IO
D. V $ BACKUP_ASYNC_IO e V $ SESSÃO
E. V $ BACKUP_SYNC_IO e V $ BACKUP_ASYNC_IO
5 . Você cria três sessões RMAN para fazer backup de três espaços de tabela diferentes. Sua
terceira
sessão
RMAN
é executado este comando:
Quais são os valores que a coluna V $ SESSION.CLIENT_INFO tem para este comando?
tudo o que se aplicam).
(Escolher
A. rman channel=ORA_DISK_1, id=user bkup.
B. id=user bkup, rman channel=ORA_DISK_1.
C. id = bkup usuário, cmd = tablespace usuários de backup.
D. ID = utilizador bkup.
E. A coluna é client_info em V $ processo, não V $ SESSÃO.
6 . Identificar o local onde saída de mensagem RMAN e solução de problemas informação
podeencontrado.
ser (Escolha todos os que se aplicam.)
A. arquivo de rastreamento servidor The Oracle
B. arquivo de rastreamento O RMAN
C. O V $ PROCESSO vista
D. O log de alerta do banco de dados
E. saída do comando RMAN
F. O sbtio.log arquivo específico do fornecedor
G. A tabela SYS.AUDIT $
7 . Estes parâmetros de instância em seu banco de dados são definidos da seguinte forma:
BACKUP_TAPE_IO_SLAVES = TRUE
LARGE_POOL_SIZE = 200M
JAVA_POOL_SIZE = 200M
PGA_AGGREGATE_TARGET = 200M
Qual é a afirmação correta sobre onde RMAN aloca os buffers de memória para a fita
cópia de segurança? (Escolha a melhor resposta.)
Respostas de auto-teste
1. D . A dimensão da secção divide o arquivo de dados de entrada, não a peça de backup
saída.
A , B , e C são incorrectas. A está incorreta porque você pode usar backups multisection
sem paralelismo (embora talvez não haja muita razão para isso). B e C são incorrectos
porque o tamanho dos pedaços de saída não pode ser previsto porque vai depender de quão
muitos blocos das seções arquivo de dados, na verdade, contêm dados.
2. A , C , D , e E . Quando RMAN envia uma solicitação de backup para OSB, você deve
nomeespecificar
do banco o(ou ID), o tipo de conteúdo, e o número de cópias. Perante esta informação,
OSB
vai usar o seletor de armazenamento de backup armazenados e enviar o backup para o
backup apropriado
dispositivos e meios de comunicação da família.
B e F estão incorrectos. B é incorrecta porque o nome é usado para registar o RMAN
cliente com o servidor de administração OSB, mas não é necessário para cada backup. F é
porque RMAN não seleciona o número do grupo de mídia; OSB faz.
incorrecta
3. B . Você deve usar uma política de retenção RECUPERAÇÃO janela quando usando
OSB.RMAN
Você vai
comusar uma certa quantidade de espaço em disco na Área de Recuperação
Rápida para enfrentar
recuperação o um certo número de horas cada dia; operações de recuperação mais
precisa para
backups em fita
longos também irá alavancagem gerido pela OSB. Você vai usar um comando obtool para criar
uma mídia
família para backups RMAN.
Upgrades e multitenant
Objetivos do exame
• 062.2.6.1 Descreva métodos de atualização
• 062.2.6.2 descrevem os métodos de migração de dados
• 062.2.6.3 Descreva o processo de atualização
• 062.2.10.1 Migração de dados usando o Oracle Data Pump
Este capítulo aborda a técnica para atualizar o software de banco de dados e migração de dados de
um
banco de dados de uma versão para um banco de dados de outro.
De liberação 11.2. x , a rotina de atualização é o mesmo se você estiver aplicando um conjunto
de patches
mover-se (para
a partir de, por exemplo, libertação 12.1.0.1 a 12.1.0.2 libertar) ou de executar uma
(A partir de, por
actualização exemplo, principais
de libertação 11.2.0.3 a 12.1.0.1). Em ambos os casos, é necessário instalar um novo
Antes
Oraclede liberar 11.2. x , um grande lançamento necessária uma nova Oracle Home, mas um patchset
Home.
foiOracle
o aplicada
Home
a existente. Agora, apenas a patches ou atualizações patchset indivíduo são aplicados,
no lugar,
uma casa para
existente.
Tendo atualizado o software de banco de dados, você deve atualizar o banco de dados próprio ou
novocriar umde dados com o novo software e mover os dados nela. atualização do banco de dados é
banco
descrito no
capítulo seguinte. migração de dados para um novo banco de dados usando o utilitário Data Pump é
descrito neste
capítulo.
Atualização de software
produtos Oracle tem um número de versão multifacetada, com cinco elementos:
Para determinar a liberação de seu banco de dados, consultar o V vista $ VERSÃO. Dentro do
bancopara
possível de dados,
alguns écomponentes instalados para estar em diferentes versões. Para determinar o que
está
o lançamento,
instalado no
consultar a exibição DBA_REGISTRY. A Figura 29-1 mostra estas consultas sobre
uma baseem
rodando de Windows
dados de 64 bits.
Figura 29-1 Determinação da libertação da base de dados
Na figura, a libertação da base de dados é 12.1.0.1.0, que foi o primeiro 12 c versão de produção,
especificamente, libertar 12, a primeira versão de manutenção. O quarto dígitos indica o patchset.
1 está incluído na primeira versão de produção (a versão final beta, utilizado para o desenvolvimento
patchset
tanto da
livro, foipresente
12.1.0.0.0). A segunda consulta na figura mostra que todos os componentes instalados no
base de dados também são na libertação 12.1.0.1.0, com a excepção de Application Express
(APEX).
tem a suaÁPICE
própria rotina de upgrade, e o lançamento do APEX é em grande parte independente do
lançamento
base de dados.
do
DICA Termos como 12 c e 11 g são muito sem sentido em um contexto técnico; eles são pouco mais
que as etiquetas de marketing. Você vai descobrir que DBAs profissionais sempre identificar a sua
versão número
liberar com o para quatro casas decimais.
diretório base, ao lado do Oracle Home existente. Para começar a utilizar a versão recém-instalada
do
software, ajustar suas variáveis ORACLE_HOME e meio ambiente PATH para apontar para a nova
Em seguida, criar (ou upgrade) um banco de dados.
casa.
EXAME DICA Não é necessário instalar uma versão base do produto antes de instalar um conjunto
de patches.
Patches de são completas imagens de software instaláveis.
Ao usar OUI para instalar uma casa de banco de dados Oracle (se uma versão base ou de um
OUIconjunto
irá detectar
de patches),
todas as instalações
a anteriores. Ele pode fazer isso lendo o conteúdo do inventário
que terá sido criado durante a primeira instalação. Se OUI detectar uma instalação anterior,
OUI,
pedirá se quaisquer bases de dados existentes devem ser atualizados. Se você responder “sim”,
após a OUI de instalação será iniciado o DBUA para realizar essas atualizações de banco de dados.
Alternativamente, você pode responder “não” e executar o DBUA mais tarde. Esta abordagem
significaasque
separar tarefas
vocêdepode
atualização de software e atualização de banco de dados. Isso também significa
que você
bancos depode
dadosatualizar
manualmente, executando scripts, em vez de usar o DBUA.
Se você estiver usando DBUA ou um método manual, atualização direta para 12,1 é possível a
lançamentos:
partir destes
Todos os outros lançamentos deve ser atualizado para um dos listados antes de atualizar para
12,1.
Descrever os métodos de migração de dados
A atualização do banco de dados tem duas restrições principais. Primeiro, ele deve ser executado na
mesma
não pode plataforma.
se mover aVocê
partir, por exemplo, o Windows para AIX durante uma atualização. Em
segundo lugar,
qualquer formavocê
de reorganização
não pode realizar
ou implementação de novas funcionalidades durante a atualização.
Depois ele nada
concluída, tem mudou além do fato de que você está executando o banco de dados off novo
binários. A migração de dados fica em torno de ambas essas limitações.
A migração é o processo de transferência de dados a partir de uma base de dados para outro.
atualizar,
Dentroisso
do significa
contexto adecriação de um novo banco de dados do novo lançamento e copiar todo o
aconjunto
partir dodebanco
dadosdedodados
usuário
antigo para o novo. A nova base de dados pode ser configurada, com
antecedência,
recursos habilitados
com toda
queavocê
novadeseja usar. Então, como os dados são inseridos, vai assumir as
acaracterísticas
nova versão. deAlém disso, o novo banco de dados pode estar em uma plataforma diferente. A
adesvantagem
migração como de dados
uma técnica de atualização é o tempo de inatividade necessário. Um upgrade de
um
pode envolver tempocom
banco de dados DBUA
de inatividade de menos de uma hora; uma migração pode levar horas ou
mesmo
o volume dias,
de dados
dependendo
a ser transferida.
DICA Muitos DBAs preferem migração para atualizar porque resulta em um novo dicionário de
dadosdeixado
sem “limpa”,
para trás por anos de (ab) uso lixo.
Se a migração é a partir de um pré-10 g de base de dados, que ainda pode ser realizado a partir
de qualquer
utilitários IMP / libertação
o legados usando
exp.
Descreva o processo de atualização
atualização do banco de dados é uma operação que é cheio de perigo. Teoricamente, uma atualização
não pode
mas bom,fazer
mas há
nada
sempre a possibilidade de que o comportamento das aplicações usando o banco de
vai mudar. Por essa razão, o teste é vital. Há tipicamente seis etapas para uma atualização:
dados
1. Prepare-se para atualizar. Escolha um método de atualização, instale o novo Oracle Home,
desenvolver
planejar eum teste
determinar quais novos recursos para implementar.
2. atualizar um banco de dados de teste. Testar o processo de atualização em um clone não
produção
Em particular,
do bancoobserve
de dados.
o tempo de inatividade necessário.
3. Teste o banco de dados atualizado. Completar os testes planejados. Em particular, garantir
quedesempenho não regrediu. Iterate as etapas 2 e 3 conforme necessário até que todas as
questões são
resolvido.
4. Prepare o banco de dados de produção. Pare toda a atividade do usuário de acordo com um
calendário
tempo deacordado parae, em seguida, fazer um backup completo.
inatividade
5. Atualize o banco de dados de produção. Siga o procedimento de atualização tentou-e-
testado.
de backup
Dê uma
após
completa
a conclusão. O tempo de inatividade será agora acabou.
6. Ajuste o banco de dados atualizado. Como o sistema de volta em uso, monitorar o
desempenho
realizar trabalhos
e de ajuste pró-ativa e reativa normal.
Na Figura 29-2 , o utilizador é ligado a uma base de dados denominada orclb. Esta é uma
base12.1.0.1
de dados.liberação
O link de banco de dados orcla se conecta a um banco de dados 11.2.0.3. Em seguida,
o comando
trabalho queimpdp
vai executar
inicia um
uma migração completa de todos os dados do usuário de orcla em orclb,
através do
ligação. banco deedados
Esquemas espaços de tabela será criada como eles estavam no banco de dados origem,
embora
ser pré-criada
possam com características apropriadas, se desejado. Durante a importação, haverá muitos
mensagens da forma “ORA-31684: Objeto ... já existe” como a importação encontra objetos que
fazem parte de esquemas semeados da Oracle. Estes podem ser ignorado. O resultado final será uma
completa
migração de todos os dados do usuário.
DICA Um modo de rede de exportação / importação não pode usar o caminho direto; a leitura e
escrita de
devem passar
tabelas
pelo cache de buffer do banco de dados, utilizando o caminho de mesa eterna. Isso
pode significar
rápido quanto seque
poderia
ele não
esperar.
é tão
Exercício 29-1: executar uma migração de banco de dados Data Pump completa Neste
exercício,
simular umavocê vai
migração de dados a partir de uma base de dados para outro. Supõe-se que o banco de
dados fonte
banco de dados
é umcriado a partir do modelo de Uso Geral, com os esquemas de exemplo instalados.
Neste ponto, você tem um banco de dados que é desprovido de dados do usuário.
3. importação os dados do utilizador na base de dados.
Auto teste
1 . O que pode ser feito durante uma atualização ao usar o Database Upgrade Assistant?
(Escolha duas respostas.)
A. A conversão de um personagem legado definido para Unicode
B. atualização direta de qualquer versão de 11 g a 12 c
C. actualização directo a partir da libertação do terminal de 10 g a 12 C
D. Verificação das condições de pré-requisito
2 . Que considerações são necessárias para a utilização do espaço durante uma atualização?
(Escolha o melhor
responda.)
A. Nenhum: uma atualização é uma operação no local e não requer armazenamento
adicional significativo.
B. É possível que o sistema e SYSAUX tablespaces irá expandir durante uma
atualizar.
C. até o dobro do espaço necessário para os dados serão necessários durante a atualização.
D. Não archivelogs será gerado porque uma atualização não é recuperável e não refazer é
gerado.
3 . Qual das seguintes pode ser realizado com uma migração Data Pump? (Escolha tudo
respostas corretas.)
A. Actualiza a partir de qualquer libertação de 10 g ou 11 g
B. conversão do conjunto de caracteres
C. Um mover a partir de um 32-bit para uma plataforma de 64 bits
D. atualização direto a partir do lançamento do terminal de 9 i
4 . Qual destes corretamente descreve um modo de rede de operação Bomba de dados?
(Escolha
responda.)
o melhor
A. Criar links de banco de dados em bancos de dados de origem e de destino, e executar
expdp
fonte
na e impdp no destino.
B. Criar um link de banco de dados na fonte apontando para o destino, e executar expdp na
fonte.
C. Criar um link de banco de dados no destino apontando para a fonte, e executar impdp na
destino.
D. Run expdp na fonte, escrever um arquivo de despejo para um tubo, e executar impdp
sobre
lendo
o destino,
o arquivo de despejo do tubo.
5 . O que o Database Upgrade Upgrade Assistant? (Escolha a melhor resposta.)
A. software de banco de dados Oracle e bancos de dados
B. software banco de dados Oracle
C. bancos de dados Oracle
D. estruturas de armazenamento de dados do usuário e atributos lógicos de dados do usuário
6 . Sob que circunstâncias deve uma exportação Data Pump ser realizada quando a realização
de uma
migração de banco de dados? (Escolha a melhor resposta.)
A. O banco de dados deve ser aberto somente leitura.
B. O banco de dados deve estar no modo de montagem.
C. O banco de dados deve ter restringido sessão habilitado.
D. O banco de dados deve estar aberto.
7 . Se uma operação de importação completa de banco de dados tenta importar objetos em um
espaço
existir,
de otabela
que vai
queacontecer?
não faz (Escolha a melhor resposta.)
A. A tabela deve ser pré-criado, ou a operação irá falhar.
B. A tabela será criado se a Oracle Managed Files tiver sido habilitado no
banco de dados de destino.
C. A importação será bem-sucedido se o espaço de tabela é especificado com o
TABLESPACES
parâmetro.
Respostas de auto-teste
1. C e D . Atualização direta é possível a partir do lançamento do terminal de 10 g , mas
lançamentos.
não de mais
O DBUA
cedo executa scripts de verificação antes e depois do upgrade.
A e B são incorrectas. A está incorreta porque a conversão conjunto de caracteres não
faz parte do do DBUA; você deve usar outros utilitários para isso. B é incorrecta
A funcionalidade
porque directa
actualizar a partir de 11 g é possível apenas para o terminal de libertação de 11,1 ou
qualquer libertação de
11.2.0.2.
2. (Oracle
B.É usual para
continua objetos
ficando do dicionário
maior ...). de dados para aumentar em tamanho como
resultado
A , C , e Ddeestão
uma incorrectos.
atualização A está incorreta porque o espaço, muitas vezes, ser
necessário
objetos para dados
do dicionário. C está incorreta porque os dados do usuário não é afetado por uma
atualização.são
mudanças o geralmente limitados aos metadados. D está incorreta porque um upgrade
execução de um grande número de consultas DML e DDL contra o dicionário de dados, o
envolve
que faz
gerar refazer.
3. A , B , e C . Data Pump é compatível em todas as versões que suportam, de 10,0
em diante. Ele pode mover dados entre quaisquer plataformas suportadas, realizando
conjunto decomo
conversão caracteres
ele faz isso.
D está incorrecta. Isso é incorreto porque o Data Pump foi introduzido com o
migrar
lançamento
de 9 i , você
de 10
deve
g . usar
Para o legado exp utilitários / IMP.
4. C . A importação modo de rede é iniciada por impdp, embora os processos de trabalho
tantoserá
a origem
executado
eo destino.
em
A , B , e D são incorrectas. A e B são incorrecta porque uma operação de modo de rede
é
gerenciado a partir de apenas o destino. D está incorreta porque não é possível importar um
despejo
arquivar até que tenha sido concluída. A técnica descrita, no entanto, funcionar com o
legado imp / utilidades exp.
5. C . O DBUA atualiza bancos de dados e nada mais.
A , B , e D são incorrectas. A e B estão incorretas porque o software deve ser atualizado
com a OUI, não o DBUA. D é incorrecta porque a reestruturação armazenamento e objectos
é um que deve ser feito após a actualização, não durante a atualização.
tarefa
6. D . A exportação é uma operação perfeitamente normal de exportação sem exigências
especiais.
A , B , e C são incorrectas. A e B estão incorretas porque o banco de dados deve estar
aberto caso contrário, não é possível para o Data Pump para criar sua tabela mestre. C
ler escrever;
éincorreto porque embora modo restrito pode ser uma boa idéia, não é um requisito.
7. B . Se Oracle Managed Files (OMF) foi habilitado, espaços de tabela será criado
adequadamente.
A , C , e D estão incorrectos. A está incorreta porque a importação tentará criar o
de tabela, usando OMF ou a definição arquivo de dados do banco de dados fonte. C é
incorreto porque o parâmetro TABLESPACES identifica uma lista de espaços de tabela para
importar; isto
não é relevante para uma importação completa. D é incorrecta porque se uma tabela
adequada
nem pode nem
ser criado,
existe haverá um erro.
CAPÍTULO 30
Objetivos do exame
• 062.2.7.1 descrever os requisitos de atualização quando determinados recursos ou opções são
usadas em oracle Database
• 062.2.7.2 Use o Pre-Upgrade Information Tool Antes de executar uma atualização
• 062.2.7.3 preparar o novo Oracle Home Antes de executar uma atualização
• 062.2.8.1 atualizar o banco de dados para o Oracle Database 12 c usando a atualização do banco
de dados Assistant (DBUA)
• 062.2.8.2 Executar uma atualização manual para o Oracle Database 12 c usando scripts e
ferramentas
• 062.2.9.1 migrar para o Unified Auditoria
• 062.2.9.2 Executar tarefas pós-upgrade
Este capítulo descreve o processo de atualização de um banco de dados Oracle. Este poderia ser um
upgrade
novo grande
paralançamento
um (como de 11.2.0.4 a 12.1.0.1) ou poderia ser aplicar uma atualização
patchset dentro
libertação (tal como
de uma partir de 12.1.0.1 a 12.1.0.2). De qualquer maneira, o princípio é o mesmo.
Assumindo
software queatualizado
já foi o (usando o Oracle Universal Installer [OUI] para criar um novo
Oracle Home), alguns passos devem ser seguidos antes, durante e depois do processo de
actualização.
Descreva
ou opçõesrequisitos
são usadasdenoatualização
Oracle Database quando
Características Certain
Uma atualização envolve executando scripts de encontro ao dicionário de dados que irá atualizar
vários banco dee dados
características opções. Dependendo do que opções foram instalados e configurados, alguns
trabalhos preparatórios podem ser necessários.
Se uma ou outra opção é instalado, então é possível que $ table SYS.AUD terão de ser
Umrealocados.
script é fornecido no novo 12. x Oracle Home para fazer isso:
O roteiro é bem documentado e inclui instruções precisas sobre o que fazer se qualquer OLS ou
Data Vault ou ambos estão instalados, com variações dependendo da versão exata do banco de dados
a ser
atualizado. Copie o script do recém-instalado 12. x Oracle Home para o Oracle Home atualmente em
usar, estudar as instruções no script, e depois executá-lo enquanto estiver conectado como SYSDBA.
Todos estes métodos descer para a mesma coisa: você não pode mais usar OWB no banco de
atualizar
dadoseapós
deve, portanto, fornecer uma instalação OWB externo para o banco de dados atualizado.
Para determinar se OWB está instalado no banco de dados, executar esta consulta:
Na figura, o banco de dados está atualmente em versão 11.2.0.3. O script é executado a partir do
instalado
recém(mas ainda não utilizados) 12 c Oracle Home. Ela produz três arquivos, gerados em um
(Cfgtoollogs \ <db_name> \ preupgrade) abaixo do diretório do Oracle Base:
diretório
• detalhes preupgrade.log todas as verificações que foram executadas com conselhos sobre itens
que devem estar
abordada.
• preupgrade_fixups.sql contém comandos que devem ser executados no banco de dados antes
deiniciar a atualização para corrigir quaisquer problemas.
• postupgrade_fixups.sql contém comandos que devem ser executados no banco de dados após
o upgrade
Completou.
O arquivo de log e os scripts devem ser estudados com cuidado; eles dão informações e
podeinstruções
fazer o upgrade
que correr mais suavemente.
Não tome a opção de criar um banco de dados. É possível selecionar a opção para atualizar um
banco de dados existente. Esta cadeia vontade do software de instalação para uma corrida da
Database Upgrade
(DBUA). Não há nada
Assistant
de errado com isso na teoria, mas a maioria dos administradores de banco de
dados (DBAs) vai
quer separar estes dois processos, a fim de tomar o tempo para executar a informação de pré-
Ferramenta manualmente e considerar cuidadosamente seus conselhos. Há também a questão do
atualização
tempo de
instalar mais
inatividade.
atualizar fazer
em umaa operação irá geralmente envolvem um longo período de inatividade
do que
separando estas acções.
Neste ponto, considere o ouvinte banco de dados. Se você estiver usando um ouvinte de banco
Infra-estrutura
de dados emGridexecução
(GI) ema partir
casa, não
de um
é necessária nenhuma ação adicional. Um ouvinte GI pode
oferecer suporte
qualquer versão doa conexões
banco de dados. Mas se o seu ouvinte de banco de dados está sendo executado
fora do
você vaibanco
quererdedesligar
dados Oracle
o ouvinte
Home,correndo o velho Oracle Home e substituí-lo por um ouvinte
do novo Oracle Home. Esta atualização ouvinte não precisa estar relacionado com a atualização de
banco
ser realizada
de dados
antes
e pode
ou depois. O processo é para copiar os arquivos de configuração do Oracle Net do
velho
casa para o novo e faça as edições que possam ser necessárias para entradas que incluem caminhos
de diretório.
Atualizar o banco de dados para o Oracle Database 12 c
usando
o Database Upgrade Assistant
O DBUA é um assistente guiado que automatiza o processo de configuração de uma base de dados
existente
com a nova
para
versão
executar
do software. Ele também pode ser executado noninteractively por uma única
fornecido com argumentos de linha de comando apropriados que respondem a todas as perguntas.
instrução
Para uma atualização interativa, em um terminal gráfico conectar-se à recém-instalado versão 12
Oracle
c Home, definindo o ORACLE_BASE, ORACLE_HOME e variáveis PATH de forma
Em seguida, inicie o executável DBUA. No Linux, este é o arquivo $ ORACLE_HOME / bin /
adequada.
DBUA, e sobre
Windows, ele estará em seu botão Iniciar no menu Configuração e Migração Ferramentas para o
Oracle Home. Estes são os principais passos:
novo
A primeira edição mostrado na Figura 30-3 é informativo. DBUA detectou que o Enterprise
Control Manager banco de dados (a facilidade de gerenciamento fornecido com liberação de
10 g e 11
bancos degdados) está instalado. Este será removido durante a atualização. A segunda
questãodeé dados
banco que a foi configurado para trabalhar com um Lightweight Directory Access
Protocol (LDAP)
diretório e alguns ajustes para isso será necessário. DBUA pode fazer isso durante a
atualizar, ou pode ser ignorado por agora e tratadas mais tarde.
4. Opções de atualização Há algumas opções que dão uma quantidade limitada de controle
sobre
processo
o e quanto tempo vai demorar atualizar. Os padrões são geralmente correta. Os
seguintes
são opções a considerar:
• Select Atualize Paralelismo O padrão é baseado no número de processamento central
unidades (CPUs) detetado. Você pode pensar que é muito alto e vai inundar a máquina
trabalhar ou que é muito baixo e que um valor maior elevaria a atualização por meio mais
com
rápido.
• recompilar objetos inválidos durante a pós atualização, Recompilation
Paralelismo Permitindo DBUA para recompilar durante a atualização fará com que a
abrangente, mas também vai atrasar o reinício postupgrade. Você pode querer recompilar
operação
manualmente mais tarde em seu lugar.
• Atualize fuso horário dados Dependendo do que já está instalado, você pode precisar
atualizar os arquivos de fuso horário do banco de dados, seja como parte da atualização ou
posterior.
• reunir estatísticas antes da atualização Se você já reuniu estatísticas para o
banco de dados, isso não será necessário.
5. Opções de Gestão Seleccione se para configurar o banco de dados com banco de dados
Expresso
(Padrão), para registrá-lo com Cloud Control, ou nenhum.
6. Mover Banco de Dados Arquivos DBUA pode mudar fisicamente o banco de dados ea
recuperação
Área durante
rápida
o upgrade. Isso pode ser útil se, por exemplo, você quer tomar o
oportunidade de converter de armazenamento do sistema de arquivos para o Automatic
Storage Management
armazenamento. Será,(ASM)
naturalmente, aumentar a duração da operação significativamente.
7. Configuração de rede Este é um pedido para registrar o banco de dados com um LDAP
diretório e com um ouvinte de banco de dados.
8. Recuperação Opções Should DBUA realizar um backup completo off-line antes de
atualizar?
padrão oé Sim, mas se você já tem um backup, um tempo considerável pode ser salvo por
não permitir isso.
9. Resumo Esta é uma descrição do que será feito.
10. Progresso Esta é uma exposição do que está acontecendo, atualizado conforme a atualização
prossegue.
Após a conclusão, o DBUA irá exibir o resultado, como se mostra na Figura 30-4 .
Figura 30-4 A conclusão de um atualizar exercício DBUA
A tela Resultados podem dar algumas instruções (como o respeito arquivos de fuso horário,
Figura
como
30-4
mostrado
), bem como
na o status da atualização. Segui-los, bem como quaisquer medidas sugeridas
Pré-Ferramenta de Atualização da Informação.
pelo
1. Quando estiver conectado à velha Oracle Home e com o banco de dados aberto, fazer logon
no ebanco
executar
de dados
a ferramenta de informações de pré-atualização fornecido com o novo software.
Estudar
e os scripts que elede
o arquivo loge tomar as medidas adequadas.
gera
2. Faça backup do banco de dados fonte.
3. Prepare o Oracle Home recém-instalado. Copie o arquivo de senhas e o parâmetro de
instância
arquivo para o novo Oracle Home. Se nenhum parâmetro precisa ser ajustado (a pré-
atualização
Ferramenta de informação irá informá-lo sobre isso), faça os ajustes em primeiro lugar,
usando o= cláusula SPFILE de ALTER SYSTEM.
SCOPE
4. Desligue o banco de origem.
No Windows, é necessário remover o serviço velho Windows na qual o banco de dados
runs e criar uma nova. Por exemplo, para o banco de dados chamado ORCLA, execute estes
comandos do antigo Oracle Home:
5. Defina o seu ambiente para conectar ao novo Oracle Home e abra o banco de dados com
SQL * Plus. Use o UPGRADE comando de inicialização. O modo de atualização desativa
logons
que não usam o privilégio SYSDBA, desabilita gatilhos do sistema, e, mais importante,
permite conexões para um banco de dados que tem um dicionário de dados em um estado
indeterminado:
uma versão nemnem
outra.
6. Execute o script de atualização paralela, que é fornecido no ORACLE_HOME / rdbms /
admin
diretório. Este é um script Perl que invoca o paralelismo para reduzir o tempo de inatividade
necessário.Perl
intérprete UMA apropriado é fornecido no Oracle Home. Aqui está o código para o Windows:
7. O script de atualização paralelo termina por desligar o banco de dados. Abri-lo como normal.
8. Execute a ferramenta de pós-atualização de status para gerar um resumo do resultado da
atualização
exercício. Se ele mostrar quaisquer erros ou quaisquer componentes como não válido, tomar
as medidas
executar a ferramenta,
adequadas. execute
Para o utlu121s.sql script.
9. Executar scripts para concluir as operações postupgrade. O script catuppst.sql tenta corrigir
quaisquer problemas encontrados pela atualização, eo script ultrp.sql recompila tudo
PL / SQL. Aqui está um exemplo Linux:
inválido
• Repor todas as senhas. Se a atualização é de libertação 10. x , todas as senhas devem ser
alteradas
assumem para
os atributos de senha da versão atual.
• Definir limites para alertas de uso de espaço de tabela. alertas de espaços de tabelas são
desativados
terá de serpela atualização e
restabelecida.
• Implementar novos recursos, conforme apropriado.
Exercício 30-1: Simule Algumas tarefas de atualização para este exercício, presume-se que não
há, em um banco de dados que precisa ser atualizado. É, no entanto, possível executar algumas das
verdade,
étarefas
necessário.
que
3. Abra o banco de dados no modo de atualização, confirme isso, e tentar se conectar como um
não-
usuário SYSDBA. Reinicie o banco de dados. Use comandos como estes:
Observar a grande variedade de opções que podem ser aplicadas ao executar DBUA-muitos
do que for solicitado quando executá-lo de forma interativa.
mais
5. Execute o script para identificar e recompilar objetos inválidos.
Broca Two-Minute
Descreva requisitos de atualização quando determinados recursos ou opções são
usadasDatabase
oracle em
• componentes instalados, sua versão e status são listados na vista DBA_REGISTRY.
• Alguns componentes (tais como a APEX) têm os seus próprios mecanismos de atualização; os
outros
Oracle
(talWarehouse
como Builder, Label Security, e Vault de Dados) têm necessidades específicas.
Use a ferramenta de informações de pré-atualização Antes de executar uma
• A Ferramenta de Informação de pré-atualização é um script SQL fornecido com o novo
atualização
software queainda
enquanto é executado
estiver usando a versão anterior.
• A ferramenta inspeciona o banco de dados e gera um relatório que descreve as ações
necessárias
fornece scripts
e corrigir-up com os comandos a serem executados antes e depois do upgrade.
• DBUA pode ser executado de forma interativa, ou para atualização silenciosa, ele pode ser
executado a partir
linha com do comando
argumentos que substituir a caixa de diálogo.
Executar uma atualização manual para o Oracle 12c banco de dados usando
scripts
• Ume upgrade
ferramentas
manual segue as mesmas etapas que o DBUA, mas eles são chamados
individualmente
a partir da linha de comando.
Auto teste
1 . Qual destes componentes não está mais disponível no banco de dados após uma atualização
para12oc ? (Escolha a melhor resposta.)
A. Dados Vault
B. Oracle Label Security
C. Oracle Warehouse Builder
D. auditoria de banco de dados padrão
2 . Antes de executar o Pre-Upgrade Information Tool, preupgrd.sql, como você deve iniciar o
base de dados? (Escolha a melhor resposta.)
A. Inicie o banco de dados com UPGRADE STARTUP do antigo Oracle Home.
B. Inicie o banco de dados com abra Inicialização do antigo Oracle Home.
C. Inicie o banco de dados com UPGRADE STARTUP do novo Oracle Home.
D. Inicie o banco de dados com abra Inicialização do novo Oracle Home.
3 . Qual é a saída do Pre-Upgrade Information Tool, preupgrd.sql? (Escolha o melhor
responda.)
A. scripts de Fix-up com comandos a serem executados antes e depois da atualização
B. Scripts para executar durante a atualização
Respostas de auto-teste
1. C . Após uma atualização, Oracle Warehouse Builder ainda pode ser usado, mas deve
instalado
ser externamente.
A , B , e D são incorrectas. A e B estão incorretas porque embora Data Vault e OLS
tem requisitos especiais para upgrade, eles ainda estão disponíveis. D é incorrecta porque
auditoria padrão é habilitado após a atualização, embora você pode querer converter para
auditoria vez.
unificada
embora não para copiar esses arquivos podem causar problemas para o DBA, ele não deve
ser relevante
para os usuários.
CAPÍTULO 31
Objetivos do exame
• 063.2.1 Descrever a Arquitetura de banco de dados multitenant Container
• 063.2.2 Explique Provisioning banco de dados Pluggable
A opção do Oracle multitenant (também conhecido como bancos de dados conectáveis ) permite que
os administradores
(DBAs) para consolidar
de banco
vários
debancos
dados de dados em um. Em grande medida, os bancos de dados
previamente
ainda podem separados
ser utilizados e administrados independentemente após a conversão para o ambiente de
vários usuários.
Enquanto os usuários finais e desenvolvedores não devem estar cientes de qualquer alteração, o
Oracle
um pouco
multitenant
confuso para
podeosa princípio
DBAs. não sermedo. Depois de ter uma firme compreensão da arquitetura,
tudo vai cair no lugar.
Conceitos multitenant
Um ambiente Oracle multitenant consiste de uma base de dados do recipiente (CDB) e um ou mais
bases de dados passíveis de ligação (PDBs). Um recipiente é um conjunto de espaços de tabela
exposta
base de dados.
ao mundo
Na criação,
como umaa CDB
lógica
vai conter um mínimo de dois recipientes. O container raiz ,
chamado
CDB $ ROOT, é o recipiente de gestão para o meio ambiente. De um modo geral, ninguém que não
o DBA nunca vai se conectar ao recipiente raiz. O recipiente semente (nomeado PDB $ SEED) é
seja
fornecido, somente leitura recipiente que pode ser clonado para criar recipientes conectáveis
uma
(nomeado
por favor).o que você
Aqui estão alguns pontos importantes:
• Todos os recipientes devem usar o mesmo conjunto de caracteres. Esta é uma limitação
natural
é apenas
do fato
um banco
de quede
hádados, o CDB.
• Data Guard deve ser configurado no nível do CDB, porque só existe um fluxo de refazer. isto
No entanto, é possível excluir alguns PDBs de bancos de dados standby. Note-se que isso é
apenas de liberação 12.1.0.2.
possível
• Database Vault deve ser configurado individualmente em cada APO. Não existe sobreposição
dos reinosPDBs.
através
• Criptografia deve ser configurado individualmente por PDB. Cada APO gera e administra sua
chaves próprias, armazenadas em uma carteira compartilhada.
• Unified auditoria pode ser configurado com os níveis CDB e PDB. Ao criar uma política na
raiz
recipiente, acrescentando CONTAINER = ALL para o comando Criar política de auditoria
propagá-la a todos os PDBs. Em um APO, quaisquer políticas criadas são locais para a APO.
• GoldenGate e replicação XStream estão cientes multitenant; eles podem capturar e aplicar
mudanças por PDB. Streams, no entanto, não é suportado em um ambiente multitenant.
DICA A opção do Oracle multitenant é licenciado em cima do Enterprise Edition, mas multitenant
Arrendamento está incluído em todas as edições do banco de dados.
Individual
Para entender um ambiente multitenant, você deve familiarizar-se com um conjunto de pontos de
CDB vista.
ambiente,
Em umasnão-
vistas do dicionário de dados utilizados são prefixados com USER_, ALL_, e
DBA_. ovisualiza mostrar todos os objetos pertencentes ao usuário que está consultando-los. Os
usuário
pontos de
objetos sobre
vistaostudo
quais
Mostrar
o usuário
tudotem privilégios, independentemente do esquema em que residem. o
DBA
visualizações mostrar todos os objetos no banco de dados. Há um quarto conjunto de pontos de vista,
com o prefixo
existem pontosCDB_.
de vistao em
CDBtodas as bases de dados, mas eles só têm sentido no recipiente raiz de um
CDB. Na raiz
recipiente, os pontos de vista CDB mostrar todos os objetos no CDB. Com efeito, eles são um
UNION
vistas emALLcadadorecipiente,
DBA isto é, o recipiente de raiz, o recipiente de sementes, e todos os recipientes
conectáveis.
Em um banco de dados não-CDB ou um banco de dados pluggable, os pontos de vista CDB mostrar
as mesmas
pontos de vista.
linhasOcomo
CON_ID o DBA
coluna numa vista CDB identifica o recipiente a partir do qual a linha
Containers são identificados exclusivamente pelo ID recipiente e também pelo nome. A Figura 31-1
veio.
mostra
que listauma
os espaços
consultade tabela associados a cada recipiente. Note-se que a consulta foi executada
enquanto
ligado ao recipiente de raiz.
• O controlfile
• A tabela de undo
• O log redo
• O SGA instância e processos em segundo plano
• O dicionário de dados
• Os usuários comuns e papéis
O recipiente raiz terá um mínimo de quatro espaços de tabela: SYSTEM, SYSAUX, desfazer e
TEMP. Ele também terá os usuários e funções comuns que são propagados para todos os PDBs, e vai
ter todos os objetos do Oracle fornecidos que cada APO requer. Estes objetos incluem, por exemplo,
os pacotes PL / SQL fornecidos. Operações que afetam esses recursos compartilhados pode ser
todos
apenas através de uma sessão ligada ao recipiente raiz.
realizado
O recipiente raiz é o único recipiente para o qual você pode se conectar sem passar através de um
ouvinte.
bancoSedevocê
dados
estiver conectado na máquina servidor e você definir seu ambiente ORACLE_SID
variável para o nome da instância do CDB, pode ligar para o recipiente raiz. Não é possível
conectar a um PDB desta forma porque há apenas um exemplo, com apenas um nome. Seguindo um
conexão com o recipiente raiz, é possível mover a sua sessão para outro recipiente. Figura 31-2
demonstra isso.
Figura 31-2 mostra uma configuração da variável de ambiente ORACLE_SID para o nome de
usuário
de um CDBA do exemplo
Windowse, em seguida, ligar a este com a comunicação entre processos (IPC),
o ouvinte de banco de dados. SQL * Plus inclui uma CON_NAME comando SHOW, que mostra o
contornando
nome
o recipiente
do ao qual a sessão está conectado, que é inicialmente o recipiente raiz. Então
o comando ALTER SESSION é usado para mover a sessão para um recipiente pluggable chamado
JW1.
PDBs: Pluggable Recipientes
Um recipiente de conector, também referido como uma base de dados conectável , é um conjunto de
áreasser
para de usado
tabela por
e osdesenvolvedores
objectos e usuários finais como se fosse um banco de dados
independente.
PDBs ter um espaço de tabela SYSTEM como não-CDBs. Apenas os metadados do usuário
PDBespecífico
é armazenado
para ono espaço de tabela SYSTEM do PDB. Além disso, há links lógicos para o
objectos definidos no recipiente de raiz. Os nomes de objectos são o mesmo em um APO como em
comum
um não-CDB
CDB, tais como
ou OBJ
um $, TAB $, e FONTE $. Assim, o APO aparece para uma aplicação como um
stand-
sozinho banco de dados. O DBA para uma aplicação em um PDB será, como regra geral (a que há
poucas exceções), não estar ciente de que pode haver uma ou muitas outras PDBs partilha de
uma
recursos na
CDB.
Cada APO tem um número de identificação de recipiente e recipiente nome único. Estes são
controlfile
registrados
e exposta
no através dos pontos de vista V $ recipientes e V $ pdbs. Quando ligado a um
recipiente conectável, linhas referentes aos outros do que o recipiente actual recipientes são filtrados
para fora.
A partir da raiz, todos os recipientes são visíveis.
DICA A visão V $ pdbs é idêntica à vista V $ recipientes, exceto que ele exclui a linha
para o recipiente de raiz.
Cada banco de dados pluggable tem um nome global única. Este é o nome do recipiente e é
comoutilizada
o serviço padrão a ser registrado com o ouvinte banco de dados. A Figura 31-3 mostra
ligações
PDBs chamado
a JW1 e JW5 através do seu serviço padrão e o ouvinte (usando o EZConnect
sintaxe) com consultas que mostram que o banco de dados de hospedagem e exemplo, chamado
CDBA, são sempre os
mesmo.
Figura 31-3 Ligação a um banco de dados de recipiente com dois inquilinos PDB
• Criar um novo PDB do recipiente semente. Este método cria um novo APO consistindo de
nada mais do que o sistema, SYSAUX, e espaços de tabela TEMP. Isso normalmente seria
usado para uma nova implementação do aplicativo.
• Criar um novo PDB de um não-CDB. Este método tem um banco de dados existente, que deve
ser12. libertar X , converte-o num recipiente de conector, e conecta-a em um CDB. Isso seria
tipicamente ser parte de um exercício de consolidação. Não é possível converter de volta para
não-CDB.
• Clonar um APO para outro novo PDB. A fonte pode ser um PDB no mesmo ou um CDB
diferente.
Isto poderia ser usado para a criação de ambientes de teste ou desenvolvimento de um APO
produção.
• Conecte um PDB desconectado. A APO pode ser desconectado de um CDB e depois
conectado
mesmo ouaoum diferente CDB. Isso pode ser usado para mudar ou atualizar um APO.
Qualquer que seja a técnica é apropriada, todos são geralmente rápido. A técnica requer a cópia
do clone
arquivos de dados que compõem os espaços de tabela da APO. O tempo para isso será dependente
do tamanho
arquivos de dados.
do As outras técnicas são tipicamente minutos um único dígito.
esquema SYS:
Broca Two-Minute
Descrever a arquitetura de banco de dados multitenant Container
• A arquitetura do Oracle multitenant ajuda recursos de servidor de uso de forma mais eficiente
através
memória
da partilha
da instância e processos, bem como objetos comuns SISTEMA tablespace.
• Atualizando uma multitenant atualizações de banco de dados recipiente todos os PDBs dentro
do recipiente.
• Um CDB em qualquer ponto no tempo pode conter zero, um, ou até 252 PDBs definidos pelo
utilizador.
• A CDB é uma única instância, independentemente do número de PDBs dentro da CDB.
• Em todos os PDBs dentro de um CDB, a refazer os arquivos de log, undo tablespace,
controlfiles, e
tabela temporário são compartilhados.
• Um PDB indivíduo pode ter o seu próprio espaço de tabela temporário.
• Cada APO tem seu próprio espaço de tabela SYSTEM com metadados privado. O espaço de
tabela
tem ponteiros
SYSTEMpara metadados do Oracle comuns armazenados no espaço de tabela SYSTEM
dentro
• Os do de
pontos CDB.
vista de dicionário de dados prefixados com DBA_ têm vistas correspondentes
com
prefixo.
o CDB_Quando as consultas são executadas no recipiente raiz, estes mostram todo o
ambiente.
Explique Provisioning banco de dados Pluggable
• O CDB é inicialmente provisionados com o recipiente raiz CDB $ ROOT eo recipiente
semente
PDB $ SEED.
• PDBs pode ser criado a partir do recipiente de sementes por clonagem de um APO existente,
ligando um banco de dados, ou, ligando de um APO previamente desconectado.
não-CDB
• Non-CDBs pode ser convertido para um APO apenas uma vez eles foram atualizados para
Oracle
12 c .Database
Este processo não pode ser revertido.
• Os dados da tabela podem ser compartilhados entre PDBs dentro de um CDB, utilizando uma
ligação intra-CDB.
• Uma ligação intra-CDB se comporta exatamente como um pré-12 c ligação de banco de dados
e não
alterar.
requer nenhum aplicativo
Auto teste
1 . Identificar as instruções corretas sobre versões Oracle Database e sua compatibilidade com
bases de dados recipiente. (Escolha todas as respostas corretas.)
A. bancos de dados Oracle criados no 12 c são automaticamente pluggable em qualquer
CDB
B. umexistente.
Oracle 12 c da base de dados pode ser um não-CDB, um CDB, ou um APO.
C. Oracle 11 g bancos de dados pode ser conectado a um banco de dados recipiente se você
criararquivo
um XMLde descrição de banco de dados.
D. Oracle 11 g bancos de dados pode ser facilmente atualizado para o Oracle Database 12 c
por um
colocá-lo em com o Oracle Database 12 c release 1 ou mais recente.
CDB criado
E. Um CDB criado com base de dados Oracle 12 c pode ser convertido para um APO
removendo
PDB $ container
o de usuário SEED.
2 . Qual dos seguintes objetos de banco de dados sempre são compartilhados entre todos os
PDBsrecipiente?
dentro de(Escolha
um sistema
três respostas corretas.)
A. A tabela temporário
B. O undo tablespace
C. O nome global do banco de dados
D. O controlfile
E. arquivos de log de redo on-line
3 . Qual destes é uma condição necessária para um não-CDB para ser conectado a um CDB?
(Escolher
a melhor resposta.)
A. A CDB e não CDB devem usar o mesmo conjunto de caracteres de banco de dados.
B. replicação GoldenGate não deve ser configurado.
C. Todos os espaços de tabela não CDB com os mesmos nomes que tablespaces CDB já
existentes
deve ser renomeado para evitar conflitos.
D. A não ser CDB deve libertar 12 C ou a libertação do terminal de 11 g .
4 . O método é apropriado para um usuário estabelecer uma sessão contra um PDB? (Escolha
doisrespostas corretas.)
Respostas de auto-teste
1. B . A 12 C base de dados pode ser uma base de dados de recipiente, uma base de dados
banco
dede
conector,
dados deounão-recipiente.
um tradicional
A , C , D e E estão incorrectos. A está incorreta porque há restrições sobre se um
não CDB é compatível com um determinado CDB, tais como o conjunto de caracteres. C e
D são incorrectos
porque a 11 g base de dados deve ser actualizada antes de ligar. E é incorrecta porque existe
nenhuma forma a inverter a conversão para o ambiente de vários usuários.
2. B , D , e E . A tabela de undo, o controlfile, eo log de redo são usados por sessões
contra todos os recipientes e gerenciados apenas do recipiente raiz.
A e C são incorrectas. A está incorreta porque cada contêiner pode criar e gerir a sua
próprios espaços de tabela temporários. C está incorreta porque cada contêiner tem sempre a
sua própria mundial
nome.
3. Um . O conjunto de caracteres de banco de dados deve ser o mesmo, ou o plug-in irá
falhar
B , C , e D estão incorrectos. B está incorreta porque GoldenGate é compatível com o
Oracle
Multi inquilino. C está incorreta porque o nome do espaço de tabela não é um identificador
exclusivo.porque
incorreto D é todos os 11 g bancos de dados deve ser atualizado antes de ligar.
4. B e D . B está correta porque o estabelecimento de uma sessão contra um APO só pode
ser de
através feito
um serviço exposto por um ouvinte. D está correta porque uma vez que se tem
umaAPO,
um sessãouma
contra
sessão contra outro pode ser estabelecida através de um link de banco de
dados, que
também serserá
estabelecido pelo ouvinte.
A e C são incorrectas. Um é incorrecta porque apenas o recipiente de raiz pode ser
contactado
utilizando o protocolo de IPC. C está incorreta porque enquanto você pode mover a sua
sessão a partir
recipiente paradeoutro,
um você não pode alterar o esquema como fazê-lo.
CAPÍTULO 32
Este capítulo descreve o processo de criação de um banco de dados do recipiente (CDB) e as várias
técnicas
para criar as bases de dados conectáveis (PDBs) que residem dentro dela. De um modo geral,
administração de um ambiente multitenant é semelhante à administração de um ambiente não-CDB.
é o ponto inteiro: muitos não-CDBs podem ser consolidados em um único CDB sem alterações para
que
usuários e desenvolvedores e com apenas alterações mínimas para os administradores.
o
Na próxima janela, você pode rever o resumo do banco de dados de recipiente a ser criado. Nota
em 32-2 que a criação de um banco de dados do recipiente pode criar uma base de dados bem
Figura
como conectável.
Figura 32-2 Criar banco de dados - página Resumo
Mas como você entre em contato com o banco de dados pluggable inicial? Em busca de pistas,
você pode verificar o ouvinte.
O código anterior mostra que todos os pedidos para o RPTQA10 serviço será entregue ao
CDB58 exemplo, que é o exemplo que tem aberta a base de dados do recipiente. Estes pedidos serão
sessões de lançamento contra o PDB. Os pedidos para o serviço CDB58 também será conectado ao
exemplo CDB58 mas irá estar conectado ao recipiente raiz em vez de para o APO.
DICA
marqueExecute
a caixa odeDBCA
seleçãomuitas vezes,scripts
para gerar tomardeopções diferentes
criação de bancoa de
cada vez, Estudar
dados. e no final
osda caixa que
scripts, de
diálogo
são instrutivas.
Muitos administradores de banco de dados experientes (DBAs), incluindo os autores deste livro,
geralmente
bases de dados,
criamgerando scripts de dbca e depois editá-los se necessário.
Se o recipiente raiz CDB tem os arquivos para o sistema ou SYSAUX ou TEMP no diretório
/ U01 / oradata / CDBA, o recipiente semente terá seus arquivos criados em / u02 / oradata /
semente'.
você podeAlternativamente,
especificar isso no comando CREATE DATABASE.
Exercício 32-1: Criar um banco de dados Container Neste exercício, você irá criar um recipiente
banco de dados usando SQL * Plus.
1. Crie um arquivo simples parâmetro chamado initcdba.ora, com apenas estas quatro linhas:
Observe que o caminho para o controlfile é um caminho Linux sugeriu; ajustar de acordo
com o seu(ou Windows), se necessário. Coloque o arquivo no $ ORACLE_HOME / dbs
ambiente
diretório (Linux) ou% ORACLE_HOME directório% \ database (Windows).
2. Inicie a instância CDBA.
Defina sua variável de ambiente ORACLE_SID.
Aqui está o código para Linux:
Observe a menção explícita de todos os arquivos e ajustar de acordo com seu ambiente.
5. Execute os scripts catalog.sql e catproc.sql, que irá criar o dicionário de dados
Note-se que os dois comandos anteriores não deve incluir qualquer quebra de linha.
6. Investigar as estruturas físicas CDB.
A partir da sua sessão SQL * Plus, execute essas consultas:
Note como os nomes de arquivos para o recipiente de sementes foram calculados pela
aaplicação
nomes dedearquivos
uma conversão
do contêiner raiz e que o controlfile e arquivos de log não são (ao
contrário do
arquivos de dados e tempfiles) associadas com qualquer um recipiente.
7. Criar um CDB com DBCA.
Para se tornar completamente familiarizado com o processo de criação CDB, utilize o
DBCA
Siga as também.
opções para criar um banco de dados de contêiner (usando ambos os modelos que
arquivos de dados e o modelo "personalizado" que não) e na última janela, marque a caixa
incluem
para gerar scripts de criação de banco de dados. Estude-os! Eles são instrutivos.
de seleção
Exercício 32-2: Crie um banco de dados plugável da semente Neste exercício, você criará um
por clonagem do PDB de sementes. Presume-se que um CDB existe chamado cdba, que você tenha
PDB
A variável de ambiente ORACLE_SID configurada para cdba e que um ouvinte de banco de dados
o
está sendoe executado
endereço porta. no padrão
Você pode procurar as conexões DBA para o banco de dados do contêiner CDB01 e seus PDBs.
clique
Certo-
no QA_2014 PDB e selecione Clone Pluggable banco de dados, como mostrado na Figura 32-
3.
Figura 32-3 Seleção de um banco de dados para clonar no SQL Developer
Na caixa de diálogo que se abre, como mostrado na Figura 32-4 , alterar o nome do banco de
outros
dados
recursos
para QA_2015.
e opções deTodos
QA_2014 são retidos por QA_2015.
A guia SQL mostra o comando que SQL Developer será executado para clonar o banco de
dados:
Depois de clicar no botão Aplicar, a operação prossegue de clonagem e cria o novo PDB. Como
com o SQL * Plus método de criação de um novo PDB, você tem que abrir o novo PDB como ler
escrever.
Finalmente, você precisa abrir o banco de dados QA_2014 como ler escrever novamente desde
que foi da
LEITURA definido parade duplicação.
operação
Exercício 32-3: Clone Uma PDB para outro PDB Neste exercício, você criará um APO
clonagem do recipiente PDBA criado anteriormente.
Aqui está como você iria exportar os metadados para o banco de dados RPTQA12C. Conectar-se
banco
ao de
alvo
dados (banco de dados que será assimilado CDB01), mudar seu status para somente leitura,
executar o procedimento.
O arquivo contém informações que descrevem os arquivos de dados do banco de dados, que são
instalado,
componentes
e certos parâmetros críticos de instância. Note que a tabela de undo, o controlfile, e
os arquivos de log redo são descartados. O XML se parece com isso:
Se o banco de dados não-CDB existente é na mesma máquina como o destino CDB, conectar-se
banco
à de dados recipiente CDB01 e importar o XML para RPTQA12C.
Em muitos casos, será necessário transferir os arquivos de dados não CDB de e o arquivo XML
máquina
para oonde o DB está em execução. Sem problemas. Editar o arquivo XML para ter em conta
quaisquer
nomes alteraçõese no
de arquivos diretórios antes de executar o comando conectável CREATE DATABASE.
A operação entupimento-in pode demorar tão pouco como um minuto ou dois. Alguns limpeza
final e são necessários antes que o banco de dados conectado-in pode ser usado. O
configuração
noncdb_to_pdb.sql
limpa metadados desnecessário
roteiro não é necessário em um ambiente multitenant. Além disso, é
necessário
o recém-conectado
abrir no banco de dados, tal como faria com uma operação de clone.
Ligar uma APO desconectado num CDB
Você pode ter várias bases de dados desconectado a qualquer momento. Um banco de dados
desconectado
fora de um CDB,não por
pode seréaberto
isso provável que você conecte um banco de dados desconectado (PDB) de
volta para
Neste exemplo,
a CDB o PDB
em algum
CCREPOS
ponto. atualmente é desconectado e tem o seu arquivo XML localizado
/tmp/ccrepos.xml no servidor. Os passos para ligar um PDB atualmente desconectado em um CDB
no
são ambos
direta e acabamento rapidamente, assim como a maioria das operações multitenant fazer. Tudo que
vocêcomando
um tem a fazer
paraé ligá-lo
executare um outro comando para abri-lo. Conectar como um utilizador comum
com o privilégio DATABASE pluggable da seguinte forma (conexão como SYSDBA para CDB01
ALTER
operating system [OS] authentication works great):
com
Note-se que a APO deve ser descartado, e não apenas desconectado, a partir de um CDB antes de
de volta
ele pode
em. ser
Usando
conectado
a opção NOCOPY economiza tempo se arquivos de dados do PDB já estão na
correta
localização.
processo, e pode ser usado da mesma maneira para ligar o APO em qualquer outro CDB.
Quando você soltar um PDB, todas as referências ao PDB são removidos controlfile do CDB. De
padrão, os arquivos de dados são retidos; Portanto, se você já havia unplugged que PDB, você pode
usar
o arquivo XML para tapar que PDB de volta para o mesmo ou outro CDB. Neste exemplo, você vai
cair o
QA_2014 PDB juntamente com seus arquivos de dados. Já não estará disponível para ligar a outro
banco desedados
mesmo você ainda tem os metadados XML.
EXAME TIP Apenas libertar 12. x bases de dados não CDB pode ser convertido em PDBs.
qualquerdemais
bancos cedo
dados deve ser atualizado primeiro.
Se a sua aplicação não é sensível ou dependente da versão do banco de dados (que você deve
ter verificado até agora), então sua opção mais limpa é atualizar o não-CDB no lugar até a versão
12 c (12.1.0.1 ou mais tarde) e, em seguida ligá-lo para o CDB utilizando os métodos mencionados
anteriormente
capítulo. neste deste método é que você não precisa alocar qualquer espaço extra para o
As vantagens
migração como você faria para os outros dois métodos e que é rápido.
Para usar o método Data Pump, você vai usar o Data Pump exportação / importação como você
meiofaria
Ambiente.
em um não-CDB
Criar um novo PDB do banco de dados semente na CDB, e ajustar a inicialização
parâmetros a ser comparáveis aos do banco de dados existente. Uma das vantagens com este método
é que você pode deixar a corrente não-CDB no local para garantir a compatibilidade com Oracle
Database
antes 12 c cair o banco de dados original. Ele também irá permitir que você executar uma
de deixar
migração
passar de armazenamento
de plataforma, oudopara
sistema de arquivos para armazenamento ASM, como parte da
consolidação.
grande, isso pode
Maslevar
se o algum
banco de
tempo.
dados é
DICA A atualização e plug-in método é geralmente muito mais rápido porque o tempo necessário é
falando) independente do tamanho do banco de dados. Uma exportação-importação de um grande
(geralmente
banco de
muitas horas.
dados
Oupode
dias.demorar
Além de usar o nome do serviço para se conectar à CDB ou qualquer PDBs contido dentro, você
pode usar a autenticação OS e conectar como SYSDBA, tal como faria com um não-CDB. Você vai
ligado como a facilidade de um utilizador comum SYS com privilégios para manter todos os PDBs
ser
dentro do CDB.
A transparência de um PDB e como ele aparece como um não-CDB para usuários sem
comoprivilégios
você se conectar
se estende
usando
a entradas no tnsnames.ora ou usando o Oracle EasyConnect. Como
você pode
formato para
recordar,
uma seqüência
o de conexão EasyConnect é a seguinte:
Portanto, para se conectar à RJB usuário no APO DW17 nomeado no CDB chamado CDB01 em
o servidor oel63, você usaria o seguinte ao iniciar SQL Plus *:
Observe que nenhuma referência a CDB01 é necessário. máscaras de nome serviço do PDB, a
o CDB
existência
ou quaisquer
de outros PDBs no CDB.
Em um ambiente nonrestart ou sem cluster, você pode usar o pacote DBMS_SERVICE para criar
e iniciar o serviço. Para criar a mesma novo serviço, como no exemplo anterior com srvctl mas
em vez de usar DBMS_SERVICE, você iria ligar para o PDB e, em seguida, faça o seguinte:
Observe a ligeira diferença no exemplo com DBMS_SERVICE: O nome do serviço real é ainda
dwsvc2, mas o nome do serviço exposto aos usuários finais é dwsvcnew e seria usado na conexão
string para clientes que acessam este serviço.
EXAME TIP usuários comuns que têm o privilégio de sistema CONTAINER SET ou usuários
locais que
mudar recipientes usando CONNECT local_user @ PDB_NAME não cometer automaticamente
operações de comutação quando recipientes.
pendente
DBA que inicia e encerra um não-CDB. O ponto que é muitas vezes ignorado é que a CDB é
em última análise, uma única instância de banco de dados, e cada PDB ações os recursos de
éinstância
de se esperar
da CDB.
vistoeste
que cada APO é logicamente repartido a partir de todos os outros PDBs usando
o CON_ID
coluna em cada tabela que é compartilhada entre a raiz e cada APO. Este particionamento lógico se
estendede
contas a usuário e de segurança, bem; Assim, parece que noncommon usuários que o APO tem a
sua própria
instância dedicada.
DICA Como você poderia esperar, em um ambiente Real Application Cluster (RAC), a CDB
tem um exemplo em cada nó do aglomerado. serviços PDB pode failover entre as instâncias.
normalmente
Desde o CDB é uma instância de banco de dados, tudo correndo dentro do CDB está desligado
desligada
ou quando o CDB é desligado. Isto significa que a APO não está aberto para os usuários até o
foi iniciado e explicitamente aberto (quer manualmente pelo DBA ou por meio de um gatilho), e
CDB
APO é fechada quando o exemplo CDB é desligado.
semelhante
Nas seções seguintes, eu vou lhe mostrar como CDBs e PDBs são iniciados e desligar, como
bem como a forma de automatizar o processo. Você também vai querer saber como alterar os
parâmetros
objetos que são
de banco de dados específicos para um APO, assim como, como espaços de tabela
temporários que para
especificamente podemumser
APOcriados
se o padrão de tabela temporária global não atende as necessidades do
aplicação da APO.
Do estado de desligamento, você pode executar uma NOMOUNT inicialização (conexão como
SYSDBA
usando autenticação OS) para iniciar um exemplo CDB abrindo o spfile e criar os processos e
estruturas de memória, mas ainda não abre o arquivo de controle.
Neste momento, no processo de inicialização, a instância não possui informações sobre os PDB
CDB dentro
ainda.daNormalmente, você realizaria uma NOMADA DE INICIAR quando precisar recriar ou
restaure um arquivo de controle ausente para a instância do CDB.
Muitas coisas acontecem quando você move um CDB para o estado MOUNT, como você pode
Nãover
só na
os arquivos
Figura 32-5
de controle
. do CDB são abertos para a instância, mas o CDB $ ROOT e todos os
são alterados para o estado MOUNT.
PDBs
Se qualquer operação de arquivo de dados for necessária (restaurar e recuperar, por exemplo), é
iria onde
realizar
você
aqueles, especialmente se essas operações são necessárias no tablespace SYSTEM. o
O passo final para tornar o recipiente de raiz disponível para abrir PDBs é mudar o estado do CDB
ABERTO. Depois que CDB $ ROOT estiver ABERTO, está disponível para operações de leitura e
para
gravação.com
montado Os PDBs
o banco
ainda
de dados
são de sementes PDB $ SEED montado como READ ONLY.
Como criei um segundo serviço para o PDB chamado DW17 anteriormente no capítulo e Oracle
Reiniciar está instalado neste ambiente, o DW17 é aberto automaticamente no modo READ WRITE.
O banco de semente PDB $ SEED sempre é aberto LEIA SOMENTE.
o
Uma vez que o CDB é aberto (em outras palavras, os arquivos de dados da raiz estão disponíveis
tablespace
junto com
temporário
o e os arquivos de log de retomada on-line), os PDBs estão montados, mas
ainda não estão
disponível abertos
para os e A menos que um PDB seja aberto com um gatilho ou através do Oracle
usuários.
Restart,
no estadoeleMONTADO.
permanece por padrão
Neste ponto, a instância do CDB se comporta como uma instância que não é CDB. Na próxima
vejaseção,
como você
PDBs individuais são abertos e fechados.
Para configurar o contêiner padrão de volta para o contêiner de raiz, use CONTAINER = CDB $
Comando
ROOTALTER
no SESSION.
TIP Dentro de um APO, você pode usar SHUTDOWN, com IMEDIATA ou TRANSACTIONAL
ABORTAR. O resultado é sempre o mesmo que CLOSE.
ou
Quando você fecha um ou mais PDBs, você pode adicionar a palavra-chave IMEDIATA para
reverter qualquer
transações dentro do PDB pendente. Se você deixar de fora a palavra-chave imediato, o PDB não
está fechada
até que todas as transações pendentes, quer tenham sido confirmada ou revertida, assim como em um
instância de banco de dados e todas as sessões de usuário são desconectados pelo usuário. Se o seu
não-CDB
contexto
PDB específica,
de sessão
você
estátambém
em um pode usar a instrução IMEDIATA SHUTDOWN para fechar a APO,
mas isso
que notanão afeta quaisquer outros PDBs e essa instância do contêiner raiz ainda está em execução.
Ao especificar IMEDIATA, a instância CDB não esperar por uma confirmação ou reversão
de transações pendentes, e todas as sessões de usuário a qualquer PDB estão desconectados.
utilização
TRANSACTIONAL espera por todas as transações pendentes para ser concluído e, em seguida,
desconecta
antes de terminar
todas as
o exemplo.
sessões
Conforme descrito na seção anterior, você pode usar o mesmo comando para desligar um
APO, específico
mas apenas que arquivos de dados do PDB estão fechados, e seus serviços não mais aceitará
pedidos até que seja aberto novamente.
conexão
EXAME DICA Por padrão, PDBs são fechados após a inicialização do CDB. No entanto, 12.1.0.2
liberação
você instruir
nãoOracle
permitepara preservar o estado da APO, de modo que se ele foi aberto em CDB
desligamento,
ser ele vai
aberto na inicialização CDB.
A inicialização depois ON gatilho DATABASE é persistente, a menos que você deixar cair ou
novodesativá-lo. Dois de dados gatilhos para Oracle Database 12 c , APÓS CLONE e ANTES
evento de banco
DESCONECTE,
mais dinâmico. Ambos
são os gatilhos deve ser especificado com ON conectável banco de dados;
caso contrário, o gatilho será inválido e não dispara.
Você usaria um gatilho como após CLONE para um APO que você freqüentemente clonar num
teste ou ambiente de desenvolvimento. O gatilho em si existe no APO fonte e persistirá
a menos que você deixá-la explicitamente. No entanto, quando você cria um novo PDB clonando o
PDB existente
contém que você pode executar tarefas de inicialização de uma só vez no APO clonado logo
esse gatilho,
após é Uma vez concluídas estas tarefas, o gatilho é suprimida de modo que quaisquer clones da já
clonado.
banco de dados não irá executar essas tarefas de inicialização.
clonado
Alterar PDB Estado
Em um ambiente não-CDB muitas vezes você tem razão para restringir o acesso a um banco de
dados para
tarefas qualquer ou para prepará-lo para um espaço de tabela transportável ou operação de
de manutenção
banco deem
verdade dados.
um ambiente
Isto é também
CDB. Anteriormente neste capítulo você viu como abrir um PDB como
somente
Para qualquer
leitura.
PDB que deseja restrito a usuários com privilégios SYSDBA (concedido a qualquer
um mundial
usuário ou um usuário local), você usar a cláusula RESTRITO tal como faria em um ambiente não-
CDB.
Para desativar o modo restrito, você fechar e reabrir o PDB sem a RESTRITO
palavra-chave.
Há várias operações que podem ser executadas em um APO que não requerem a reinicialização
Mododo restrito:
PDB em
Existem alguns comandos ALTER SYSTEM que você pode executar no nível do APO, mas
todaafetam
CDB. aPor exemplo, executar ALTER SYSTEM CHECKPOINT afeta arquivos de dados em
todo recipiente
o a menos que os arquivos de dados pertence a um APO, que é aberto como somente
leitura (tais como o
sementes) ou estiverem offline.
Alguns comandos ALTER SYSTEM só são válidos para todo o recipiente e deve ser executado
por um
usuário comum com privilégios SYSDBA no recipiente raiz. Por exemplo, executar ALTER
INTERRUPTOR LOGFILE muda para o grupo on-line próximo arquivo de log refazer. Uma vez
SYSTEM
que os arquivos
comum a todos os
derecipientes,
log redo online
este são
é o comportamento esperado.
Broca Two-Minute
Criar um banco de dados Container
• Cada CDB é criado com um banco de dados de sementes e um recipiente raiz.
• Para criar uma nova CDB, você deve usar o ATIVAR cláusula DATABASE pluggable do
Instrução CREATE DATABASE.
• Se você não estiver usando OMF (de preferência com ASM), você deve usar o SEED
cláusula FILE_NAME_CONVERT para especificar a localização e os nomes para os
arquivos
o recipiente
de banco
de sementes.
de dados de
• Criação de um CDB usando CREATE DATABASE requer que você executar scripts catálogo
para permitir
outras funcionalidades do Oracle e criar dados de objetos do dicionário através do script
catcon.pl.
Criar Containers plugáveis
• Criar um novo clones PDB o banco de dados SEED PDB $ dentro do mesmo recipiente.
• O novo PDB tem seu próprio catálogo de metadados, versões locais de SYSTEM e SYSAUX,
e usuários comuns SYS e SYSTEM.
• PDBs existentes podem ser clonadas, mas apenas enquanto eles estão abertos no modo
somente leitura. (que deve ser libertar 12. x ) pode ser conectado por meio da geração e
• Um não-CDB
executando
arquivo que
umdescreve
XML o não-CDB.
• A não-CDB de liberação menos de 12. x não pode ser ligado, mas o seu conteúdo pode ser
importado
em um novo PDB.
• Depois de iniciar o novo PDB, o novo nome de serviço padrão é registrado com o ouvinte.
Migrar um banco de dados pré-12.1 Non-CDB para CDB
• liberar apenas 12. x bancos de dados podem ser convertidos em PDBs e conectado a um CDB
• Data Pump pode transferir o conteúdo de uma pré-12. x não-CDB para um APO recém-criado
Auto teste
1 . Qual das seguintes cláusulas são necessárias no comando CREATE DATABASE para
criar um banco de dados recipiente? (Escolha todos os que se aplicam.)
A. ATIVAR DATABASE conectável
B. CHARACTER SET
C. FILE_NAME_CONVERT SEED
E. O recipiente raiz é aberta, a base de dados é lido semente aberto apenas, e quaisquer
PDBs
umcom
gatilho são abertas.
6 . Qual é a melhor maneira de descobrir se um parâmetro de inicialização é modificável no
APO nível? (Escolha a melhor resposta.)
A. Alterar o contexto da sessão para um APO específico e usar ALTER SYSTEM SET
B. A coluna de tipo em V $ parâmetro será APO.
C. Verifique a ISPDB_MODIFIABLE coluna em V $ PARAMETER.
D. Verifique a ISCDB_MODIFIABLE coluna em V $ PARÂMETROS.
Respostas de auto-teste
1. Um . Para a criação de um banco de dados do recipiente, a única cláusula requerida é
DATABASE
ACTIVAR conectável. Se você não estiver usando OMF e você não tem o parâmetro
conjunto DB_CREATE_FILE_DEST (por exemplo, a um grupo de discos ASM), então
você
o FILE_NAME_CONVERT
precisa usar SEED opcional para especificar onde o banco de dados de
sementes
arquivos (PDB $ SEED) residirá.
B , C , e D estão incorrectos. B está incorreta porque o conjunto de caracteres de banco
parade dados
saber se onão está de
banco relacionado
dados é um CDB. C é incorrecta porque a semente é
FILE_NAME_CONVERT
necessário apenas se você não estiver usando OMF para seus arquivos de banco de dados. D
não é essa cláusula
é incorrecta porque ATIVAR
há DATABASE CONTAINER no banco de dados CRIAR
comando.
2. C e D . Para desconectar um PDB de um CDB, ele deve primeiro ser desligado com o
DATABASE
ALTER conectável. . . comando CLOSE; você também deve criar os metadados XML
arquivo com DBMS_PDB.DESCRIBE para que o PDB pode ser conectado posteriormente
para este
CDB no futuro.
ou outro
A e B são incorrectas. Nem uma exportação Data Pump nem um backup RMAN do
necessário
APO épara desconectar um APO. Quando um APO está desligado, seus arquivos de
dados explicitamente
soltar não são descartados
o PDBa menos
e especificar
que você
a cláusula DATAFILES INCLUINDO.
3. A , C , e D . Se você atualizar o banco de dados para a versão 12.1.0.1 ou mais recente,
você pode executar para criar o arquivo XML e conecte o banco de dados em um
DBMS_PDB.DESCRIBE
CDB existente.
Ambos Data Pump e os links de banco de dados são opções viáveis para a migração do
banco de
porque ambos
dadososemmétodos
particular
de deixar o banco de dados original intacta na sua versão original.
B é incorrecta. Você não pode ligar diretamente a-12.1 pré Oracle Database em um CDB
este usando
método, pois o pacote DBMS_PDB existe apenas no Oracle Database 12 c recipiente
bancos de dados.
4. B e C . Um serviço de escuta é adicionado automaticamente quando você cria, clone, ou
APO, ligue
masum
se você quiser um ouvinte adicional para um APO, você pode usar o srvctl
em um Oracle Restart ou ambiente de cluster ou usar o pacote DBMS_SERVICE com
comando
chama a CREATE_SERVICE e START_SERVICE para criar e iniciar o serviço.
A e D são incorrectas. A está incorreta porque mesmo que um serviço é
criado
automaticamente
quando um PDB é criado, clonado, ou conectado, você pode ter mais de um serviço
por PDB. D está incorreta porque todos os serviços podem compartilhar o ouvinte padrão, se
5. desejar.
E . Quando um CDB está no estado aberto, o recipiente de raiz está disponível para
o banco
conexões,
de dados
e de sementes é aberto, mas como somente leitura. Quaisquer PDBs que têm
um gatilho definido
gerenciados ou sãoRestart são abertos automaticamente.
com o Oracle
A , B , C , e D estão incorrectos. A está incorreta porque uma vez que o CDB é aberto, a
recipiente
raiz é aberto para WRITE DE LEITURA, a base de dados de sementes é aberta para
SÓ LEITURA
PDBs com um egatilho
todos ou serviço Restart da Oracle são abertos também. B é incorrecta
porque
APO a
semente é só de leitura. C está incorreta porque mesmo se há PDBs são
aberto, você pode abri-los a partir do contêiner raiz com o ALTER conectável
automaticamente
comando DATABASE um de cada vez ou todos de uma vez. Você pode usar o comando de
inicialização
abrir um APOparasomente se você definir o recipiente parâmetro de sessão para o nome do
PDB. D éporque o recipiente raiz deve ser explicitamente aberto no modo restrito quando
incorreto
requeridos.
6. C . O ISPDB_MODIFIABLE coluna é verdade em V $ PARAMETER se você pode
esse mudar
parâmetro para um único APO.
A , B , e D são incorrectas. A está incorreta porque mesmo que você vai descobrir se o
parâmetro é modificável, é muito mais fácil olhar em V $ PARAMETER. B é incorrecta
porque a coluna de tipo em V $ parâmetro indica o tipo de dados de parâmetro
valor. D é incorrecta porque não existe tal ISCDB_MODIFIABLE coluna em
V $ PARAMETER.
CAPÍTULO 33
Gerenciando o armazenamento, segurança,
disponibilidade,
e desempenho em um CDB e PDBs
Objetivos do exame
• 063.5.1 Gerenciar Permanente e espaços de tabela temporários em CDB e PDBs
• 063.6.1 Gerenciar usuários comuns e locais
• 063.6.2 Gerenciar privilégios comuns e locais
• 063.6.3 Gerenciar funções comuns e locais
• 063.6.4 Ativar Usuários comuns para acessar dados em PDBs específicos
• 063.7.1 executar backups de um CDB e PDBs
• 063.7.2 Recuperar APO da perda PDB Datafiles
• 063.7.3 Use Data Recovery Advisor
• PDBs duplicados 063.7.4 Usando RMAN
• 063.8.1 Operações monitor e desempenho em um CDB e PDBs
• 063.8.3 gerenciar alocação de recursos entre PDBs e dentro de um APO
• 063.8.4 Execute o Database Replay
Este capítulo cobre uma lista assustadora de objetivos. Não se preocupe-muitos deles são simples se
-lo a compreender o objetivo equivalente para ambientes que não têm bases de dados de recipiente
Tudo o que é necessário traduzir esse conhecimento para um ambiente CDB é um entendimento da
(CDBs).
arquitetura CDB coberto em capítulos anteriores. Há, no entanto, o potencial para confusão. Estar
preparado para alguns efeitos estranhos (normalmente quando se tenta fazer algo no recipiente raiz
deve ser feito em um recipiente pluggable) e sempre estar ciente de que recipiente a sessão é
que
actualmente ligada a.
arquivos de dados do contêiner são armazenados no subdiretório DATAFILE; cada um dos PDBs
conjunto
tem a de
suaarquivos
própria de dados em um desses subdiretórios com a longa seqüência de dígitos
hexadecimais.
OMF com ASM Você
neste
usacenário; você não precisa saber ou se importar o que esses caminhos de
diretório
nomes são
e desde os locais dos arquivos de dados são gerenciados automaticamente.
Padrão Permanente e espaços de tabela temporários em um PDB
Alterar o espaço de tabela padrão em um CDB ou PDB é idêntico ao mudar a tabela padrão em um
não-CDB. Para ambos os CDBs e PDBs, você usar o ALTER banco de dados padrão TABLESPACE
comando. No exemplo a seguir, você define o recipiente para QATEST1, criar um novo espaço de
dentro QATEST1, e alterar a tabela padrão para ser o espaço de tabela que você acabou de criar:
tabela
Daqui para frente, os novos usuários (local ou comum) dentro QATEST1 que não tem um
default
específico
tablespace permanente usará o QA_DFLT tabela.
Para qualquer CDB você pode ter um padrão de tabela temporário ou grupo de tabela temporário
definida ao nível CDB que pode ser utilizado pelo recipiente de raiz. Cada APO também deve ter
uma
tabela temporário. Este será criado automaticamente se o PDB é criado a partir da semente
recipiente e normalmente já existem em qualquer banco de dados não-CDB, que está ligado. A APO
ter vários espaços de tabela temporários para ser usado por usuários diferentes, bem como um
pode
default temporário
tablespace. No exemplo a seguir, você cria uma nova tabela temporário chamado
QA_DFLT_TEMP no APO QATEST1 e torná-lo o padrão de tabela temporário para
QATEST1:
Um espaço de tabela temporária criada dentro de um APO permanece com que PDB quando é
desligado
ligado de voltae para o mesmo ou um CDB diferente. Se um usuário não é atribuído um temporário
tabela, em seguida, esse usuário é atribuído a tabela temporário padrão para o PDB.
específico
você tem um CDB chamado CDBA com dois recipientes conectáveis chamados PDBA e pdbb,
inaugurado
modo em leitura
de escrever, e que não há um arquivo tnsnames.ora com entradas para cada APO e o recipiente
raiz.
1. Ative o Oracle Managed Files para PDBA, dando-lhe a sua própria localização. Criar o
indicado
diretório primeiro e garantir permissões de leitura e escrita que o proprietário Oracle tem
sobre ele.aoseguir é para Linux:
exemplo
O recipiente raiz (CDB $ ROOT) não pode ter usuários locais, somente os usuários comuns.
ter ausuários
mesma identidade
comuns e senha no recipiente raiz e cada APO, atuais e futuros.
Ter uma conta de usuário comum não significa automaticamente que você tem os mesmos
privilégios
APO, incluindo
em toda
o recipiente
a todas asde raiz. O SYS contas e SYSTEM são usuários comuns que podem ser
definidas
qualquer PDB como seu recipiente padrão. Para novos usuários comuns, o nome de usuário deve
começar
o COMMON_USER_PREFIX
com C ## a menos parâmetro de instância foi alterado do padrão. Note-se que o
Oracle fornecido usuários comuns não têm a C ## prefixo, a fim de manter a compatibilidade com
ambientes não-CDB.
Quando você cria um usuário comum com o comando CREATE usuário, você pode adicionar
CONTAINER = ALL para o comando, como neste exemplo:
Se você estiver conectado ao recipiente raiz e ter o privilégio CREATE USER, o
CONTAINER = ALL cláusula é aplicada por padrão. O mesmo se aplica a um usuário local ea
RECIPIENTE = cláusula CORRENTE. O usuário C ## SECADMIN agora tem privilégios de DBA
na raiz
recipiente. Esse usuário tem uma conta configurada em cada APO, mas sem privilégios em qualquer
PDB a menos que explicitamente
atribuído.
Para permitir que o ## SECADMIN usuário C a pelo menos conectar ao banco de dados
privilégios
QATEST1,apropriados
concedacomo
a segue:
Ao usar CRIAR usuário, você pode opcionalmente especificar o espaço de tabela padrão, o
tabela
padrão
temporário, eo perfil. Estes três atributos devem existir em cada APO; caso contrário, aqueles
valores serão definidos para os padrões do APO para esses itens.
E se um usuário comum é criado enquanto um dos PDBs não está aberto ou está em LEIA
Modo SÓ? atributos do novo usuário comum são sincronizadas na próxima vez que o AO é aberto
LER modo de escrita.
no
Para corrigir esse problema para C ## ROOTADM, você precisa conceder o privilégio CREATE
contexto
SESSION
do recipiente
na raiz.
Você revogar os privilégios de usuários e funções usando o comando REVOKE, como nas
e não-CDB.
versões anteriores
A principal diferença usando conceder e revogar em um ambiente multitenant é o
Além da cláusula CONTAINER onde você especificar o contexto da concessão ou revogação. Aqui
Para conceder um privilégio com CONTAINER = ALL, o concedente deve ter o recipiente SET
privilégio, juntamente com a concessão de qualquer privilégio sistema de privilégios.
Gerenciar funções comuns e locais
Papéis, assim como privilégios de sistema e objeto, trabalhar muito mesmo em um ambiente
multitenant
eles fazem emcomo
um ambiente não-CDB. papéis comuns usam as mesmas convenções como usuários
comuns ecom C ##; um papel comum pode ter os mesmos privilégios em todos os recipientes ou
começar
específica
privilégios ou sem privilégios em um subconjunto de recipientes. Você usar a cláusula CONTAINER
para especificar
contexto do papel.
o
Nota no exemplo que um papel comum (C ## MV) foi concedido a um utilizador local
DW17.
(DW_REPL)
O DW_REPL em usuário herda todos os privilégios no papel C ## MV mas apenas no DW17
PDB.
O inverso também é possível: Um utilizador comum (tais como C ## RJB) pode ser concedido um
papel local (tal como
LOCAL_ADM) em um APO específico (tal como QATEST1), e, por conseguinte, os privilégios
concedido através
LOCAL_ADM estão disponíveis apenas em QATEST1 para C ## RJB.
Os utilizadores comuns, tais como C ## RJB existir para cada APO (que não seja o banco de
dadosQAFRED
tal como de sementes). Comercial
só existem no APO com CON_ID = 3 (QATEST1). Note também que o comum
usuários criados devem começar com C ##; usuários comuns da Oracle-fornecidos não precisam este
prefixo.
Exercício 33-2: Gerenciar usuários e papéis comuns e locais Este exercício demonstra como
gerenciar usuários e funções em um ambiente multitenant. Supõe-se a CDB é nomeado CDBA, com
conectável recipientes PDBA e pdbb.
1. executar consultas para determinar que existem usuários.
Note que não é possível criar um usuário comum a menos que o prefixo é usado.
3. Conecte-se como um usuário comum recém-criada.
Note-se que a conexão com um APO falhará se o usuário não tiver sido concedida a função
ou privilégio com um escopo apropriado.
apropriada
4. Crie um usuário local.
TIP EXAME No recipiente raiz, apenas os usuários comuns e papéis podem ser criados.
CONTAINER = ALL para a instrução CREATE é opcional; CONTAINER = atual não é
acrescentando
permitido.
Em um recipiente pluggable, somente os usuários locais e papéis podem ser criados. acrescentando
CONTAINER = atual para a instrução CREATE é opcional; CONTAINER = ALL não é
permitido.
por usuários que se conectaram com privilégios de DBA atribuídos pelo sistema operacional ou
arquivo de senhas
autenticação:
Um usuário agora se conecta à JW1 recipiente conectável com o privilégio SYSDBA, mas não
desativar
pode (ou mesmo ver) a política de auditoria.
No entanto, no recipiente raiz os registos de auditoria pode ser visto como tendo sido gerado no
recipiente conectável.
Isto irá informar sobre problemas detectados, gerar um script para corrigi-los, e executar o script.
De uma sessão tal como o representado na Figura 33-1 , você pode fazer backup de todo o CDB
PDBs
ou com
indivíduo
os comandos, tais como: estes
O segundo comando no código anterior irá identificar os espaços de tabelas que compõem o
nomeado recipiente
possível fazer backupe apoiá-los usando
de tablespaces o padrão RMAN
individuais foram
de bancos configurados.
de dados Issoa épartir
conectáveis tambémda raiz,
usandodoo recipiente como um prefixo. Aqui está um exemplo:
nome
Para se conectar a um recipiente pluggable, você deve usar a autenticação de arquivo de senha e
através
conectar
de um nome do serviço TNS. Aqui está um exemplo:
O escopo de uma sessão lançado desta maneira será limitado aos espaços de tabelas que
compõem
banco de dadoso de conector, e não há mudanças na sintaxe do que você usaria em um não-CDB.
Restauração e recuperação
Em caso de qualquer tipo de falha exemplo, recuperação de instância ocorrerá automaticamente na
a partir do modo de montagem para o modo de abrir, do mesmo modo como para um não-CDB.
transição
Quando
em voo transações
isso for concluído,
serão revertidas
qualquerquando os PDBs individuais são abertas. Recuperar de perda
de um controlfile é também idêntica para um não-CDB: No modo nomount, o controlfile deve ser
restaurado ou
recriado.
Para restaurar e recuperar toda a CDB, iniciar a instância no modo nomount, ligar à raiz
recipiente (o qual é o único recipiente acessível neste modo), e emitir o habitual RESTAURAR
CONTROLFILE, Restore Database, e recuperar comandos de banco de dados que são utilizados
recuperação completa ou incompleta. Os arquivos de dados críticos em um CDB são o sistema e
para
desfazer
de tabela do recipiente raiz. Danos a estes irão forçar a instância CDB para terminar, e eles
deve ser restaurado e recuperado no modo de montagem. Até agora, não há diferenças entre CDB e
não-CDB. As diferenças são ao aplicar restaurar e recuperar operações para PDBs individuais.
Dentro de um PDB, o espaço de tabela SYSTEM é crítica. Se este estiver danificado, todo o
derrubado
recipiente
modo
seráa montar, e até que o espaço de tabela é restaurado e recuperado, ele não pode ser
Outros PDBs não será afetada por esta. Quaisquer outros espaços de tabela pode ser colocado
aberto.
offline, restaurado,
recuperados e
individualmente enquanto o APO permanece aberta. Estas operações podem ser
realizadas raiz
recipiente a partir
por da
um prefixo no nome de tabela com o nome do recipiente ou a partir de dentro do
PDB usando
comanda o habitual não CDB.
Se você deseja copiar dois ou mais bancos de dados passíveis de ligação, basta adicioná-los ao
comando
final do
duplicado.
Exclusões são permitidos no comando duplicado. Se você deseja clonar um CDB inteiro, mas
sem a CCREPOS PDB, faça o seguinte:
Finalmente, você pode duplicar não só bancos de dados passíveis de ligação, mas também
CDB.
espaços de tabelas individuais, para um novo
Mulitenant Performance Monitoring and Tuning
De um modo geral, instância e tuning de banco de dados pode ser melhor feito a partir do container
raiz, aopartir
onde exemplo
de e a base de dados como um todo pode ser observada. ajuste de SQL vai ser feito
de dentro do recipiente onde o SQL está em execução. Em ambos os casos, a mesma metodologia
normalmente
que você
usaria em um ambiente não-CDB aplica.
Ajustando a memória em um CDB significa que você está mudando as mesmas áreas de
memória como em um não-CDB:
• cache de buffer (SGA)
• Piscina colectiva (SGA)
• Área do Programa Global (PGA)
Ao calcular os requisitos de memória para um CDB, a sua primeira estimativa pode ser a soma
de todos
requisitos de memória correspondentes para cada não-CDB que se tornarão um APO. Claro que você
eventualmente, querem reduzir o consumo de memória total para o CDB com base em uma série de
vai
fatores. Para
exemplo, nem todos os PDBs estará activo ao mesmo tempo; Portanto, você provavelmente não vai
precisar
total de memória
tanto alocada para o CDB.
Usando Enterprise Manager Nuvem de Controle 12 c é uma boa maneira de ver o uso de
CDB.recursos
Na Figura
em todo
33-2o, o recipiente tem três CDB01 PDBs activas e duas inactivos.
Figura 33-2 Vendo o uso de recursos dentro de um AO de CDB usando Cloud Control 12 c
A memória total alocado para o CDB é de aproximadamente 5 GB. Três bancos de dados não-
CDB faria
utilização provável 5GB ou mais cada; todos os cinco PDBs em CDB01 pode realizar muito bem em
um Existem
total de 5GB.
algumas abordagens diferentes à alocação de recursos entre os PDBs dentro de um
CDB:
• Nenhum Que cada APO usar todos os recursos do CDB se nenhum outro PDB está ativa;
quando
vários PDBs precisam de recursos, eles são divididos igualmente.
Alocação de utilização de recursos em um CDB é medido em ações . Por padrão, todos os PDBs
recursos
pode alocados
consumiràtoda
CDB. Nós cobrimos mais detalhes sobre como as ações são alocados e
mais adiante neste capítulo.
calculados
Há apenas uma spfile por exemplo CDB. Todos os parâmetros de banco de dados são
spfile,
armazenados
mas muitosnodesses
CDB parâmetros
de podem ser alterados no nível PDB. A coluna
ISPDB_MODIFIABLE é uma maneira fácil de ver quais parâmetros você pode mudar ao nível PDB.
Quando você desconectar um PDB, seus parâmetros personalizados ficar com o PDB
desconectado
quando isso PDB eestá
sãoligado
definidas
de volta, independentemente de qual PDB ele está conectado a. Quando
um APO os
clonado, é parâmetros personalizados são clonados também. No nível de contêiner, você também
pode olhar vista
dicionário para PDB_SPFILE
os dados $ para ver quais parâmetros são diferentes em toda PDBs.
Mesmo com vários PDBs no recipiente CDB01, parece que a memória total para o CDB
pode ser reduzida em pelo menos 1GB e manter o bom desempenho para todos os PDBs.
Para acomodar um número potencialmente maior de sessões em um CDB, o parâmetro
PGA_AGGREGATE_LIMIT foi adicionado para colocar um limite rígido sobre a quantidade de
memória
O PGA_AGGREGATE_TARGET
PGA usado. parâmetro existente era útil em versões anteriores como um suave
limitar, mas apenas para a memória ajustável. Várias sessões que utilizam memória untunable (tais
como PL / que
aplicações SQLalocam grandes matrizes de memória) poderia usar toda a memória PGA disponível,
fazendo com que a atividade de swap no nível do sistema operacional e afetar o desempenho em
todas asoinstâncias
Assim, PGA_AGGREGATE_LIMIT
no servidor. parâmetro foi adicionado para interromper solicitações de
memória
ou mais conexões
PGA pornãoum pertencentes ao sistema para ficar sob este limite.
Manager é no nível do CDB, onde um plano deve ser criado que vai alocar recursos entre
PDBs.
Por padrão, cada APO recebe uma partes salvo indicação em contrário. Quando um novo APO é
PDBadicionado
existente está
ou umdesligado, o número de ações que cada APO tem permanece a mesma. Tabela
33-1 mostra
CDB com quatro
um PDBs: RH, BI, REPOS, e TOOL. O BI PDB tem três partes, e os restantes têm
cada um, o padrão.
O banco de dados da ferramenta, por exemplo, é garantido 16,67 por cento dos recursos da CPU
do servidor
necessário. se ou mais dos outros PDBs não estão ativos, sua participação está disponível para
Se um
PDBs ativos.
Na Tabela 33-2 , você cria um PDB chamado NCAL e não especificar o número de ações, por
issopara 1.
padrão
Tabela 33-2 PDBs e Atribuição Das Acções para Five PDBs Após adicionar um novo
A CPU mínimo garantido para cada APO é automaticamente recalculado com base no novo total
número de ações. Cada APO com uma partes agora recebe 14,29 por cento dos recursos da CPU, eo
recursos de CPU disponíveis (no mínimo) para o BI PDB estão agora 42,86 por cento.
Exercício 33-3: Criação de um Plano de CDB Resource com as Directivas PDB Neste exercício,
você um
criar vai plano de recursos CDB para o recipiente CDB01 e definir diretrizes do plano para duas das
na CDB.
PDBs
2. Criar um plano de recursos que administra a ferramenta e CCREPOS PDBs para minimizar
CPUoutro
e uso de recursos.
3. Criar uma directiva plano que dá PDBs ações diferentes. Neste, os PDBs chamado TOOL e
CCREPOS ter seráuma partilha
de 75 cada um. O limite de utilização para a ferramenta deve ser de 50
por cento.
por cento, e para
Em outras palavras, o plano de recursos migraram deve ser compatível com um novo plano de
segue
recursos
as regras
PDBdaque
seção anterior. Se o plano viola qualquer uma dessas condições, o plano é
convertido durante a operação de encaixe para um plano que é compatível com um APO. Este plano
pode ser
inadequados; você pode soltar, modificar ou criar um novo plano de recursos. O plano original é
salva em
DBA_RSRC_PLAN_DIRECTIVES com a coluna STATUS tendo um valor de legado.
Execute o Database Replay
A funcionalidade Database Replay a partir anteriores Oracle Database lançamentos também foi
no Oracle Database 12 c para incluir replays de carga de trabalho simultâneas como uma ferramenta
aprimorada
de planejamento
como para estimar
vários não-CDBs irá realizar em um ambiente CDB. Você pode levar cargas de trabalho de
a partir de vários servidores em um ambiente não-CDB e reproduzi-los em várias configurações em
produção
único novo servidor para simular o quão bem eles pudessem coexistir em um ambiente multitenant.
um
Você também pode analisar PDBs e cargas de trabalho de captura existente para ver como eles
PDBiriam atuarCDB
de outro comoem
umum servidor diferente. As etapas gerais que você vai seguir como parte desta
fase são como se segue:
análise
No servidor de banco de dados de origem, você vai capturar a carga de trabalho para um típico
de 8 horas
período. ou 24
Você vai horastodas as cargas de trabalho capturados para cobrir o mesmo período de
querer
realização
tempo. Para
conjuntos dooptimizar
de teste de repetição,
afinação. o você pode, opcionalmente, instantâneos de exportação AWR, perfis
SQL e SQL
As cargas de trabalho de processos no sistema de destino
Depois de importar o banco de dados candidato em um PDB do novo CDB, você importar a carga de
trabalho
gerado no servidor de origem. Você pré-processar os arquivos de carga de trabalho em preparação
paraprecisa
que o replay,
acontecer apenas uma vez para cada carga de trabalho importado. É recomendado que
você reproduzir
carga de trabalhocada
importado individualmente para garantir que não existem variações extremas no
em comparação com o desempenho desse banco de dados no servidor original.
desempenho
Broca Two-Minute
Gerenciar Permanente e espaços de tabela temporários em CDB e PDBs
• O comando CREATE TABLESPACE cria uma tabela cuja visibilidade é limitada à
recipiente em que foi criado, quer o CDB ou qualquer um dos PDBs.
• Usar ASM e OMF para espaços de tabela em um ambiente multitenant mantém
automaticamente
arquivos de dados para cada APO em um diretório separado para facilitar a manutenção.
• Cada APO pode ter seu próprio padrão de tabela permanente e tabela temporário ou
grupo tabela temporário.
Auto teste
1 . Você está conectado a um banco de dados pluggable como SYSDBA ea necessidade de criar
um arquivo de dados. Qual
vista irá mostrar-lhe todos os arquivos de dados que já existem no banco de dados
recipiente? (Escolha o
melhor resposta.)
A. DBA_DATA_FILES.
B. CDB_DATA_FILES.
C. V $ DATAFILE.
D. Quando ligada a um recipiente de conector, que não é possível ver todos os arquivos de
dados
CDB.
no
2 . Numa base de dados de vários usuários, que de tabela que faz parte do recipiente de raiz
podesessões
ser usado
ligada
poraos recipientes conectáveis? (Escolha a melhor resposta.)
A. O espaço de tabela permanente padrão.
B. A tabela temporário padrão.
C. A tabela desfazer.
D. Nenhuma tabela que faz parte do recipiente de raiz pode ser utilizado por sessões ligados
a recipientes conectáveis.
3 . Estudar este trecho de código:
Após a execução desses comandos, o que pode ser dito sobre o usuário C ## JW?
A. O utilizador só existe no recipiente de raiz.
B. O usuário existe na raiz e todos os recipientes conectáveis mas só pode conectar para a
raiz.
C. O utilizador existe na raiz e todos os recipientes passíveis de ligação e pode conectar-se a
raizrecipientes
e para todos conectáveis.
D. O usuário não será capaz de fazer login para um recipiente pluggable até a sua senha foi
definido no recipiente conectável.
4 . Qual dos seguintes comandos GRANT, executados no recipiente raiz, vai dar o
usuário comum C ## RWR a capacidade de acessar qualquer tabela em todos os PDBs e da
recipiente? (Escolha a melhor resposta.)
raiz
A. concessão selecionar qualquer tabela para c ## recipiente RWR = corrente;
B. grant selecionar qualquer tabela para c ## recipiente RWR = all;
C. grant selecionar qualquer tabela para c ## RWR;
D. grant selecionar qualquer tabela para c ## recipiente RWR = cdb $ raiz;
5 . Qual das seguintes afirmações é incorretas sobre papéis locais e comuns?
A. papéis comuns podem ser concedidos aos papéis locais.
B. papéis locais podem ser concedidos a papéis comuns.
C. papéis comuns podem ser concedidos apenas para usuários comuns.
D. papéis locais podem ser concedidos aos usuários locais ou comuns.
6 . Qual das seguintes são referentes correta multitenant (CDB e PDB) e RMAN?
(Escolha todos os que se aplicam.)
A. Você pode fazer backup do controlfile somente quando conectado ao recipiente raiz.
B. backups Tablespace pode incluir vários espaços de tabelas de diferentes PDBs.
C. PDBs pode ser apoiada individualmente única ligando para o alvo APO no RMAN.
D. Você pode impor a divisão da responsabilidade pela concessão do SYSBACKUP
privilégio
usuários locais dentro PDBs individuais.
E. privilégio O SYSBACKUP pode ser concedida comumente, para um usuário comum.
7 . RMAN está configurado para autobackup do controlfile e spfile. Você pode executar toda
uma dePDB
backup com RMAN como este:
Pouco tempo depois, você perde todas as cópias do controlfile. Considere estes passos:
Conectar um para cada recipiente e abri-lo com RESETLOGS.
2 ligar aos ccrepos recipiente conectáveis.
3 Ligar ao recipiente raiz.
4 Abra o banco de dados com RESETLOGS.
5 abertas recipientes todos conectáveis.
6 Restaure o controlfile de autobackup.
7 Recuperar o banco de dados.
8 Inicie a instância CDB no modo nomount.
O que é um curso correto de ação a seguir?
A. 8, 2, 6, 3, 7, 1
B. 2, 8, 6, 7, 1
C. 8, 2, 6, 7, 3, 4, 5
D. 8, 6, 7, 4, 5
8 . Identificar as instruções corretas sobre parâmetros de inicialização em um ambiente
multitenant.
(Escolha todos os que se aplicam.)
A. Um subconjunto de parâmetros definidos no nível do recipiente pode ser substituído no
nível APO.
B. bancos de dados plugáveis podem ter parâmetros que não podem ser definidas no nível
do recipiente.
C. Desligar uma APO e colocá-lo de volta para a mesma base de dados recipiente preserva
o parâmetros customizados definidos no APO.
D. desconectar um APO e colocá-lo em uma base de dados recipiente diferente preserva o
parâmetros customizados definidos no APO.
9 . Qual das seguintes é verdadeiro sobre a alocação de recursos entre PDBs em um CDB?
(Escolher
a melhor resposta.)
A. Usando um plano de alocação mínima, as ações alocadas a um PDB evitar que outros
PDBs
usando
de essas ações, mesmo que o PDB não está ocupado.
B. Usando nenhum plano de recursos em um ambiente CDB é o padrão e permite PDBs
competir
igualmente para todos os recursos.
C. Em um esquema de alocação mínima / máxima, a APO ainda pode passar por cima da
outrossePDBs
máxima estão ocupados.
nenhum
D. A quantidade “share” é a porcentagem de recursos globais que a APO pode usar dentro
do CDB.
E. O plano de atribuição hierárquico dá alguns usuários em um PDB uma prioridade maior
do que
outra
osPDB.
usuários de
10 . Você está conectando um não-CDB em um banco de dados de recipiente, e os não-CDB tem
várias
planos de recursos. Qual das seguintes condições invalida o recurso importado
plano? (Escolha a melhor resposta.)
A. O plano original tem 12 grupos de consumidores.
B. As alocações de recursos estão em apenas o primeiro nível.
C. O plano de recursos importados tem o mesmo nome de um plano de recursos existente.
D. O plano de recursos importados já tem um status de legado.
E. O recurso directiva plano PARALLEL_SERVER_LIMIT é maior do que o valor do
CDB PARALLEL_MAX_SERVERS de parâmetros de inicialização.
F. O número de ações no plano de recurso original é mais do que a totalidade das ações de
todos
PDBs já no recipiente.
11 . Ao executar uma repetição carga de trabalho consolidada, qual das seguintes etapas são
opcionais
ao exportar ou importar a carga de trabalho para os bancos de dados que são candidatos à
consolidação multitenant?
A. Exportação AWR instantâneos de cada banco de dados candidato
B. conjuntos de ajuste Exportação SQL do banco de dados candidato
C. Captura e exportação da carga de trabalho para um banco de dados candidato
D. Criando uma programação repetição
E. Criação de uma APO para cada banco de dados
Respostas de auto-teste
1. D . Quando a ligação a um recipiente de conector, o alcance de todos os pontos de vista
é limitada a essa
recipiente.
A , B , e C são incorrectas. A está incorreta porque vistas DBA mostrar apenas as linhas
pararelevantes
o recipiente actual. B e C são incorrecta porque a V $ e vistas CDB irá mostrar o
imagem completa somente quando conectado ao recipiente raiz.
2. C . A tabela de undo é administrada a partir do recipiente de raiz e utilizado por todas as
em todos
sessões
os recipientes.
A , B , e D são incorrectas. Nenhum dos espaços de tabela do contêiner raiz, com
a tabela
exceção
de undo,
de são visíveis para qualquer APO.
3. B . O usuário terá sido criado como um usuário comum em cada recipiente, mas a
concessão
o papel é eficazde
apenas para o recipiente local, que é a raiz.
A , C , e D estão incorrectos. A está incorreta porque todos os usuários criados na raiz
são comuns. C está incorreta porque a menos que a concessão é feita com os
usuários
recipientes = ALL é apenas local. D está incorreta porque a senha de um usuário comum
cláusula, a concessão
aé mesma
sempre em todos os recipientes.
4. B . A instrução GRANT deve incluir CONTAINER = ALL.
A , C , e D estão incorrectos. Um é incorrecta porque a especificação RECIPIENTE =
CORRENTE
dá privilégios apenas para RWR C ## no recipiente atual. C é incorrecta porque, sem um
Palavra-chave CONTAINER, o privilégio é concedido localmente. D é incorrecta porque os
Recipiente devem ser atuais ou a todas; você não pode especificar um recipiente PDB ou
valores
nome.
raiz
5. C . Papéis comuns podem ser concedidos a usuários comuns ou locais.
A , B , e D são incorrectas. Eles são todas as atribuições de função válidos, local ou
paracomum,
usuários ou papéis locais ou comuns.
6. B , D , e E . Quando conectado ao recipiente raiz, a sintaxe RMAN permite especificar
quaisquer espaços de tabelas a partir de qualquer recipiente. O privilégio SYSBACKUP
podeusuário
um ser concedida
comum normalmente
ou localmentepara
a um usuário local.
A e C são incorrectas. O controlfile pode ser feito a partir de qualquer recipiente, e um
podeAPO
ser acompanhada quer do interior da APO ou a partir da raiz.
7. D . Esta sequência irá executar a recuperação completa de todos os recipientes.
A , B , e C são incorrectas. O controlfile restauração pode ser feito apenas no modo
nomount,
quando apenas o recipiente raiz está disponível. O RESETLOGS aberto é executado a partir
edaaplica-se
raiz a todos os recipientes.
8. A , C , e D . Quando você cria um APO, ele automaticamente herda todos os parâmetros
o nível
emCDB. Um subconjunto de parâmetros podem ser ajustados ao nível da APO. Os
valores destes
persistir mesmoparâmetros
se o APO está desligado e ligado de volta para o mesmo ou outro recipiente.
B está incorreta porque não há parâmetros ao nível do APO que não existem no
nível CDB.
9. B . A alocação de recursos padrão em um CDB é nenhum. Um PDB pode usar todos
CDB
Recursos.
A , C , D , e E são incorrectas. A está incorreta porque um APO pode usar todas as
restantes
recursos em um CDB, mesmo se outro PDB com um maior número de ações não está ativo.
C é
incorreto porque a APO não pode exceder o número máximo de ações mesmo que nenhum
outro
PDBs estão ocupados. D está incorreta porque as ações são quantidades de recursos relativos
e não
percentagens. E é incorreta porque não existe tal plano de alocação de recursos em camadas
PDBs em um ambiente multitenant, embora o Gerenciador de recursos pode controle de
através
uso entre os usuários em um único APO.
recursos
10. Um . Quando a importação de um não-CDB e colocá-lo em um APO de um recipiente
(CDB),
existente
quaisquer planos existentes Resource Manager não deve ter mais de oito grupos de
consumidores,
devem estar todos no nível 1, e não deve ter subplanos.
B , C , D , E , e F são incorrectas. B está incorreta porque os planos de recursos
existentes
importação serábem com apenas um nível. C está incorreta porque os planos de recursos
muito
são qualificados
com o nome PDB, e, portanto, não há nenhum conflito de nome. D está incorreta porque um
não-CDB
plano de recursos
de nunca terá um status de LEGACY uma vez que apenas PDBs pode ter
importado
recurso planos com esse status. E é incorreta porque um plano de recurso existente não CDB
não terá uma directiva plano de PARALLEL_SERVER_LIMIT, que é válido somente em
um
ambiente multitenant. F está incorreta porque um não-CDB não terá um plano de recursos
com uma directiva ação.
11. A e B . Você não precisa de exportar snapshots AWR e conjuntos de ajuste de SQL a
partir
bancos de da fontemas seria útil ao ajustar as cargas de trabalho combinadas no alvo CDB.
dados,
C , D , e E são incorrectas. C está incorreta porque você não pode usar base de dados
consolidada
Repetição em um servidor de destino sem uma captura de carga de trabalho. D está incorreta
porquedevocê
capaz reproduzir
não seráas cargas de trabalho de lado-a-lado no novo CDB sem a programação
configurada.
E é incorreta porque cada banco de dados candidato deve ser convertido (se necessário) e
para o novo CDB como um APO para testar a carga de trabalho consolidada.
ligado
Apêndice
Sobre o download
Este e-book inclui software exame de prática total Tester. O software total Tester pode ser
baixado e instalado em qualquer XP / Vista / 7/8 computador com Windows e deve ser instalado
para
os exames
o acesso
de prática total testador.
Para baixar o Tester Total, basta clicar no link abaixo e siga as instruções para livre
registro online.
http://www.totalsem.com/0071828079dl
Requisitos de sistema
O software requer o Windows XP ou superior; grande lançamento atual ou anteriores do Google
Chrome,Explorer
Internet Firefox, ou Safari; e 30 MB de espaço em disco para instalação completa.
Suporte técnico
Para questões relacionadas com o download do software total Tester ou o funcionamento do Tester
Software, visite www.totalsem.com ou e-mail support@totalsem.com .
total
Para questões relacionadas com o conteúdo de e-book, envie um e-mail
Paracustomer.service@mheducation.com
os clientes fora dos Estados Unidos,.e-mail international_cs@mheducation.com .
Glossário
ADDM Diagnostic Monitor Automatic Database. Uma ferramenta que gera relatórios de ajuste de
desempenho
baseado em instantâneos no AWR.
ADR Repositório Automático de Diagnóstico. Local padrão para o log de alerta, arquivos de
rastreamento,úteis
informações e outros
para a detecção de avarias.
pseudônimo
(1) No Oracle SQL, um nome alternativo para uma tabela, uma vista, ou um conjunto de
No Oracle
dados
Net,
utilizados
um ponteiro
em uma
paraconsulta.
uma string
(2)de conexão. Um alias deve ser resolvido para o
endereço
e o nome de um ouvinte
serviço ou instância.
AMM Gerenciamento automático de memória. A técnica para permitir que a Oracle controle total
sobre edimensionamento
SGA PGA estruturas.
ANSI American National Standards Institute. Um corpo dos EUA que define uma série de normas
relevantes para a computação.
ARBn processos de fundo que realizam movimento extensão entre discos em uma Automatic
Storage
Gestão de grupo de disco (ASM).
ASA Segment Advisor automático. Uma ferramenta de aconselhamento Oracle que pode
recomendar
índices) que segmentos
são candidatos
(tabelas
paraou
a redução de segmento.
ASCII American Standard Code Information Interchange. Um padrão (com muitas variações) para
codificação letras e outros caracteres como bytes.
ASH Active Session History. A categoria de informações no AWR que registra detalhes da sessão
atividade.
ASM Automatic Storage Management. Um LVM fornecido com o banco de dados Oracle.
asmcmd um utilitário de linha de comando utilizado para consultar e manter objectos num grupo de
discos ASM.
ASMM Gerenciamento Automático da Memória Compartilhada. A técnica para permitir que a
sobre
Oracledimensionamento
controle total de estruturas PIG.
ASSM Gerenciamento do Espaço Segmento automática. O método de gestão de espaço dentro dos
segmentos
uso por
de bitmaps.
processo de fundo Um processo que faz parte da instância que é lançado na inicialização.
BFILE Um tipo de dados objeto grande que é armazenado como um arquivo do sistema
operacional.
coluna é um ponteiro
O valor na
para
tabela
o arquivo.
vincular variável Um valor passado de um processo do usuário para uma instrução SQL em tempo
de execução de instrução.
BLOB objeto binário grande. Um tipo de dados LOB para dados binários, como fotografias e clipes
de vídeo.
bloquear As unidades de armazenamento em que os arquivos de dados são formatados. O tamanho
pode ser32KB
16KB, 2KB,ou
4KB,
64KB.8KB,
BMR Bloco Recovery Media. Uma técnica RMAN para a restauração e a recuperação do indivíduo
blocos de dados, em vez de arquivos de dados completos.
Produto cartesiano Às vezes chamada de junção cruzada. Um termo matemático que se refere ao
conjunto
criada multiplicando
de dados as linhas a partir de duas ou mais tabelas.
CDB_xxx vê vistas dicionário de dados que incluem metadados em todos os recipientes num
base de dados. Semelhante às vistas DBA_xxx correspondentes mas tem uma coluna adicional para
contentor
identificar qual o recipiente esta linha se aplica.
CON_ID
CDB $ ROOT O container raiz em um ambiente multitenant. Todos os outros bancos de dados
conectáveis
os compartilhar
recursos definidos no CDB $ ROOT.
CET tempo Central Europeu. Um fuso horário utilizado em grande parte da Europa (embora não
Grã-Bretanha),
uma hora antes que
do UTC,
é com horário de verão em vigor durante os meses de verão.
restrição de verificação Uma regra simples aplicada pelo banco de dados que restringe os valores
que podem
entrou em uma
ser coluna.
checkpoint Um evento que força o DBW n escrever buffers sujos do cache de buffer de banco de
dados
os arquivos de dados.
Ckpt processo de verificação. O processo de fundo responsável pela gravação do redo atual
byte de endereço-o ponto no tempo até que o DBW n tem escrito mudado blocos de dados no disco
de pontos de controlo de sinalização, o que obriga o DBW n para escrever blocos alterados no disco
e-
imediatamente.
arquitetura cliente-servidor Um paradigma de processamento onde o aplicativo é dividido em
software que interage com o software do usuário e servidor que interage com os dados.
cliente
CLOB Character objeto grande. Um tipo de dados LOB para dados de caracteres, tais como
documentos
no texto, armazenados
conjunto de caracteres de banco de dados.
coluna Um elemento de uma linha; mesas são estruturas bidimensionais, dividida horizontalmente
eem
verticalmente
linhas em colunas.
perfil comum Um perfil de banco de dados que existe para todos os bancos de dados conectáveis
atuais e futuras em um
CDB.
papel comum Um papel de base de dados que é definida no recipiente de raiz e, por conseguinte,
propagada para
containers. papéis
todos
comuns devem ser prefixados (por padrão) com C ## e pode ser concedida
“normalmente”
um utilizador comum
para em todos os recipientes ou localmente para ter efeito apenas no recipiente
corrente.
comum utilizador conta de utilizador numa base de dados Um recipiente (CDB) que existe em
todos de
bases os conectável
dados (PDB) em uma base de dados do recipiente. O mesmo usuário pode ter diferentes
privilégioscomuns
Usuários em cadanão
APO.
mantidos por Oracle devem ser prefixados com (por padrão) C ##.
recuperação completa Após uma restauração de arquivos de banco de dados danificados, uma
recuperação
refazer açõescompleta
para atualizar
aplica-se
o banco
a todos
de dados sem perda de dados.
função de conexão Um papel preseeded retido apenas por compatibilidade com versões anteriores.
seqüência de conexão Os detalhes da conexão do banco de dados necessários para estabelecer uma
sessão,
do ouvinte
ou seja,
e do onome
endereço
do serviço ou da instância.
restrição Um mecanismo para garantir que um valor de coluna deve ser exclusivo ou pode conter
certos valores. Uma restrição de chave primária especifica que a coluna deve ser única e não nula.
apenas
banco de dados de contêiner Um banco de dados em um ambiente multitenante que hospeda zero,
um ou mais
bancos de dados
plugável
(PDBs). Ele sempre hospedará o recipiente da raiz e o recipiente de sementes.
controlfile O arquivo que contém ponteiros para o resto do banco de dados, informações de
eseqüência crítica,
o repositório RMAN.
CTWR Change Tracking Writer. O processo de fundo opcional que registra os endereços de
modificou os blocos para permitir backups incrementais rápidos.
dicionário de dados As tabelas pertencentes ao SYS no tablespace SYSTEM que definem o banco
de objetos
os dados e dentro dele.
visualizações de dicionário de dados Exibições nas tabelas de dicionário de dados que permitem ao
DBA
o investigar
banco o estado de
de dados.
Data Guard Uma facilidade através da qual uma cópia do banco de dados de produção é criada e
atualizada
em tempo real)
(possivelmente
com todas as alterações aplicadas ao banco de dados de produção.
Bomba de dados Uma instalação para transferir grandes quantidades de dados em alta velocidade
para, fora
bancos de ou
dados.
entre
cache de buffer de banco de dados Uma área de memória no SGA usada para trabalhar em blocos
copiados de
arquivos de dados.
gatilho de evento de banco de dados Um bloco de código de programa Oracle que dispara quando
um evento de banco de dados específico
ocorre como inicialização, desligamento ou algum outro evento de todo o banco de dados. Os
disparadores
foi aprimorado deno
eventos
OracledeDatabase
banco de12dados têm
c para automatizar a abertura de bancos de dados conectáveis
quando
O recipiente
a raiz(CDB) é iniciado.
link de banco de dados Uma conexão de um banco de dados para outro, com base em um nome de
usuário easenha
Conecte string.e um
Replay do banco de dados Um recurso de monitoramento Oracle que pode ajudar a avaliar a
mudança
em um sistema
no desempenho
de teste, capturando a carga de trabalho em um servidor de produção e reproduzindo
asistema
carga de
de teste. em um
trabalho
Administrador do banco de dados DBA . A pessoa responsável por criar e gerenciar bancos de dados
-Esse poderia ser você.
Oracle
Função DBA Um papel preseeded para compatibilidade com versões anteriores que inclui todos os
precisava gerenciar um banco de dados, exceto aqueles necessários para iniciar e desligar.
privilégios
DBCA O Assistente de Configuração do Banco de Dados. Uma ferramenta GUI para criar,
modificar e descartar
instâncias bancos de dados.
Identificador do banco de dados DBID . Um número exclusivo para cada banco de dados, visível na
coluna
V DBID do visão de desempenho dinâmico.
$ DATABASE
DBWn ou DBWR The Database Writer. O processo de fundo responsável pela escrita mudou
blocos do cache do buffer do banco de dados para os arquivos de dados. Uma instância pode ter até
100 bases de
Processos do dados
escritor: DBW0-DBW9, DBWa-DBWz e BW36-BW99.
Idioma de definição de dados DDL . O subconjunto de comandos SQL que alteram definições de
objeto
o dentrode dados: CREATE, ALTER, DROP e TRUNCATE.
dicionário
impasse Uma situação em que duas sessões se bloqueiam, de modo que nenhuma delas pode fazer
Os deadlocks são detectados e resolvidos automaticamente.
nada.
DECODE Uma função que implementa a lógica condicional if-then-else testando dois termos para
igualdade e devolvendo o terceiro termo se forem iguais ou, opcionalmente, retornando outro termo
se eles
não são.
sujo tampão Um tampão na memória cache do banco de dados que contém uma cópia de um bloco
de dados que
atualizado e ainda
tenhanão
sidoescrito de volta para o arquivo de dados.
DML Data Manipulation Language. Os comandos SQL que alteram dados no banco de dados:
INSERT, UPDATE, DELETE e MERGE.
DMnn dados da bomba processo mestre. O processo que controla a bomba de dados trabalho de um
lançado para cada trabalho que está sendo executado.
será
DNS Domain Name System. O mecanismo de TCP para a resolução de nomes de rede em endereços
IP.
domínio O conjunto de valores de um atributo é permitido tomar. Terminologia: as tabelas têm
linhas
tem e linhas
colunas com valores. Alternativamente, as relações têm tuplas, e tuplas tem atributos com
tirada de seu domínio.
valores
DSS sistema de apoio à decisão. Um banco de dados, tais como um armazém de dados, otimizado
para
ao invés
consultas
de trabalho
em execução
OLTP.
DWnn processo The Worker Data Pump. Haverá um ou mais destes lançado para cada dados
Bombear trabalho que está sendo executado.
Easy Connect Um método para estabelecer uma sessão contra um banco de dados, especificando o
endereço
o ouvinte em
e o nome do serviço, sem o uso de um alias Oracle Net.
EBCDIC estendido Binary Coded Decimal Código Interchange. Um padrão desenvolvido pela IBM
codificação letras e outros caracteres em bytes.
para
variável de ambiente Uma variável definida no shell do sistema operacional que pode ser usado
pelo aplicativo
software e por scripts shell.
tabela de fatos A tabela central em um esquema em estrela, com colunas para valores relevantes
para a linha
colunas usadas
e como chaves estrangeiras para as tabelas de dimensão.
backup incremental rápido Um backup incremental que usa um arquivo de controle de alterações
bloco parablocos
só mudou identificar
desde o último backup.
FGA auditoria de grão fino. Uma facilidade para rastrear o acesso do usuário aos dados, com base
nas linhas
visto ou manipulado.
que são
Dados de recapitulação Arquivo Um objecto de recipiente base de dados, que retém os dados
históricos
objetos banco
parade
umdados,
ou mais
por um período de retenção especificado.
Banco de Dados Flashback Uma característica flashback que recupera todo o banco de dados para
um pontousando
passado no tempo no
Flashback Database logs.
Logs de Flashback de Banco de Dados Mudou blocos de banco de dados que são armazenados na
área depara
usado recuperação
Flashbackrápida
Database.
e
Flashback Largar Uma característica flashback que torna mais fácil para recuperar caiu mesas se
eles ainda
lixeira de um
estão
espaço
em de tabela.
Flashback Query Um recurso que permite visualizar uma ou mais linhas em uma tabela em um
tempo no passado.
flashback
Flashback Tabela uma retrospectiva de consulta que se recupera uma única tabela e seus objectos
associados
ponto a umque passou.
no tempo
fraturado bloco bloco de banco de dados A que é, simultaneamente, ser lido por uma cópia do
sistema operacional
comando e modificado pelo processo DBWR.
backup completo Um backup contendo todos os blocos dos arquivos de backup, e não apenas os
blocosoalterados
desde último backup.
GMT Greenwich. Agora conhecido como UTC, este é o fuso horário do meridiano através
Observatório de Greenwich, em Londres.
Grid Computing Uma arquitetura onde a entrega de um serviço para os usuários finais não está
vinculadodoa servidor,
recursos certa mas podem ser fornecidos a partir de qualquer lugar em um pool de recursos.
GUI interface gráfica. Uma camada de um aplicativo que permite aos usuários trabalhar com o
através de um terminal gráfico, tal como um PC com um rato.
aplicativo
HTTP Hypertext Transfer Protocol. O protocolo que permite que a World Wide Web (ambos
inventados
da Organização Europeia para a Pesquisa Nuclear em 1989); este é um protocolo em camadas que
corre /ao
TCP IP.longo
HWM marca de alta água. Este é o último bloco de um segmento que já foi utilizada; blocos acima
isso são parte do segmento, mas ainda não está formatado para uso.
backup incremental de backup A contendo apenas blocos que foram alterados desde o último
foi feito.
backup
INITCAP uma função que aceita uma cadeia de caracteres e retorna cada palavra em caso de título.
junção interna Quando equijoins e nonequijoins são realizadas, as linhas das tabelas de origem e de
destino
são correspondidos. Estes são referidos como junta interior.
-INSTRUÇOÑES Uma função que devolve a localização posicionai de uma ocorrência de uma
sequência especificada
caracteres em uma seqüência
de de origem.
I / O de entrada / saída. A atividade de leitura ou gravação de discos, muitas vezes o ponto mais
lento de um
operação de conjunto
processamento,
de dados
porque é a parte mais lenta de hardware quando comparado com o CPU
eRAM.
IOT Índice organizado mesa. Um tipo de tabela em que as linhas são armazenados nos blocos de
folhas de um índice
segmento.
trabalho Uma linha em uma tabela programador que especifica o que fazer e quando fazê-lo. “O
que” pode
única ser um
instrução SQL, um bloco PL / SQL, um procedimento PL / SQL armazenado, um
procedimento armazenado Java, uma
classe de emprego Um objeto programador que é usado para associar um ou mais trabalhos com um
Gestorde
grupo deconsumidores
Recursos e para controlar os níveis de registo.
juntar-se o processo de conexão linhas em tabelas diferentes, com base em valores de colunas
comuns.
Cadastre-se ... ON Uma cláusula que permite a especificação explícita de se juntar colunas,
independentemente
os nomes das colunas.
da Isto
sua fornece um formato juntar flexível.
Cadastre-se ... Usando uma sintaxe que permite a junção natural a ser formado em colunas
específicas com compartilhada
nomes.
JVM Java Virtual Machine. O ambiente de tempo de execução necessários para a execução de
código
A escrito
Oracle emum
fornece Java.
JVM dentro do banco de dados, e haverá um fornecido pelo seu sistema
operacional.
piscina grande estrutura de memória Um dentro do SGA usado por certos processos, como,
processos servidores compartilhados e servidores de execução paralela.
principalmente,
LAST_DAY A função utilizada para obter o último dia em um mês dado qualquer item data válida.
COMPRIMENTO Uma função que calcula o número de caracteres em uma cadeia, incluindo
espaços e especiais.
caracteres
nível 0 backup incremental Um backup completo RMAN que pode ser usado como base para um
estratégia de backup.
incremental
nível 1 cumulativo backup incremental Um RMAN backup de todos os blocos alterados desde a
nível 0 backup incremental.
última
nível 1 diferencial backup incremental Um RMAN backup de todos os blocos alterados desde a
nível 0 nível 1 backup incremental.
última
LGWR Writer O Log. O processo de fundo responsável por vetores de mudança lavagem,
proveniente
buffer da
na memória de registro para os arquivos de log redo online no disco.
cache de biblioteca A estrutura de memória dentro da piscina comum, usado para declarações cache
SQLsua
em analisado
forma executável.
trabalho leve Job Scheduler A que tem muitas das mesmas características de um trabalho padrão,
que um trabalho leve é ideal para a execução de muitos postos de trabalho de curta duração que são
exceto
executados com freqüência.
LISTAGG Uma função que retorna uma cadeia de agregação de valores da coluna.
ouvinte O processo do lado do servidor que escuta para solicitações de conexão de banco de dados
edelança
processos de usuário
processos de servidor para estabelecer sessões.
LOB objeto grande. Uma estrutura de dados que é muito grande para armazenar dentro de uma
tabela. tipos)
vários LOBssão
(suportes
definidos
da Oracle
como colunas de uma mesa, mas fisicamente são armazenadas em um
segmento separado.
privilégios locais Um privilégio de sistema ou objeto concedido a um usuário local e é, portanto, em
vigorutilizador
esse para em apenas um único recipiente.
perfil local perfil de banco de dados A que existe apenas em um único APO e pode ser atribuído
apenas para locais
Comercial.
papel locais função de banco de Um que é criado em um único APO e concedido a um usuário local
e, portanto,
está disponível para esse utilizador em apenas um recipiente.
utilizador local conta de usuário A que é criado e existe apenas em um banco de dados pluggable
(PDB). A raiz
recipiente (CDB $ ROOT) não pode ter usuários locais, somente os usuários comuns.
Locale Builder uma ferramenta gráfica que pode criar um ambiente de globalização personalizado
gerar definições para idiomas, territórios, conjuntos de caracteres e classificação linguística.
log switch A ação de fechar um grupo arquivo de log on-line e abrir outro: tipicamente
pelo processo de enchimento LGWR o grupo corrente.
desencadeada
backup lógico Um backup que lê um conjunto de linhas de banco de dados e escreve-los para um
arquivo ou
sistema no para
operacional
outro espaço de tabela.
LREG O processo de fundo responsável por registrar os serviços de banco de dados com o ouvinte.
LRU menos utilizados recentemente. Listas de LRU são usados para gerenciar o acesso a estruturas
de dados,
que garantir
usando
que os
algoritmos
dados que não tenha sido acessada por mais tempo são os dados que serão
substituídos.
LVM Logical Volume Manager. Uma camada de software que abstrai o armazenamento físico
dentro de seua partir do armazenamento lógico visível para uma aplicação.
computador
Mman The Memory processo de fundo Manager, que monitora e reatribui memória
alocações no SGA para componentes do SGA automaticamente ajustável.
MML mídia camada de gerenciamento. Software que permite RMAN fazer uso de bibliotecas de
fitasother
and automatizadas
SBT devices.
MMNL Gerenciamento Luz Monitor. O processo de fundo responsável por dados rubor ASH
ao AWR se MMON não está fazendo isso com a frequência necessária.
MOD A operação de módulo, uma função que devolve o resto de uma operação de divisão.
MONTHS_BETWEEN Uma função que calcula o número de meses entre duas data indicada
parâmetros.
montado
refazer base arquivos
on-line de dadosde
situação
log ou Um exemplo
arquivos onde o abriu o controlfile base de dados, mas não o
de dados.
MTBF MTBF. Uma medida da duração média de tempo de execução para um banco de dados
entre paradas não planejadas.
MTS servidor multithread. Desde o lançamento 9 i , renomeado para servidor compartilhado. Esta é
a técnica
em que um grande número de sessões pode compartilhar uma pequena piscina de processos do
servidor,
um servidor
em cada.
vez de exigir
TMPR tempo para recuperar média. O tempo médio que leva para fazer o banco de dados
disponível
usar após uma
parafalha.
o normal
arquitetura multitenant Uma arquitetura que hospeda muitos bancos de dados lógicos dentro de
um maiorbanco de dados para usar de forma mais eficiente os recursos do servidor, como memória,
instância
CPU e I / O.
namespace Um agrupamento lógico de objetos dentro do qual há dois objetos podem ter o mesmo
nome.
junção natural uma junção realizada utilizando o NATURAL JOIN sintaxe quando as tabelas de
origem
são e de destinoequijoined usando todas as colunas com nomes idênticos.
implicitamente
NCLOB caráter nacional objeto grande. Um tipo de dados LOB para dados de caracteres, como
documentos, armazenados no conjunto de caracteres de banco de dados nacional alternativa.
texto
NLS suporte ao idioma nacional. A capacidade do banco de dados Oracle para suportar muitos
geográficas, culturais e ambientes de agora geralmente referidos como globalização.
linguística,
não CDB Um banco de dados stand-alone que não usa a arquitetura multitenant. O não-CDB
arquitetura era o único tipo de arquitetura disponíveis antes do lançamento 12.
nonequijoin realizada quando os valores nas colunas de associação cumprir a condição de junção
com base em uma
expressão desigualdade.
nulo A ausência de um valor, que indica que o valor não é conhecido, em falta, ou inaplicáveis.
NULLIF Uma função que testa dois termos de igualdade. Se forem iguais, a função retorna null;
outro
ele retorna o primeiro dos dois termos testados.
NVL Uma função que retorna ou o item original inalterado ou um item alternativa, se o inicial
prazo é nulo.
NVL2 Uma função que retorna um novo item se nula se o item original é nulo ou uma alternativa se-
ponto nulo se o termo original não é nulo.
não-
OC4J Oracle Containers for Java. A estrutura de controle fornecido pela Oracle Application Server
para a execução de programas Java. Ainda suportado, mas substituído pelo servidor WebLogic.
OCA Oracle Certified Associate. Você precisa passar por dois exames de conseguir isso: um sobre
SQL, na
outro os administração básica DB.
OCI do Oracle Call Interface. Uma API, publicado como um conjunto de bibliotecas C, que os
programadores
escrever processos
podem
de usuários
utilizar para
que irão utilizar um banco de dados Oracle.
OCM do Oracle Certified Master. A qualificação em última análise, você está trabalhando.
ODBC Open
bancos de Database
dados Connectivity.
relacionais. A OracleUm padrão
fornece umdesenvolvido
driver ODBCpela
queMicrosoft para
irá permitir queseoscomunicar
clientes
com
executando
produtos para
o Microsoft
conectar a um banco de dados Oracle.
OLAP processamento analítico online. Select, trabalho intensivo que envolve consultas em
execução contra
(Geralmente) umde dados grande. A Oracle fornece capacidades OLAP como uma opção além do
base
instalações de consulta.
padrão
OLTP processamento de transações on-line. Um padrão de actividade dentro de uma base de dados
caracterizado
número de transações
por umapequenas,
grande curtas.
on-line redo log Os arquivos a que mudam vetores são transmitidos pelo LGWR.
OS sistema operacional. Normalmente, no ambiente Oracle esta será uma versão do Unix (talvez
Linux) ou Microsoft Windows.
associação externa uma junção executada quando as linhas, que não são recuperadas por uma
junção interna, são incluídos para
recuperação.
paralelização usando vários escravo processos gerenciados por um único processo coordenador para
consultas ou operações DML em paralelo em várias CPUs e canais de I / O em simultâneo.
executar
backups RMAN tirar proveito do paralelismo através da atribuição de múltiplos canais e melhorar a
cópia de segurança
desempenho com a execução pedaços particionados de I / O em paralelo.
analisar Para converter instruções SQL em uma forma adequada para a execução.
APO $ SEED Um só de leitura da base de dados de conector dentro de um recipiente de raiz (CDB),
utilizado
criar novos
como
PDBs
umdentro
modelodapara
CDB.
PFILE um arquivo contendo os parâmetros de inicialização baseados em texto e valores iniciais que
sãoOracle
A definidas
instância
quandoé iniciado.
um
PGA Programa Global Area. O bloco de tamanho variável de memória usada para manter o estado
de um de banco de dados. PGAs são privados para a sessão e controlado por processo servidor da
sessão
sessão.
PL / SQL Procedural Language / Structured Query Language. Programação proprietária da Oracle
linguagem, que combina construções processuais, tais como controle de fluxo, e capacidades de
interface
com a capacidade
de usuário
de chamar instruções SQL.
projecção A restrição das colunas seleccionadas a partir de uma tabela. Usando projeção, você
recuperardesomente
colunas interessease não cada coluna possível.
RAC Cluster aplicação real. Tecnologia de cluster da Oracle, que permite que vários casos em
máquinas diferentes para abrir o mesmo banco de dados para escalabilidade, desempenho e
tolerância a falhas.
RAID matriz redundante de discos de baixo custo. Técnicas para melhorar o desempenho ou culpa
tolerância usando um gerenciador de volume para apresentar uma série de discos físicos para o
sistema
um único
operacional
disco lógico.
como
RAM memória de acesso aleatório. Os chips que compõem a memória real no seu hardware de
em oposição à memória virtual apresentado ao software pelo sistema operacional.
computador,
RDBMS sistema de gerenciamento de banco de dados relacional. Muitas vezes usado como
sinônimo de DBMS.
catálogo de recuperação objetos em um esquema de banco de dados que contêm metadados e
outrasbackups
para informações
RMAN dede
backup
um ou mais bancos de dados.
janela de recuperação parâmetro Um RMAN e período de tempo que define o quão longe de volta
no tempo
base de dados
a pode ser recuperado.
integridade referencial uma regra definida em uma tabela que especifica que os valores de uma
coluna
deve (ou colunas)
mapear para aqueles de uma linha em outra tabela.
relação Uma estrutura bidimensional que consiste de tuplos com atributos (também conhecido como
uma tabela).
SUBSTITUIR A função que substitui cada ocorrência de um item de pesquisa na seqüência de
origemdecom
prazo substituição
um e retorna a string de origem modificado.
alocação de espaço resumable Uma característica Oracle que suspende em vez de terminar grande
banco de dados
operações que exigem mais espaço em disco que está atualmente disponível. Uma operação pode ser
reiniciado de onde ele terminou fora em um momento posterior, quando os problemas de espaço
suspenso
foram
Ele economiza
resolvidos.
tempo.
política de retenção O número de cópias de todos os objetos que o RMAN reter para fins de
recuperação.
RMAN Recovery Manager. Ferramenta de backup e recuperação do Oracle.
container raiz A estrutura de controle (nomeado CDB $ ROOT) em um banco de dados contêiner
que hospeda
bases de dados conectáveis. Todos os parâmetros de inicialização são definidas no recipiente raiz e
são herdadas
cada banco depor
dados pluggable menos que seja substituído. Apenas um subconjunto menor de
parâmetrospode
recipiente definidos
ser mudado
na raizem um banco de dados pluggable juntamente com a tabela temporário
padrão.
rowid O identificador exclusivo de todas as linhas na base de dados, utilizada como um indicador
para
da linha.
a localização física
RVWR a recuperação processo de fundo Writer. Um processo opcional responsável por liberar o
recapitulação de tampão aos registos de recapitulação.
SBT de backup do sistema para fita. Um termo RMAN para um dispositivo de fita.
SCN número de alteração do sistema. O número aumentando continuamente usado para controlar a
sequência
hora exata ede todos os eventos dentro de um banco de dados.
recipiente semente também conhecido como o banco de dados de semente num ambiente de vários
éusuários.
um exemplo
O recipiente
especialsemente
de um banco de dados pluggable chamado APO $ SEED, é sempre só de
leitura,
um modelo
e é usado
para criar
comoum novo banco de dados pluggable no recipiente raiz atual.
segmento Um objecto da base de dados dentro de um esquema que contém um objecto de dados (tal
como uma tabela ou índice).
segmento encolher Uma operação de banco de dados que faz com que o espaço livre em um
segmento àna
segmentos disposição
tabela pordos
compactação
outros e libertando os blocos de dados não utilizados vazias num
segmento.
selecção A extração de linhas de uma tabela. Selecção inclui ainda a restrição do
linhas extraídos com base em vários critérios ou condições. Isto permite-lhe obter apenas as linhas
são de interesse e não a cada linha na tabela.
que
auto-se juntar uma junção necessária quando as colunas de união são originários da mesma tabela.
Conceitualmente,
tabela de origem éoduplicado, e uma tabela de destino é criado. A auto-se juntar, em seguida,
funciona
entre duascomo
tabelas
umdistintas.
regular juntar
sequenciar Um objecto da base de dados dentro de um esquema que gera números únicos.
serviço de nomear um nome lógico registrado por uma instância com um ouvinte, que pode ser
especificado
processo de usuário
por umquando se emite um pedido de conexão.
SGA Sistema Global Area. O bloco de memória compartilhada que contém as estruturas de memória
que
tornar-se uma instância Oracle.
compartilhar uma parte dos recursos concedidos a um único APO. Cada APO terá pelo menos uma
ação,
o totalede recursos disponíveis para um APO são baseados na proporção das ações do PDB com o
número
das açõestotal
atribuídas a todos PDBs dentro de um CDB.
compartilhado objeto um objeto criado no recipiente raiz que está disponível para todos os PDBs
atuais
no recipiente.
e novosusuários comuns Só a Oracle-fornecidos (como SYS e SYSTEM) podem criar
compartilhada
objetos.
SID identificador do sistema. O nome de uma instância, que deve ser único no computador a
está sendo executado.
instância
Alternativamente, identificador de sessão. O número usado para identificar exclusivamente uma
instância
sessãoOracle.
conectado a uma
SMON O Monitor do sistema. O processo fundo responsável pela abertura e uma base de dados
monitorando a instância.
spfile O arquivo de parâmetro de servidor, que contém os parâmetros utilizados para construir uma
instância em
memória.
SQL Structured Query Language. Uma linguagem de padrão internacional para extrair dados de e
manipular dados em bases de dados relacionais.
SQL Tuning Advisor um oráculo conselheiro que realiza análise estatística, análise de SQL do
análise caminho de acesso, e a análise da estrutura.
perfil,
SSL Secure Sockets Layer. Um padrão para assegurar a transmissão de dados usando criptografia,
checksumming, e certificados digitais.
SUBSTR Uma função que extrai e retorna um segmento de uma dada cadeia de origem.
SUM Uma função que retorna um total agregado de todos os valores numéricos de expressão não
nulos numa
grupo.
SYSASM Um privilégio de sistema em uma instância ASM que facilita a separação de banco de
administração e a administração de armazenamento.
dados
sysdba O privilégio que permite que um usuário se conectar com o sistema operacional ou a
eautenticação de arquivo
criar ou iniciar de senha
e encerrar um banco de dados.
Tabela Uma estrutura de armazenamento de dados bi-dimensional lógico, que consiste em fileiras e
colunas.
tablespace A estrutura lógica que abstrai o armazenamento de dados lógico em tabelas de dados
armazenamento em ficheiros de dados.
físico
TCP Transmission Control Protocol. Juntamente com o Protocolo Internet, TCP compõe o de
facto protocolo de comunicação padrão (TCP / IP) usado para a comunicação cliente-servidor
através
rede. de uma
tempfile O armazenamento físico que faz-se uma tabela temporária, utilizada para armazenar
segmentos.
temporariamente
TNS substrato transparente de rede. O coração do Oracle Net, TNS é uma camada proprietária
protocolo em execução no topo de qualquer protocolo de transporte de rede subjacente que você
escolher para usar-
provavelmente TCP / IP.
TO_CHAR Uma função que executa data-to-caráter e número de caracteres tipo de dados
conversões.
TO_DATE Uma função que transforma explicitamente itens de caracteres para valores de data.
TO_NUMBER Uma função que muda itens de caracteres em valores numéricos.
transação Uma unidade lógica de trabalho, que irá completar no total ou não em todos.
tupla Uma estrutura unidimensional consistindo de atributos (por outras palavras, uma linha).
UGA Global Area usuário. A parte do PGA armazenado no SGA para as sessões em execução
através compartilhada
servidores.
UI interface de usuário. A camada de uma aplicação que comunica com os utilizadores finais; hoje
em dia é
freqüentemente gráfica: a GUI.
recuperação gerenciados pelo usuário Usando ferramentas ou comandos fora do RMAN para
recuperar um banco de dados ou
tablespace.
UTC Tempo Universal Coordenado, anteriormente conhecido como Greenwich Mean Time (GMT).
UTChorário
fuso éo padrão global; Todos os outros se relacionam com ela como deslocamentos, à frente ou
atrás.
VARIANCE Uma função que retorna a distância a partir da média de cada número no conjunto.
backup de todo o banco de dados Um backup de banco de dados que inclui todos os arquivos de
dados mais o controlfile.
window Uma construção programador que estende o conceito de horários, dando a Oracle mais
em decidir quando para executar um trabalho dentro de um começo específico e começar a tempo
liberdade
apara
semana.
um único dia ou todos os dias
X Como em X-Windows, o ambiente gráfico padrão usado na maioria dos computadores, exceto
aqueles queWindows
Microsoft são executados
em vez disso.
XML Extensible Markup Language. Um padrão para intercâmbio de dados usando documentos,
onde os dos dados é definida por tags dentro do documento.
formato
Índice
Por favor, note que as ligações índice apontar a partir da edição impressa para início de página.
locais são em e-readers, e pode ser necessário para descer a página uma ou mais vezes depois de
aproximado
clicarchegar
para em umaolink
material indexado .
B
os processos de fundo, 374 , 386 -395
ARC n , 391
CKPT, 390
DBW n , 387 -388
exercício sobre, 392 -395
LGWR, 389
LREG, 391
Mman, 390 -391
MMNL, 390
MMON, 390
PMON, 386 -387
RECO, 392
SMON, 386
dois minutos de perfurar em, 403
backup e recuperação, 664 -684
modo archivelog, 672 -673, 676 -678
mecanismo de pontos de verificação, 668 -669
compressão usado em, 691 , 710
duplex, 705
paralelização, 844 -845
parâmetros básicos, 419 -420
compressão tabela de base, 491 , 492
ENTRE operador, 217 , 218 , 219 , 321
BFILE tipo de dados, 82
plataformas big-endian, 817
índices de bitmap, 95 -97
caixa preta, 242
Tipo de dados GOTA, 82
blocos, 379 , 398 , 471 -472
corrupção de, 765 -769, 772 -773
áreas de cabeçalho e de dados em, 475
recuperação de mídia para, 766 -769
Operadores booleanos, 214 , 222 -224, 225
E operador, 222 -223
NÃO operador, 223 -224
Operador OU, 223
de bootstrap, ASM, 42
Índices de árvore B *, 93 -95, 97
memória tampão do cache, 146 , 379 -380, 598 , 943
tampões
sujo, 380 , 668 -669
flashback, 801 -802, 805
log, 380 -381, 422 , 598 , 599
memória, 602 -604
C
estimativas de cardinalidade, 606
Produtos cartesianos, 304 , 307 -308, 331 -333, 335
funções de conversão caso, 243 -245
exercer sobre o uso, 244 -245
INITCAP, 244
INFERIOR, 243 -244
SUPERIOR, 244
Expressão CASE, 271 -273
sensibilidade caso, 206 -207
catálogo, o RMAN, 687 , 696 -699
CDBs. Veja bancos de dados de contêineres
Comando CHANGE, 708
D
dados
agrupamento de, 287 -292
migração, 859 , 860 -862
movendo-se de, 546 , 548 -554
normalização das, 189 , 192 -193
monitoramento de desempenho, 593 -594
metadados da tabela e, 187
visualizações para compreender, 109
gerenciamento de concorrência de dados
exercício sobre como trabalhar com, 172 -173
mecanismo de bloqueio e, 164 -173
linguagem de definição de dados. Veja os comandos DDL
dicionário, de dados 16 , 17 , 186 -187, 376 , 400 -401
cache de dicionário de dados, 383
Data Guard, 377
Data Manipulation Language. Veja os comandos DML
modelagem de dados, 190
Data Pump, 133 , 546 , 554 -565
arquitetura, 554 -555
capacidades de, 556
utilitários de linha de comando, 556 -557
exercer sobre o uso, 560 -561
interruptor de suspensão trabalho, 497
migração de dados utilizando, 860 -862, 908
ambientes multitenant e, 561 -565
transporte de tabela, 557 -560, 818
dois minutos de perfurar em, 566 -567
Data Recovery Advisor (DRA), 579-580, 769-771
exercício sobre a utilização, 771
identificar falhas com, 769 -770
E
Resolução de nomes Easy Connect, 455
possibilitando
auditoria, 534 -536
papéis, 524 -525
backups criptografados, 834 -837
F
falhas
bloco de corrupção, 765 -769, 772 -773
categorias de, 664 -665
diagnóstico, 756 -765, 769 -770
login, 527
Veja também erros
ligações rápidas intra-CDB, 891
Área de Recuperação Rápida (FRA), 665 , 804
configuração de, 675 -676, 678 -679
logs de flashback usando, 803
interruptor rápido, 732
sistema alimentador, 552
FETCH cláusula, 228
Parâmetro FILESPERSET, 845 , 846
Grão fino Auditoria (FGA), 531 -532
primeira forma normal (1FN), 192
a área de recuperação de flash, 707
tampão de recapitulação, 801 -802
Flashback Data Archive (FBDA), 780 , 799 -801
Flashback Database, 778 , 801 -808
arquitetura, 801 -803
Configurando, 803 -804
exercer sobre o uso, 807 -808
método para a utilização de, 805 -806
monitorização, 804 -805
RMAN e, 807
G
GoldenGate, Oracle, 377
concessão
privilégios, 517 , 518 -519, 521 -522
papéis, 522 -523
Infra-estrutura de rede (GI), 40 -64
arquitetura, 40 -41
Capacidade ASM, 40 , 41 -45
processo de instalação, 45 -51
processo de lançamento, 51
Instalação do Linux, 48 -50
A Oracle Reiniciar fornecida por, 56
questões de auto-teste / respostas sobre, 52 -54
H
aglomerados de hash, 84
botar técnica
Cláusula de junção,
HAVING, 294 93
-296
exercício sobre a utilização, 296
GROUP BY e, 294 , 296
dois minutos de perfurar em, 297
Eu
tempo ocioso, 634
if-then-else lógica, 266 , 270 , 271
imagem cópias, 730 -736
recuperação rápida usando, 731 -736
processo de recuperação de, 730
Backups RMAN para, 687
estratégia a utilizar, 730 -731
Constrangimentos PRIMÁRIO, 106
Palavra-chave IMEDIATA, 916
Modo de desligamento imediato, 428
impdp utilidade, 559 , 560
implícita cometer, 153
conversão implícita tipo de dados, 255 -257
a criação do índice implícito, 98
importador
a partir existente em novos PDBs, 563 -564
exportador transportável completo e, 564 -565
em não-CDB de PDBs, 564
em PDBs de não-CDB, 561 -563
espaços de tabela usando o Data Pump, 557 -561
EM operador, 217 , 219 -220, 351
Grupo redo log INACTIVO, 740 -742
Incident Manager, 761
incidentes, base de dados, 761 -762
recuperação incompleta, 724 , 727 -730, 744 -745
banco de dados de recapitulação vs, 803
a criação do ponto, 727 -728
J
Java Database Connectivity (JDBC), 75
Piscina Java, 384 , 598
Java Runtime Environment (JRE), 73
cadeias de trabalho, 652 , 657
classes de trabalho, 653 , 654 -655
Parâmetro job_queue_processes, 646
empregos
controle por tempo de execução, 633 -634
criar no Programador, 647 -648
priorizando no Scheduler, 653 -656
sistemas remotos usando, 653
auto-suficiente, 650
Cadastre cláusula ON, 307 , 315 -317, 319
exercer sobre o uso, 316 -317
auto-junções e, 321 -322
Cadastrar-se usando cláusula, 307 , 314 -315, 319
aderir, de conceito, 188 -189, 304
junta, 304 -339
nomes de coluna ambíguos e, 310 -311
ANSI sintaxe SQL para, 309 -310
cruzada, 304 , 307 -308, 331 -333
equijoins as, 304, 305, 319
interior, 304 , 305 -307, 319 , 325
Cadastre cláusula ON, 307 , 315 -317, 319 , 321 -322
Cadastrar-se usando cláusula, 307 , 314 -315, 319
NATURAL JOIN cláusula, 306 , 311 -314, 319
nonequijoins como, 304 , 305 , 319 -321
n-forma ou múltipla, 318 -319
Sintaxe Oracle para, 308 -309
exterior, 304 , 307 , 324 -330
auto-teste sobre o uso, 335 -339
autojunções como, 304 , 321 -324
dois minutos de perfurar em, 334 -335
tipos de, 305 -308
o
colunas de chave, 101
o
grandes tipos de objectos de dados, 82
grande piscina, 384 , 449 , 598
Função LAST_DAY, 253
Conexões LDAP, 75
Variável LD_LIBRARY_PATH, 69
LEFT OUTER JOIN cláusula, 325 -326
Função COMPRIMENTO, 245 -246
Nível 0 backups incrementais, 702
LGWR (escritor Log), 389 , 668
cache de biblioteca, 382 -383
Lightweight Directory Access Protocol (LDAP), 75 , 873
COMO operador, 217 , 218 , 220 -222
limitar os resultados da consulta, 214 -225
Operadores para booleanas, 222 -224
operadores de comparação para, 217 -222
regras de precedência para, 224 -225
dois minutos de perfurar em, 235
WHERE para, 214 -225
links, banco de dados, 461 -462
Linux OS
criação do esquema de demonstração on, 203 -204
a instalação da grade de Infra-estrutura em, 48 -50
instalar o Oracle Database em, 8 -9, 10 , 11 -12
lançando o DBCA on, 18
gestão da Oracle Restart em, 57
SQL * Plus em, 68 -70
suporte para Oracle Database on, 4
Comando FALHA LIST, 769 , 770
LISTAGG function, 286-287
Utilidade de controlo ouvinte, 452 -454
arquivo de configuração listener.ora, 452
ouvintes. Veja ouvintes de banco de dados
expressões literais, 211
plataformas little-endian, 817
LOB (objectos de grandes dimensões), 473
redes locais (LANs), 274
conexões de banco de dados locais, 443 -444
resolução de nomes de nomes local, 455 -456
privilégios locais, 932 -933
papéis locais, 933
M
nomes de máquina, 807
N
resolução de nomes, 444
Easy Connect, 455
nomeação local, 455 -456
utilidade para o ensaio, 457
espaços de nomes, objeto, 79 -80
nomenclatura / renomeação
objetos de esquema, 78 -79
tabelas com SQL * Plus, 792
tablespaces, 479 -480
suporte ao idioma nacional (NLS) parâmetros, 258
NATURAL JOIN cláusula, 306 , 311 -314, 319
junções naturais, 306 , 307 , 315 , 319 , 334
NCLOB tipo de dados, 82
funções aninhadas, 242
funções de grupo, 292
funções de uma única linha, 265 -266
loop aninhado técnica, 93
subconsultas aninhadas, 342
tabelas aninhadas, 473
Assistente de Configuração Net, 452 -455
Utilidade de controlo ouvinte, 452 -454
TNS_ADMIN variável de ambiente, 454 -455
Ferramenta Net Manager, 452 , 453
configuração da rede, 873
falha de rede, 664
modo de exportação de rede / importação, 860 , 861
network-attached storage (NAS) devices, 43, 44
networking. Veja Oracle Net
Função NEXT_DAY, 253
Pseudocoluna NEXTVAL, 117
Vista NLS_SESSION_PARAMETERS, 258
nenhum modo de montagem, 16 , 27
Modo noarchivelog, 672 , 688 -690
O
ligações entre objetos, 934
privilégios de objeto, 520 -521
estatísticas objeto, 604 -605, 606 , 608
objetos
categorização, 76 -81, 120
diretório, 546 -547
exercer sobre o uso, 80 -81
espaços de nomes para grupos de, 79 -80
nomeação de esquema, 78 -79
privilégios relacionados com, 520 -521
Scheduler, 647
e segmentos, 488 , 489
sinónimos de, 112 -115
tipos de, 76 -77
comandos obtool, 839 -840
OE esquema demonstração, 199 , 203
espaços de tabela off-line, 480 -481
Cláusula OFFSET, 227
Processo OHASD, 40
Naming Convention OMF, 6
linhas de uma só perna, 304
um-para-muitos relacionamentos, 191 , 194
um-para-um relacionamento, 191 , 194 , 470
arquivos de log redo
processos online, 396 672
e arquivadores, -397-673
configuração de, 673
protegendo, 670 -671
dois minutos de perfurar em, 678
tablespaces online, 480 -481
processamento de transações online (OLTP), 610
backups abertas, 687 -688
Modo de abertura, 427
autenticação do sistema operacional, 513 -514
grupos do sistema operacional, 10
operadores, 209
citações alternativa, 212
aritmética, 209 -210
booleano, 222 -224
comparação, 217 -222, 348 -349
concatenação, 211
P
script de atualização paralela, 875
paralelismo
backupset, 844 -845
limitar o grau de, 633
selecionar para upgrades, 873
Directiva PARALLEL_SERVER_LIMIT, 945 -946
arquivos de parâmetros, 16 , 399
inicialização, 28 -29, 416 -424
estática e dinâmica, 416 -417
parâmetros
básico, 419 -420
Q
consultas
ad hoc, 231
composto, 352 , 353 -361
flashback, 163 , 781 -791
limitantes linhas recuperadas por, 214 -225
lixeira, 797
repetido, 231
classificação linhas recuperadas por, 225 -229
desfazer retenção para, 162 -163
Veja também subqueries
filas
alerta, 581
comum, 448 -449
controlo, 554 -555
estado, 555
quiesce, 632 , 633
quotas, conta de usuário, 510 -511
R
Striping RAID / espelhamento, 44
comparação da faixa, 219
Parâmetro da taxa, 846
proporção método da CPU, 631
RAW tipo de dados, 81
legibilidade de instruções SQL, 208
leitura consistente de imagem, 155
somente leitura tablespaces
apoiando-se, 706
marcação de tabela como, 481 -482
Real Application Clusters (RAC), 40 , 160 , 377 , 583 , 911
RECO (Processo Recoverer), 392
RECUPERAR comando, 725
recuperação, 724 -753
CDB e APO, 940
completo, 724 , 725 -727
controlfile, 737 -738
cópia de imagem, 730 -736
incompleta, 724 , 727 -730
backup incremental, 730 -731
S
SAVEPOINT, 151
savepoints, transação, 151 , 152
subconsultas escalares, 342 , 348
valores escalares, 138 -139
Scheduler, 646 -660
arquitetura, 646 -647
exercícios sobre a utilização, 651 , 656
cadeias de emprego em, 652 , 657
criação, em trabalho, 647 -648
opções de login, 654 -655
objectos associados, 647
priorizando os trabalhos em, 653 -656, 657
programas usados na, 649
sistemas remotos e, 653 , 657
Resource Manager e, 647 , 651 , 653 -655
programações criadas em, 649 -650
empregos auto-suficientes em, 650
questões de auto-teste / respostas sobre, 658 -660
simplificando tarefas usando, 646 -651, 657
dois minutos de perfurar em, 657
Scheduler agente, 653
Papel SCHEDULER_ADMIN, 524
horários, 649 -650
esquema, 77 -78, 200 , 508
objetos de esquema, 78 -79
Palavra-chave SCOPE, 421
scripts
criação de banco de dados, 25 -30
transporte banco de dados, 821
atualização de banco de dados, 875
esquema de demonstração, 203 -204
atualização paralela, 875
Alta Disponibilidade, 40 , 50
sessões
activo, 632
Oracle Net, 443 -445
terminando ocioso, 634
AUTOCOMMIT SET ON comando, 153
Comando SET, 233
comparação conjunto, 219 -220
Comando DESCRIPTOGRAFIA SET, 837
Comando de encriptação SET, 837
operadores de conjunto, 352 -361
exemplos de complexos, 360 -361
consultas compostas e, 352 , 353 -361
exercer na descrição, 355 -356
princípios gerais de, 353 -355
Operador de intersecção, 353 , 358 -359
Operador MENOS, 353 , 359
auto-teste na, 363 -370
dois minutos de perfurar em, 362 -363
UNIÃO operador ALL, 352 , 355 , 356 -357, 358 , 361
UNIÃO operador, 352 , 357 -358
Procedimento SET_ATTRIBUTE, 654
Procedimento SET_THRESHOLD, 582
conjuntos e diagramas de Venn, 353 , 354
SGA. Veja System Global Area
SGA Advisor, 578 , 603
Parâmetro SGA_TARGET, 599 , 600
processos de sombra, 375
Modo de bloqueio SHARE, 167
COMPARTILHE ROW modo de bloqueio EXCLUSIVE, 167
bloqueios compartilhados, 165 -166, 167
piscina comum, 382 -384
cache de dicionário de dados, 383
cache de biblioteca, 382 -383
alocação de memória para, 598
mecanismo de cache de resultado, 383
dimensionamento, 384
servidor compartilhado, 446 -452
arquitetura, 447 -450
processo de configuração, 450
configuração padrão, 451 -452
T
alias de tabelas, 310
mesa de flashback, 783 -785
partições de tabela, 473
mesas, 84 -92
alterando definições para, 86 -87
compressão de base de, 491 , 492
especificações de coluna para, 84 -85
restrições para, 100 -107
criando simples, 84 -90, 120
soltando, 87 -88, 791 , 792 -793
exercer sobre a criação, 88 -90
externo, 552 -554
recapitulação para, 779 , 780 , 783 -785, 791 -798
gerando com subconsultas, 345
índices para, 92 -100
juntando, 304 -335
fechaduras utilizadas em, 165 -166
aninhados, 473
recuperação de cópias de segurança, 798 -799
restabeleçam a cair, 791 -798
modelos relacionais e, 190 , 197 -199
segmentos como estruturado-montão, 473
encolher operação para, 494 -496
Descrição estrutural de, 186 -188
criou-subconsulta, 85 -86
temporário, 90 -92, 121 , 929
truncando, 87
dois minutos de perfurar em, 120 -121
vistas para, 107 -115
de tabela, 400 , 476 -487
alterando, 479 -483
o
instalação udev, 45
Comando UNDEFINE, 232 -233
Desfazer Advisor, 158 , 579
desfazer dados, 154 -164
a configuração de retenção de, 162 -163
LMG e geração de, 154 -155
condições de erro relacionadas com, 156
explicação sobre geradora, 154 -155
Flashback Query e, 163 , 790 -791
monitorização e de administração, 155 , 156 -161
parâmetros para o gerenciamento, 156 -157
refazer dados distinto dos, 161
restringir a geração de, 635 -636
segmentos de desfazer temporárias e, 159
dois minutos de perfurar em, 174
desfazer espaços de tabela e, 157 -158, 159 -161
desfazer piscina, 635 -636
desfazer retenção
configuração de, 162 -163
Flashback Query e, 163
desfazer segmentos, 145 , 146 , 147 , 155 , 159 , 473
desfazer tablespaces
criar e gerenciar, 159 -160
condições de erro relacionadas com, 156
exercício sobre como trabalhar com, 160 -161
gestão de recursos para, 635
dimensionamento e monitorização, 157 -158
Parâmetro UNDO_MANAGEMENT, 155 , 156 , 157
UNDO_RETENTION parâmetro, 156 , 157 , 162 , 163
UNDO_TABLESPACE parâmetro, 156 , 157 , 160
UNDOTBS1 tabela, 28
auditoria unificada, 533 -534
permitindo, 535 -536
exercer sobre o uso, 536 -538
migrando a, 875 -876
ambiente multitenant, 937 -938
políticas para, 533 , 535 -536, 537
extensões de tamanho uniforme, 483 -484
UNIÃO operador ALL, 352 , 355 , 356 -357, 358 , 361
UNIÃO operador, 352 , 357 -358
restrições exclusivas, 101
índices únicos, 97
chaves únicas, 190
Universal Markup Language (UML), 190
Comando UPDATE, 136 -139
exercício sobre a utilização, 139
migração de linha e, 491
operações usando, 147 -148
WHERE e, 136 -137, 138 , 139
software de banco de dados atualização, 856 -862
migração de dados e, 859
DBUA vs métodos manuais para, 858
determinar o número de lançamento, 856 -857
Oracle Universal Installer para, 857 -858
questões de auto-teste / respostas sobre, 863 -865
em passos de processo, 859 -860
dois minutos de perfurar em, 862
atualizar bancos de dados Oracle, 868 -882
Database Upgrade Assistant para, 871 -874
manualmente usando scripts e ferramentas, 874 -875
migração para auditoria unificada, 875 -876
Oracle Data Vault e, 868
USUÁRIOS tabela
exercício em restaurar e recuperar, 726
recuperação incompleta para restaurar, 729 -730
Opção de comando para recuperar, 734 -736
Directiva UTILIZATION_LIMIT, 945 -946
V
V $ RECIPIENTES vista, 887 , 889 , 890
V $ vista DATABASE_BLOCK_CORRUPTION, 767 , 768
Visão V $ DIAG_INFO, 758
V vista $ INSTANCE, 432
V $ vista LOG, 739
Visão V $ pdbs, 889 , 890
V vista PROCESSO $, 646 , 841
V vista SESSÃO $, 169 , 841
Visão V $ SESSION_LONGOPS, 843
V $ SYSSTAT vista, 432
V vista $ TABLESPACE, 433
Visão V $ UNDOSTAT, 158
V $ vista VERSÃO, 856
auditoria baseada em valor, 532
VALORES palavra-chave, 134
VARCHAR2 tipo de dados, 81 , 83
variáveis
ambiente, 454 -455
substituição, 229 -232
determinação de desvio, 284 -285
Função de variância, 284 -285
vee dólar (V $) vistas, 432 -433
Diagramas de Venn, 353 , 354
VERIFICAR comando, 233 -234
versões flashback, 785 -787
vistas, 107 -115
alerta, 581
Data Recovery Advisor, 770
desempenho dinâmico, 432 -433, 841
exercício na criação, 112
Flashback Data Archive, 800
alocação de memória, 601
monitoramento de desempenho, 594
o
eventos de espera, 594
WHERE, 214 -225
operadores e booleanos, 222 -224
condições baseados em caracteres e, 215 -216
operadores de comparação e, 217 -222
condições com base em datas e, 216 -217
APAGAR comando e, 139
TENDO cláusula e, 293 -294
índices e, 92 -93, 95
condições baseada numéricos e, 215
regras de precedência para, 224 -225
restringindo resultados do grupo com, 293
Instrução SELECT e, 214 -217
subconsultas em, 342
Comando UPDATE e, 136 -137, 138 , 139
backups integrais, 688 , 690
caracteres universais, 220
grupos de janela, 653
janelas, Scheduler, 653 , 655 -656
Windows OS
criação do esquema de demonstração on, 204
a instalação da grade de Infra-estrutura em, 47 -48
instalar o Oracle Database em, 10 -11
lançando o DBCA on, 18
gestão da Oracle Restart em, 56 -57
SQL * Plus em, 70 -71
suporte para Oracle Database on, 4
repetições de cargas de trabalho, 949 -951