segunda-feira, maio 27, 2013

Ferramenta tipo TOP para Oracle

Estava eu procurando ferramentas para ajudar no monitoramento e benchmark de bancos de dados Oracle e me deparei com essas duas ferramentas que fazem um refresh automático funcionando mais ou menos como o top do Linux. Nunca tinha visto um código PL/SQL que fizesse isso.

MOATS - The Mother of All Tuning Scripts

Video:


Link para download e outras informações:
http://blog.tanelpoder.com/2011/03/29/moats-the-mother-of-all-tuning-scripts/

SQL Dashboard

Video:


Download e mais informações:
http://jagjeet.wordpress.com/

terça-feira, maio 21, 2013

Processo que está usando uma certa porta

Hoje uma rapidinha de Linux. Não é muito incomum precisarmos saber qual processo esta usando uma certa porta. Para se chegar nessa informação o comando abaixo é show:

netstat -tulpn

ou sua variante:

netstat -tulpn|grep 3938

Saída:

tcp        0      0 0.0.0.0:3938                0.0.0.0:*                   LISTEN      26746/emagent

Nesse caso o cara que estava ocupando a porta era o Agente do Oracle.

segunda-feira, abril 22, 2013

Usando a cláusula VALUES do ALTER USER no Oracle 11g (fazendo um SU no Oracle)


No Oracle 11g os passwords passaram a poder ser case sensitive de acordo com o valor do parâmetro sec_case_sensitive_logon, além disso, ocorreram outras mudanças que fizeram com que a forma de se usar a cláusula VALUES do comando ALTER USER ficasse um pouco diferente. Abaixo demonstro com usar esse recurso para acessar um schema e depois restaurar a senha inicial.

Inicialmente vamos colocar a senha MANAGAR para o usuário SYSTEM

SQL> alter user system identified by manager;
User altered.

Agora vamos salvar o HASH dessa senha. Para fazer isso no Oracle 11g usamos a USER$ conforme mostrado abaixo

