- Este tópico contém 13 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 4 meses atrás por
rman.
-
AutorPosts
-
28 de julho de 2011 às 11:09 pm #100178
rman
ParticipanteBoa 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 ?
11 de agosto de 2011 às 4:31 pm #100270felipeg
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.11 de agosto de 2011 às 9:29 pm #100279rman
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 ?
11 de agosto de 2011 às 9:36 pm #100280felipeg
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.11 de agosto de 2011 às 10:05 pm #100283rman
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
11 de agosto de 2011 às 10:18 pm #100285felipeg
ParticipanteHum, 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.11 de agosto de 2011 às 11:24 pm #100287Ishii
ParticipanteOlá,
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
11 de agosto de 2011 às 11:27 pm #100288felipeg
ParticipanteViu, 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.12 de agosto de 2011 às 4:08 pm #100293rman
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;
beginopen 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 ?
12 de agosto de 2011 às 5:32 pm #100297Ishii
ParticipanteOlá,
A coluna está nula? Tente colocar um NVL
v_size := utl_raw.length(nvl(v_longcol,0));[]s Ishii
13 de agosto de 2011 às 6:45 am #100315rman
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…
13 de agosto de 2011 às 6:24 pm #100320Ishii
ParticipanteOlá,
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
16 de agosto de 2011 às 5:01 pm #100351rman
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;
17 de agosto de 2011 às 10:58 pm #100372rman
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;
/
-
AutorPosts
- Você deve fazer login para responder a este tópico.