segunda-feira, 1 de agosto de 2011

Tabelas em Clusters

Olá Pessoal.
Continuando a saga de Posts realacionados aos tipos de Tabelas no Oracle, hoje irei comentar sobre os Clusters de Tabelas.

O Cluster é um objeto de esquema que armazena duas ou mais tabelas no mesmo  bloco ou segmento,  ou seja  você tem dados de muitas tabelas compartilhando o mesmo bloco de dados fisicamente.
Um Cluster auxilia nas leituras de tabelas que contenham colunas relacionadas e são normalmente acessadas juntas assim possibilita menos I/O na Base de dados.
Podemos usar como exemplo as nossas amigas e velhas conhecidas tabelas de teste do Oracle a EMP e DEPT.  Caso quiséssemos unir estas duas tabelas  em um Cluster usaríamos a coluna DEPTNO que é comum nas duas tabelas  e será determinada como a chave do cluster.
A chave de um cluster não poderá ter valores repetidos, caso seja necessário mais colunas para unir as tabelas, uma chave de Cluster composite de 32 colunas poderá ser utilizada.

Claro que nem tudo são flores existem limitações a serem avaliadas antes de utilizar as tabelas em clusters. São elas:
·         Os tipos de dados LONG, LOB, LONG ROW não são suportados dentro de um cluster.
·         Caso haja a necessidade de consultar somente uma tabela do cluster o desempenho da consulta tende a piorar, pois não há como extrair as linhas de uma tabela sem trazer as linhas pertencentes à outra tabela que faz parte do cluster, por isso pense bem antes de sair criando.
·         Operações DML também podem causar um impacto referente às tabelas armazenadas nos clusters.

Os tipos de Clusters mais utilizados são:
·         Cluster de Índice é o tipo padrão e requer que um índice de cluster seja criado para o Cluster.
·         Cluster de Hash, a chave do cluster é convertida em um valor de hash e será armazenada no cluster com base neste valor não havendo a necessidade de criação de um índice para o cluster, ou seja, utiliza uma função hashing para armazenar e recuperara as linhas em uma tabela.
·         Cluster de Hash Classificado também utiliza uma função hashing para armazenar e recuperara as linhas, além disso, permite que as linhas sejam armazenadas por uma ou mais colunas das tabelas em ordens crescentes. Também a adição de um parâmetro SORT depois das definições de colunas dentro do cluster para indicar a ordem pela qual a classificação ira seguir.

Oracle Quick Tip: O parâmetro HashKeys Permite definir quantos valores de Hash deve ser alocado à tabela.
Bom vcs devem estar se perguntando e quando devemos usar cada um desses tipos de clusters.
No caso do Cluster de Índice, devemos levar em consideração a varredura de intervalos e os predicados de desigualdade utilizados na chave de cluster.
Já no cluster de Hash o ideal é que o predicado de igualdade seja utilizado nas colunas de clusters.

Para que possamos utilizar estes recursos devemos seguir alguns passos:

1-Passo Temos que criar um objeto Cluster para ser utilizado pela tabela, o comando utilizado é o CREATE CLUSTER.

2-Criar as tabelas que participarão do Cluster, o comando utilizado é o CREATE TABLE.

3-Caso seja um Cluster de Índice temos que criar um Índice para o Cluster, o comando utilizado é o CREATE INDEX.

Oracle Quick Tip: Para criar um Cluster em seu Schema será necessário o privilégio de sistema CREATE CLUSTER, caso seja em um outro schema  CREATE ANY CLUSTER. Também deverá ter cota alocada no Tablespace utilizado.

EXEMPLO: 

Na minha base de dados de Teste eu tenho 2 tabelas Heaps (ITEM_MASTER,ITEM_SALE).

SQL> select count(*) from  ITEM_MASTER ;
  COUNT(*)
----------
      3500

SQL> select count(*) from ITEM_SALE ;
  COUNT(*)
----------
   4001994

Para o nosso exemplo irei criar 2 tabelas com as mesmas estruturas e quantidades de Dados que as tabelas Heaps para que possamos compará-las.
Vamos lá chega de Teoria!!!

1-Criação do Cluster

SQL> CREATE CLUSTER testecluster(
ITEM_ID NUMBER) HASHKEYS 3500; 
Cluster created.

2-Criação da Tabela mãe associada ao objeto  Cluster  testecluster.

CREATE TABLE ITEM_MASTER_CLUSTER
(ITEM_ID    NUMBER,ITEM_NAME  VARCHAR2(30 ) NOT NULL )                
CLUSTER TESTECLUSTER(ITEM_ID)
NOCOMPRESS ;
 ALTER TABLE ITEM_MASTER_CLUSTER ADD (
PRIMARY KEY
(ITEM_ID));

 3-Criação da Tabela Filha  associada ao objeto  Cluster  testecluster.

CREATE TABLE ITEM_SALE_CLUSTER 
( ITEM_SALE_ID    NUMBER,
 ITEM_ID         NUMBER,
 ITEMS_SOLD      NUMBER,
 ITEM_SALE_DATE  DATE,
 ITEM_SOLD_TO    NUMBER)
CLUSTER TESTECLUSTER(ITEM_ID)
NOCOMPRESS ;
ALTER TABLE ITEM_SALE_CLUSTER ADD (
PRIMARY KEY
(ITEM_SALE_ID))
ALTER TABLE ITEM_SALE_CLUSTER ADD (
FOREIGN KEY (ITEM_ID)
REFERENCES TEM_MASTER (ITEM_ID));

