Escolar Documentos
Profissional Documentos
Cultura Documentos
APOSTILA DE
LABORATÓRIO DE
BANCO DE DADOS
Sumário
1 Comparativo entre Banco de Dados Relacional e Orientado a Objetos............................................5
2 Banco de dados orientado a objetos..................................................................................................5
História.............................................................................................................................................5
Adoção de Banco de Dados Orientado a Objetos............................................................................6
Recursos Técnicos...........................................................................................................................6
Vantagens e Desvantagens...............................................................................................................6
Padrões.............................................................................................................................................7
Referências e notas..........................................................................................................................8
3 Instalando o Banco de Dados............................................................................................................9
4 Oracle Arquitetura e Componentes.................................................................................................22
Estrutura de Memória....................................................................................................................25
Processos em Background.............................................................................................................26
Arquitetura - Estrutura Lógica e Física.........................................................................................26
Arquitetura Lógica:........................................................................................................................27
Principais Tablespaces...................................................................................................................33
Comandos para Manipulação de um Tablespace...........................................................................34
5 Inicializando e fechando um Database............................................................................................36
Opções de Startup..........................................................................................................................36
NOMOUNT...................................................................................................................................36
MOUNT.........................................................................................................................................37
OPEN.............................................................................................................................................37
Ativação.........................................................................................................................................38
Opções de Shutdown.....................................................................................................................39
Shutdown Abort.............................................................................................................................39
Shutdown Immediate.....................................................................................................................40
Shutdown Transactional.................................................................................................................40
Shutdown Normal..........................................................................................................................41
6 Funcionamento dos Online Redo LogFiles.....................................................................................42
Adicionando Grupos de Online RedoLog File..............................................................................42
Adicionando Membros a Grupos de Online Redo Log File..........................................................43
7 Criação de Usuários.........................................................................................................................45
Criando um usuário........................................................................................................................45
Privilégios de Sistema....................................................................................................................46
Concedendo privilégios de sistema................................................................................................46
O que é um Role............................................................................................................................47
Criando e atribuindo um role.........................................................................................................47
Alterando sua Senha......................................................................................................................48
Concedendo privilégios de objeto..................................................................................................49
A palavra-chave WITH GRANT OPTION....................................................................................52
A palavra-chave PUBLIC..............................................................................................................52
Confirmando privilégios Concedidos............................................................................................53
Revogando privilégios de objeto...................................................................................................54
Criando um Sinônimo para um objeto...........................................................................................55
Remoção de um Sinônimo.............................................................................................................56
8 O Dicionario de Dados Interno........................................................................................................59
Dicionário de dados Oracle ...........................................................................................................59
Objetivos:.......................................................................................................................................59
Visão Geral:...................................................................................................................................59
Usuários de Dicionário de dados...................................................................................................68
Consultando o Dicionário de dados...............................................................................................68
Classes de Visões...........................................................................................................................68
Visões adicionais............................................................................................................................69
Consultando o Dicionário de dados...............................................................................................69
Verificando constraints em uma tabela..........................................................................................71
9 Conexões de rede.............................................................................................................................74
Terminologias e Conceitos ............................................................................................................74
Terminologia e conceitos de conectividade..............................................................................74
Database Service (serviço de banco de dados): .......................................................................74
Service Name (nome do serviço)..............................................................................................74
Listener (ouvidor): ...................................................................................................................75
Modelos de configuração da rede Oracle......................................................................................75
Gerenciamento Local: ..............................................................................................................75
Gerenciamento Centralizado: ...................................................................................................75
Nomeação no Servidor (Host naming): ...................................................................................75
Nomeação Local (Local naming): ............................................................................................76
Nomeação em Diretório (Directory naming): ..........................................................................76
Oracle Names: ..........................................................................................................................76
Nomeação Externa: ..................................................................................................................76
ldap.ora: ....................................................................................................................................76
listener.ora: ...............................................................................................................................77
names.ora: ................................................................................................................................77
tnsnames.ora: ............................................................................................................................77
sqlnet.ora: .................................................................................................................................77
Configuração do lado servidor ......................................................................................................79
O processo ouvidor (listener).........................................................................................................79
Métodos de conexão......................................................................................................................79
Geração e transmissão de conexão:...............................................................................................79
Conexão direta através do despachante:...................................................................................80
Sessão de redirecionamento:..........................................................................................................81
Configurando o método de nomeação local(tnsnames.ora)...........................................................83
O arquivo tnsnames.ora.............................................................................................................83
O arquivo sqlnet.ora .................................................................................................................85
Solucionando problemas no lado cliente..................................................................................86
10 Objetos de um Banco de dados.....................................................................................................89
Criando Sequences........................................................................................................................89
Visão Geral:...............................................................................................................................89
Criando uma Sequence..............................................................................................................90
Confirmando sequences............................................................................................................91
Usando uma sequence...............................................................................................................92
Pseudocolunas NEXTVAL e CURRVAL..................................................................................92
Regras para usar NEXTVAL e CURRVAL...............................................................................92
Usando uma sequence...............................................................................................................93
Mantendo Valores de Sequence em Cache................................................................................93
Intervalos na sequence..............................................................................................................93
História
Os sistemas de gerenciamento de banco de dados orientado a objetos cresceram fora das pesquisas
durante o começo da metade dos anos 80, buscando ter sustentação intrínseca da gerência da base
de dados para objetos gráfico-estruturados. O termo “sistema de banco de dados orientado a
objetos” surgiu originalmente por volta de 1985. Projetos de pesquisa notáveis incluem Encore-
Ob/Server (Brown University), EXODUS (University of Wisconsin), IRIS (Hewlett-Packard), ODE
(Bell Labs), ORION (Microelectronics and Computer Technology Corporation or MCC), Vodak
(GMD-IPSI), e Zeitgeist (Texas Instruments). O projeto ORION teve mais artigos publicados do
que qualquer outro. Won Kim, do MCC, compilou os melhores destes artigos num livro publicado
pelo MIT Press.[1]
Surgiram produtos comerciais, como o GemStone (Servio Logic, alterado para GemStone Systems),
Gbase (Graphael), e Vbase (Ontologic). No começo da metade dos anos 90 vimos novos produtos
comerciais entrarem no mercado. Deste inclui-se ITASCA (Itasca Systems), Matisse (Matisse
Software), Objectivity/DB (Objectivity, Inc.), ObjectStore (Progress Software, adquirido pela
eXcelon, a qual era originalmente Object Design), ONTOS (Ontos, Inc., alterado para Ontologic),
O2[2] (O2 Technology, surgiu de várias companhias, adquirido pela Informix, qual por sua vez foi
adquirida pela IBM), POET (agora da FastObjects da Versant que adquiriu a Poet Systems), e
Versant Object Database (Versant Corporation). Alguns destes produtos se mantem no mercado,
tendo alguns se unido com novos produtos.
Os Sistema de Gerenciamento de Banco de Dados Orientados a Objetos adicionaram o conceito de
Persistência da programação orientada a objetos. No ínicio os produtos comerciais eram integrados
com várias linguagens GemStone (Smalltalk), Gbase (Lisp), e Vbase (COP). O COP era o C Object
Processor, uma linguagem proprietária baseada no C ( COP é diferente de C++. Apesar de ambas
terem C como base C++ também foi influenciada Pela Simula). Durante praticamente todos os anos
90, o C++ dominou o mercado comercial de Gerenciadores de Banco de Dados Orientados a
Objetos. Os vendedores acrescentaram o Java no final dos anos 90 e mais recentemente o C#.
Recursos Técnicos
Num banco de dados orientado a objetos puro, os dados são armazenados como objetos onde só
podem ser manipulados pelos métodos definidos pela classe de que estes objetos pertencem. Os
objetos são organizados numa hierarquia de tipos, e subtipos que recebem as características de seus
supertipos. Os objetos podem conter referências para outros objetos, e as aplicações podem
conseqüentemente acessar os dados requeridos usando um estilo de navegação de programação.
A maioria dos banco de dados também oferecem algum tipo de linguagem de consulta, permitindo
que os objetos sejam localizados por uma programação declarativa mais próxima. Isso é na área das
linguagens de consulta orientada a objetos, e a integração da consulta com a interface de navegação,
faz a grande diferença entre os produtos que são encontrados. Uma tentativa de padronização foi
feita pela ODMG (Object Data Management Group) com a OQL (Object Query Language).
O acesso aos dados pode ser rápido porque as junções são geralmente não necessárias (como numa
implementação tabular de uma base de dados relacional), isto é, porque um objeto pode ser obtido
diretamente sem busca, seguindo os ponteiros.
Outra área de variação entre os produtos é o modo que este schema do banco de dados é definido.
Uma característica geral, entretanto, é que a linguagem de programação e o schema do banco de
dados usam o mesmo modo de definição de tipos.
Aplicações multimídia são facilitadas porque os métodos de classe associados com os dados são
responsáveis pela correta reprodução.
Muitos banco de dados orientados a objetos oferecem suporte a versões. Um objeto pode ser visto
de todas as várias versões. Ainda, versões de objetos podem ser tratadas como objetos na versão
correta. Alguns banco de dados orientados a objetos ainda provem um suporte sistemático a triggers
e constraints que são as bases dos bancos ativos.
Vantagens e Desvantagens
Benchmarks entre ODBMSs e relacionais DBMSs tem mostrado que ODBMS podem ser
claramente superiores para certos tipos de tarefas. A principal razão para isto é que várias operações
são feitas utilizando interfaces navegacionais ao invés das relacionais, e o acesso navegacional é
geralmente implementado de forma muito eficientemente por ponteiros.[3]
Críticos das tecnologias baseadas em Bancos de Dados Navegacionais, como os ODBMS, sugerem
que as técnicas baseadas em ponteiros são otimizadas para “rotas de pesquisa” ou pontos de vista
muito específicos. Entretanto, para o propósito de consultas gerais a mesma informação, técnicas
baseadas em ponteiros tenderão a ser mais lentas e mais difíceis de se formular do que as
relacionais. Desta maneira, a abordagem navegacional parece simplificar para usos dos específicos
conhecidos às custas do uso geral, ignorando usos futuros.
Outra coisa que trabalha contra os ODBMS parece ser a perda da interoperabilidade com um grande
número de ferramentas/características que são tidas como certas no mundo SQL, incluindo a
indústria de padrões de conectividade, ferramentas de relatório, ferramentas de OLAP e backup, e
padrões de recuperação. Adicionalmente, banco de dados orientado a objetos perdem o fundamento
formal matemático, ao contrário do modelo relacional, e isto as vezes conduz a fraqueza na
sustentação da consulta. Entretanto esta objeção é descartada pelo fato que alguns ODBMSs
suportam totalmente o SQL em adição ao acesso navegacional (Objectivity/SQL++). Mas, o uso
eficaz pode requerer acordos para manter ambos os paradigmas sincronizados.
De fato há uma tensão intrínseca entre a noção de encapsulamento, que esconde os dados e somente
os disponibiliza através de uma interface de métodos publicados, e o presuposto de muitas
tecnologias de bancos de dados, de que estes dados podem ser acessados por consultas baseadas em
seu conteúdo ao invés de caminhos predefinidos. O pensamento centrado em bancos de dados tende
a ver o mundo através de forma declarativa e dirigida a uma visão de atributos, enquanto a OOP
tenta ver o mundo através um ponto de vista comportamental. Esta é uma das várias “perdas por
resistência” que envolvem OOP e banco de dados.
Embora alguns afirmem que a tecnologia de banco de dados orientado a objetos fracassou, os
argumentos essenciais em seu favor permanecem válidos, e as tentativas de integrar as
funcionalidades de bancos de dados mais próxima as linguagens de programação orientadas a
objeto continuam tanto nas comunidades de pesquisa quanto nas industriais.
Padrões
O ODMG (Object Database Management Group) era um consórcio de vendedores de banco de
dados orientados a objetos e mapeadores objeto-relacionais, membros da comunidade acadêmica, e
parceiros interessados. A meta era criar um conjunto de especificações que permitiriam a
portabilidade das aplicações que armazenam objetos em sistemas de gerenciamento de banco de
dados. Foram publicadas várias versões desta especificação. O último release foi a ODMG 3.0. Em
2001, a maioria dos principais vendedores de banco de dados orientado a objetos e mapeadores de
objeto-relacionais reivindicaram a conformidade com a ODMG Java Language Binding. A
conformidade com os demais componentes da especificação foi variada.[4] Em 2001, o ODMG
Java Language Binding foi submetido para o Java Community Process como base para a
especificação Java Data Objects. As companhias membras do ODMG decidiram então concentrar
esforços na especificação do Java Data Objects. Como resultado, a ODMG se dissolveu em 2001.
Várias idéias do banco de dados orientado a objetos foram absorvidas pela SQL:1999 e tem sido
implementadas em vários graus nos produtos de banco de dados objeto-relacional.
Em 2005 Cook, Rai e Rosenberger propuseram abandonar todos os esforços de padronização para
introduzir APIs adicionais de consulta orientadas a objetos e, ao invés disso, usar as próprias
linguagens orientadas a objetos, como o JAVA e o .NET. Como resultado surgiram as Consultas
Nativas (Native Queries). Similarmente, a Microsoft anunciou a LINQ (Language Integrated
Query) e DLINQ, uma implementação do LINQ, em setembro de 2005, para prover a aproximação
da capacidade da linguagem de consulta integrada do banco de dados com as linguagens de
programação C# e VB.NET 9.
Em fevereiro de 2006, o OMG (Object Management Group) anunciou que havia concedido o direito
de desenvolver novas especificações baseadas na especificação ODMG 3.0 e a formação do ODBT
WG (Object Database Technology Working Group). O ODBT WG planeja criar um conjunto de
especificações que incorporará avanços da tecnologia de banco de dados orientados a objetos (ex.
replicação), gerenciamento de dados (ex. indexação espacial) e formato de dados (ex. XML) e
incluir novas características dentro deste padrão que dará suporte ao dominios onde as bancos de
dados orientadas a objeto estão sendo adotadas (ex. sistemas de Tempo real).
Referências e notas
1. ↑ Kim, Won. Introduction to Object-Oriented Databases. The MIT Press, 1990. ISBN 0-
262-11124-1
2. ↑ Bancilhon, Francois; Delobel,Claude; and Kanellakis, Paris. Building an Object-Oriented
Database System: The Story of O2. Morgan Kaufmann Publishers, 1992. ISBN 1-55860-
169-4.
3. ↑ Animação mostrando como um banco de dados orientado a objetos funciona
4. ↑ Barry, Douglas and Duhl, Joshua. Object Storage Fact Books: Object DBMSs and Object-
Relational Mapping. Barry & Associates, Inc., 2001. A páginas exibe a conformidade da
ODMG para a os banco de dados orientados a objetos e os produtos objeto-relacionais em
2001
• “próximo”
• “próximo”
• “próximo”
• “próximo”
• “próximo”
• “próximo”
• “próximo”
• “instalar”
Tecle “sair”
Servidor Oracle
Terminais
Processo Servidor
Roda no servidor
Inclui uma única PGA
Serve a um único usuário
Inclui o OPI (Oracle Program Interface)
Retorna o resultado para os clientes
Processo Cliente
Roda na máquina do cliente
É invocado pelas aplicações dos usuários
Estrutura de Memória
SGA – System Global Área
A SGA é um grupo de buffers de memória compartilhados que são destinados pelo Oracle
para uma instância. Basicamente é formada pelas estruturas identificadas por shared pool, database
buffer cache e redo log buffer cache. Entretanto, em algumas configurações do Oracle podem existir
outras estruturas.
• Database Buffer Cache:Armazena em memória os blocos de dados recuperados do
banco de dados e é onde os dados são trabalhados. Esta é uma área importante para o
desempenho do BD, pois o correto dimensionamento minimizará gravações e leitura
em disco.
• Shared pool:
Divide-se em dois subcaches:
1. Biblioteca: para códigos SQL e PL/SQL;
2. Dicionário de dados.
• No cache de biblioteca, se um código consta no cache, a análise sintática e o
plano de execução serão aproveitados; se o código não consta no cache, os
procedimentos serão feitos e armazenados.
• No cache de dicionário de dados estão os metadados essenciais para o
funcionamento do BD (como os objetos e privilégios de usuários), estes ficam
armazenados num conjunto de tabelas possuídas pelos esquemas SYS e
SYSTEM.
• Redo log buffer cache: Aqui ficam as informações de redo antes de serem gravadas
no arquivo físico. Estas informações servem para recuperação da instância em caso
de falha. Além disso, um usuário só recebe retorno de sucesso em uma operação após
o redo ter sido gravado em disco.
Processos em Background
Arquitetura Lógica:
Database
Schema
Bloco de Dados (Data Block). O bloco de dados corresponde a um número especifico de bytes do
banco de dados para armazenado em disco. Sendo que esse valor é especificado durante a criação
do banco de dados, pelo parâmetro db_block_size. Então, o Oracle gerencia todo o espaço de
armazenamento nos arquivos de dados (datafiles) através dessas pequenas unidades chamado blocos
de dados, que carregam informações importantes como cabeçalho, diretório da tabela, diretório de
linha, dados de tabelas ou índices e espaço livre para inserções ou atualizações de dados.
Extensões(Extent)
As extensões são unidades lógicas de armazenamento composta por um conjunto de blocos
de dados, um ou mais extensões formam um segmento. As extensões são muito utilizadas para
definir a característica de armazenamento de algum objeto, como um tabela ou índice. Eles podem
influenciar muito na fragmentação de espaço ou ajudar a definir um bom plano de crescimento da
base de dados.
Segmentos (Segment)
Os segmentos são um conjunto de extensões que possui todos os dados necessários para uma
estrutura de armazenamento lógico, como as tablespaces.
Para cada tabela criada, o Oracle aloca um ou mais extensões para formar um segmento de
dados, assim, também podemos dizer que o Oracle aloca um ou mais extensões para formar um
segmento de índice.
Na figura acima, observamos que nosso bloco de dados em destaque é de 8KB, então
concluímos que no momento da criação do banco de dados, o parâmetro db_block_size é de 8192
Para cada datafile ou redo log que é adicionado, renomeado, modificado ou excluído
do banco de dados, o arquivo de controle é atualizado pelo Oracle Server para
garantir a modificação da estrutura física da base. Essas modificações podem ser:
• O Oracle pode identificar os datafiles e redo logs que foram abertos durante o
processo de startup.
• Identificar os arquivos que são necessários ou disponíveis em caso de
recuperação do banco de dados.
Portanto, para cada modificação na estrutura física do banco de dados, podendo ser
feita através do comando ALTER DATABASE, é altamente recomendado que seja
feito um backup do seu arquivo de controle para evitar possíveis problemas no
próximo processo de startup do banco de dados.
o Datafiles: arquivo onde são gravados os dados do usuário. As informações do usuário ficam
em uma estrutura lógica chamada tablespace que corresponde a um arquivo físico chamado
datafile, quando instalamos um servidor oracle ele já cria automaticamente algumas
tablespaces cada uma com seu datafile.
o Redo Log Files: A estrutura crucial para a recuperação de banco de dados é o conjunto de
redo log files. Este conjunto de arquivos é conhecido coletivamente como redo log do banco
de dados. O redo log é construído por um conjunto de entradas que são chamadas de redo
records.
A função primária do redo log é armazenar toda e qualquer mudança realizada nos dados do
banco de dados. Se houver alguma falha seja no servidor Oracle ou se algum dado for
alterado permanentemente no banco de dados às informações podem ser recuperadas
utilizando o redo log files.
O banco de dados grava os arquivos redo log files de forma circular. Isto significa que
quando o arquivo do redo log files atual fica cheio o banco de dados passa para o próximo
arquivo red file. Os redo log files que não estão sendo usados são chamados de inativos.
Quando o último arquivo do redo log file for preenchido o banco de dados volta para o
primeiro, apagando informações já existentes e continuando o ciclo.
Principais Tablespaces
Tablespace DataFiles Função
System SYSTEM01.DBF Armazenar o Dicionário de
Dados
Rollback UNDOTBS01.DBF Armazenar os dados para
Rollback
Temporary TEMP01.DBF Área para sort (ordenação)
User USERS01.DBF Área para tabela dos usuários
Indx INDX01.DBF Armazenar os índices das
tabelas
ORACLE_HOME – c:\oracle
C:\orawin9
o BIN – executáveis
o Database – Banco de Dados
o Network – configuração da rede
o Listener.ora
o SQLNET.ORA
o TNSNAMES.ora
Criação de um Tablespace
Remoção de um Tablespace
Falaremos agora dos estágios envolvidos na abertura de um banco de dados Oracle. São eles
NOMOUNT, MOUNT e OPEN. O que realmente cada um destes estágios realiza?
Apenas para relembrar, uma instância Oracle consiste na estrutura de memória SGA (System Global
Area) e nos processos de segundo plano como SMON, PMON, DBWn, LGWR, CKPT, entre outros
usados para gerenciar o banco dados. A instância só pode abrir e usar um banco de dados por vez.
Em resumo, um servidor Oracle consiste em uma instância Oracle (estruturas de memória e
processos) e um banco de dados Oracle (arquivos físicos).
Opções de Startup
NOMOUNT
Este estágio inicializa a instância sem montar o banco de dados. Isso significa que todas as
estruturas de memória e os processos de segundo plano estão posicionados, mas ainda sem ter um
banco de dados associado a essa instância. É através deste estágio que é possível criar um banco de
dados Oracle. Portanto, uma instância só deverá ser iniciada no estágio NOMOUNT durante a
criação do banco de dados ou na recriação de arquivos de controle (control files). Em resumo, a
inicialização de uma instância Oracle inclui as seguintes tarefas:
• Leitura do arquivo de inicialização SPFILE_.ora ou SPFILE.ora ou init.ora exatamente
nesta ordem porque, por padrão a partir do Oracle 9i, primeiro ele tenta abrir o spfile.ora, se
o arquivo não for encontrado ele tentará abrir o spfile.ora, se o mesmo não for encontrado
ele tentará ler o arquivo init.ora. Se o Oracle não encontrar nenhum arquivo de inicialização
ou se o DBA não fornecer um valor explícito para PFILE, a inicialização falhará. A
especificação do parâmetro PFILE com STARTUP sobrepõe o comportamento default.
• Alocação da SGA
• Inicialização dos processos de segundo plano
• Abertura do arquivo de alerta (ALERT_.ora) e dos arquivos de rastreamento
Observe que nem os arquivos de controle nem os arquivos de dados e redo log on-line estão abertos
neste estágio.
MOUNT
Após a instância já ter sido inicializada pelo estágio anterior, então é realizada a leitura do arquivo
de controle de modo a “associar” o banco de dados à instância já inicializada anteriormente. A
opção “startup mount” é muito útil em situações onde é necessário executar algumas operações
específicas de manutenção como renomeação de arquivos de dados, ativação e desativação de
opções de arquivamento de redo log (ARCHIVELOG) e operações de recuperação do banco de
dados. É importante salientar que se a instância já estiver inicializada “startup nomount”, mas o
banco não estiver montado, então será necessário utilizar o comando “alter database mount”.
Resumindo, montar o banco de dados inclui as tarefas a seguir:
• Associação do banco de dados a uma instância iniciada anteriormente
• Localização e abertura dos arquivos de controle (control files) especificados no arquivo de
inicialização
• Leitura dos arquivos de controle para obtenção dos nomes e status dos arquivos de dados
(data files) e arquivos de redo log on-line (log files)
É importante salientar que neste estágio não é verificada a existência dos arquivos de dados e
arquivos de redo log on-line, mas se os arquivos de controle não forem localizados conforme a
localização especificada no parâmetro CONTROL_FILES no arquivo de inicialização, então um
erro será retornado, o banco de dados não será montado e a instância permanecerá no estado
NOMOUNT. Se o DBA utilizar a opção “startup mount” para inicializar o Oracle e quiser abrir o
banco de dados, então será necessário utilizar o comando “alter database open”.
OPEN
Neste terceiro e último estágio, o banco de dados é disponibilizado para acesso dos usuários. A
operação normal de um banco de dados significa que uma instância é iniciada e o banco de dados é
montado e aberto. Portanto, qualquer usuário válido pode conectar ao banco de dados e executar
operações comuns de acesso a dados. Durante esse estágio final, o servidor Oracle verifica se é
possível abrir todos os arquivos de dados e arquivos de redo log on-line, além de verificar a
consistência do banco de dados onde neste caso, o processo de segundo plano SMON (System
Monitor) iniciará a recuperação da instância se necessário. Resumindo, a abertura do banco de
dados inclui as seguintes tarefas:
• Abertura dos arquivos de dados (data files)
• Abertura dos arquivos de redo log on-line (log files)
• Chama o processo SMON se necessário para a recuperação da instância em caso de uma
É importante salientar que se algum arquivo de dados ou arquivo de redo log on-line não estiver
presente, então o banco de dados não abrirá permanecendo no estado MOUNT e o servidor Oracle
retornará um erro.
Ativação
SQL> startup
Instância ORACLE iniciada.
Total System Global Area 188743680 bytes
Fixed Size 1286460 bytes
Variable Size 88084164 bytes
Database Buffers 96468992 bytes
Redo Buffers 2904064 bytes
Banco de dados montado.
Banco de dados aberto.
Desativação
SQL> shutdown
Banco de dados fechado.
Banco de dados desmontado.I
nstância ORACLE desativada.
Opções de Shutdown
Ao realizar um shutdown no banco de dados você deverá ter total conhecimento sobre opções
existentes para evitar problemas desnecessários.
Shutdown Abort
Evite ao máximo utilizar essa opção, pois, esse é o caso mais radical de derrubar o banco.
Shutdown Immediate
Ideal quando você precisa derrubar o banco e não pode esperar que as transações cheguem ao seu
fim.
- Realiza Checkpoint;
- Fecha os arquivos;
Shutdown Transactional
Ao utilizar essa opção o banco só irá ser fechado quando terminar a última transação que estiver em
processamento.
- Realiza Checkpoint;
- Fecha os arquivos;
Shutdown Normal
Se você utilizar essa opção o banco só será fechado quando todos os usuários que estiverem
conectados fecharem suas conexões. Isso acaba sendo inviável caso você precise realizar uma
manutenção urgente.
- Realiza Checkpoint;
- Fecha os arquivos;
Conclusão
Para realizar um Shutdown do Banco de Dados você precisa ter privilégio de DBA, conectar-se no
aplicativo SQLPlus e executar o comando:
SQL> shutdown ;
• Quando um online redo log file é preenchido, o processo LGWR utilizará o próximo grupo.
Os membros dos arquivos de redo são utilizados para espelhamento dos arquivos de
Redolog, propiciando assim maior segurança dos dados.
Para proteger os arquivos contra falha no disco, o Oracle suporta arquivos de Redo log
Multiplexado. Você pode manter uma cópia do arquivo em diferentes discos e o que é recomendado.
As cópias do arquivo de redo log mantidos em discos diferentes são chamados de arquivos de log
espelhados. Cada membro de cada grupo de arquivo de log tem um arquivo de log espelhado de um
mesmo tamanho.
7 Criação de Usuários
Criando um usuário
O DBA cria um novo usuário ORACLE Server ao alocar diversos privilégios de
sistema para aquele usuário. Esses privilégios, por sua vez, determinam o que o
usuário pode fazer no nível do banco de dados. O DBA cria o usuário ao executar o
comando CREATE USER. Neste momento o usuário não tem qualquer privilégio de
sistema.
Sintaxe:
CREATE USER user IDENTIFIED BY password;
Onde:
User é o nome do usuário a ser criado
Password especifica que o usuário deve fazer o login com sua senha.
Privilégios de Sistema
Depois de criar um usuário, o DBA pode conceder privilégios a ele.
O DBA usa o comando GRANT para alocar privilégios de sistema ao usuário. Uma
vez que o usuário receba os privilégios, poderá usá-los imediatamente.
Sintaxe:
GRANT privilege [, privilege] TO user [, user…];
Onde:
Privilege é o privilégio de sistema a ser concedido.
User é o nome do usuário.
O que é um Role
Um usuário pode ter acesso a vários roles e vários usuários podem ser designados ao
mesmo role. Geralmente os roles são criados para uma aplicação de banco de dados.
Primeiro o DBA deve criar o role. Então, ele pode designar privilégios e usuários a
ele.
Sintaxe:
Onde:
Role é o nome do role a ser criado.
Agora que o role esta criado, o DBA pode usar o comando GRANT para atribuir
usuários e privilégios a ele.
Exemplo:
Permissão para que os gerentes criem tabelas e visões. Conceder esses privilégios a
Velazques e a Rafhael.
SQL> CREATE ROLE manager;
SQL> GRANT create table, create view TO manager;
SQL> GRANT manager TO Velazques, Rafhael;
Quando o usuário é criado, ele recebe uma senha que é inicializada pelo DBA. Você
pode alterar sua senha usando o comando ALTER USER.
Sintaxe:
Onde:
User é o nome do usuário.
Password especifica a nova senha.
Nota: Embora este comando possa ser usado para alterar sua senha, há muitas outras
opções. Você deve ter o privilégio ALTER USER para alterar qualquer outra opção.
O DBA pode permitir que usuários realizem uma determinada ação em uma tabela,
visão, sequence ou procedure armazenada específica ao conceder a eles privilégios de
objeto. Os privilégios de objeto variam de objeto para objeto. A tabela abaixo
descreve os privilégios. Um proprietário de objeto tem todos os privilégios no objeto.
Para que outros usuários tenham acesso aos seus objetos de banco de dados, execute
o comando GRANT.
Objeto
ALTER X X
DELETE X X
EXECUTE X
INDEX X
INSERT X X
REFERENCES X
SELECT X X X X
UPDATE X X
Sintaxe:
GRANT {object_priv (,object_priv ...) | ALL} [(columns)] ON object
TO {user [,user ...] | role | PUBLIC}
[WITH GRANT OPTION];
onde:
Object_priv é um privilégio de objeto a ser concedido.
ALL todos os privilégios de objeto.
Regras Gerais:
• Para conceder privilégios para um objeto, este deve estar em seu próprio schema
ou você deve ter privilégios de objeto WITH GRANT OPTION.
• Um proprietário de objeto pode conceder privilégio de objeto para outro usuário
ou role de um banco de dados.
• O proprietário de um objeto adquire automaticamente todos os privilégios de
objeto sobre aquele objeto.
Exemplo:
Um privilégio que é concedido WITH GRANT OPTION pode ser passado para
outros usuários e roles pelo cessionário. Privilégios de objeto concedidos WITH
GRANT OPTION são revogados quando é revogado o privilégio do cessionário.
Exemplo:
Como usuário Alice, permitir que o usuário Scott acesse sua tabela empregado com
os privilégios para consultar a tabela e adicionar linhas à ela. Permissão para que
Scott conceda a outros esses privilégios.
A palavra-chave PUBLIC
Exemplo:
Como usuário Scott, permitir que todos os usuários do sistema consultem dados da
tabela departamento de Alice.
Se você receber a mensagem de erro “table or view does not exist”, do ORACLE
Server, é porque executou uma das seguintes situações:
• Nomeou uma tabela ou visão que não existe.
• Tentou fazer uma operação em uma tabela ou visão para a qual não tem o
privilégio apropriado.
Exemplo:
SQL> REVOKE select, insert ON departamento FROM Scott;
Para se referir à tabela pertencente a outro usuário, você precisa colocar um prefixo
no nome da tabela do usuário que a criou, seguida por um ponto final. Criar um
sinônimo elimina a necessidade de qualificar o nome do objeto com o schema e
fornece a você o nome alternativo para a tabela, visão, sequence, procedure ou outros
objetos. Este método pode ser especialmente útil em nomes longos de objetos, como
visões.
Sintaxe:
Onde:
Regras Gerais:
• O objeto não pode estar contido em uma package.
•Um nome de sinônimo privado deve ser distinto de todos os outros objetos
possuídos pelo mesmo usuário.
Exemplo:
Como usuário Scott, criar um sinônimo privado chamado dept para a tabela
departamento de Alice.
SQL> CREATE SYNONYM dept FOR Alice.departamento;
Exemplo:
Criação de um sinônimo para DEPARTAMENTO_TOTAL_VU para referência mais
rápida.
SQL> CREATE SYNONYM d_total FOR departamento_total_vu;
Remoção de um Sinônimo
Para eliminar um sinônimo, use o comando DROP SYNONYM. Apenas o DBA pode
eliminar um sinônimo público.
Exemplo:
SQL> DROP SYNONYM dept;
Regras de Negócio:
• Um condomínio é formado por diversas unidades habitacionais.
• Cada unidade habitacional pertence a um proprietário o qual pode ser
proprietário de várias unidades.
• Uma unidade pode estar alugada para um locatário.
• Um locatário pode alugar várias unidades.
• Cada unidade pode ou não estar alugada.
• Entre os locatários e proprietários um é síndico, sendo que uma pessoa não
pode ser síndica de mais de um condomínio.
• O condomínio é formado por: cod_condominio, cod_empresa_adm,
cgc_empresa_adm, nome_empresa_adm, conta_corrente_condominio.
• Os dados da Pessoa são: cod_pessoa, nome, sexo, endereço, telefone, cpf, rg,
data_nascimento, estado_civil, tipo_pessoa_ou_sindico.
• Os dados do locatário são: cod_pessoa, cod_avalista, nome_avalista,
conjuge_avalista, data_nasc_avalista, idade_avalista, valor_bens_avalista,
pessoa_contato_locatário.
• Os dados do Proprietário são: cod_pessoa, cod_banco, agência_bancária,
conta_bancária, herdeiro_principal_proprietário.
• Os dados das Unidades são: cod_unidade, tamanho, Nro_vagas_garagem, valor_aluguel,
bloco, quadra.
NOTA: Para este exercício ser executado é preciso criar os objetos do modelo do
condomínio.
Objetivos:
Visão Geral:
Tabelas Descrição
Tabelas de usuário Coleção de tabelas criadas e mantidas pelo usuário, como
EMP, contendo informações do usuário.
Tabelas de dados Coleção de tabela criadas e mantidas pelo Oracle, como
USER_OBJECTS, que contém informações sobre o
banco de dados.
VISÃO DESCRIÇÃO
2PC_NEIGHBORS(DBA_) Informa sobre conexões E/S para transações distribuídas
pendentes.
2PC_PENDING(DBA_) Informa sobre transações distribuídas pendentes.
AUDIT_EXISTS(DBA_) Entradas de trilha de auditoria pôr conta do Comando
AUDIT EXISTS
AUDIT_OBJECT(DBA_,USER_) Entradas de trilhas de auditoria para objetos do banco de
dados
AUDIT_SESSION(DBA_,USER_) Entradas de trilhas de auditoria concernentes a sessões
do banco de dados
AUDIT_STATEMENT(DBA_,USER_) Entradas de trilhas de auditoria para instruções auditadas
AUDIT_TRAIL(DBA_,USER_) Conjunto de todas as entradas de trilha de auditoria
BLOCKERS(DBA_) Sessões cujos bloqueios estão impedindo outras
transações de executar o trabalho. Veja visão relacionada
DBA_WAITERS
CATALOG(ALL_,DBA_,USER_,(CAT)) Informações sobre tabelas do banco de dados, visões,
sinônimos e seqüências
CLU_COLUMNS(DBA_,USER_) Relação de colunas de tabela para agrupar chaves
CLUSTER(DBA_,USER_ (CLU)) Informações sobre clusters indexados e de prova do banco
de dados
COL_COMMENTS(ALL_,DBA_,USER_) Comentários para colunas de tabelas e visões
COL_PRIVS(ALL_,DBA_,USER_) Informações sobre concessões em colunas específicas
COL_PRIVS_MADE (ALL_,USER_) Informações sobre concessões em colunas específicas
COL_PRIVS_RECD (ALL_,USER_) Informações sobre concessões recebidas em colunas
específicas
CONS_COLUMNS (ALL_,DBA_,USER_) Informações sobre colunas envolvidas em restrições de
integridade
CONSTRAINTS (ALL_,DBA_,USER_) Informações sobre restrições de integridade no banco de
dados
O dicionário de dados é uma referência para todos os usuários do banco de dados. Ele
é uma valiosa fonte de informações para usuários finais, projetistas de aplicações e
DBA´s. O dicionário de dados também é essencial para a operação do ORACLE
Server, pois o banco de dados faz uso dele para registrar e verificar informações
sobre si próprio.
Classes de Visões
Prefixo Descrição
USER_ Contém objetos pertencentes ao usuário. Por exemplo, visões com este
prefixo permitem que sejam exibidas informações sobre telas criadas
pelo usuário e privilégios concedidos por ele.
ALL_ Acessa objetos aos quais o usuário tem direitos de acesso, além de
objetos a ele pertencentes.
DBA_ Permite que usuários com privilégio DBA acessem qualquer objeto no
banco de dados.
V$ Exibe o desempenho e bloqueio do servidor do banco de dados.
Disponível inicialmente apenas ao DBA.
Visões adicionais
Diversas visões do dicionário de dados não usam os prefixos listados acima. Esses
incluem sinônimos para visões com nomes extensos.
Exemplo:
Exemplo:
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
Exemplo:
Para visualizar uma descrição de cada coluna nas tabelas e visões do dicionário de
dados, consulte a visão DICT_COLUMNS.
Exemplo:
Exemplo:
, owner,
or an enabled role or PUBLIC
is the grantee
Após criar uma tabela, você pode confirmar sua existência gerando um comando
DESCRIBE. A única constraint que você pode verificar é a NOT NULL. Para
visualizar todas as constraints em sua tabela, você pode verificar a tabela
USER_CONSTRAINTS.
Exemplo:
Exemplo:
CONSTRAINT_NAME COLUMN_NAME
-------------------- --------------------
FK_DEPTNO DEPTNO
PK_EMP EMPNO
4) Crie um script para executar uma consulta genérica que confirme as constraints
incluídas nas tabelas que você criou.
9 Conexões de rede
Terminologias e Conceitos
Veremos neste capítulo os conceitos e terminologias sobre conectividade e também uma introdução
aos arquivos de configuração da conexão com o banco de dados. Veremos os arquivos necessários
no lado cliente e também no lado servidor. Em um ambiente de testes, é possível fazer toda esta
configuração em uma máquina “stand alone”, possibilitando a você testar seus conhecimentos em
seu equipamento de estudo.
Para o cliente, um BD Oracle aparece como um serviço, ou seja, o BD executa o trabalho como
representante do cliente. É possível existir um ou mais serviços associados a um BD, que pode
ainda ser apresentado como múltiplos serviços e ainda um serviço pode ser implementado como
várias instâncias do BD;
É uma representação lógica do BD, é a maneira pela qual o BD se apresenta ao cliente. O service
name é um string que representa o nome global do BD, ou seja, um nome composto do nome do BD
e o nome do domínio. Esta definição é feita durante a instalação ou criação do BD.É necessário
incluir o service name na seção de dados de conexão no descritor de conexão, que veremos a seguir;
Listener (ouvidor):
A seção de endereço do descritor de conexão é o protocolo de endereço do listener. Para conectar a
um serviço, primeiramente o cliente entra em contato com um processo ouvidor que se encontra no
servidor de BD. O ouvidor recebe um pedido de conexão do cliente e manipula esta requisição para
o servidor de BD. Uma vez estabelecida a conexão, o cliente e o servidor de BD passam a se
comunicar diretamente;
Gerenciamento Local:
Neste caso, todas as informações sobre a conexão estão armazenadas em um arquivo chamado
tnsnames.ora em cada um dos computadores da rede (clientes);
Gerenciamento Centralizado:
Para este modelo de configuração, as informações sobre a conexão estão armazenados em um
serviço de diretório centralizado, incluindo um servidor de diretórios LDAP ou um servidor de
nomes Oracle.
Métodos de nomeação são utilizados pela aplicação cliente para analisar um identificador de
conexão para um descritor de conexão em uma tentativa de conexão com um serviço de BD.
Oracle Names:
É um serviço de diretórios Oracle “maquiado” de um sistema de servidor de nomes Oracle que
provê soluções de nomes para endereços para cada serviço na rede;
Nomeação Externa:
Utiliza-se de nomes de serviços de terceiros devidamente suportados.
Uma pequena empresa com apenas alguns BDs pode utilizar o método de nomeação no servidor
para armazenar nomes em um serviço de solução de nomes existente ou o método de nomeação
local armazenando nomes no arquivo tnsnames.ora em cada estação de trabalho.
Já uma grande corporação com vários BDs pode usar um método de nomeação em diretório
armazenando os nomes em um servidor de diretórios LDAP centralizado, por exemplo.
ldap.ora:
Localizado no cliente e no servidor de BD configurado para gerenciamento centralizado, este
arquivo contém os parâmetros necessários para acessar um servidor de diretórios;
listener.ora:
Localizado no servidor de BD, este arquivo contém:
Obs.: Ao configurar o ouvidor para “escutar” o protocolo TCP/IP, você deve utilizar a porta padrão
1521. Caso não utilize a porta padrão, deverá ser configurado o parâmetro LOCAL_LISTENER no
arquivo de parâmetros de inicialização (init.ora) e resolver o nome do ouvidor através de um
método de nomeação;
names.ora:
Localizado no servidor de nomes Oracle, este arquivo inclui a localização, informações de domínio
e parâmetros de configuração opcionais para o servidor de nomes Oracle;
tnsnames.ora:
Localizado apenas nos clientes, este arquivo contém os nomes dos serviços de rede mapeados para
o descritor de conexão. Este arquivo é utilizado apenas no método de nomeação local;
sqlnet.ora:
Localizado tanto nos clientes quanto no servidor de BD.
No entanto, é possível criar esses arquivos em outra localizações, pois a rede Oracle procura por
eles em vários locais.
1. No diretório especificado pela variável de ambiente TNS_ADMIN. Caso não tenha sido
definida como uma variável em ambiente Windows, deverá estar definida no registro (verificar
através do regedit);
2. Nos diretórios padrão, comentados acima, tanto em ambiente UNIX / UNIX quanto em
Windows.
Conclusões:
Nesta segunda parte da série de artigos sobre conexão ao servidor de BD Oracle, podemos entender
os conceitos e terminologias utilizadas neste ambiente.
Este passo é extremamente importante para que não façamos o processo de configuração e conexão
mecanicamente. É essencial que entendamos os conceitos para que não seja necessário utilizar
“receitas de bolo”, que nem sempre dão certo. É nesses casos, em que a “receita de bolo” não
funciona, que saberemos onde “mexer” para solucionar os problemas.
Métodos de conexão
Sempre que uma aplicação cliente faz um pedido de conexão para um servidor de BD, o listener
executa um dos seguintes métodos de conexão:
Sessão de redirecionamento:
Quando encontramos ambientes que não suportam nenhum dos métodos anteriores de conexão, será
estabelecida uma sessão de redirecionamento, cujos passos estão mostrados na Figura 4.
1. A aplicação cliente estabelece uma conexão com o listener utilizando o protocolo configurado e
envia ao listener um pacote de conexão;
2. O listener verifica se o SID está definido. Em caso afirmativo, o listener irá gerar uma nova linha
ou processo para servir à nova conexão. Uma conexão IPC(comunicação entre processos) é
estabelecida entre o listener e o novo processo;
3. O novo processo seleciona a nova porta TCP/IP em uma lista de portas livres definidas pelo
usuário e retorna esta informação para o listener;
4. O listener coloca esta nova porta no pacote de redirecionamento e reenvia à aplicação cliente e a
conexão TCP original entre a aplicação cliente e o listener é recomposta;
5. Uma nova conexão TCP é estabelecida para o endereço especificado no pacote de
redirecionamento e o pacote de conexão é transmitido ao processo servidor dedicado ou ao
despachante, dependendo da configuração;
6. Finalmente, o processo servidor dedicado ou despachante aceita o pedido de conexão e transmite
uma mensagem de aceitação de volta à aplicação cliente.
A única diferença quando utilizamos despachantes ou processo servidor dedicado é que, para o
primeiro caso, se houver capacidade de conexão em algum despachante que já esteja no ar, não será
gerado e iniciado um novo despachante no passo 2.
Conclusões
Tivemos contato com a maneira pela qual o listener responde aos pedidos de conexão e
conhecemos mais profundamente os métodos de conexão utilizados em uma rede Oracle.
Estas informações são especialmente essenciais para detectar possíveis problemas de conexão e, em
muitos casos, descobrir que aquele problema que o usuário esta reclamando não está relacionado
com o BD e sim com a configuração de sua conexão.
Nesta última parte da série sobre conexões de rede, abordaremos o método de nomeação local que é
feito através de dois arquivos de configuração residentes no lado cliente, são eles o arquivo
tnsnames.ora e o arquivo sqlnet.ora
Independente da maneira pela qual deseje configurar o método de nomeação local, todas as
configurações estarão armazenadas no arquivo tnsnames.ora, que é um arquivo do tipo texto puro
que pode ser editado em qualquer editor de texto, tanto em ambiente Windows quanto em ambiente
UNIX.
O arquivo tnsnames.ora
Como mencionado acima, o arquivo tnsnames.ora é utilizado para armazenar os nomes de serviço
de rede para que a estação de trabalho (cliente) consiga conectar-se ao servidor Oracle.
NOTA: ORACLE_HOME é uma variável de ambiente que define a localização base de instalação
do Oracle.
SQLMAGAZINE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)(HOST = 192.168.10.25)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SQLMAGAZINE)
)
)
)
O arquivo sqlnet.ora
NOTA
É possível alterar a localização padrão dos arquivos tnsnames.ora e sqlnet.ora apenas definindo
uma nova localização atribuindo-a à variável de ambiente TNS_ADMIN.
O arquivo sqlnet.ora possui apenas um parâmetro, NAMES.DIRECTORY_PATH, que define como
o serviço de rede Oracle irá resolver o nome do serviço definido no descritor de conexão. Você
poderá utilizar múltiplos métodos apenas representando-os em uma lista separada por ponto e
vírgula (;) e delimitadas por parênteses.
Caso múltiplos métodos sejam definidos, o serviço de rede irá resolver os nomes de serviço
utilizando a ordem da esquerda para a direita de definições dos métodos.
A linha abaixo exibe um conteúdo típico do arquivo sqlnet.ora.
NAMES.DIRECTORY_PATH = (TNSNAMES)
Após a configuração do método de nomeação e nomes de serviço de rede, você poderá conectar-se
a um servidor de banco de dados Oracle através de qualquer ferramenta cliente, como por exemplo
o SQL*Plus.
A seguir as possíveis causas e as ações que poderão ser tomadas para solucionar os problemas:
ORA-12154 “TNS: could not resolve service name”
Causa:
O serviço de rede Oracle não pode localizar o descritor de conexão que está especificado no
arquivo tnsnames.ora.
Ações:
1. Verifique se o arquivo tnsnames.ora realmente existe e está acessível;
2. Tenha certeza que o arquivo tnsnames.ora está no mesmo local definido na variável de
ambiente TNS_ADMIN;
3. Verifique se o nome do serviço especificado na sua string de conexão está mapeado em um
descritor de conexão no arquivo tnsnames.ora;
4. Verifique se não existe uma cópia duplicada do arquivo sqlnet.ora;
5. Caso esteja tentando conectar-se através de uma caixa de diálogo de login, tenha certeza de
não estar usando o símbolo de arroba (@) antes do nome do serviço.
Conclusões
Este assunto é de suma importância para o bom andamento das atividades de sua empresa
relacionadas com acesso ao banco de dados.
Muitas vezes, problemas triviais tornam-se grandes problemas pela falta de conhecimento na
maneira pela qual o Oracle trata as conexões entre as estações cliente e o servidor.
A velha prática de configuração através de ferramentas gráficas é bastante tranqüila e fácil, porém
limita os conhecimentos de cada parâmetro e cada conceito.
Objetivos:
Visão Geral:
Um uso típico para sequences é o de criar um valor de chave primária, que deve ser
única para cada linha. Uma sequence é gerada e incrementada(ou reduzida) por uma
rotina interna do ORACLE. Isto pode ser um objeto que economiza tempo, pois ele
pode reduzir a quantidade de códigos de aplicação necessários para escrever uma
rotina que gera sequences.
Logo:
• Gera números únicos automaticamente.
• É um objeto compartilhável.
• É geralmente usada para criar um valor de chave primária.
Sintaxe:
onde:
• Crie uma sequence chamada departamento_id para ser usada na chave primária
da tabela departamento.
• Não use a opção CYCLE, se a sequence é usada para gerar valores de chaves
primárias.
• Inicie a sequence com 51.
Confirmando sequences
Após criar uma sequence, ela é documentada no dicionário de dados. Como uma
sequence é um objeto do banco de dados, você pode identificá-la na tabela de
dicionário de dados USER_OBJECTS.
Exemplo:
Uma vez criada a sequence, você pode usá-la para gerar números seqüenciais para
uso nas tabelas. Faça referência aos valores de sequence usando as pseudocolunas
NEXTVAL e CURRVAL.
Mantenha as sequences na memória cachê para permitir o acesso mais rápido aos
valores de sequence. A memória cache é preenchida na primeira referência a essa
sequence. Cada solicitação do próximo valor de sequence é recuperado a partir da
sequence na memória cache. Após a utilização da última sequence, a próxima
solicitação carrega outro cache de sequence na memória.
Intervalos na sequence
Embora geradores de sequence gerem números seqüenciais sem intervalos, essa ação
ocorre independentemente de um COMMIT ou de um ROLLBACK. Portanto, se
você desfizer um comando que contém uma sequence, o número será perdido.
Outro evento que pode causar intervalos em uma sequence é uma queda do sistema.
Se a sequence colocar valores na memória cache, esses valores serão perdidos se o
sistema cair.
Se você atingir o limite MAXVALUE para sua sequence, não serão alocados valores
adicionais para essa sequence e será emitida uma mensagem de erro indicando que a
sequence atingiu o MAXVALUE. Para continuar a usar a sequence, você pode alterá-
la usando o comando ALTER SEQUENCE.
Sintaxe:
Regras Gerais:
• Você pode ser o proprietário da sequence ou ter privilégio ALTER para poder
alterá-la.
• Apenas números de sequence futuros são afetados pelo comando ALTER.
• Alguma validação pode ser executada. Por exemplo, um novo MAXVALUE
menor que o número da sequence atual não pode ser imposto.
• A opção START WITH não pode ser alterada usando ALTER SEQUENCE. A
sequence deve ser eliminada e recriada para reiniciar em um número diferente.
Sintaxe:
Onde:
1. Crie uma SEQUENCE para geração de valores para a chave primária da tabela
PESSOA_SINDICO do modelo do CONDOMINIO, está seqüência deverá ter
o Nro Inicial de 100 e valor máximo de 1.000.000.
2. Pesquise qual a tabela do dicionario de dados que traz informações sobre as
sequences, em seguida anote o último valor atribuido a cada sequence
encontrada.
3. Insira novos dados na tabela PESSOA_SINDICO utilizando na cláusula
values do comando INSERT a sequence criada no exercício Nro 1.
Criando Visões
Objetivos:
Nesta lição, você verá como as visões podem ser usadas para apresentar dados aos
usuários de diversos modos. Além disso, verá como constraints de integridade podem
ser forçadas se você estiver usando uma visão para inserir, atualizar ou deletar dados.
Objetivos:
• Explicar o conceito de uma visão.
• Usar visões do dicionário de dados.
• Criar visões simples e complexas.
• Criar uma visão com uma opção para forçar constraints.
• Alterar um visão.
• Remover uma visão.
Visão Geral:
Uma visão é uma tabela lógica baseada em uma tabela ou em outra visão. Uma visão
não contém dados próprios, mas , em vez disso, é como uma “janela” através da qual
dados de tabelas podem ser verificados ou alterados. As tabelas nas quais um visão é
baseada são chamadas de tabelas-base. A visão é armazenada como um comando
SELECT no dicionário de dados.
• Limitam o acesso ao banco de dados, pois, a visão pode exibir uma parte
seletiva do banco de dados.
• Permitem que os usuários façam consultas simples para recuperar os
resultados de consultas complicadas. Por exemplo, visões permitem que
Crie uma visão construindo uma subquery dentro do comando CREATE VIEW.
Sintaxe:
onde:
OR REPLACE recria a visão se ela já existe
WITH READ ONLY assegura que nenhuma operação DML possa ser
realizada nesta visão.
Regras Gerais:
• A consulta que define uma visão pode conter uma complexa sintaxe SELECT,
incluindo JOINS, grupos e subqueries.
• A consulta que define a visão não pode conter uma cláusula ORDER BY.
• Se você não especifica um nome de constraint, o sistema designará um nome
default no formato SYS_Cn.
• Você pode usar a opção OR REPLACE para alterar a definição da visão sem
eliminá-la ou recriá-la.
Exemplo:
Criação de uma visão contendo número do funcionário, o sobrenome e título do cargo
para funcionários do departamento 30. Exibição do conteúdo.
Exemplo:
Exemplo:
Crie uma visão complexa que contenha funções de grupo para exibir valores de duas
tabelas.
Exemplo:
Criação de uma visão dos nomes de departamento, salário mínimo, salário máximo e
salário médio por departamento. Exibição da estrutura da visão e seu conteúdo.
Você pode realizar operações DML em dados através de uma visão, contanto que
essas operações sigam as regras descritas abaixo:
• Você pode remover uma linha de uma visão, a não ser que contenha qualquer
das seguintes condições:
o Funções de grupo
o Um cláusula GROUP BY
o O comando DISTINCT
• Você pode alterar dados em uma visão, a não ser que ela contenha qualquer das
condições acima e um dos itens abaixo:
o Colunas definidas por expressões, por exemplo SALÁRIO*12.
o A pseudocoluna ROWNUM.
• Você pode incluir dados através de uma visão, a menos que ela contenha
qualquer das condições acima e que haja colunas NOT NULL na tabela-base
que não sejam selecionadas pela visão. Todos os valores exigidos devem estar
presentes na visão. Lembre-se que você está adicionando visões diretamente à
tabela básica através da visão.
Você pode assegurar que os dados adicionados ou atualizados em uma visão simples
possam ser pesquisados através da visão.
Exemplo:
Criação de uma visão que contenha todas as colunas da tabela emp para o
departamento 10. Adicionar a cláusula WITH CHECK OPTION.
ERRO na linha 1:
ORA-01402: violação da cláusula where da view WITH CHECK OPTION
Exemplo:
ERRO na linha 1:
ORA-01752: não é possível a deleção a partir da view sem ter exatamente uma
tabela preservada pela chave
Exemplo:
Use o comando DROP VIEW para remover uma visão. O comando remove a
definição da visão do bando de dados. Eliminar visões não tem qualquer efeito nas
tabelas nas quais a visão foi baseada. Visões ou outras aplicações baseadas em visões
deletadas tornam-se inválidas. Apenas o criador ou um usuário com o privilégio
DROP ANY VIEW pode remover uma visão.
Sintaxe:
Onde:
EXERCÍCIOS DE VISÕES
REVER E REFAZER ESTES EXERCÍCIOS
1) Crie uma visão com o nome SINDICO baseada na tabela PESSOA_SINDICO ,
fazendo a restrição das pessoas que são SINDICAS. PAREI AQUI
a. Exiba o conteúdo da visão empregado_vu.
b. Escreva um script para exibir a definição de uma visão. Passe o nome da
visão para o script. Salve o script como cap7exer1Qb.sql. Execute o script
para verificar a definição da visão empregado_vu.
c. Altere o número do departamento de SMITH para 37 na visão
empregado_vu.
d. Confirme que SMITH agora está atribuído ao departamento 37.
2) Crie uma visão chamada MNS_VU que contenha o número, nome completo e
nome do departamento do funcionário para todos os funcionários dos
departamentos de MARKETING e VENDAS nas tabelas TRABALHADOR e
DEPARTAMENTO. Salve o comando em um script chamado de cap7exer2.sql.
a. Exiba a estrutura e o conteúdo da visão MNS_VU.
b. Exiba a definição da visão MNS_VU ao executar o script cap7exer1Qb.sql.
c. Exiba o nome do departamento e o número de funcionários em cada
departamento.
4) Altere MNS_VU para que as linhas possam ser verificadas apenas entre 1:00 P.M.
e 4:00 P.M. Você pode editar o script chamado de cap7exer2.sql. Execute o script.
Exiba o conteúdo da visão.
Criando Índices
Objetivos:
Visão Geral:
O que é um Índice
Um índice é um objeto de banco de dados que fornece acesso direto e rápido às linhas
em uma tabela. Seu propósito é o de reduzir a necessidade de I/O no disco usando
caminho indexado B*tree para localizar dados rapidamente. O índice é usado
automaticamente e mantido pelo ORACLE Server. Uma vez criado o índice, não é
necessária qualquer atividade direta pelo usuário.
Índices são lógica e fisicamente independentes da tabela que indexam. Isto significa
que eles podem ser criados ou eliminados a qualquer momento, sem qualquer efeito
nas tabelas-base ou em outros índices.
Podem ser criados dois tipos de índices. Um dos tipos é o índice único. O ORACLE
Server cria automaticamente este índice quando você define uma coluna em uma
tabela para ter uma constraint PRIMARY KEY ou UNIQUE. O nome do índice é o
nome dado à constraint.
O outro tipo de índice que um usuário pode criar é um índice não-único. Por
exemplo, você pode criar um índice de coluna FOREIGN KEY para um join em uma
consulta para melhorar a velocidade de recuperação.
Uma vez que o índice é criado , o ORACLE Server o usará sempre que possível para
acelerar o acesso aos dados. Observe que este uso é automático e geralmente não
requer ação pelo usuário.
Técnicas de Otimização
Estrutura de um índice
B*Tree
O Oracle Server usa uma estrutura de índice balanceada B*Tree. É uma estrutura de
pesquisa binária auto-balanceadora para equalizar as vezes de acesso a qualquer
linha. È um método eficiente de assegurar que o acesso a qualquer valor especificado
leve aproximadamente o mesmo tempo para ser efetivado, esteja a linha no início,
meio ou fim de uma tabela.
Cada índice que o ORACLE Server constrói consiste em diversas páginas (ou
ramificações) de armazenamento organizadas em uma árvore. Cada página(ou
ramificação) retém uma série de valores-chave e ponteiros a páginas (ou ramos)
abaixo na estrutura até que por fim os valores-chave indiquem o local do próprio
dado. O identificador de local no nível do banco de dados é chamado de ROWID.
Estrutura de índice
Tipos de índice
Tipo Descrição
Único Assegura que os valores nas colunas especificadas sejam únicos.
Não-Único Assegura os mais rápidos resultados durante a consulta aos
dados.
Coluna Simples Há apenas uma coluna no índice.
Concatenado ou Pode conter até 16 colunas no índice para propósitos de
Composto desempenho ou de verificação de unicidade. As colunas não
precisam ser adjacentes.
Nota: os tipos de índices não são mutuamente exclusivos. Por exemplo, você pode
criar um índice único, concatenado.
Criando um índice
Sintaxe abreviada:
Onde:
Exemplo:
Criando um índice
Ter mais índices em uma tabela não significa que as consultas serão mais rápidas.
Cada operação DML vinculada a índices em uma tabela significa que o índice deve
ser atualizado. Quanto mais índices associados a uma tabela, maior será o trabalho de
Server para atualizar todos os índices após um DML.
Confirmando índices
Exemplo:
Removendo um índice
Você não pode modificar índices. Para fazê-lo, você deve eliminá-lo e então recriá-lo.
Remova uma definição de índice do dicionário de dados emitindo o comando DROP
INDEX. Para remover um índice, você deve ser seu proprietário ou ter o privilégio
DROP ANY INDEX.
Sintaxe:
Onde:
EXERCÍCIOS DE ÍNDICES
REVER E REFAZER ESTES EXERCÍCIOS
1) Poderiam os índices especificados serem usados com as seguintes consultas e por
quê?
a. Índice não-único em sobrenome?
• SELECT *
FROM empregado
WHERE sobrenome = ‘Biri’;
Triggers
Store Procedures
11 Backup e Recovery
Conceito
BACKUP é uma cópia de dados do seu banco de dados local ou remoto, no entanto, essa cópia
pode incluir partes importantes do seu banco de dados, como por exemplo, arquivos de controle e
datafiles. Na prática seria uma réplica dos dados originais atual guardados em um outro lugar mais
seguro, pois se tiver algum acidente ou erro fatal nas aplicações do seu sistema, você terá seus
valiosos dados perdidos, numa empresa de grande porte isso pode ocorrer constantemente. No
Oracle podemos fazer dois tipos de BACKUPs, os backups físicos e os backups lógicos.
backup físico
Envolvem a copia dos arquivos que constituem o banco de dados. O Oracle suporta 2 tipos de
backups físicos, são eles os backups online(quente) e offline(frio), podemos usar o utilitário RMAN
para nos auxiliar nesse tipo de backup. Opcionalmente, podemos optar por escrever nossos próprios
scripts de backup físico.
backup lógico
O famoso EXP/IMP é um tipo de backup que não se preocupa com a parte física do banco de dados,
ele apenas envolve a leitura de um conjunto de registros do banco de dados e a gravação destes em
um arquivo. O Data Pump Export do Oracle consulta o banco de dados e o dicionário de dados, e
grava a saída em um arquivo XML chamado arquivo de dump de exportação. Podemos exportar
todo o banco de dados, com um export full, ou podemos apenas exportar 1 ou 2 tabelas, ou um
shema inteiro, depende do objetivo de cada um. Lembrando que a importação poderá ser feita em
qualquer momento, e poderá escolher também o que será importado.
Objetivos:
•Proteger o banco de dados de inúmeros tipos de falhas
•Aumentar o Tempo Médio entre falhas (MTBF)
•Diminuir o Tempo Médio de Recuperação (MTTR)
•Minimizar a perda de dados
•Manter a Integridade das Informações
•Prover Alta Disponibilidade
Passos para geração de um backup físico com database aberto (procedimento manual)
NO BANCO DE DADOS:
1) conn sys as sysdba
2) alter tablespace CONTABILIDADE begin backup;
NO SISTEMA OPERACIONAL:
3) copy c:\oracle\oradata\scamilo\CONTABILIDADE.ora c:\PastaDeBackup
NO BANCO DE DADOS:
4) alter tablespace user_data end backup;
5) alter system switch log file;
OBSERVAÇÃO:
Os passos de 1 a 5 apresentados devem ser repetidos para todos os tablespaces, incluindo o System, temporário,
segmentos de rollback, etc
NO BANCO DE DADOS:
Criando uma imagem binária
6) alter database backup controlfile to ‘control1.bkp´
7) Identificando controlfiles, redologs, arq. de senha, redo arquivados e arq. de inicialização para cópia.
1) Faça uma pesquisa na internet para obter informações acerca dos utilitários
IMP e EXP, a fim de executar um backup lógico. Em seguida utilize tais
utilitários para realizar uma exportação do esquema do usuário ALUNO e
importar no SCHEMA do usuário ALUNO2.
2) Faça uma exportação apenas da tabela PESSOA_SINDICO.
3) Faça uma exportação apenas da tabela ENDEREÇO, sem levar os registros.
4) Faça uma exportação de toda a base de dados da instância SCAMILO.