SQL> conn /as sysdba
Connected.
SQL> select 'alter user ' || name ||' identified by values ''' || spare4||';'||password || ''';'
from user$
where name = 'SYSTEM';

'ALTERUSER
----------------------------------------------------------------alter user SYSTEM identified by values 'S:C16F678B2665D2AA7FD34642876752939005F2BD8EE4E7CC4DAD0845932B;D4DF7931AB130E37';

Trocando a senha para outra qualquer

SQL> alter user system identified by oracle;
User altered.

Conectando com a senha nova

SQL> conn system/oracle
Connected.

Restaurando a senha original

SQL> alter user SYSTEM identified by values 'S:C16F678B2665D2AA7FD34642876752939005F2BD8EE4E7CC4DAD0845932B;D4DF7931AB130E37';
User altered.

Testando

SQL> conn system/manager           
Connected.

segunda-feira, março 18, 2013

Mudar o prompt do SQLPlus



Hoje em dia a maior parte das pessoas que trabalham com Oracle não usam mais o SQLPlus, mas para quem trabalha como DBA acaba sendo uma necessidade, principalmente quando a interface gráfica não está disponível. Mesmo os que usam, talvez não saibam que tem como alterarmos o prompt que por padrão é "SQL>" para coisas mais úteis como o nome do usuário conectado, do banco, se está como sysdba e etc.

Oracle 10g ou superior:

Prompt genérico:

SQL> SET SQLPROMPT 'Meu prompt> '
Meu prompt>

Nome do usuário@banco privilégio:

Meu prompt> set sqlprompt "_USER'@'_CONNECT_IDENTIFIER _PRIVILEGE> "
SYS@orcl AS SYSDBA> 
SYS@orcl AS SYSDBA> 

Nome do usuário@banco (meu preferido):

SYS@orcl AS SYSDBA> set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "
SYS@orcl> 

Se for antes do Oracle 10g é um pouco mais complicado mas também é possível. Abaixo um exemplo:

undefine usr db
col usr new_value usr
col db  new_value db

set termout off
select lower(user) usr,
       substr(global_name, 1, instr(global_name, '.')-1) db
  from   global_name
/
set termout on

set sqlprompt '&&usr.@&&db.> '

É possível fazer com que essa configuração seja permanente, ou seja, toda vez que você se conectar ao SQLPlus ela será aplicada, para isso edit o arquivo  abaixo e acrescente uma das opções mostradas:

$ORACLE_HOME/ sqlplus/admin/glogin.sql



terça-feira, fevereiro 26, 2013

TPS - Transações Por Segundo

Com as informações que são armazenadas no AWR tem como facilmente calcularmos a quantidade de transações por sergundo (TPS) que acontecem em um banco de dados Oracle. O exemplo abaixo ilustra isso para os últimos 7 dias:
select min(begin_time), max(end_time),
sum(case metric_name when 'User Commits Per Sec' then average end) User_Commits_Per_Sec,
sum(case metric_name when 'User Rollbacks Per Sec' then average end) User_Rollbacks_Per_Sec,
sum(case metric_name when 'User Transaction Per Sec' then average end) User_Transactions_Per_Sec,
snap_id
from dba_hist_sysmetric_summary
where trunc(begin_time) > sysdate-7
group by snap_id
order by snap_id;


O resultado será algo assim:


sexta-feira, janeiro 04, 2013

Instalar Oracle instant client

Vamos fazer um passo-a-passo.

1 - Faça o download do arquivo correto para a sua plataforma:


2 - Descompacte os arquivos (se for no linux seria algo assim):

unzip instantclient-basic-linux.x64-11.2.0.3.0.zip
unzip instantclient-sqlplus-linux.x64-11.2.0.3.0.zip

3 - As seguintes variáveis de ambiente devem ser configuradas:

export ORACLE_HOME=/opt/instantclient_11_2
export PATH=/opt/instantclient_11_2:$PATH
export LD_LIBRARY_PATH=/opt/instantclient_11_2:$LD_LIBRARY_PATH

4 - Fazendo um teste com o SQL*Plus:

sqlplus system/senha@10.0.01:1521/orcl

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jan 4 14:48:20 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from dual;

  COUNT(*)
----------
1

segunda-feira, setembro 10, 2012

Mudar senha do usuário SYS da instância ASM

Para trocar a senha do usuário SYS de uma instância ASM siga os passos abaixo:

  1. Mude as variávies de ambiente ORACLE_HOME e ORACLE_SID para a instancia ASM
  2. connect /as sysdba no sqlplus
  3. O parâmetro "remote_login_passwordfile" deve ter o valor EXCLUSIVE 
  4. Renomeie ou delete o arquivo atual PWD.ora( In Windows) / orapw ( in UNIX) 
  5. Execute

WINDOWS:

orapwd file=/database/oraPWD.ora password=

UNIX:

orapwd file=/dbs/orapw password=


No Oracle 11g é possível realizar essa tarefa assim:

[oracle@rac1 dbs]$ sqlplus

SQL*Plus: Release 11.2.0.3.0 Production on Mon Sep 10 16:01:08 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Enter user-name: /as sysasm

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> alter user sys identified by oracle;

User altered.


Confirmando que o arquivo foi alterado:


[oracle@rac1 dbs]$ ll
total 40
-rw-rw---- 1 oracle oinstall 1746 Aug 16 16:33 ab_+ASM1.dat
-rw-rw---- 1 oracle oinstall 1544 Sep  1 11:04 hc_+ASM1.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r----- 1 oracle oinstall 1536 Sep 10 16:01 orapw+ASM

[oracle@rac1 dbs]$ ll
total 40
-rw-rw---- 1 oracle oinstall 1746 Aug 16 16:33 ab_+ASM1.dat
-rw-rw---- 1 oracle oinstall 1544 Sep  1 11:04 hc_+ASM1.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r----- 1 oracle oinstall 1536 Sep 10 16:13 orapw+ASM




segunda-feira, agosto 13, 2012

Outro post sobre podcast

Mais uma vez estou aqui para falar de podcast. Eu continuo escutando vários, alguns com informações
úteis, outros culturais e alguns de pura diversão e descontração. Nessa categoria entra o barbacast. Muito bom e com um pessoal bem humorado. Está no seu sexto cast que pode ser acessado aqui
Para assinar :

segunda-feira, agosto 06, 2012

FK sem índices

O excepcional profissional Thomas Kyte tem no site Asktom uma consulta que mostra as FKs de um schema que não estão indexadas. Isso pode gerar um problema de contensão a fazer com que os usuários tenham a impressão que o banco de dados está travado.

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4530093713805#26568859366976

MEU
Eu criei uma versão baseada no original do Tom Kyte que além de mostrar o nome das tabelas, FKs e da colunas, ainda gera o comando de CREATE INDEX para as FKs.

# Execute no schema que deve ser avaliado

select table_name, constraint_name,columns , 'CREATE INDEX '||constraint_name||'_idx ON '||table_name||'('||columns||');' indice
from
(
select table_name, constraint_name,
    cname1 || nvl2(cname2,','||cname2,null) ||
    nvl2(cname3,','||cname3,null) || nvl2(cname4,','||cname4,null) ||
    nvl2(cname5,','||cname5,null) || nvl2(cname6,','||cname6,null) ||
    nvl2(cname7,','||cname7,null) || nvl2(cname8,','||cname8,null)
           columns
 from ( select b.table_name,
               b.constraint_name,
               max(decode( position, 1, column_name, null )) cname1,
               max(decode( position, 2, column_name, null )) cname2,
               max(decode( position, 3, column_name, null )) cname3,
               max(decode( position, 4, column_name, null )) cname4,
               max(decode( position, 5, column_name, null )) cname5,
               max(decode( position, 6, column_name, null )) cname6,
               max(decode( position, 7, column_name, null )) cname7,
               max(decode( position, 8, column_name, null )) cname8,
               count(*) col_cnt
          from (select substr(table_name,1,30) table_name,
                       substr(constraint_name,1,30) constraint_name,
                       substr(column_name,1,30) column_name,
                       position
                  from user_cons_columns ) a,
               user_constraints b
         where a.constraint_name = b.constraint_name
           and b.constraint_type = 'R'
         group by b.table_name, b.constraint_name
      ) cons
where col_cnt > ALL
        ( select count(*)
            from user_ind_columns i
           where i.table_name = cons.table_name
             and i.column_name in (cname1, cname2, cname3, cname4,
                                   cname5, cname6, cname7, cname8 )
             and i.column_position <= cons.col_cnt
           group by i.index_name
        )
)

segunda-feira, julho 23, 2012

Quando acaba o suporte para cada versão do banco de dados Oracle

Você sabia que o Oracle 10g não tem mais suporte regular da Oracle? E que o suporte às primeiras versões do Oracle 11g acaba em Agosto de 2012?
Por isso é extremamente importante manter o seu banco de dados atualizado, dessa forma você garante que em um momento de necessidade será possível utilizar o suporte especializado do fabricante para ajudar a resolver os problemas.

A figura abaixo mostra detalhes sobre o suporte ao banco de dados Oracle:


Figura retirada do documento abaixo:

http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf

Para maiores detalhes acesse o site de suporte da Oracle https://support.oracle.com e veja o note abaixo:

Lifetime Support and Support Policies - Oracle Database Overview [ID 1351163.1]


quinta-feira, julho 12, 2012

Ativar e desabilitar events

De vez em quando na administração de bancos de dados Oracle nós precisamos configurar uns eventos (event), como no caso do exemplo abaixo que desabilita a geração de predicados para contraints do tipo check. Nesses exemplos eu mostro como ativar, o que tem em quase todo documento e mostro também como desativar um event, o que é um pouco mais difícil de achar.


Ativar

ALTER SYSTEM SET event='10195 trace name context forever, level 1' SCOPE=SPFILE;


Desativar

ALTER SYSTEM SET event='10195 trace name context off' SCOPE=SPFILE;

quarta-feira, julho 04, 2012

Ver o tamanho dos arquivos em Mega Bytes


No linux o comando ls tem um modificado muito legal quer serve para mostrar o tamanho dos arquivos de uma forma bem facil de ser ler que é o -h. Ele faz a conversão do tamanho do arquivo para a unidade mais adequada, K, M, G, T dependendo do tamanho do arquivo.

ls -lha

E se eu precisar acompanhar o tamanho em Mega Bytes, mesmo se o tamanho superar 1 Gb? Ai vc vai precisar de um pouco mais de criatividade e fazer a conta como no exemplo abaixo:

ls -l | awk 'BEGIN{mega=1048576} $5 >= mega {$5 = $5/mega "MB"} {print}'

terça-feira, junho 26, 2012

Percentual usado do Swap

Para se saber qual o percentual do espaço de Swap que está sendo usando em um S.O. Linux podemos usar o comando abaixo, ele usa a free e faz as contas e a formatação necessária.

Percentual usado
free|tail -1|awk '{ printf("%.2f\n",(100-(100*$4/$2)))}'
0.23

Percentual livre

free|tail -1|awk '{ printf("%.2f\n",(100*$4/$2))}'
99.77

segunda-feira, maio 28, 2012

Memória por processo no AIX


Através do comando abaixo conseguimos saber quais processos estão consumindo mais memória e ainda quanto cada processo consome (Top 15).
# svmon -Pt15 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}'
--------------------------------------------------------------------------------
     Pid Command          Inuse        Pin     Pgsp    Virtual 64-bit Mthrd 16MB
   16264 IBM.ServiceRM    10075       3345     3064      13310      N     Y    N
   17032 IBM.CSMAgentR     9791       3347     3167      12944      N     Y    N
   21980 zsh               9457       3337     2710      12214      N     N    N
   22522 zsh               9456       3337     2710      12213      N     N    N
   13684 getty             9413       3337     2710      12150      N     N    N
   26590 perl5.8.0         9147       3337     2710      12090      N     N    N
    7514 sendmail          9390       3337     2878      12258      N     N    N
   14968 rmcd              9299       3340     3224      12596      N     Y    N
   18940 ksh               9275       3337     2710      12172      N     N    N
   14424 ksh               9270       3337     2710      12169      N     N    N
    4164 errdemon          9248       3337     2916      12255      N     N    N
    3744 cron              9217       3337     2770      12125      N     N    N
   11424 rpc.mountd        9212       3339     2960      12290      N     Y    N
   21564 rlogind           9211       3337     2710      12181      N     N    N
   26704 rlogind           9211       3337     2710      12181      N     N    N
O processo 16264 é o que mais está consumindo recurso. Sendo que ele usa 10075 páginas de memória de 4k cada. 

terça-feira, maio 08, 2012

MyOra, ferramenta free e interessante

MyOra é uma ferramenta bem interessante para DBAs e até desenvolvedores Oracle. Nela é possível ver de forma gráfica vários aspectos do banco de dados. Tem uma aba de performance, outra de atividades do banco, uma para execução de SQLs e assim por diante. A ferramenta é free, portanto literalmente não custa nada dar uma olhadinha.

A ferramenta pode ser encontrada em:  http://www.myorasql.com

Performance

DB Activity



quarta-feira, maio 02, 2012

Share do Oracle


Primeiro do Mundo e com mais share que seus 7 competidores mais próximos. Muito bom isso.

Gartner 2011 Worldwide RDBMS Market Share Reports 48.8 percent revenue share for Oracle(*)
Gartner has published their market share numbers for 2011 based on total software revenues. According to Gartner, Oracle
     
        Is #1 in worldwide RDBMS software revenue share
        Holds more revenue share than its seven closest competitors combined
        Grew at 18.0 percent, exceeding both the industry average (16.3 percent) and the growth rates of its closest competitors.

(*) Source: Market Share: All Software Markets, Worldwide 2011 by Colleen Graham, Joanne Correia, David Coyle, Fabrizio Biscotti, Matthew Cheung, Ruggero Contu, Yanna Dharmasthira, Tom Eid, Chad Eschinger, Bianca Granetto, Hai Hong Swinehart, Sharon Mertz, Chris Pang, Asheesh Raina, Dan Sommer, Bhavish Sood, Marianne D'Aquila, Laurie Wurster and Jie Zhang. - March 29, 2012

quinta-feira, abril 26, 2012

Oracle MySQL

Não é bem uma notícia nova, alias muito pelo contrário, mas eu  percebi que muita gente ainda não sabe que o MySQL pertence a Oracle e que existem cursos, certificações, versão Enterprise, Cluster, suporte e é claro a versão community que é Free.

Veja tudo sobre o Oracle MySQL em: http://www.oracle.com/us/products/mysql/mysqlcommunityserver/index.html

segunda-feira, abril 23, 2012

Outros bancos para DBAs Oracle

Mutias vezes nas corporações temos vários bancos de dados. É comum chegarmos em empresas e encontrarmos Oracle, SQL Server, DB2, Informix, MySQL e etc. Caso você seja um DBA Oracle e queria aprender um pouco sobre outros bancos, saiba que existem vários documentos e até cursos online e gratuitos que podem lhe ajudar nessa tarefa. Abaixo mostro dois que achei bem interessantes.

SQL Server 2008 for Oracle DBA


Esse é um curso online, disponibilizado pela própria Microsoft, com conteúdo em vídeo e dividido em vários módulos.
http://technet.microsoft.com/en-us/sqlserver/dd548020

Leverage your Oracle 11g skills to learn DB2 9.7 for Linux, UNIX and Windows

Essa página, mantida pela IBM, fornece muitas informações para profissionais Oracle.
http://www.ibm.com/developerworks/data/library/techarticle/dm-0401gupta/

sexta-feira, abril 20, 2012

Frase do DIA

Há MUITOS anos atrás eu li a frase abaixo e achei muito boa, tanto que já usei em vários cursos e palestras, hoje lembrei dela e resolvi procurar na internet e achei o site, que é num estilo bem antigo.


Em tradução Livre:


"Um bom DBA vai passar no exame de OCP, mas alguém que seja OCP não é necessariamente um bom DBA."




Original:


"A good DBA will pass the OCP, but someone who passes the OCP is not necessarily a good DBA."


http://www.oracledba.co.uk/ocp.htm

quinta-feira, abril 19, 2012

Como fazer o deploy de um Oracle Database Appliance


No post anterior eu falei sobre o Oracle Database Appliance. Agora vou mostrar alguma fotos de como se faz o deploy de um appliance desse. A ferramenta utilzada é o Oracle Appliance Manager.


Nessa primeira tela, são feitas algumas pergunta básicas. Nome do Sistema, Região, senha de root e etc.





Nessa outra tela conseguimos ver as informações de rede que precisam ser fornecidas. Aqui vão nome dos nós, os endereços IPs Públicos, VIPs e SCAN entre outra informações.




Disponilizar um Oracle RAC usando o Oracle Database Appliance parece ser uma tarefa bem simples.


Para mais informações acesses o post Original em:


https://blogs.oracle.com/dragonfly/entry/making_easy_easier

terça-feira, abril 17, 2012

Oracle Database Appliance

Agora é possível adiquierir diretamente da Oracle em um pacote único o Software, o servidor, o storage e a rede. Esto falando do Oracle Database Appliance, para mais informações acessem o Link abaixo.



Fonte: http://www.oracle.com/us/products/database/database-appliance/resources/index.html

segunda-feira, abril 16, 2012

Oracle RDBMS Server 11gR2 Pre-Install RPM para Oracle Linux 6


O Oracle Linux tinha um pacote muito interessante chamado de oracle-validated que facilitava a vida de quem queria instalar produtos Oracle no Oracle Linux automatizando algumas das tarefas, tais como configurar parâmetros de Kernel e modificar limites. O novo pacote chama-se oracle-rdbms-server-11gR2-preinstall e está disponível para Oracle Linux 6.


Artigo original: https://blogs.oracle.com/linux/entry/oracle_rdbms_server_11gr2_pre

quinta-feira, abril 12, 2012

Existe uma App para isso

Se você sempre quis ter um aplicativo no seu dispositivo iOS que permitisse acessar as informações do site da Oracle, saiba que existe uma APP para isso.
O aplicativo permite ver os update do Oracle Technology Network e ver informações como Notícias, Blogs, Eventos, Videos e etc.

Link do aplicativo: http://itunes.apple.com/br/app/oracle/id392079209?mt=8

Veja algumas Screenshots:




Fonte: https://blogs.oracle.com/otn/entry/otn_there_s_an_app

quarta-feira, abril 11, 2012

Oracle Database 11g certificado em Oracle Linux 6 e Red Hat Enterprise Linux 6

A Oracle recentemente anunciou que começou a suportar o seu banco de dados e também o Oracle Fusion Middleware nos sistema operacional Oracle Linux 6 e Red Hat Enterprise Linux 6.
Boa notícia para quem está querendo fazer alguma implantação ou atualização no seu ambiente e gostaria de colocar as versões mais atualizadas do SO.

Fonte: http://www.oracle.com/us/corporate/press/1563775

Mais informações sobre o Oracle Linux 6 aqui.

Download do Oracle linux 6 aqui.

terça-feira, abril 10, 2012

Metalink volta a ter uma versão HTML

O site de suporte da Oracle há algum tempo atrás tinha optado por mudar a sua interface utilizando o Flex, tecnologia de desenvolvimento baseada no Adobe Flash.
Felizmente temos novamente uma versão HTML, mais rápida e com praticamente a mesma interface de antes.

Acesso ao metalink HTML: supporthtml.oracle.com

Documentação da Oracle sobre a nova interface: Doc ID 1385682.1 

Fonte: https://blogs.oracle.com/ebs/entry/the_new_my_oracle_support

Empresa de consultoria em tecnologias Oracle


Já há algum tempo eu estou sem escrever no blog, mas isso tem uma explicação. Eu estou em uma fase de transição onde junto com mais dois amigos abri uma empresa de consultoria em tecnologias Oracle.
O nome da empresa e 3DB Consultoria e o site pode ser acessado através do seguinte link: http://www.3db.net.br
Lá você encontrará todas as informações relativas à nossa empresa, tais como: produtos, cliente, nossa área de atuação, nossos valores, parcerias, especializações e etc.
Nos faça uma visita e deixe um comentário com suas críticas e sugestões.




terça-feira, janeiro 24, 2012

Uma rapidinha - Língua de uma data

Caso você precise forçar a língua que será retornada em uma data, por exemplo para mostrar em uma página web, independente do que estiver configurado na sessão, você pode fazer isso diretamente no comando SQL como mostrado abaixo:


Em português:


SQL> select TO_CHAR(sysdate, 'Day', 'NLS_DATE_LANGUAGE= ''BRAZILIAN PORTUGUESE''')
  2  from dual;

