Olá galera,
Vamos ver alguns Hint's que podem nos ajudar em nossas consultas.
Muitas pessoas não gostam de utilizar, outras utilizam sempre, mas sempre é bom analisar
sua query pra saber se irá otimizar seu tempo de resposta ou piora-lo.
Pois é preciso conhecer e analisar, o que será melhor para o Oracle.
Temos vários hint's, "sugestões" algumas já obsoletas, mas vários que podem nos ajudar...
eles são declarados como comentários.
Como por exemplo o first_rows, já me ajudou, mas é preciso fazer consultas analisando sua query, também com explan para verificar como o Oracle se comporta, esse hint ele força o uso de índice, para otimizador um caminho que retorna a 1º linha ou a quantidade de linhas que escolher mais rapidamente.
Exemplo:
select /*+ first_rows (500) */ coluna_1, coluna_2
from tabela;
O hint /*+ full_rows (tabela) */ força um scan completo na tabela, custo do acesso do índice e dos registros pode ser maior do que simplesmente ler a tabela inteira. Este hint também pode causar resultados inesperados,
como varrer a tabela interia em ordem diferente da ordem de acesso, se for uma tabela com centenas de dados, não é aconselhável.
Exemplo:
select /*+ full_rows (tabela_user) */ coluna_1, coluna_2 from tabela_user where rownum <= 10;
A partir do Oracle 11g, temos uma view com mais de 250 Hint's v$sql_hint, se fosse de todo mau, não existiria mais.
Existem vários outros HINT's, mas entenda, sempre é bom se aprofundar no conhecimento, pois não têm uma receita de bolo, e sim
uma melhor prática para cada caso.
Vlw galera, qualquer dúvida é só compartilhar.
Referências: https://community.oracle.com/welcome
segunda-feira, 30 de maio de 2016
sexta-feira, 12 de fevereiro de 2016
Como deletar registros duplicados no Oracle.
É muito comum termos esse tipo de problema em nossas
tabelas, então segue uma uma query bem simples para
apagar estes registros:
Select para localizar duplicados
select campo,campo1,count(*)
from tabela having count(*) > 1
group by campo,campo1
Como deletar duplicados
delete from tab p1
where rowid < (select max(rowid)
from tab1 p2
where p1.primary_key = p2.primary_key);
Qualquer dúvida é só comentar
ou enviar um e-mail.
Abraços.
Aumentando o tamanho da TABLESPACE
E aí galera, tudo bem ?
Bom vamos lá, muitos profissionais se deparam com problemas quando o tamanho da TABLESPACE esgota,
aí na hora vira um furdunço, e não dá pra fazer mais nada, então
para um profissional não ter problemas como este:
"ORA-01653: unable to extend table SUPER.CLI_PROCESSSOS by 128 in tablespace LEGAL_DATA" "ORA-06512: at line 4"
É necessário que ele faça um monitoramento delas, pelo Enterprise Manager ou através das santas query's como essa:
"ORA-01653: unable to extend table SUPER.CLI_PROCESSSOS by 128 in tablespace LEGAL_DATA" "ORA-06512: at line 4"
É necessário que ele faça um monitoramento delas, pelo Enterprise Manager ou através das santas query's como essa:
SELECT D.TABLESPACE_NAME "Nome",DF.FILE_NAME "Local do Arq", D.STATUS "Status",
TO_CHAR((A.BYTES / 1024 / 1024),'99,999,990.900') "Tamanho (M)",
TO_CHAR(((A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024),'99,999,990.900') "Usado (M)"
FROM SYS.DBA_TABLESPACES D
INNER JOIN SYS.DBA_DATA_FILES DF ON DF.TABLESPACE_NAME = D.TABLESPACE_NAME
INNER JOIN SYS.SM$TS_AVAIL A ON A.TABLESPACE_NAME = D.TABLESPACE_NAME
FULL OUTER JOIN SYS.SM$TS_FREE F ON F.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER BY D.TABLESPACE_NAME;
Com o retorno, você pode remanejar espaço entre elas, como por exemplo, tirar de uma e colocar em outra com o
comando:
Diminuindo a TABLESPACE SATIDAT1.DBF.
alter database datafile 'C:\ORACLEXE\ORADATA\XE\SSJR\SATIDAT1.DBF' resize 100M
Aumentando o tamanho da TABLESPACE SSJRDAT1.DBF.
alter database datafile 'C:\ORACLEXE\ORADATA\XE\SSJR\SSJRDAT1.DBF' resize 300M
Qualquer dúvida ou sugestão comentem, ou mandem e-mail,
Abraços.
Assinar:
Postagens (Atom)


