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