Pular para o conteúdo
  • Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 8 anos, 3 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #108321
    Avatar de airoospairoosp
    Participante

      Boa tarde,

      Será que algum(a) dos(as) colegas já passou por esta situação? Aqui na empresa o pessoal usa o Infragistic no desenvolvimento dos sistemas em .NET, o detalhe é que usando o Infragistic, as consultas feitas no banco ficam “mascaradas”.

      É possível através do trace da sessão do usuário, identificar qual a consulta esta sendo feita no banco?

      Usei o comando abaixo, mas não foi possível identificar muitas informações no trace.

      execute sys.dbms_system.set_sql_trace_in_session(140, 48866, true);

      Se alguém tiver alguma dica, agradeço.

      Obrigado.

      Airton

      #108322
      Avatar de rmanrman
      Participante
        #108323
        Avatar photoJosé Laurindo Chiappa
        Moderador

          Não : o trace tradicional a nível de sessão exemplificado no link indicado ele *** NÃO PEGA TUDO ***, não : ele só “pega tudo”, só funciona para ambientes con sessões DEDICADAS, ie, onde cada usuário de banco que quer conectar no banco cria uma NOVA sessão, que atenderá somente a essa conexão, e no final a sessão é desconectada – se o ambiente usar MTS/SHARED SESSIONS, ou manter um POOL DE CONEXÕES, nesses casos uma sessão atende a uma conexão diferente a cada vez E e em princípio após o uso por uma conexão a sessão fica ainda Aberta, para poder ser usada por outra e depois por outra conexão, e como o trace tradicional só grava quando a sessão é fechada, OBVIAMENTE NÃO SERVE para esse tipo de ambiente…. Não vai funcionar ** MESMO ** se esse tal “Infragistic” (que eu não faço idéia o que é) cria pool de conexões e/ou usa mst/shared server : veja em http://www.dbspecialists.com/files/presentations/tracing_ind_sessions.html a seção “Old days” para confirmar/entender esse conceito, que é Extremamente Comum em aplicações WEB/three-tiers…
          A primeira coisa então Airton é vc confirmar com o Suporte e/ou com os outros desenvolvedores se esse coiso aí implementa pool : se implementar tá Explicado o motivo da sua “falha” em usar o SQL TRACE, é que ele simplesmente não é Apropriado pro seu ambiente… Sendo isso vc tem que implementar o DBMS_MONITOR, com o qual AO INVÉS de indicar uma sessão via SID+SERIAL# vc vai indicar uma Condição de uso, que pode ser o SERVICE_NAME usado pra logar no banco, ou então uma coluna de identificação na V$SESSION (como o MODULE ou o CLIENT_IDENTIFIER, se a sua Aplicação preenche essas colunas ou se tem como vc alterar a aplicação ou ter uma trigger de logon no banco para as preencher) : http://betteratoracle.com/posts/46-performing-sql-trace-on-applications-using-connection-poolstem um exemplo de preencher coluna de identificação via trigger, https://technology.amis.nl/2007/04/04/how-to-trace-a-java-application-through-a-connection-pool-using-dbms_monitor-6/ exemplifica como alterar a aplicação para que ela preencha colunas de identificação na V$SESSION que depois serão usados na DBMS_MONITOR, e http://www.juliandyke.com/Diagnostics/Packages/DBMS_MONITOR/SERV_MOD_ACT_TRACE_ENABLE.php exemplifica como setar o trace via DBMS_MONITOR pra conexões que usem um service_name específico (neste último caso vc criaria um SERVICE_NAME especial, e alteraria a aplicação/ambiente para que apenas os programas/usuários que vc quer monitorar conectem com esse serviço…

          []s
          
          Chiappa
          

          OBS :

          a) claro que sempre existe a possibilidade de ativar trace pra um banco todo, o que Independe do ciclo de existência das sessões, mas por motivos de tamanho/espaço em disco/overhead na performance nem vou citar essa possibilidade na prática

          b) O primeiro link do DBMS_MONITOR também explica que o DBMS_MONITOR vai gerar múltiplos arquivos de trace (um pra cada sessão que foi Ativada/usada com as condições indicadas), e vc pode juntar todos os trace files para profiling com o utilitário trcsess : ao que entendo vc não quer/precisa fazer isso, então de momento essa info não te ajuda, mas fique sabendo….

          c) eu respondi falando SObre o banco Oracle, que é minha área de conhecimento : não sei dizer se esse talzinho aí do Infragistic não-sei-das-quantas já não possui alguma instrumentação que possa ser ativa pra vc obter os SQLs…

          d) produtos não-Oracle que espionam/obtém texto através de monitoração de Rede existem também mas não os cito justamente por serem Externos ao banco

          #108330
          Avatar de airoospairoosp
          Participante

            Chiappa,

            Verifiquei mais informações sobre o assunto e acabei fazendo confusão, os invés do infragistic o certo é o Entity Framework, este sim faz as consultas mas não é possível ver na sessão do Oracle o que esta correndo.

            O que é o Entity Framework?

            “O Entity Framework – EF, é um conjunto de tecnologias da ADO .NET que suporta o desenvolvimento a aplicações orientadas a dados. Arquitetos e desenvolvedores de aplicações orientadas a dados tem se debatido com a necessidade de alcançar dois objetivos distintos:

            • Modelar entidades, relacionamentos e problemas da lógica de negócio;
            • Trabalhar com sistemas de armazenamento de dados para armazenar e consultar informações;

            O problema é que os dados podem estar distribuídos em múltiplos sistemas de armazenamentos, cada um com suas particularidades e protocolos e mesmo em situações no qual somente um único sistema de armazenamento é usado ainda a existe a necessidade de balancear os requisitos de armazenamento com os requisitos de escrever um código eficiente.

            O Entity Framework – EF, permite aos desenvolvedores trabalhar com dados na forma de propriedades e objetos específicos do domínio como clientes e produtos, etc, sem ter que relacioná-los com as tabelas do banco de dados e as colunas onde os dados estão armazenados. Isto é possível pela elevação do nível de abstração no qual os desenvolvedores podem trabalhar quando estão tratando com os dados e pela redução do código que é necessário para manter as aplicações orientadas a dados.”
            Fonte: http://www.macoratti.net/09/06/vb_iaef.htm

            Nestes links é possível obter mais informações sobre o Entity Framework, inclusive exemplo de consulta:

            http://www.macoratti.net/09/06/vb_iaef.htm

            http://www.macoratti.net/09/06/vb_ef1.htm

            http://imasters.com.br/artigo/23696/dotnet/net-o-acesso-a-dados-usando-um-orm-entity-framework-parte-01/?trace=1519021197&source=single

            http://imasters.com.br/artigo/23999/dotnet/asp-net-o-acesso-a-dados-usando-o-entity-framework-parte-02/?trace=1519021197&source=single

            Vou pesquisar mais informações e assim que encontrar, posto aqui no forum.

            Obrigado.

            Airton

            #108331
            Avatar photoJosé Laurindo Chiappa
            Moderador

              Blz… Repito, porem, que as *** principais ** respostas que vc tem que obter aí no seu ambiente são :

              => se a tua Aplicação que foi codificada com esse tal framework está ou não implementado pool de conexões/reuso de sessões : como eu disse, isso é comum em ambientes web/multi-tiers e implica que uma única sessão no banco vai, alternadamente, atender a N conexões/pedidos de execuções de SQL de X usuários finais, um de cada vez, E implica também que a sessão vai ser criada quando o pool é startado e (em tese) nunca mais vai ser desfeita, ficando “aberta” para atender aos próximos pedidos de conexão, o que INVIABILIZA TOTALMENTE o trace de sessão, tendo que ser implementado o trace por condições via DBMS_MONITOR

              e

              => vc tem que descobrir (com o Suporte e com outros utilizadores) quais opções de log de SQLs/traces o tal framework dispõe : https://msdn.microsoft.com/en-us/magazine/gg490349.aspx , https://blogs.msdn.microsoft.com/mpeder/2014/06/16/how-to-see-the-actual-sql-query-generated-by-entity-framework/ e https://msdn.microsoft.com/en-us/data/dn469464.aspx falam um pouco sobre isso, mas pra mim (especialista que sou em RDBMS e SQL) esse papinho das páginas sobre LINQ, OOP e ORM pra mim é Grego Bizantino….

              []s

              Chiappa

              #108332
              Avatar photoJosé Laurindo Chiappa
              Moderador

                Detalhezinho adicional, que ** pode ** ou não te ajudar : http://www.oracle.com/technetwork/developer-tools/visual-studio/overview/index.html oferece (gratuitamente, é só se cadastrar no site) um add-in (da própria Oracle) que pelo que entendi serve para “ligar” o Visual Studio a(e suas tools de .NET) ao RDBMS Oracle – não sei se com isso vc pode ter mais opções de debug (que façam até mais coisas do que “mostrar o SQL gerado”), pode ser que sim, julgando pelos exemplinhos que vi em http://www.oracle.com/technetwork/issue-archive/2011/11-sep/o51odt-453447.html – esse exemplinho não tá mostrando a última das últimas versões do tal add-in mas talvez te sirva de algo, veja lá se te serve de algo, SE hoje vcs usam o Visual Studio pra desenvolver…

                []s

                Chiappa

              Visualizando 6 posts - 1 até 6 (de 6 do total)
              • Você deve fazer login para responder a este tópico.
              plugins premium WordPress