4-Quantidade total de registros nas Tabelas de Clusters :

SQL> select count(*) from  ITEM_MASTER_CLUSTER ;
 COUNT(*)
----------
3500

SQL> select count(*) from ITEM_SALE ;
 COUNT(*)
----------
 4001994

 5-Gerei um Plano de Execução em uma declaração Select  utilizando as tabelas HEAPS e as Tabelas Clusters para compararmos qual solução será  mais viável.

A-Explain , Query utilizando as tabelas em Clusters.

SQL> explain plan for  SELECT *
FROM  ITEM_MASTER_CLUSTER  A ,ITEM_SALE_CLUSTER  B
WHERE A.ITEM_ID =  B.ITEM_ID
ORDER BY A.ITEM_ID ;
Explained.

SQL> set pagesize 1000
SQL> set linesize 300
SQL> select * from table(dbms_xplan.display);








B-Explain , Query utilizando as tabelas Heaps.

SQL> explain plan for  SELECT *
FROM  ITEM_MASTER   A ,ITEM_SALE  B
WHERE A.ITEM_ID =  B.ITEM_ID
ORDER BY A.ITEM_ID ;
Explained.

SQL> select * from table(dbms_xplan.display);










Percebam que após a analisarmos os dois planos de execução, a query que utliza as tabelas em clusters teve o melhor custo e o menor tempo de processamento.

Claro que este é somente um cenário ipotético , devemos considerar a volumetria e granularidade dos dados em nossa base. E sempre testar , testar e testar......

Oracle Quick Tip : Para eliminar tabelas que pertencem a um cluster, devemos eliminar o cluster para o qual as tabelas estão associadas, com a Clausúla DROP CLUSTER  testecluster INCLUDING TABLES CASCADE ;

Referências :
http://download.oracle.com/docs/

Obrigada!

quarta-feira, 20 de julho de 2011

Tabelas Temporárias

Olá Pessoal .. Espero que estejam bem!!

Bom hoje e nas proxímas semanas  irei falar sobre um dos pricipais objetos de armazenamento do Oracle que são as tabelas.
Irei falar sobre os vários tipos , então fiquem atentos e acompanhem este e os Próximos Posts.

Uma tabela temporária só será proveitosa durante a permanência em uma  sessão ou a duração de uma  transação, ou seja, quando uma sessão ou transação se inicia ela esta vazia. Após varias operações de insert, update, delete nesta tabela quando um usuário se desconectar de sua sessão ou sua transação for efetivada os dados da tabela serão perdidos. Mas seus metadados ficarão armazenados no dicionário de dados para operações posteriores até que seja excluída definitivamente do Banco de Dados.
Irei mostrar dois exemplos de tabelas temporárias uma associada à transação e outra associada a uma sessão:

Exemplo 1 (Transação)

SQL> create global temporary table luciana.TEMP_PESSOA

(CPF number(11),

Nome varchar2(40),

data_nasci date);  

Table created.


SQL> insert into luciana.TEMP_PESSOA

values (27846888767,'LUIZ','09-MAY-11');   

1 row created.

SQL> select * from luciana.TEMP_PESSOA ;

       CPF NOME                                     DATA_NASC
---------- ---------------------------------------- ---------
27846888767 LUIZ                                    09-MAY-11

SQL> commit ;

Commit complete.


SQL> select * from luciana.TEMP_PESSOA ;

no rows selected

SQL> desc luciana.TEMP_PESSOA ;

Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CPF                                                NUMBER(11)
 NOME                                               VARCHAR2(40)
 DATA_NASCI                                         


Percebam que neste exemplo após criarmos a tabela e inserirmos dados na mesma, quando efetuamos uma transação (commit ou rollback) os dados da tabela são perdidos , mas sua estrutura continuará criada independente da desconexão do usuário até que seja dropada.

Exemplo 2 (Sessão)

SQL> create global temporary table luciana.TEMP_PESSOA2
(CPF number(11),
Nome varchar2(40),
data_nasci date) ON COMMIT PRESERVE ROWS;  

Table created.

SQL> insert into luciana.TEMP_PESSOA2
  2  values (27846888767,'LUIZ','09-MAY-11');

1 row created.

SQL> COMMIT ;

Commit complete.

SQL> select * from luciana.TEMP_PESSOA ;

       CPF NOME                                     DATA_NASC
---------- ---------------------------------------- ---------
27846888767 LUIZ                                    09-MAY-11

