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] - Script par extrair DDL de tablespaces
Bom pessoal, segue abaixo script para geração de SQL para criação de tablespaces no Oracle:
set pagesize 0
set feedback off
set linesize 1000
spool cre_tbs.sql
select 'create tablespace ' || df.tablespace_name || chr(10)
|| ' datafile ''' || df.file_name || ''' size ' || df.bytes
|| decode(autoextensible,'N',null, chr(10) || ' autoextend on maxsize '
|| maxbytes)
|| chr(10)
|| 'default storage ( initial ' || initial_extent
|| decode (next_extent, null, null, ' next ' || next_extent )
|| ' minextents ' || min_extents
|| ' maxextents ' || decode(max_extents,'2147483645','unlimited',max_extents)
|| ') ;'
from dba_data_files df, dba_tablespaces t
where df.tablespace_name=t.tablespace_name;
spool off
set pagesize 20
set feedback on
set linesize 150
A consulta não é de minha autoria e o original pode ser encontrado em:
http://toolkit.rdbms-insight.com/gen_cre_ts.php
[Oracle] - Uso nls_language em funções SQL
Poucas pessoas sabem que boa parte das funções SQL do Oracle suportam
sobrepor as configurações da sessão no que tange o NLS (national
language support), abaixo exemplos da utilização dessa sintaxe:
TO_DATE ('1-JAN-99', 'DD-MON-YY', 'nls_date_language = American') TO_CHAR (hire_date, 'DD/MON/YYYY', 'nls_date_language = French') TO_NUMBER ('13.000,00', '99G999D99', 'nls_numeric_characters = '',.''') TO_CHAR (salary, '9G999D99L', 'nls_numeric_characters = '',.'' nls_currency = '' Dfl''') TO_CHAR (salary, '9G999D99C', 'nls_numeric_characters = ''.,'' nls_iso_currency = Japan') NLS_UPPER (last_name, 'nls_sort = Swiss') NLSSORT (last_name, 'nls_sort = German') Fonte: http://download.oracle.com/docs/cd/B10500_01/server.920/a96529/ch7.htm
http://oraclemais.blogspot.com.br/2010/09/uso-nlslanguage-em-funcoes-sql.html
[Oracle] - Habilitando autoextend para datafiles
O DBA hoje em dia não precisa mais se preocupar com o overhead causado pela extensão automática dos datafiles. Soluções como gerenciamento local das tablespaces e infraestrutura de hardware mais competentes absorvem quase que totalmente o impacto. Sendo assim, habilitar esse recurso ajuda a deixar a administração do banco mais fácil.
Ex.:
alter database datafile '+DATA/dr/datafile/users.264.708874247' autoextend on next 256M;
Nesse exemplo estou habilitado a extensão automática para o datafile (autoextend on) e estou informando de quantos em quantos megas eu quero que isso aconteça (next 256M).
Para habilitar para todos os datafiles:
spool runts.sql
select
'alter database datafile '||
file_name||
' '||
' autoextend on;'
from
dba_data_files;
@runts
Fonte:
http://oraclemais.blogspot.com.br/2010/06/oracle-autoextend-on.html
[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)