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