[oracle@localhost ~]$ sqlplus luciana/*****@orcl ;

SQL> select * from luciana.TEMP_PESSOA2 ;

no rows selected

SQL> desc luciana.TEMP_PESSOA2 ;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CPF                                                      NUMBER(11)
 NOME                                                   VARCHAR2(40)
 DATA_NASCI                                        DATE


Note que no segundo exemplo  na sintaxe de criação da tabela, utilizamos a cláusula ON COMMIT PRESERVE ROWS. Isto significa que após o término da transação os dados deverão ser mantidos independentemente da utilização de um (commit ou rollback) . Mas quando  desconectar-mos e reconectar-mos de novo os dados serão limpos e só poderemos visualizar a estrutura da tabela.

Oracle Quick Tip :

Após a criação das tabela temporária ela poderá ficar visível para todas as sessões,porém seus dados serão acessíveis somente pela sessão que os inclui.
Isso  é bom em relação aos locks pois eles não terão efeitos nesse tipo de tabela partindo do principio de que cada sessão tem acesso exclusivo a seus dados. Os dados serão criados na tablespace temporária do usuário e um comando TRUNCATE trunca somente os dados referentes à sua própria sessão.
Os utilitários EXPD e IMPD podem exportar e importar a estrutura de uma tabela temporária,menos os seus dados.Também podemos criar índices temporários para estas tabelas.
Além disto operações Rollback to Savepoint são suportadas mas caso ocorra uma falha no sistema os dados serão perdidos pois não existem logs gerados para as mesmas.
Podemos criar triggers e views que utilizem simultaneamente tabelas temporárias.

Para mais informações sobre tabelas Temporárias visitem os sites que usei como referência :


Muito Obrigada.

sábado, 16 de julho de 2011

Treinamento Oracle na Nerv Informática.

Oi  Pessoal , quanto tempo ! Me descupem por ter desaparecido , é que minha vida anda meia agitada nestes útimos meses.......
Hoje eu quero compartilhar  algumas informações sobre um ótimo treinamento no qual estou ralizando.
O treinamento é ministrado na Nerv Informática pelo experiente Instrutor Ricardo Portilho ACE ORACLE e muito conhecido pela comunidade para mais informações sobre os cursos oferecidos visite o site  http://nervinformatica.com.br/.

O treinamento é totalmente HANDS ON ou seja mão na massa  em um ambiente muito agradável e um aluno por micro sem super lotação.
Para aqueles que querem se apronfundar mais seus conhecimentos em Oracle  como RAC , BACKUP/RECOVER , TUNING entre outros vale a pena gastar um pouco mais para obter estes conhecimentos.

Segue abaixo a localização do centro de treinamento da Nerv :
Av. Mazzei, 52, Sala 8 – Tucuruvi,
São Paulo - SP.
Próximo ao Metrô Tucuruvi.
Próximo à Avenida Luiz Dumont Villares

Fico muito feliz por saber que podemos contar com profissionais qualificados como Ricardo Portilho que além de postar ótimas matérias sobre Oracle e outras tecnologias esta sempre a disposição para compartilhar seus conhecimentos.

Lembre-se todos que quando compartilhamos nossas exeperiências não estamos só ajudando outras pessoas mas sim a nós mesmos.

Valeu galera ..... até o proxímo posts com algumas dicas ...

quinta-feira, 19 de maio de 2011

SQL Tunnig e Relatório ADDM

Ola Pessoal..

Irei dar uma dica sobre com o utilizar o ADDM para Criação de um relatório par análise do Banco de Dados e depois como podemos utilizar o SQL Tunnig Advisor para gerar recomendações de ajustes para o Banco.
Lembre-se mais informações é só consultar os documentos fornecidos pela Oracle.

Vamos lá ........


1-Verificar o DB time do banco de dados :

Quick Tip : O db time é um valor que o Oracle calcula para indicar o tempo cumulativo que é gasto no processamento das requisições feitas pelos usuários no banco de dados.

select sum(value) "DB time” from v$sess_time_model
where stat_name='DB time';

2-Execute o Script awrrpt.sql para informações dos Snapshots contidos no AWR que serão utilizados para criação do relatório do ADDM :

SQL>@?/rdbms/admin/awrrpt.sql

3-Executar o Script para Criacão e Geração do Relatório ADDM para gerar análises  sobre os Diagnosticos no Banco de Dados :

SQL>@?/rdbms/admin/addmrpt.sql

4-Criar uma tarefa com o SQLTUNE para as recomendação fornecida pelo ADDM :

DECLARE
l_sql_tune_task_id  VARCHAR2(100);
BEGIN
l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
begin_snap  =>'26',
end_snap => '64',
sql_id      => 'b6usrg82hwsa3',
scope=> DBMS_SQLTUNE.scope_comprehensive,
time_limit => 60,
task_name   => 'tarefa_AWR_tuning_task');
DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END ;
/

5-Executar a Tarefa criada acima.

EXEC DBMS_SQLTUNE.execute_tuning_task(task_name =>'tarefa_AWR_tuning_task');

6- Verificar o Status da tarefa :

SELECT task_name, status FROM dba_advisor_log WHERE owner ='SYS';
tarefa_AWR_tuning_task    

7-Verificar Recomendações da tarefa criada pelo SQL TUNNIG Advisor :   

SELECT DBMS_SQLTUNE.report_tuning_task('tarefa_AWR_tuning_task')
AS recomendacao FROM dual;

8-Dropar a Tarefa.

BEGIN
DBMS_SQLTUNE.DROP_SQLSET( sqlset_name => 'tarefa_AWR_tuning_task' );
END;
/

Excluir um Sql Tunning Set

Bom dia Pessoal ..

Não Acredito , Você criou um  Sql Tunning Set (Conjunto de Ajuste Sql) para análisar a performance dos Sql's no seu banco de dados e esqueceu como exclui-lo ...Bammmmmmmmmmm.
Não se desespere aqui vai mais uma dica rapída de sua companheira ......

O procedimento DROP_SQLSET  é utilizado para dropar um STS ( Sql Tunning Set ) que não será necessário.
Por exemplo

BEGIN
  DBMS_SQLTUNE.DROP_SQLSET( sqlset_name => 'conj_sql_tunning' );
END;
/


Valeu ......

Fiquem com Deus ..

terça-feira, 17 de maio de 2011

Utilizando SQL Tunning Advisor com uma declaração Sql.

Ola Pessoal .....Belezinha..

Hoje irei dar uma dica rapída sobre o Assitente de Ajuste Sql ( SQL Tunning Advisor)
Ele é utilizado para ajudar os DBA`s a otimizar , e realizar ajustes nas querys do banco de dados  e surgiu com a versão 10g do Oracle.
Lembre-se sempre pesquizem o material da Oracle para Mais informações.
Eu utilizei o Oracle 11g como ambiente de teste.
Referencias:http://www.oracle-base.com/articles/10g/AutomaticSQLTuning10g.php


Mãos a Obra ....

1-Executar o script para Criacao da tabela de Planos.
SQL> @?/RDBMS\ADMIN\utlxplan.sql;
SQL> desc plan_table

2-Executar explain de determinada declaração:
SQL> SET TIMING ON -- Para verificarmos o tempo de execução
SQL>explain plan SET STATEMENT_ID=’ID’ for Select * From scott.emp ;
SQL> SET TIMING OFF

3-Visualize  as saida da tabela de planos com a o pacote dbms_xplan:
select * from TABLE(dbms_xplan.display);

4-Conceder privilégio para que um usuário possa utilizar o Advisor de Auste SQL

CONN sys/password AS SYSDBA
GRANT ADVISOR TO scott;
CONN scott/tiger

5-Criar uma tarefa para executar o Advisor

SQL> DECLARE
  l_sql  VARCHAR2(500);
  l_sql_tune_task_id  VARCHAR2(100);
  BEGIN
 l_sql := 'SELECT * FROM emp';
 l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
 sql_text=> l_sql,user_name => 'SCOTT',SCOPE =>   DBMS_SQLTUNE.scope_comprehensive,
 time_limit => 60,task_name => 'emp_tuning_task');
 DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
 END ; 
/
PL/SQL procedure successfully completed.

6-Com a tarefa de ajuste definida o próximo passo é executá-lo usando o procedimento EXECUTE_TUNING_TASK:

SQL> EXEC DBMS_SQLTUNE.execute_tuning_task(task_name =>'emp_tuning_task');
PL/SQL procedure successfully completed.

Quick Tip:Durante a fase de execução você pode querer fazer uma pausa e reiniciar a tarefa, cancelar ou reiniciar a tarefa de permitir que ele seja re-executado

a-Interromper e retomar uma tarefa de afinação
EXEC DBMS_SQLTUNE.interrupt_tuning_task (task_name => 'emp_tuning_task');
EXEC DBMS_SQLTUNE.resume_tuning_task (task_name => 'emp_tuning_task');

b-Cancelar uma tarefa
EXEC DBMS_SQLTUNE.cancel_tuning_task (task_name => 'emp_tuning_task');

c-Redefinir uma tarefa de ajuste que permite que ele seja re-executada.
EXEC DBMS_SQLTUNE.reset_tuning_task (task_name => 'emp_dept_tuning_task');

7-O status da tarefa de ajuste pode ser monitorado usando a visão DBA_ADVISOR_LOG:

SELECT task_name, status FROM dba_advisor_log WHERE owner ='SCOTT';

8-Depois que a tarefa de ajuste foi executado com êxito as recomendações podem ser exibidas usando a função REPORT_TUNING_TASK:

SET LONG 10000;
SET PAGESIZE 1000
SET LINESIZE 200
SELECT DBMS_SQLTUNE.report_tuning_task('emp_tuning_task') AS recommendations FROM dual;
SET PAGESIZE 24
SQL> SELECT DBMS_SQLTUNE.report_tuning_task('emp_tuning_task') AS recommendations
  2  FROM DUAL;

9-Após a sessão de ajuste a tarefa de ajuste pode ser eliminada utilizando o procedimento DROP_TUNING_TASK:
BEGIN
DBMS_SQLTUNE.drop_tuning_task (task_name => 'emp_tuning_task');
END;
/

Bom Valeu ......Fiquem com Deus .

quinta-feira, 5 de maio de 2011

Upgrade do Oracle 10.2.0.4 para 11g Release 11.1.6.0

Oi Pessoal ...Que saudades .....Esta vida corrida , mas beleza estamos juntos...

Hoje irei passar mais uma dica rapída para aqueles momentos em que esquecemos os passos necessários para realizar um Upgrade no Oracle.
Eu sempre repito essas frases "Pesquizem a documentação da Oracle ". A intenção aqui é relembrar passos rapídos em ocasiões que exigem agilidades.
O ambiente utilizado é o Red Hat Enterprise Linux 5 como o Oracle 10.2.0.4 instalado.

Vamos lá tirar poeira do cérebro.kkkkkkkkkkkkk

I-Pré Upgrade

1-Determinar o Caminho de atualizção (Qual versão Oracle será atualizado)

2-Escolha Um Método de Atualização:

Irei realizar o método Manual

3-Escolha um novo Diretório para a Nova Versão do Oracle e  Instale o Oracle 11G:

Quick Tip:Você não pode instalar o novo software para o mesmo diretório home do Oracle , a menos que você esteja instalando uma versão do Oracle Database 11g patchset.

4-Realizar Um Backup da base de Dados que será atualizada , caso queira fazer um Restore se as coisas derem errado.

a.  rman "target / nocatalog"
b. Issue the following RMAN commands:
RMAN> run
 {
allocate channel c1 type disk;
backup database format 'db_%u_%d_%s';
backup format 'log_t%t_s%s_p%p';
BACKUP CURRENT CONTROLFILE TO 'save_controlfile_location';
(archivelog all);
 }

Quick Tip: Se não utiliza  o Rman faça um Backup a Frio  com os comando do sistema operacional.

Quick Tip: Desenvolver um Plano de Testes para seu Upgrade , Não Use o ambiente de Produção.


5-Copie o script  utlu111i.sql que esta lolizado no ORACLE_HOME do 11G para o ORACLE_HOME 
do 10G e execute ele com previlégio sysdba na instancia do Oracle 10g.
Quick Tip:Este script ira lhe mostrar o que deverá ser atualizado no 10G antes da realização do upgrade .

SQL> SPOOL upgrade_info.log
SQL> @utlu111i.sql
SQL> SPOOL OFF

Após verificar a saída do script será necessário realizar algumas alterações recomendadas veja algumas destas ações abaixo:

A - Remova os Parâmetros Obsoletos e ajuste os parâmetros depreciados.

B- Assegure que o parâmetro COMPATIBLE esta apropriadamente configurado para Database 11.1.

C-Ajuste O valor dos parâmetros de configuração para no mínimo mostrado no pré configuração

D-Assegure que todos os caminhos foram especificados nos arquivos de Parâmetros.

6-Copie as configurações do arquivo ORACLE_HOME que esta sendo atualizado para o ORACLE_HOME do Oracle Database 11g Release 1: (Faça sempre um backup destes arquivos antes de qualquer alteração)

ex: Spfile , Init.ora,Orapwd , Listener.ora,TnsNames.Ora etc...

II-Upgrade

Quick Tip: Parem todos os processos Oracle.

7-Siga os seguintes passos:

a -Set seu ORACLE_SID corretamente.

b-O arquivo oratab deverá estar apontado para Oracle Database 11g Release  (11.1) home.

c- A seguinte variável de ambiente deve apontar para os diretórios do Oracle Database 11g Rel.1

ORACLE_HOME
PATH

d-Alguns Scripts Clients que utiliza o valor do Oracle_Home deve apontar para o novo ORACLE_HOME.

8-Logar No sistema:
Logue no sistema com o dono do diretório ORACLE_HOME Oracle Database 11g Release  (11.1)

9-No prompt , mude para o diretório ORACLE_HOME/rdbms/admin

10-Start O SQL*Plus

11-Conect a Instância como usuário com previlégio SYSDBA.

12-Start na Instancia o comando

SQL> STARTUP UPGRADE

a-Execute o script

SQL> SPOOL upgr.log
SQL> @catupgrd.sql
SQL>SPOOL OFF

13-Após a execução do script  reinicie a instância

SQL> STARTUP


III-Pos-Upgrade

14-Execute o script pré upgrade para verificar se tudo esta correto:

SQL> @utlu111s.sql

15-Caso queira atualizar os dados de baselines execute o seguinte script:

SQL> @rdbms/admin/catuppst.sql

16-Execute o Script abaixo para compilar os objetos inválidos do banco de dados.

a-SQL> @utlrp.sql

b-Verifique se todos os objetos estão validos :
SQL> SELECT count(*) FROM dba_invalid_objects;
SQL> SELECT distinct object_name FROM dba_invalid_objects;

17-Caso use o Enterprise Manager , vc tera qua atualiza-lo:

$ emca -upgrade db

18- Atualize o Catalogo ro RMAN :

% rman CATALOG rman/rman@orcl

RMAN> UPGRADE CATALOG

entre com o comando  UPGRADE CATALOG novamente para confirmar a atualização do Catálago.

RMAN> UPGRADE CATALOG

19-Verifique se esta tudo ok:

SQL> select comp_name , version , status from dba_registry;

Bom espero que ajude.

Referencias : http://download.oracle.com/docs/cd/B28359_01/server.111/b28300/toc.htm

Obrigado a todos.......

"A busca pelo conhecimento é o princípio da sabedoria"
Michelle Ramos

quarta-feira, 6 de abril de 2011

Criando um Catálago de Recuperação para o Rman

Olá  Amigos ...
Prontos para outra dica Rapída ? Vamos lá

1-Criar uma Base de Dados Para o Rman, utilizando os Scripts gerados pelo DBCA

2- vamos criar todos os objetos e configurações necessários para nosso ambiente de RMAN.

A- Tarefa - Criação da Tablespace do Catalogo
SQL > create tablespace RMAN
2  datafile  '/u01/app/oracle/oradata/rman/rman_01.dbf' size 100M
3 permanent
4 online
5 extent management local autoallocate
6 segment space management auto


3- Tarefa - Criação do usuário RMAN

SQL>create user RMAN
  2  identified by imasters
  3  default tablespace RMAN
  4 temporary tablespace TEMP

4-Tarefa - Permissões ao usuário RMAN a role recovery_catalog_owner tem que estar setada como default role padrão

SQL> grant connect, resource, recovery_catalog_owner to rman;

5-Tarefa - Criação do Catálogo
Para criar o catálogo, devemos sair do SQL*PLUS e ir para as linhas de comando e acessar a ferramenta RMAN  propriamente dito.
[oracle@serverdb dbs]$ rman catalog 'rman/imasters@rman';

RMAN> create catalog tablespace "RMAN";
RMAN> exit

6-Registrar as instancias no Catalago de Backup :

[oracle@localhost ~]$ rman catalog rman/rman@rman  target sys/sys@orcl

Recovery Manager: Release 10.2.0.4.0 - Production on Sun Mar 20 13:58:57 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
connected to target database: ORCL (DBID=1273394171)
connected to recovery catalog database
RMAN> register database ;

terça-feira, 5 de abril de 2011

FlashBack Table e Flashback Drop

Olá Caros Amigos...

Continuando a nossa tragetória sobre as Técnologias de Flashback no Oracle, hoje eu irei passar-lhes dicas sobre mais dois tipos de Flashback .

Mãos  a Obra!!!!

I-FLASHBACK TABLE

FlashBack Table permiti restaurar uma tabela sem a necessidde de um backup/restore do banco de dados.
Quando realizamos um restore da tabela todos os objetos associados para esta tabela , tais como indices, triggers , e constraints são restaurados também.

QUICK TIP: Se vc quer utilizar a tecnologia de flashback table é um boa pratica ajustar os parametros que manipulam o  tablespace de Undo.
O tablespace de Undo contém os dados que serão usados para recuperacão da tabela .
Parametro UNDO_RETENTION  especifica em segundos o default são 900 s (15 segundos) o tempo no qual os dados serão retidos , mas se alguma transação ativa usar todo tablespace de undo, então ele sera reutilizado e vc não poderá voltar a tabela. Para contornar esta situação o ideal é criar um tablespace de undo com a opção RETENTION GUARANTEE  para garantir  que os dados de undo não sejam reutilizados e respeite o parametro UNDO_RETENTION .

Veja um exemplo abaixo  para criacão de um tablespace de undo :

SQL> CREATE UNDO TABLEAPCE undo_tbs
DATAFIEL ‘/u01/app/oracle/undo_tbs01.dbf’ SIZE 1 G
RETENTION GUARANTEE;

Vamos Lá:

Suponhamos que vc apagou determinada linhas de uma tabela por acidente e agora precisa recuperarar esta  tabela ...

1-Habilite o movimento da linha

SQL> ALTER TABLE teste ENABLE ROW MOVEMENT;

2-Restaure a tabela para um determinado SCN.

SQL> FLASHBACK TABLE teste TO SCN 1743434;

OU

2.1-Restaure a tabela a um tempo no qual ela se encontrava correta.
   
SQL> FLASHBACK TABLE teste
     TO TIMESTAMP
     TO_TIMESTAMP(‘24-MAR-11 12:00:00’,’MM/DD/YY HH:MI:SS’); 

3-Verifique se todas as linhas se encontram lá de novo.

II-FLASHBACK DROP

OBS : Nas versões anteriores do Oracle 10g o comando Drop table removia uma tabela da base permanentemente .
Com a Versão 10G as tabelas não serão mais removidas mais sim renomeadas e movidas para um objeto chamado de Recycle bin.

Vamos ver se isso é verdade :

Siaga os Passos abaixo:

1- Drop uma tabela .

SQL>Drop table teste ;

2-Faça uma pesquisa para verificar se a tabela ainda se encontra na recycle bin :

SQL> select object_name, original_name, 
  2    type, createtime, droptime
  3  from   user_recyclebin;

QUICK TIP : Quando a tabela é movida para a recyclebin (licheira) oracle lhe da um nome meio estranho, para visualizar o nome da tabela utilize a coluna original_name, na view  user_recyclebin.

3-Para restaurar novamente a tabela utilize o seguinte comando:

SQL> flashback table “BIN$0+ktoVChEmXgNAAADiUEHQ==$0” to before drop; (nome que o oracle atribui a tabela)
ou
SQL> flashback table teste to before drop;

4-Para limpar a recyclebin execute o comando abaixo:
SQL> purge recyclebin;

5-Para limpar apenas um objeto da recyclebin utilize o comando abaixo:

SQL> purge table "BIN$0+ktoVChEmXgNAAADiUEHQ==$0";

QUICK TIP:Caso queira dropar a tabela permanentemente do banco de dados utilize o comando abaixo:

drop table teste purge ;

Obrigada  e Até maisssssssssssss.......

segunda-feira, 4 de abril de 2011

Flashback Database na Prática

No Post Anterior nós relembramos como habilitar e desabilitar a tecnologia de FlashBack..
As próximas dicas rapídas irão mostrar como fazer uma recuperacão com do Flshaback do banco de dados habilitado..

Sigam os passos abaixo e divirtam-se com moderação,  utilizem  sempre ambientes de testes......

I-FLASBACK DATABSE PARA  UM TEMPO ESPECÍFICO UTILIZANDO COMANDOS SQL

1- feche o Banco de Dados e abra-o  em Modo Mount

SQL>shutdown immediate ;
SQL> startup mount exclusive ;

2-Eu utilizei o seguinte comando para voltar o banco de dados ao dia anterior :

SQL> FLASHBACK DATABASE  to timestamp to_timestamp('24-mar-11 08:00:00','dd-mm-yy hh24-mi-ss') ;

3-Abra o Banco de dados com a Opção RESETLOGS:

SQL>alter database open RESETLOGS ;

Verifique se tudo esta correto como era antes

II-FLASHBACK DATABASE USANDO UM  SCN  

1-Verifique o SCN para o qual iremos recuperar a instância:

SQL> select current_scn from v$database ;

2- feche o Banco de Dados e abra-o  em Modo Mount :

SQL>shutdown immediate ;
SQL> startup mount exclusive ;

3-Eu utilizei o comando abaixo para voltar o banco de dados:

SQL>flashback database to scn 1777333 ;

4-Abra o banco de dados com a Opção RESETLOGS:

SQL> Alter database open RESETLOGS ;

Verifique se esta tudo ok no seu ambiente.

III-FLASHBACK DATABASE USANDO RMAN

1-Feche a Instância que será recuperada e inicie em  no Modo Mount :

SQL>shutdown immediate ;
SQL> startup mount exclusive ;

Quick Tip:Para que se possa realizar os procedimetos de Flasback via Rman o Alvo(Target tem que estar Montado)

2-Conecte ao Alvo via Rman

export ORACLE_SID=orcl
oracle@localhost /]$ rman / target

3-Eu utilizei os comandos abaixo para voltar o banco de dados a alguns minutos atrás do desastre ocorrido:

RMAN> FLASHBACK DATABASE
2> TO TIME = "TO_DATE (‘24-MAR-11 03:07:00’,’ dd-mm-yy hh24-mi-ss’) " ;

Quick tip : é Muito importante veirficar a data e hora correta do seu sistema para uma recuperação precisa :
select systimestamp from dual;

4-Abra o Banco de dados com a Opção RESETLOGS:

SQL>alter database open RESETLOGS ;

Verifique se tudo esta correto como era antes


Espero que seja útil .....
Até a proxíma

Configurando o FlashBack para o Banco de Dados Oracle.

Olá Caros Amigos....
Sabe aquele dia que quase tudo sai errado , nós DBA's temos sempre que estar preparado para o Pior..Ainda bem que a Oracle Coorporation sempre nos ajudas com sua novidades....

A dica a rapída de hoje  esta relacionada a Tecnologia de FlashBack do Banco de Dados ....
Se vc não lembra como habilitar esta Tecnologia de uma olhada nos passos A seguir :

Quick Tip: Lembre-se o banco de dados deve estar no modo Archivelog para que se possa utilizar a tecnologia de Flashback para o Banco de Dados.

1-Assegure que o banco de dados esta em modo Archivelog:

2-Configure os parametros da  Área de Recuperção Rapída(Flash Recover Area) :

DB_RECOVERY_FILE_DEST ='/U01/app/Oracle/flash_recovery '      (Destino da Área de Recuperação Rapída)
ex: alter system set DB_RECOVERY_FILE_DEST ='/U01/app/Oracle/flash_recovery '

DB_RECOVERY_FILE_DEST_SIZE (Tamanho da Área de Recuperação Rapída)
ex: alter system set  DB_RECOVERY_FILE_DEST_SIZE=3G

3- feche o Banco de Dados e abra-o  em Modo Mount:

SQL>shutdown immediate ;
SQL> startup mount exclusive ;

4-Habilitar o FlashBackup para o Banco de dados:

SQL> ALTER DATABASE FLASHBACK ON;

5-Confira se o Banco de Dados esta com FlashBack habilitado :

SQL>select FLASBACK_ON from v$database ;

6-Configure o período para rentenção dos seus Logs de FlashBack:

SQL>Alter system set db_flasback_retention_target=1000 

7-Monitore os log gerados para o Banco de Dados:
  
SQL> select begin_time, flashback_data,
   2  db_data, redo_data, ESTIMATED_FLASHBACK_SIZE
   3    from   v$flashback_database_stat;

Quick Tip: Por Padrão no Oracle 10G o período no qual os logs de FlashBackup são retidos é de 1440 minutes.

8-Monitore o período de retençao para os logs de Flashback :

SQL> select *
2    from   v$flashback_database_log;

Quick Tip: Lembre-se sempre de monitorar   á Área de Recuperação Rapída e verificar se tem espaço suficiente em disco.

Desabilitar o FlashBack no banco de dados

1a-Baixe o Banco de Dados e Abra-o em modo Mount

SQL>shutdown immediate ;
SQL> startup mount exclusive ;

2b-Altere o Banco de dados para desligar o Flasback do  banco de Dados

SQL> ALTER DATABASE FLASHBACK OFF;

3c-Abra o Banco de Dados

SQL> alter database open ;

4-Verifique se o Flashback do Banco de Dados foi desabilitado.

SQL> select flashback_on
         from   v$database;

É isso aí ...Simples assim ...Espero que gostem ..

Até a Proxíma dicaaaaaaaaaaa...

Backup do Banco de Dados no Modo NoarchiveLog

Olá Caros Amigos!!!

Hoje irei dar uma dica rápida sobre como utilizar  o RMAN para fazer Backup do banco de dados em Modo Noarchivelog....
Lembre-se o Site da Oracle é muito rico em informações é sempre bom dar uma espiadinha....Mas se vc não tem muito tempo para pensar e pecisa relembrar  o processo de Backup siga os Passos abaixo :

Obs:(Não Faça locuras rsrsrsr ....Utilize sempre o ambiente de teste antes de ir para Produção)

1-Verificar se o banco de Dados esta No modo Archive Log , temos 2 fromas de verificar esta opcao.

SQL> archive log list;
SQL> select name, log_mode from v$database;

2-Conecte via Rman no Catalago a no Banco de dados alvo no qual deseja ralizar o Backup.

rman catalog user/senha@catalago  target user/senha@alvo

Quick Tip: Caso seu Banco de dados não esteja registrado para o Catalago utilize o seguinte comando:

RMAN> register database;

Quick Tip:Lembre-se para realizar um backup no modo noarchivelog temos que fechar o banco de dados e starta-lo em modo mount.

4-Irei utilizar o Script Abaixo  para realizar  o   Backup:

RMAN> run {
2> shutdown immediate;
3> startup force mount;
5> backup database ;
6> backup spfile;
7> alter database open;
8> }

Quick Tip: Por Padrão quando vc não informa o local onde o backup irá ser armazenado ele é direcionado para Flash Recover Área , é o que vai  acontecer com o o backup realizado através do  comando utilizado no exemplo acima...

O  Rman é a ferramente de backup oficial da oracle e contém varios comandos que ajudam a automatizar o seu backup.
Vale a pena ler a documentação a respeito desta maravilhosa  ferramenta para que os leitores possam adaptar seu backup conforme seu ambiente de trabalaho ou teste.


Obrigado a todos.....

segunda-feira, 28 de março de 2011

Backup Oracle 10G no modo Noarquivelog

Olá caros Amigos !

Sabe aquele dia em que temos tantas coisas na mente , e acabomos por esquecer alguns comandos ou sequências de algumas tarefas triviais do dia-dia .
Quem nunca passou por isso que atire a primeira pedra!!!!......Hummmm  sempre apelamos para a Santa Net rsrsrsr.
E é por este motivo que irei postar mais uma dica rápida no meu blog ....

Lembrando que sempre vale a pena consultar a documentação oficial da Oracle , A intenção do blog não é passar um artigo completo sobre determinado assunto, mais sim dicas rapídas para lembrarmos de algum processo diário na administração do banco de dados oracle em nosso dia-dia e não temos muito tempo a perder.

Siga os passos  seguir :

1-Verificar se o Banco de Dados esta No modo Noarchivelog , utilizei 2 formas de verificar esta opção

SQL> archive log list;
SQL> select name, log_mode from v$database;

2-Conecte via Rman no Catalago de recuperação  e no   Banco de dados alvo, no qual se deseja ralizar o Backup.

 rman catalog user/senha@catalago  target user/senha@alvo

 

Quick Tip: Caso seu Banco de dados não esteja registrado para o Catalago utilize o seguinte comando:

RMAN> register database;

Quick Tip: Lembre-se para realizar um backup no modo noarchivelog temos que fechar o banco de dados e starta-lo em modo mount.

3-Irei utilizar o Script Abaixo  para realizar  o   Backup:

RMAN> run {
2> shutdown immediate;
3> startup force mount;
5> backup database ;
6> backup spfile;
7> alter database open;
8> }

O  Rman é a ferramente de backup oficial da oracle e contém vários comandos que ajudam a automatizar o seu backup.
Vale a pena ler a documentação a respeito desta maravilhosa  ferramenta para que os leitores possam adaptar seus backups, conforme seu ambiente de trabalaho ou teste.

"O grande segredo para a plenitude é muito simples: compartilhar."
Autor: Sócrates

Alterando Oracle para o Modo Archivelog

Olá Caros Amigos!

Este é o primeiro Post de muitos e muitos que desejo compartilhar com vcs..
A intenção deste Blog é demostrar de forma prática e rápida alguns comandos que são utilizados na Administração do Banco de Dados Oracle. Para mais informações eu sempre recomendo a melhor fonte de conhecimento que é o Proprio site da Oracle. Veja o link abaixo:

http://www.oracle.com/technetwork/index.html

Bom vamos deixar de blábláblá e mãos a obra!!!!!!

Obs:Utilizei a Versão do Oracle 10.2.0.4 para realizar os teste.

1-Verificar o modo de Archivamento do Banco de Dados

SQL> archive log list;
Database log mode                  No Archive Mode
Automatic archival                   Disabled
Archive destination                  USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence      37
Current log sequence              39


2-Feche o Banco de Dados e restart no modo Mount ;

SQL> shutdown immediate;
SQL> startup mount ;

3-Alterar o modo de arquivamento do banco de dados
SQL> alter database archivelog;

4- Abrindo o banco de dados

SQL> alter database open;

5 - Verificando o modo de arquivamento
 
SQL> archive log list ;
Database log mode                 Archive Mode
Automatic archival                   Enabled
Archive destination                  USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence      37
Next log sequence to archive   39
Current log sequence               39


6-Faca um teste Forçar a geração dos archived logs

SQL> alter system switch logfile;

7-Verifique a origem dos seus archived logs  sistema operacional no qual vc utiliza .

SQL> show parameters db_reco

NAME                                                TYPE                                     VALUE
------------------------------------      -----------                ------------------------------
db_recovery_file_dest_area                      string                       /u01/app/oracle/flash_recovery
                                               
db_recovery_file_dest_size                      big integer 2G

Bom espero que eu tenha ajudado em algo , lembre-se que a minha intenção é passar dicas como o nome do blog  mesmo diz Oracle Quick Tip .Para uma informção mais completa sobre os comandos utilizados neste post vale a pena entrar no site da Oracle e dar uma espiadinha...

Obrigada a Todos.........