MigraTI - Soluções em banco de dados

quinta-feira, 24 de setembro de 2009

Show error

Após tentar recompilar algum objeto com erro de compilação o oracle não lhe mostra o erro?

Tente o select abaixo.

select line||'/'||position "LINE_COL",text "ERROR"
from dba_errors
where name = 'OBJECT_NAME'
and type = 'OBJECT_TYPE'
and owner = 'OWNER'
order by line;

Isto já me quebrou o ganlho.

quarta-feira, 23 de setembro de 2009

SQL Balada

A muito tempo atraz recebi isto por email e ao ler o post de meu amigo mailer http://www.andremailer.com.br/, sobre sexo em C++ resolvi ir pela linha dele, e fui procurar o email.

segue abaixo o comportamento do homem em uma balada escrito em SQL.


ÀS 23H - CHEGANDO NA BALADA...

SELECT MULHER FROM BALADA
WHERE(GERAL = 'LINDA'
OR GERAL = 'GOSTOSA')
AND BUNDA >= 95
AND PEITOS >= 80
AND IDADE BETWEEN '18' AND '30'
AND CARATER = 'SAFADA'
AND ESTADO = 'ESTUDANTE';


ÀS 0H - AINDA NÃO CONSEGUIU NINGUÉM E JÁ ESTÁ COM UMAS CERVEJAS NO SANGUE...


SELECT MULHER FROM BALADA
WHERE GERAL = 'GOSTOSA'
AND BUNDA >= 80
AND PEITOS >= 70
AND IDADE BETWEEN '16' AND '35'
AND CARATER = 'MAIS OU MENOS SAFADA'
AND ESTADO = 'SEM OCUPAÇÃO';

ÀS 1H30 - COMEÇANDO A FICAR DESESPERADO...

SELECT MULHER FROM BALADA
WHERE GERAL = 'AJEITADA'
AND BUNDA >= 70
AND PEITOS >= 40
AND IDADE BETWEEN '16' AND '40'
CARATER != 'SANTA'
AND ESTADO = 'LARGADA';

ÀS 3H00 - DESESPERADO!!!...

SELECT MULHER FROM BALADA
WHERE GERAL LIKE '&BAGULHO&'
AND BUNDA <> 0
AND PEITOS <> 0
AND IDADE ETWEEN '14' AND '50'
ESTADO = 'EMPREGADA';

ÀS 4H00 - NA FILA PARA PAGAR E IR EMBORA DA BALADA...

SELECT MULHER FROM BALADA;


;D

sexta-feira, 18 de setembro de 2009

AWR Ocupando espaço na Sysaux

Nas versões 10.2.0.3 existe um bug com o AWR.
O mesmo coleta informações de SQL Plan mais não deleta, existe uma configuração para este procedimento que cria uma data de retenção no banco, por padrão esta data é de 10 dias, porem o 10.2.0.3 não consegue deletar estes registros.

Para verificar este problema verifique o tamanho da tabela wrh$_sql_plan, e verifiue a retenção de dias de seu awr.

SQL> select dbms_stats.get_stats_history_retention from dual;
GET_STATS_HISTORY_RETENTION
---------------------------
10

Para Verificar desde qual dia não é deletado.

SQL> select min(timestamp) from sys.wrh$_sql_plan;


MIN(TIMES
---------
26-OCT-08


Conforme Bug 6522103 deverá ser efetuado limpeza manual da tabela wrh$_sql_plan .


Segue abaixo procedimento.



select min (snap_id) from sys.wrh$_sql_plan where timestamp=( select min(timestamp) from sys.wrh$_sql_plan);

1000


select max(snap_id) from sys.wrh$_sql_plan where timestamp < sysdate - 15 ;

2600



delete from WRH$_SQL_PLAN where SNAP_ID between &begin_id and &end_id;

begin_id=1000

end_id=1500

-- Recomendo a deletar de 500 em 500 para não impactar em performance.


Commit;

Alter table sys.wrh$_sql_plan move;

alter index SYS.WRH$_SQL_PLAN_PK rebuild;



Refazer os procedimentos acima até liberar a area desejada.



Números acima são fictícios.

sexta-feira, 11 de setembro de 2009

ORA-01555 - Snapshot to old

Erro clássico na vida de um DBA, pode acreditar você nunca vai escapar deste erro.

O problema é, quando acontece este erro, eu aumento a tablespace ou aumento a undo_retention?

Vou lhes mostrar uma query que vai lhe indicar o caminho correto a tomar.


set lines 156
set pages 30
column UNXPSTEALCNT heading "# UnexpiredStolen"
column EXPSTEALCNT heading "# ExpiredReused"
column SSOLDERRCNT heading "ORA-1555Error"
column NOSPACEERRCNT heading "Out-Of-spaceError"
column MAXQUERYLEN heading "Max QueryLength"

select inst_id,
to_char(begin_time, 'MM/DD/YYYY HH24:MI') begin_time,
UNXPSTEALCNT,
EXPSTEALCNT,
SSOLDERRCNT,
NOSPACEERRCNT,
MAXQUERYLEN
from gv$undostat
where begin_time between
to_date('07/28/2008 10:00', 'MM/DD/YYYY HH24:MI:SS') and
to_date('07/28/2008 14:30', 'MM/DD/YYYY HH24:MI:SS')
order by inst_id, begin_time;


Você tem de avaliar com atenção nas colunas:
# Expired|Reused
# UnexpiredStolen

As outras colunas podem lhe dar uma ajuda tbm.
Para isso favor verificar o doc id: 389554.1 ele poderá mostrar a você o resultado completo, o que infelizmente este editor não permite que eu faça.


# Expired|Reused: Indica falta de tempo para garantir toda a query, aumentar o tempo de retenção da UNDO_retention.
# UnexpiredStolen: Tamanho da undo pequeno, Aumentar o tamanho da UNDO.

OBS: o parametro de UNDO, undo_retention pode ser alterado dinamicamente não sendo necessário o restart do banco, segue abaixo.
alter system set undo_retention='valor desejado em segundos' scope=both;

Ainda se perde com os comandos do SRVCTL?

Segue abaixo alguns comandos que podem lhe ajudar com as sintaxes de start de ambientes em RAC.




Espero ter ajudado.