Pular para o conteúdo
Visualizando 14 posts - 1 até 14 (de 14 do total)
  • Autor
    Posts
  • #100044
    rman
    Participante

      Boa tarde !

      Gostaria de saber se no Oracle 10g ou 11g se existe algo onde eu possa definir um time out de consulta. Por exemplo existe um relatório que existe um filtro de datas, o normal é tirar o relatório entre 1 dia apenas, mas o usuário sem saber do que acontece pede o relatório com o filtro de 6 meses, dependendo da consulta até estoura o tablespace TEMP devido ao order by na consulta, alem de demorar horas pra o relatório ser emitido.

      Existe alguma coisa que eu possa definir, por exemplo, caso uma consulta passe de 30 min aborta a consulta ?

      Outra coisa que também funcionaria, mas não como é feito. No PL/SQL Developer existe dois botões: Execute ( F8 ) e Break (Shift+ESC). O Break aborta a consulta no meio do processamento. Alguém sabe como isso foi implementado ? Qual instrução é enviada para o Oracle ?

      #100045
      Ishii
      Participante

        Olá,

        Acho que somente alterando a app mesmo. Acho que o profile não funcionaria (a não ser que conste como IDLE) mas mesmo assim não evitaria o estouro da TEMP.

        No PL/SQL o comando é feito via app também, mas mesmo assim vou testar para saber se é enviado algum comando para o Oracle e depois posto aqui.

        []s Ishii

        #100046
        rman
        Participante

          [quote=”Ishii”:n1ttthhj]Olá,

          Acho que somente alterando a app mesmo. Acho que o profile não funcionaria (a não ser que conste como IDLE) mas mesmo assim não evitaria o estouro da TEMP.

          No PL/SQL o comando é feito via app também, mas mesmo assim vou testar para saber se é enviado algum comando para o Oracle e depois posto aqui.

          []s Ishii[/quote]

          Opa, se eu souber qual comando mandar para o Oracle abortar a consulta fica fácil implementar isso em Delphi, a ideia é ter uma solução genérica que se aplica em todos os relatórios, se não for possível, fazer o tratamento de relatório por relatório é muito custoso, teria que analisar cada relatório, e fazer a validação de cada filtro…

          #100047
          leandrolbs
          Participante

            O PLSQL Developer: http://www.allroundautomations.com utiliza componente proprio o DOA; Esta ferramenta e desenvolvida em Delphi; O Sift-Esq é um thread do processo, parando assim a comunicação com o banco, não o banco com o app;

            Uma idéia seria implementar uma rotina de verificação das sessions, verificando as tabelas que lhe apresenta problemas… e caso o start da conexão passe de 30 minutos vc aplica um Kill na session trocando até a msg do erro pra ficar melhor para o usuario…. mas bem trabalhoso.!..rs

            #100048
            rman
            Participante

              [quote=”leandrolbs”:1t2asoe9]O PLSQL Developer: http://www.allroundautomations.com utiliza componente proprio o DOA; Esta ferramenta e desenvolvida em Delphi; O Sift-Esq é um thread do processo, parando assim a comunicação com o banco, não o banco com o app;

              Uma idéia seria implementar uma rotina de verificação das sessions, verificando as tabelas que lhe apresenta problemas… e caso o start da conexão passe de 30 minutos vc aplica um Kill na session trocando até a msg do erro pra ficar melhor para o usuario…. mas bem trabalhoso.!..rs[/quote]

              Não entendi quando você disse “…parando assim a comunicação com o banco, não o banco com o app;”

              O Kill que você se refere é um

              ALTER SYSTEM KILL SESSION ‘sid,serial#’;

              Isso vai matar apenas a consulta em questão, ou vai matar tudo ? Vai ter que abrir o sistema novamente pra fazer uma nova conexão ?

              Nós trabalhando com Delphi 7 em 3 camadas…

              #100049
              leandrolbs
              Participante

                com o kill tem que fechar tudo… mas pode colocar uns trys dentro do codigo, e conectar novamente..etc..

                Vcs usam qual componente para conexão?

                #100052
                rman
                Participante

                  [quote=”leandrolbs”:1wib4sc9]com o kill tem que fechar tudo… mas pode colocar uns trys dentro do codigo, e conectar novamente..etc..

                  Vcs usam qual componente para conexão?[/quote]

                  É usado o ODAC da Devart

                  http://www.devart.com/odac

                  #100053
                  leandrolbs
                  Participante

                    nunca trabalhei.. mas não deve ser diferente.

                    O ideal mesmo, é o que o ishii falou…. editar o app;

                    #100065
                    CleitonHanzen
                    Participante

                      [quote=”rman”:384hsain]Boa tarde !

                      Gostaria de saber se no Oracle 10g ou 11g se existe algo onde eu possa definir um time out de consulta. Por exemplo existe um relatório que existe um filtro de datas, o normal é tirar o relatório entre 1 dia apenas, mas o usuário sem saber do que acontece pede o relatório com o filtro de 6 meses, dependendo da consulta até estoura o tablespace TEMP devido ao order by na consulta, alem de demorar horas pra o relatório ser emitido.

                      [/quote]

                      Opá…

                      Se existe essa necessidade, o que pode te auxiliar é criar uma view com a coluna data como “data > sysdate – 5”, por exemplo. Isso, por mais que o usuário informasse 30 dias na tela, no máximo seriam retornados os dados dos ultimos 5 dias. Mas caso quiser fazer a coisa “certa”, realmente vai ter que editar a a aplicação e até retornar uma mensagem “adequada” para o proto-usuário que fizer a ca***a…. 😀

                      #100066
                      Ishii
                      Participante

                        Olá,

                        Nem sugeri a criação da view (sysdate – 5) pois isso gera o chamado “efeito bumerangue”. Você resolve o problema de estouro da tablespace TEMP, mmmmaaaassssss, chega um “bug” para o usuário:

                        “- Estou tirando um relatório com 1 mês e só retorna 5 dias…”
                        “- Será que ‘perderam’ os dados (Gerente da área para o Gerente de TI)”
                        “-Vou verificar… Gerente de TI”

                        E assim vai até retornar para você mesmo… normalmente com uma pressão e com um stress muito maior que o estouro da TEMP….

                        []s Ishii
                        ps: não pensem que isso não acontece…hahahaha 🙄

                        #100076
                        rman
                        Participante

                          [quote=”CleitonHanzen”:1wmxdetj][quote=”rman”:1wmxdetj]Boa tarde !

                          Gostaria de saber se no Oracle 10g ou 11g se existe algo onde eu possa definir um time out de consulta. Por exemplo existe um relatório que existe um filtro de datas, o normal é tirar o relatório entre 1 dia apenas, mas o usuário sem saber do que acontece pede o relatório com o filtro de 6 meses, dependendo da consulta até estoura o tablespace TEMP devido ao order by na consulta, alem de demorar horas pra o relatório ser emitido.

                          [/quote]

                          Opá…

                          Se existe essa necessidade, o que pode te auxiliar é criar uma view com a coluna data como “data > sysdate – 5”, por exemplo. Isso, por mais que o usuário informasse 30 dias na tela, no máximo seriam retornados os dados dos ultimos 5 dias. Mas caso quiser fazer a coisa “certa”, realmente vai ter que editar a a aplicação e até retornar uma mensagem “adequada” para o proto-usuário que fizer a ca***a…. 😀 [/quote]

                          CleitonHanzen,

                          Obrigado pela sugestão, mas eu gostaria de uma solução genérica, que se aplique a qualquer relatório (são quase mil relatórios), eu penso assim, qualquer relatório que demore mais q meia hora, é um relatório inviável de se trabalhar, se está demorando mais de meia hora é por que algo está errado.

                          #100131
                          rman
                          Participante

                            [quote=”Ishii”:300g1rgo]Olá,

                            Acho que somente alterando a app mesmo. Acho que o profile não funcionaria (a não ser que conste como IDLE) mas mesmo assim não evitaria o estouro da TEMP.

                            No PL/SQL o comando é feito via app também, mas mesmo assim vou testar para saber se é enviado algum comando para o Oracle e depois posto aqui.

                            []s Ishii[/quote]

                            Ishii, descobriu se é enviado algum comando para o Oracle ?

                            #100133
                            Ishii
                            Participante

                              Olá,

                              Na verdade o trace do client do Oracle não mostra nenhum comando Oracle que pare a consulta. Como o cliente do PL/SQL Developer utiliza o OCI.dll ele deve fazer a consulta paginada e ao acionar o botão Final da Consulta ele apenas continua o result set da query, esses comando não são demonstrados no trace, pois ficam na camada da aplicação…

                              O ideal seria verificar na app em Delphi se existem outras opções de consulta, mas acho que isso não deve ser fácil de saber ou até de implementar. Trabalhei com uma app em Centura que utiliza o oraX.dll ou seja, a mesma do SQL*Plus, e nela tivemos que mudar o app para essa paginação em caso de grids pois tinham tabelas com milhões de registros e o grid do Centura tinha uma limitação de 50 mil linhas…

                              Outra saída no nosso caso, foi que os relatórios de maior consumo eram transformados em tabelas temporárias alimentadas por procedures que eram chamadas pela app na execução do relatório. E essas tabelas eram controladas por sessão e apagadas no fechamento da tela do relatório no app…

                              Qualquer coisa, estou a disposição.

                              []s Ishii

                              #100135
                              rman
                              Participante

                                [quote=”Ishii”:2n2knc49]Olá,

                                Na verdade o trace do client do Oracle não mostra nenhum comando Oracle que pare a consulta. Como o cliente do PL/SQL Developer utiliza o OCI.dll ele deve fazer a consulta paginada e ao acionar o botão Final da Consulta ele apenas continua o result set da query, esses comando não são demonstrados no trace, pois ficam na camada da aplicação…

                                O ideal seria verificar na app em Delphi se existem outras opções de consulta, mas acho que isso não deve ser fácil de saber ou até de implementar. Trabalhei com uma app em Centura que utiliza o oraX.dll ou seja, a mesma do SQL*Plus, e nela tivemos que mudar o app para essa paginação em caso de grids pois tinham tabelas com milhões de registros e o grid do Centura tinha uma limitação de 50 mil linhas…

                                Outra saída no nosso caso, foi que os relatórios de maior consumo eram transformados em tabelas temporárias alimentadas por procedures que eram chamadas pela app na execução do relatório. E essas tabelas eram controladas por sessão e apagadas no fechamento da tela do relatório no app…

                                Qualquer coisa, estou a disposição.

                                []s Ishii[/quote]

                                É sabia que não era algo simples de ser implementado…

                                Vou fazer alguns testes com o

                                ALTER SYSTEM KILL SESSION ‘sid,serial#’;

                                Como é apenas para relatório, talvez matar a sessão e conectar novamente pode ser um solução…

                                Obrigado pela atenção…

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