segunda-feira, 26 de outubro de 2009

[tomcat] Configurando o DBCP para o Oracle XE

Oracle + Tomcat + DBCP

Abaixo segue um passo a passo de como configurar o DBCP (pool de conexões) do Tomcat 6.0 para o Oracle XE


  • Copiar copiar o jar do driver Oracle(ojdbc14-10.2.0.3.jar) para $CATALINA_HOME/lib/

  • No Tomcat 6.0 os jars do DBCP já estão presentes.

  • Configurar o arquivo Context(context.xml)


    < Resource name="jdbc/myoracle" auth="Container"
    type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
    username="scott" password="tiger" maxActive="20" maxIdle="10"
    maxWait="-1" />



  • Configurar o arquivo web.xml

     
    < description >Oracle Datasource example< /description >
    < res-ref-name >jdbc/myoracle< /res-ref-name >
    < res-type >javax.sql.DataSource< /res-type >
    < res-auth >Container< /res-auth >
    < /resource-ref >



  • Exemplo Java: acessando uma nova conexão


    Context initContext = new InitialContext();
    Context envContext = (Context)initContext.lookup("java:/comp/env");
    DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
    Connection conn = ds.getConnection();
    //etc.



    REFERÊNCIA
  • sexta-feira, 23 de outubro de 2009

    [oracle][tablespaces size] Mostrar o tamanho de cada tablespace

    Mostra uma relação de utilização de todas as tablespaces


    select a.TABLESPACE_NAME,
    a.BYTES/1024/1024 alloc_bytes_in_MB,
    b.BYTES/1024/1024 bytes_free_MB,
    round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) percent_used,
    (round(((a.BYTES-b.BYTES)/a.BYTES)*100,2)/100) * a.BYTES/1024/1024 bytes_used_in_MB
    from
    (
    select TABLESPACE_NAME,
    sum(BYTES) BYTES
    from dba_data_files
    group by TABLESPACE_NAME
    )
    a,
    (
    select TABLESPACE_NAME,
    sum(BYTES) BYTES
    from dba_free_space
    group by TABLESPACE_NAME
    )
    b
    where a.TABLESPACE_NAME=b.TABLESPACE_NAME

    [oracle][tables size] Tamanho das tabelas de um schema

    Mostra a relação de tamanhos das tabelas de um determinado schema


    SELECT t.table_name AS "Table Name",
    t.TABLESPACE_NAME AS "Table space",
    t.num_rows AS "Rows",
    t.avg_row_len AS "Avg Row Len",
    Trunc((t.blocks * p.value)/1024) AS "Size KB", -- numero de blocos X o seu tamanho em KBs
    t.last_analyzed AS "Last Analyzed"
    FROM dba_tables t,
    v$parameter p
    WHERE t.owner = 'NOME_SCHEMA'
    AND p.name = 'db_block_size'
    ORDER BY 5 desc

    [oracle][analise statistics tables] Analise de estatísticas de tabelas

    Gera um script de analise completa de estatísticas de todas as tabelas de um determinado schema.


    SELECT 'analyze table ' || OWNER || '.' || TABLE_NAME || ' compute statistics;'
    FROM dba_tables
    WHERE owner = 'SCHEMA'

    [oracle][sessions] Matar sessões abertas

    Os comandos abaixo verificam e geram um script para matar sessões abertas de um determinado usuário


    Verificando sessões abertas


    SELECT s.sid,
    s.serial#,
    s.osuser,
    s.program
    FROM v$session s
    where osuser = 'userName'


    Matando sessões abertas


    SELECT 'ALTER SYSTEM KILL SESSION ''' || se.sid || ', ' || se.serial# ||''' IMMEDIATE ;'
    FROM v$session se where osuser = 'userName';



    Saida exemplo

    ALTER SYSTEM KILL SESSION '523, 480' IMMEDIATE ;

    [oracle][index] Rebuild indexes

    O comando abaixo ira gerar um script para rebuild dos índices


    select 'ALTER INDEX '||INDEX_NAME||' rebuild tablespace '||tablespace_name||';' from dba_indexes where TABLE_OWNER like 'NMS';

    [oracle][recyclebin] Analisando e apagando a recyclebin

    ORACLE RECYCLEBIN




    Mostra os objetos da recyclebin



    select * from recyclebin;


    Retorna o tamanho total da RECYCLEBIN e uma relação de quantos objetos existem por schema




    select r.owner,
    count(distinct r.original_name) orig_obj,
    count(distinct r.object_name) objects,
    sum(bytes)/1024 kb
    from dba_recyclebin r
    join dba_segments s
    on (r.owner = s.owner and r.object_name = s.segment_name)
    group by r.owner;



    Apaga a recyclebin



    PURGE RECYCLEBIN;

    [oracle][index error] ORA-08102: index key not found, obj# 27063, file 6, block 65802

    Banco de dados: Oracle XE

    Problema



    Quando tentei apagar um registro com dados estranhos da base a seguinte mensagem me foi informada:


    ORA-08102: index key not found, obj# 27063, file 6, block 65802


    Causa



    Pesquisando, descobri que esse erro é acontece devido ao índice estar corrompido no banco de dados.
    Para descobrir qual o objeto em questão basta pesquisar na tabela de objetos especificando o numero do objeto corrompido, descrito na mensagem.


    SELECT * from all_objects WHERE object_id=27063;


    O resultado do select acima foi as informações do indice com o problema.


    Solução



    Solução 1


    Para resolver o problema primeiramente tentei dar um rebuild no índice utilizando o seguinte comando:


    ALTER INDEX index_name REBUILD;


    Após a execução do rebuild tentei remover o registro mas não obtive sucesso.

    Solução 2


    Minha segunda abordagem foi apagar o índice mesmo, pois analisando o índice em questão verifiquei que era um índice auxiliar de FK, isso que dizer que o índice pode ser apagado e criado novamente.


    DROP INDEX index_name;


    Após apagar o índice foi possível remover o registro e depois disso recriei o índice com o script original.

    Referencia:
    http://forums.oracle.com/forums/thread.jspa?threadID=61877