AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 166607
Accepted
tdaget
tdaget
Asked: 2017-03-09 13:13:18 +0800 CST2017-03-09 13:13:18 +0800 CST 2017-03-09 13:13:18 +0800 CST

Como capturar todas as consultas do usuário no banco de dados Oracle

  • 772

Eu tenho um banco de dados Oracle instalado no sistema Unix. Nesse banco de dados de instância única, tenho muitas sessões abertas de um pool de aplicativos (o aplicativo é instalado em outro servidor). Todas as sessões são abertas com o mesmo nome de usuário. Como as sessões podem ser fechadas pelo pool (realmente, pode ser), não consigo capturar o ID da sessão e - para cada - habilitar a funcionalidade de rastreamento de consulta. O aplicativo é um código-fonte fechado (e proprietário), então não posso (e não quero) fazer engenharia reversa dele.

Agora, preciso capturar todas as consultas que esse usuário executa. Idealmente, quero obter um arquivo por sessão de usuário (mas será perfeito se eu obtiver um arquivo com todas as consultas). Meu objetivo real é obter consultas, mas session_id e/ou timestamp da consulta podem ser bem-vindos.

Nota importante: como meu banco de dados é uma Standard Edition não tenho acesso a nenhum pacote avançado Oracle como "Oracle Tuning Pack", "Oracle Diagnostic Pack" ou assim por diante... objetos de dicionário de banco de dados (como um sysdba poderia ser).

Informações da plataforma:

  • Unix Red Hat 6.x
  • Edição Oracle Database 11g Standard
  • apenas uma instância de banco de dados
  • número de sessões abertas entre 150 e 250

Obrigado por suas ideias

Thomas

oracle performance
  • 1 1 respostas
  • 8762 Views

1 respostas

  • Voted
  1. Best Answer
    atokpas
    2017-03-09T21:15:48+08:002017-03-09T21:15:48+08:00

    De acordo com meu conhecimento, não há uma maneira direta de atingir esse objetivo. No entanto, tentei compor os seguintes passos para cumprir os requisitos.

    Você pode habilitar o rastreamento para todas as sessões usando a instrução a seguir.

    alter system set events '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4';
    

    Para desabilitar esse rastreamento, use a instrução a seguir.

    alter system set events '10046 trace name context off';
    

    Passos:

  2. Primeiro, habilite o rastreamento de eventos 10046.

    SQL> conn / as sysdba
    
    SQL> alter system set events '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4';
    

  3. Para obter os nomes desses arquivos de rastreamento, use a consulta a seguir, onde username deve ser seu nome de usuário usado pelo aplicativo.

    SQL> SELECT LISTAGG(tf, ' ') WITHIN GROUP (ORDER BY tf) "Trace_List"
    FROM (
          SELECT sys_context('userenv','instance_name') || '_ora_'|| p.spid || '.trc' as tf FROM 
                                                                                            v$process p join v$session s 
                                                                                            ON (s.paddr=p.addr) 
                                                                                            WHERE s.username='JAY'
    );
    
    Trace_List
    --------------------------------------------------------------------------------
    orcl_ora_3443.trc orcl_ora_3458.trc orcl_ora_3473.trc
    

  4. Depois disso, vá USER_DUMP_DESTpara encontrar arquivos de rastreamento.

    SQL> show parameter user_dump_dest
    
    NAME                     TYPE    VALUE
    ------------------------------------ ----------- ------------------------------
    user_dump_dest               string  /u01/app/oracle/diag/rdbms/orcl/orcl/trace
    

    Agora, você tem vários arquivos de rastreamento espalhados em seu destino de despejo de usuário. Para combinar e criar um único arquivo de rastreamento, você pode usar trcsesso utilitário, que permite que informações de rastreamento de vários arquivos de rastreamento sejam identificadas e consolidadas em um único arquivo de rastreamento. Você pode consolidar esses arquivos de rastreamento com base nos critérios a seguir. Escolha o que é comum para todas essas sessões.

  5. Identificação de sessão

  6. ID do Cliente

  7. Nome do Serviço

  8. Nome da ação

  9. Nome do módulo

    Nesse caso, vou usar o nome do serviço.

    SQL> select service_name from v$session where username='JAY';
    
    SERVICE_NAME
    ----------------------------------------------------------------
    SYS$USERS
    SYS$USERS
    SYS$USERS
    

    Vamos usar o trcsessutilitário.

    [server1@oracle ]$ trcsess output=/home/oracle/Desktop/main_trace_file.trc service='SYS$USERS' orcl_ora_3443.trc orcl_ora_3458.trc orcl_ora_3473.trc
    

    Criamos um único arquivo de rastreamento e podemos usar tkprofo utilitário para criar uma saída formatada desse arquivo de rastreamento.

    [server1@oracle ]$ tkprof main_trace_file.trc main_formatted_trace.txt
    

    Observação: se você estiver usando o Enterprise Edition, poderá usar a auditoria refinada, que não está disponível no Standard Edition

    Referências:

  10. TRCSESS
  11. TKPROF

  • 3

relate perguntas

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve