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

      Boa tarde !

      Alguém sabe como calcular o tamanho ocupado por um campo LONG RAW e BLOB ?

      Exemplo:

      CREATE TABLE ebook (
      ebook_id NUMBER,
      resumo BLOB,
      completo LONG RAW
      );

      Gostaria de saber quantos MB está sendo transferido do servidor pro cliente. Como os campos são LONG RAW e BLOG, está dando muitos eventos de waits, pois existe uma query assim:

      SELECT * FROM ebook;

      Estou recebendo o seguinte item no ADDM:

      Wait event “SQL*Net more data to client” in wait class “Network” was consuming significant database time.

      Alguém sabe como melhorar isso ?

      #100270
      felipeg
      Participante

        [quote=”rman”:2r8cxn69]Boa tarde !

        Alguém sabe como calcular o tamanho ocupado por um campo LONG RAW e BLOG ?

        Exemplo:

        CREATE TABLE ebook (
        ebook_id NUMBER,
        resumo BLOB,
        completo LONG RAW
        );

        Gostaria de saber quantos MB está sendo transferido do servidor pro cliente. Como os campos são LONG RAW e BLOG, está dando muitos eventos de waits, pois existe uma query assim:

        SELECT * FROM ebook;

        Estou recebendo o seguinte item no ADDM:

        Wait event “SQL*Net more data to client” in wait class “Network” was consuming significant database time.

        Alguém sabe como melhorar isso ?[/quote]

        Rman,

        Para identificar o tamanho de um BLOB use o seguinte comando


        select dbms_lob.getlength() from ;

        Sobre a lentidão ai já deixo pros amigos do fórum pois é uma questão que pode não só envolver o banco.

        Atenciosamente,
        Felipe.

        #100279
        rman
        Participante

          @felipeg

          Obrigado por responder…

          Para o campo BLOB está retornando nulo e zero… isso quer dizer que não armazenaram nenhum arquivo né ?

          Para o campo LONG RAW retorna ORA-00997: illegal use of LONG datatype…

          Creio que a função dbms_lob.getlength é apenas pra BLOB… Saberia dizer se existe outra função pra LONG RAW ?

          #100280
          felipeg
          Participante

            [quote=”rman”:2icp30fm]@felipeg

            Obrigado por responder…

            Para o campo BLOB está retornando nulo e zero… isso quer dizer que não armazenaram nenhum arquivo né ?

            Para o campo LONG RAW retorna ORA-00997: illegal use of LONG datatype…

            Creio que a função dbms_lob.getlength é apenas pra BLOB… Saberia dizer se existe outra função pra LONG RAW ?[/quote]

            Se não me engano é com a utl_raw.length


            select utl_raw.length(campo) from tabela;

            Atenciosamente,
            Felipe.

            #100283
            rman
            Participante

              [quote=”felipeg”:2t3vr3gj][quote=”rman”:2t3vr3gj]@felipeg

              Obrigado por responder…

              Para o campo BLOB está retornando nulo e zero… isso quer dizer que não armazenaram nenhum arquivo né ?

              Para o campo LONG RAW retorna ORA-00997: illegal use of LONG datatype…

              Creio que a função dbms_lob.getlength é apenas pra BLOB… Saberia dizer se existe outra função pra LONG RAW ?[/quote]

              Se não me engano é com a utl_raw.length


              select utl_raw.length(campo) from tabela;

              Atenciosamente,
              Felipe.[/quote]

              @felipeg

              ORA-00997: illegal use of LONG datatype…

              É não foi também… 😥

              Mas mesmo assim, obrigado pela atenção…

              Será que é algo da versão do Oracle ?

              Oracle Database 10g Release 10.2.0.4.0 – 64bit Production

              #100285
              felipeg
              Participante

                Hum, então eu estava enganado…. 8)

                Não lembro de nada pra tirar o tamanho de LONG RAW, talvez tenhamos que esperar alguém do nível do Ishii esclarecer essa.

                De qualquer forma vou dar uma olhada aqui, se achar algo te aviso.

                Atenciosamente,
                Felipe.

                #100287
                Ishii
                Participante

                  Olá,

                  Para as “malditas” colunas do tipo Long Raw, somente com um bloco PL/SQL mesmo…


                  set serveroutput on size 1000000
                  declare
                  v_longcol long raw;
                  v_size number;

                  cursor get_row is
                  ;
                  -- Exemplo: select piece from sys.IDL_UB1$
                  -- where obj# = 1219;

                  begin

                  open get_row;
                  fetch get_row into v_longcol;
                  loop
                  exit when get_row%notfound;
                  v_size := utl_raw.length(v_longcol);
                  dbms_output.put_line(v_size);
                  fetch get_row into v_longcol;
                  end loop;
                  close get_row;
                  end;
                  /

                  A linha do output será o tamanho da coluna….

                  []s Ishii

                  #100288
                  felipeg
                  Participante

                    Viu, falei que tinha que ser alguém do nível dele… 8)
                    Achei essa solução a alguns minutos também…

                    De qualquer forma obrigado, já me ajudou a confirmar que estava correta sem precisar testar hehe.

                    Atenciosamente,
                    Felipe.

                    #100293
                    rman
                    Participante

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

                      Para as “malditas” colunas do tipo Long Raw, somente com um bloco PL/SQL mesmo…


                      set serveroutput on size 1000000
                      declare
                      v_longcol long raw;
                      v_size number;

                      cursor get_row is
                      ;
                      -- Exemplo: select piece from sys.IDL_UB1$
                      -- where obj# = 1219;

                      begin

                      open get_row;
                      fetch get_row into v_longcol;
                      loop
                      exit when get_row%notfound;
                      v_size := utl_raw.length(v_longcol);
                      dbms_output.put_line(v_size);
                      fetch get_row into v_longcol;
                      end loop;
                      close get_row;
                      end;
                      /

                      A linha do output será o tamanho da coluna….

                      []s Ishii[/quote]

                      Não consigo entender por que não funciona no meu caso especifico…

                      Rodei o exemplo, e deu certo… Mas nesse caso da erro:

                      ORA-06502: PL/SQL: numeric or value error
                      ORA-06512: at line 15


                      declare
                      v_longcol long raw;
                      v_size number;

                      cursor get_row is
                      SELECT DOCEDITAL
                      FROM APICE.CLLICITACAO
                      WHERE ENTIDADE = 1
                      AND EXERCICIO = 2010
                      AND TIPOLICITACAO = 6
                      AND LICITACAO = 5;
                      begin

                      open get_row;
                      fetch get_row into v_longcol;
                      loop
                      exit when get_row%notfound;
                      v_size := utl_raw.length(v_longcol);
                      dbms_output.put_line(v_size);
                      fetch get_row into v_longcol;
                      end loop;
                      close get_row;
                      end;

                      A Linha 15 é: fetch get_row into v_longcol;


                      SQL> desc APICE.CLLICITACAO
                      Name Type Nullable Default Comments


                      ENTIDADE NUMBER(10)
                      EXERCICIO NUMBER(10)
                      TIPOLICITACAO NUMBER(10)
                      LICITACAO NUMBER(10)
                      COMISSAO NUMBER(10) Y
                      CONDICAOPAGTO NUMBER(10) Y
                      DATAEMISSAO DATE Y
                      TIPOJULGAMENTO CHAR(1) Y
                      FORMAAPURACAO CHAR(1) Y
                      VALORMAXIMO NUMBER(15,4) Y
                      PRAZOENTREGA NUMBER(10) Y
                      DATAABERTURA DATE Y
                      HORARIOABERTURA VARCHAR2(5) Y
                      OBJETO VARCHAR2(3000) Y
                      OBSERVACAO VARCHAR2(250) Y
                      OBRAENGENHARIA CHAR(1) Y
                      FORMULATECNICA VARCHAR2(50) Y
                      FORMULAPRECO VARCHAR2(50) Y
                      FORMULAGERAL VARCHAR2(50) Y
                      DATAINICIALPROPOSTA DATE Y
                      VALIDADE NUMBER(10) Y
                      DATAFINALPROPOSTA DATE Y
                      HORARIO1PROPOSTA VARCHAR2(5) Y
                      HORARIO2PROPOSTA VARCHAR2(5) Y
                      HORARIO3PROPOSTA VARCHAR2(5) Y
                      HORARIO4PROPOSTA VARCHAR2(5) Y
                      DATAPUBLICACAO DATE Y
                      DESCRICAODOTACAO VARCHAR2(100) Y
                      MODOAVALIACAO VARCHAR2(1) Y
                      SEQUENCIA NUMBER(10) Y
                      REGIMEEXECUCAO NUMBER(10) Y
                      QUANTIDADELOTE NUMBER(10) Y
                      NUMEROPROCESSO NUMBER(10) Y
                      HORARIOFINALPROPOSTA VARCHAR2(5) Y
                      NUMEROLICITACAO NUMBER(10) Y
                      TIPOVALOR CHAR(1) Y
                      CLASSIFICACAOOBJETO NUMBER(10) Y
                      CLAUSULAPRORROGACAO VARCHAR2(1000) Y
                      PROTOCOLO NUMBER(10) Y
                      LOCALPROPOSTA VARCHAR2(200) Y
                      LOCALABERTURA VARCHAR2(200) Y
                      ANOPROTOCOLO NUMBER(10) Y
                      LOCALENTREGA VARCHAR2(200) Y
                      FORMAPAGTO VARCHAR2(1000) Y
                      TIPOCANCELAMENTO CHAR(1) Y
                      NUMEROPROCESSOADM NUMBER(10) Y
                      ORGAOPUBLICACAO VARCHAR2(50) Y
                      NATUREZAPROCEDIMENTO NUMBER(10) Y
                      DATAPRORROGACAO DATE Y
                      DATAPRORROGADA DATE Y
                      DATACANCELAMENTO DATE Y
                      SERVICO CHAR(1) Y
                      NOMEARQUIVO VARCHAR2(100) Y
                      USUARIO VARCHAR2(15) Y
                      DATAINICIALCREDENCIAMENTO DATE Y
                      DATAFINALCREDENCIAMENTO DATE Y
                      LOTEABERTO CHAR(1) Y 'N'
                      NOCONVENIO FLOAT Y
                      MICROPEQUENA CHAR(1) Y 'N'
                      MOTIVOANULACAO VARCHAR2(2000) Y
                      CODBENSSERVICOS NUMBER(9) Y
                      DATATERMINOVIGENCIA DATE Y
                      APROVACAO CHAR(1) Y 'N'
                      MINUTA NUMBER(10) Y
                      LICITACAOESTIMATIVA CHAR(1) Y
                      ORGAOOFICIAL CHAR(1) Y
                      ANEXO NUMBER(9) Y
                      RESERVADOTACAO CHAR(1) Y
                      DOCEDITAL LONG RAW Y
                      TIPOPROTOCOLO NUMBER(10) Y
                      PREGAONOVO CHAR(1) Y
                      STATUS VARCHAR2(200) Y
                      GERADOBLL CHAR(1) Y
                      COTACAO NUMBER(10) Y
                      IMPBLL BLOB Y
                      EXPBLL BLOB Y
                      AVISOBLL BLOB Y
                      ERROBLL BLOB Y
                      NOMEARQBLL_IMP VARCHAR2(500) Y
                      NOMEARQBLL_EXP VARCHAR2(500) Y
                      NOMEARQBLL_AVISO VARCHAR2(500) Y
                      NOMEARQBLL_ERRO VARCHAR2(500) Y
                      PERCENTUAL CHAR(1) Y
                      ENTIDADECOTACAO NUMBER(10) Y

                      O Campo DOCEDITAL é nullable, isso pode influenciar ?

                      #100297
                      Ishii
                      Participante

                        Olá,

                        A coluna está nula? Tente colocar um NVL

                        v_size := utl_raw.length(nvl(v_longcol,0));

                        []s Ishii

                        #100315
                        rman
                        Participante

                          [quote=”Ishii”:1ro5gjgw]Olá,

                          A coluna está nula? Tente colocar um NVL

                          v_size := utl_raw.length(nvl(v_longcol,0));

                          []s Ishii[/quote]

                          O pior que não está hein Ishii…

                          Através do PL/SQL Developer, dá até pra ver em HEX o PDF… Peguei justamente um DOCEDITAL com valor, por que realmente, existem linhas com DOCEDITAL NULL…

                          #100320
                          Ishii
                          Participante

                            Olá,

                            Faz um teste com essa linha em especifico convertendo o campo DOCEDITAL para Blob usando o to_blob e veja se funciona. Se funcionar tente ver o tamanho dele com dbms_lob.getlength

                            Seria algo assim:

                            select dbms_lob.getlength(to_blob(DOCEDITAL )) tam_coluna from APICE.CLLICITACAO
                            where

                            []s Ishii

                            #100351
                            rman
                            Participante

                              [quote=”Ishii”:39uzlu81]Olá,

                              Faz um teste com essa linha em especifico convertendo o campo DOCEDITAL para Blob usando o to_blob e veja se funciona. Se funcionar tente ver o tamanho dele com dbms_lob.getlength

                              Seria algo assim:

                              select dbms_lob.getlength(to_blob(DOCEDITAL )) tam_coluna from APICE.CLLICITACAO
                              where

                              []s Ishii[/quote]

                              Não deu… 😥

                              ORA-00932: inconsistent datatypes: expected BINARY got LONG BINARY.


                              SELECT DBMS_LOB.GETLENGTH(TO_BLOB(DOCEDITAL)) TAM_COLUNA
                              FROM APICE.CLLICITACAO
                              WHERE ENTIDADE = 1
                              AND EXERCICIO = 2010
                              AND TIPOLICITACAO = 6
                              AND LICITACAO = 5;

                              #100372
                              rman
                              Participante

                                @ishii

                                Efetuando mais testes, descobri que existem linhas funcionam outras não, ainda não consegui identificar porque isso ocorre…

                                Através do PL/SQL abri os anexos que eram arquivos .odt usando o Write do Open Office, e os mesmos estavam OK, gostaria de fazer testes em uma nova tabela, inserindo o anexo com problema e o anexo que esta OK…

                                Como inserir o anexo no banco em uma coluna LONG RAW pelo sqlplus? Existem várias formas de fazer isso? Estou desconfiado que a forma que foi inserido pode estar causando o problema…


                                set serveroutput on size 1000000
                                declare
                                v_longcol long raw;
                                v_size number;

                                cursor get_row is
                                ;
                                -- Exemplo: select piece from sys.IDL_UB1$
                                -- where obj# = 1219;

                                begin

                                open get_row;
                                fetch get_row into v_longcol;
                                loop
                                exit when get_row%notfound;
                                v_size := utl_raw.length(v_longcol);
                                dbms_output.put_line(v_size);
                                fetch get_row into v_longcol;
                                end loop;
                                close get_row;
                                end;
                                /

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