TO_CHAR(SYSDATE,'DAY','NLS_DAT
------------------------------
Terça-Feira

Em Alemão:


SQL> select TO_CHAR(sysdate, 'Day', 'NLS_DATE_LANGUAGE= ''Dutch''')
  2  from dual;

TO_CHAR(SYSDATE,'DAY','NLS_DAT
------------------------------
Dinsdag



segunda-feira, janeiro 09, 2012

Script para matar sessões inativas

O comando abaixo pode ser utilizado para gerar um script que vai matar as sessões que estão inativas há algum tempo no banco, no meu exemple eu restringi alguns usuário que eu não quero que tenham suas sessões desconectadas.

select 'ALTER SYSTEM DISCONNECT SESSION '''||sid||','||serial#||''' IMMEDIATE;'
from v$session
where username is not null
   and status <> 'ACTIVE'
   and username not in ('SYS', 'SYSMAN', 'DBSNMP')
   and last_call_et > 1500

Sobre a coluna last_call_et:

If the session STATUS is currently ACTIVE, then the value represents the elapsed time in seconds since the session has become active.
If the session STATUS is currently INACTIVE, then the value represents the elapsed time in seconds since the session has become inactive.

para mais detalhes:

quarta-feira, novembro 30, 2011

Acompanhar andamento de jobs do RMAN

O script abaixo ajuda a acompanhar o andamento de jobs do RMAN, tanto jobs de backup quanto os de restore:


select sid,
serial#,
context,
sofar completado,
totalwork total,
round(sofar/totalwork*100,2) "% Completado"
from
v$session_longops
where
opname like 'RMAN%'
and opname not like '%aggregate%'
and totalwork != 0
and sofar <> totalwork;

terça-feira, setembro 06, 2011

Leitor de código de barra no iPhone

Eu iria comprar uma leitor de código de barras para me ajudar no pagamento das contas do mês. Foi ai que tive a ideia de procurar na internet para ver se eu poderia fazer esse procedimento utilizando o meu iPhone. Foi ai que eu descobri esse software http://www.pagboleto.com.br/ e acompanhado dessa app .
Com a app do iPhone é possível ler o código de barras e enviá-lo por e-mail, por sms ou então utilizar o software no computador que pode receber o código e inclusive simular a digitação no site do banco. Testei com o site da Caixa Econômica Federal e funcionou muito bem.

App do iPhone:


Software no desktop:


sexta-feira, agosto 12, 2011

Fazer Select no Alert Log

Monitorar o Alert Log do banco de dados é uma das tarefas diárias de um DBA Oracle. Para facilitar essa operação podemos criar uma external table, disponível desde o Oracle 9i, abaixo um exemplo:

Crie um Directory apontando para onde está o seu alert log:

create directory BDUMP as '/u01/app/oracle/admin/desv/bdump';

Crie a external Table:

create table
alert_log ( msg varchar2(80) )
organization external (
type oracle_loader
default directory BDUMP
access parameters (
records delimited by newline
)
location('alert_desv1.log')
)
reject limit 1000;

Faça a consulta:

select * from alert_log where msg like 'ORA-%'

Resultado:

MSG
---------------------------------------------------------
ORA-00942: table or view does not exist
ORA-15064: communication failure with ASM instance
ORA-03113: end-of-file on communication channel
ORA-15064: communication failure with ASM instance
ORA-15064: communication failure with ASM instance

sexta-feira, julho 29, 2011

Mais uma ótima ferramenta: Swingbench

Além da ferramenta que eu mostrei no último post, Dominic Giles tem algumas outras na manga que são igualmente úteis.
Imagine o seguinte cenário, Você acabou de instalar um Oracle RAC naquele servidor novo com muitos gigas de memória e super processadores. Agora você precisa saber se a configuração dessa novas estrutura está boa, quantas sessões e transações ela suporta, se dá pra melhorar alguma configuração e etc. É nesse momento que entra o Swingbench. Ferramenta desenvolvida em Java e por isso funciona em várias plataformas. Sua configuração é bem simples e para fazer a instalação siga os passos que estão aqui.

Uma screenshot tirada de um teste meu:



Gostou da ferramenta? Gostou do Post? Quer saber mais sobre um assunto específico? Então comente e deixe eu saber a sua opinião.

quarta-feira, junho 29, 2011

Mais uma ótima ferramenta: CPU Monitor

Desenvolvido por Dominic Giles o software CPU Monitor é ótimo para ver a carga de vários servidores ao mesmo tempo. O software é muito fácil de configurar e não tem a necessidade de instalar nada nos servidores. Abaixo uma figura mostrando o monitoramento de CPU e IO de 5 máquinas:



Para configurar simplesmente edite o arquivo chamado cpu.xml dentro da pasta bin e faça a configuração como mostrado abaixo:



Para mais informações acesse:

http://www.dominicgiles.com/cpumonitor.html

quinta-feira, maio 12, 2011

Essa é uma frase que eu gosto muito

Quem não sabe SQL talvez não entenda, mas eu gosto muito dessa frase porque passa a informação de forma clara e simples:


SELECT finger FROM hand WHERE id=3


Pode-se comprar uma camisa com ela aqui:
http://www.thinkgeek.com/tshirts-apparel/unisex/itdepartment/ccc0/

sexta-feira, abril 29, 2011

Trigger de logon para pegar informações da sessão do usuário

O script abaixo cria uma trigger que salva as informações dos
usuários que venham a se logar Oracle. Ela pode ser customizada
para incluir outras colunas da v$session.


CONNECT / AS SYSDBA

DROP TABLE user_login_audit;

CREATE TABLE user_login_audit (
login_time DATE,
username VARCHAR2(30),
machine VARCHAR2(30),
command VARCHAR2(128)
);

CREATE OR REPLACE TRIGGER user_login_trig
AFTER LOGON ON scott.SCHEMA
DECLARE
v_username sys.v_$session.username%TYPE;
v_machine sys.v_$session.machine%TYPE;
v_command sys.v_$session.command%TYPE;
BEGIN
SELECT username, machine, command
INTO v_username, v_machine, v_command
FROM sys.v_$session
WHERE audsid = USERENV('SESSIONID')
AND audsid != 0 -- Don't Check SYS Connections
AND ROWNUM = 1; -- Parallel processes will have the same AUDSID's

INSERT INTO sys.user_login_audit
VALUES (SYSDATE, v_username, v_machine, v_command);

IF UPPER(v_machine) LIKE '%PC1%' THEN -- Start SQL trace for users from PC1
DBMS_SESSION.set_sql_trace(TRUE);
END IF;
END;
/
SHOW ERRORS

CONNECT SCOTT/TIGER

CONNECT / AS SYSDBA

SELECT * FROM sys.user_login_audit;

O código acima foi retirado de:

http://psoug.org/snippet/Oracle-PL-SQL-Audit-User-Logins-User-Login-Trigger_517.htm

quarta-feira, abril 13, 2011

Podcasts

Primeiro vamos definir o que é um Podecast (retirado da wikipedia):

Podcast é o nome dado ao arquivo de áudio digital, geralmente em formato MP3 ou AAC (este último pode conter imagens estáticas e links), publicado através de podcasting na internet e atualizado via RSS. Também pode se referir a série de episódios de algum programa quanto à forma em que este é distribuído. A palavra é uma junção de iPod ou de "Personal On Demand" (numa tradução literal, algo pessoal e sob demanda) e broadcast (transmissão de rádio ou televisão). O podcast em vídeo chama-se "videocast", geralmente em arquivo formato MP4.

http://pt.wikipedia.org/wiki/Podcast

Podemos assinar podcasts e utilizar softwares para gerenciá-los e quando novos episódios são lançados eles são automaticamente baixado e dependendo do software inclusive sincronizado com um dispositivo.

Eu utilizo o iTunes para fazer o gerenciamento de podcasts além de baixar ele sincroniza automaticamente com meu iPod e iPhone. No Android eu utilizo o BeyondPod que baixa diretamente no celular e pode ser usado para ler RSS também.

A lista dos podcasts que eu assino hoje:

Podcast CBN


Nerd

Esse é o que eu mais gosto.


Da revista info


Para quem gosta de assuntos Geeks


Comédia

sexta-feira, abril 01, 2011

Alterar a velocidade do rebalanceamento no ASM

No último post eu tratei a forma como se vê o quanto de um rebalanceamento de discos do ASM já foi completado. Uma das informações que podíamos ver era o POWER. Esse valor mostra quão intenso vai ser o rebalanceamento dos dados. Pode-se variar entre 0 e 11, onde 0 desabilita o rebalanceamento e 11 faz com que ele seja o mais rápido possível. Se não for informado nenhum valor na execução do comando será herdado o valor do parâmetro ASM_POWER_LIMIT.

Determinar o nível de rebalanceamento diretamente no comando SQL:

ALTER DISKGROUP dev_data ADD DISK
'/dev/rhdisk25',
'/dev/rhdisk26',
'/dev/rhdisk27',
'/dev/rhdisk28',
'/dev/rhdisk44'
REBALANCE POWER 11;

Alterar o valor em uma operação em andamento:

ALTER DISKGROUP dev_data REBALANCE POWER 8;

Calcular percentual completado de operação de rebalanceamento ASM

Várias operações no ASM exigem que seja feito um rebalanceamento dos dados que estão localizados no DISKGROUP alterado. Operações com adicionar, remover discos dos diskgroups são exemplos desses procedimentos.
Podemos acompanhar o andamento do processo de balanceamento através de uma consulta simples:

SELECT group_number,
operation,
state,
power,
sofar,
est_work,
ROUND((sofar*100)/est_work)||'%' pct,
est_minutes
FROM v$asm_operation

e o resultado:

GROUP_NUMBER OPERA STAT POWER REALIZADO TOTAL PCT EST_MINUTES
------------ ----- ---- ---------- ---------- ---------- ----- -----------
1 REBAL RUN 4 88774 312637 28% 72

terça-feira, março 22, 2011

Signficado da palava CAPTCHA

A maioria das pessoas sabe o que é um CAPTCHA (aqueles números e/ou letras que precisamos digitar em alguns sites), mas poucas pessoas sabem o que essa palavra significa. Para os que não sabem:

CAPTCHA = Completely Automated Public Turing test to tell Computers and Humans Apart

quarta-feira, fevereiro 23, 2011

Problemas de performance na migração de single instance para RAC

Existem alguns problemas de performance que podem acontecer quando se migra uma aplicação de ambiente single instance para ambiente RAC

  1. Contenção em índices

Normalmente acontece com cargas e processamentos batch que inserem muitas informações em tabelas indexadas. Os eventos de espera que indicam esse problema são:

  • · enq: TX - index contention
  • · gc buffer busy
  • · gc current block busy
  • · gc current split

Para resolver esse problema podemos usar índices reversos ou mesmo usar uma chave natural (CPF por exemplo) ao invés de valores gerados por sequences.

2. Contenção na marca d’água

Acontece quando o Oracle precisa frequentemente alocar mais espaço para os seguimentos. É caracterizada pelo eventos:

  • enq: HW –contention
  • gc current grant

Para resolver o problema devemos usar extents maiores e de tamanho uniforme em tablespaces gerenciadas localmente e com espaço de segmento gerenciado automaticamente.

3. Contenção em índices que tem os valores de suas colunas gerados por sequencias

Valores chave de indices que são gerados por sequencia podem se tornar um gargalo, pois o bloco que contem a maior chave precisará ser modificado para cada valor inserido.

Para evitar esse problema podemos usar as opções CACHE NOORDER para as sequencias e com um valor de cache mais que o padrão de que é 20.

4. Contenção em blocos de Undo

Caracterizado pelo envio excessivo e contenção nos blocos de Undo e acontece quando blocos de índices que contem transações ativas de várias instancias são frequentemente lidos.

Pode ser evitados alterando-se o código da aplicação para que faça transações menores aumentado o cache das sequences.