Conteúdo do cotidiano e gratuito de tecnologia em Banco de dados, Servidores Windows, Linux, BSD e Desenvolvimento em PL/SQL.
domingo, 19 de janeiro de 2014
[Oracle] - FKs apontando para as PKs e UKs de uma tabela
As vezes acontece o erro abaixo quando tentamos truncar ou deletar todas as informações de uma tabela. Pare resolver é necessário identificar quais tabelas apontam para a tabela que eu quero truncar e precisamos desabilitar essas FKs.
Erro Oracle:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
1 - Identificando as FKs:
SELECT owner,
table_name,
constraint_name
FROM all_constraints ci
WHERE ci.constraint_type = 'R'
AND (ci.r_owner , ci.r_constraint_name) IN
(SELECT owner,
constraint_name
FROM all_constraints c
WHERE owner = '&dono'
AND table_name = '&tabela'
AND constraint_type IN ('P','U')
)
2 - Desabilite as constraints retornadas:
ALTER TABLE owner.tabela DISABLE CONSTRAINT nome_constraint;
3 - Execute o truncate das tabelas filhas e pai:
TRUNCATE TABLE owner.tabela_filha;
TRUNCATE TABLE owner.tabela_pai;
4 - Habilite as constraints retornadas:
ALTER TABLE owner.tabela ENABLE CONSTRAINT nome_constraint;
Fonte:
http://oraclemais.blogspot.com.br/2010/11/fks-apontando-para-as-pks-e-uks-de-uma.html
[Oracle] - Verificando o andamento do Job do datapump(expdp/impdp)
Para saber o andamento de um job do datapump faça o seguinte select:
SELECT job_name "Nome",
owner_name "Dono" ,
workers ,
job_mode "Modo" ,
dp.state "Status" ,
ROUND((sofar*100)/totalwork,2) "% Completado"
FROM gv$session_longops sl, gv$datapump_job dp
WHERE sl.opname = dp.job_name
AND sofar != totalwork
Fonte:
http://oraclemais.blogspot.com.br/2009/07/datapump.html
[Oracle] - Job para gerar estatísticas para um schema
No Oracle nós temos o otimizador
baseado em regra, que é o mais antigo e hoje na versão 10g nem é mais
suportado, eo o basedo em custo. Esse último necessita de estatísticas
geradas nos objetos, pois é baseado nelas que ele gera os planos de
execução e quanto mais atualizadas elas estiverem teoricamente melhor
serão os planos de execução gerados.
O script abaixo cria um job usando a dbms_job que gera estatíticas para um schema todos os dias as 3 da manhã:
O script:
declare
l_job number;
begin
dbms_job.submit(
l_job,
'dbms_stats.gather_schema_stats( ''SCOTT'' );',
trunc(sysdate)+1+3/24,
'trunc(sysdate)+1+3/24' );
end;
/
Explicando o start time e o interval:
trunc(sysdate)
pega o dia atual a meia noite (00:00)
trunc(sysdate)+1
Adiciona um dia quer dizer amanhã meia noite
trunc(sysdate)+1+3/24
Adiciona 3 horas (3/24) o que quer dizer que o job vai rodar pela primeira vez amanhã as 03:00 e nos dias subsequentes nesse mesmo horário.
O script abaixo cria um job usando a dbms_job que gera estatíticas para um schema todos os dias as 3 da manhã:
O script:
declare
l_job number;
begin
dbms_job.submit(
l_job,
'dbms_stats.gather_schema_stats( ''SCOTT'' );',
trunc(sysdate)+1+3/24,
'trunc(sysdate)+1+3/24' );
end;
/
Explicando o start time e o interval:
trunc(sysdate)
pega o dia atual a meia noite (00:00)
trunc(sysdate)+1
Adiciona um dia quer dizer amanhã meia noite
trunc(sysdate)+1+3/24
Adiciona 3 horas (3/24) o que quer dizer que o job vai rodar pela primeira vez amanhã as 03:00 e nos dias subsequentes nesse mesmo horário.
quinta-feira, 16 de janeiro de 2014
[PostgreSQL] - Consultando e eliminando sessões ativas
Bom pessoal vou mostrar como listar/matar as sessões ativas no PostgreSQL . O sql a seguir lista todas as sessões ativas.
select datname,
procpid,
usename,
application_name,
client_addr,
client_hostname,
backend_start
from pg_stat_activity
Obs: A coluna procid foi renomeada para pid a partir da versão 9.2 do PostgreSQL
Com a lista de usuário em mãos, podemos optar por "matar" a sessão de algum usuário ativo, para isto basta executar o comando abaixo, substituindo o "procpid' pelo valor retornado da consulta anterior.
select pg_terminate_backend(procpid);
E para eliminar todas as conexões ativas, menos a conexão atual.
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE procpid <> pg_backend_pid();
Fonte:
http://fabriciodev.blogspot.com.br/2012/03/consultando-e-eliminando-sessoes-ativas_20.html
sexta-feira, 10 de janeiro de 2014
[LINUX] - Expandindo o volume de uma partição no Grupo do LVM
No exemplo desse post, o servidor foi instalado com um disco de 15gb, porém o disco foi expandido para 60gb. O disco utilizado é o ‘/dev/xvda’. É possível que adicionando o disco a operação seja semelhante.
Crie a partição disponível
# cfdisk /dev/xvda
Assinar:
Postagens (Atom)