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.
Blog criado para ajudar profissionais a resolver problemas diversos com Banco de dados
quinta-feira, 24 de setembro de 2009
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
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.
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;
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.
Espero ter ajudado.