- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por
facc.
-
AutorPosts
-
3 de julho de 2009 às 12:56 am #87698
facc
ParticipanteEstou tendo um problema com essa Inactive Session
Vou tentar explicar mais ou menos o que acontece.
Tem um sistema de loja que realiza reservas de alguns numeros através de uma página ASP (as lojas não tem acesso direto ao banco)
Mas notei que algumas vezes as sessões ficam inativas ocasionando demora para a realização dessas reservas, imagine 69 lojas ligando reclamando dessa demora. Isso ocorreu das 15:14 até as 15:45 de hoje (02/07/2009) e voltou sem mais nem menos, agora ele fica nesse ping-pongAgora como eu resolvo isso?
3 de julho de 2009 às 5:41 am #87700David Siqueira
ParticipanteOpa!..vou tentar te ajudar, cara.
VOcê usa algum drive especifico pra se conectar ao Banco? Uma vez que as conexões não são feitas de maneira direta via client Oracle.Você por um acaso saberia dizer se essas sesões ao entrarem no seu Banco ficam inativas ou se pelo menos apresentam algum traço de execução?
Há eventos de Waits ligados a essas sessões?
Abraços.
3 de julho de 2009 às 4:00 pm #87701facc
ParticipanteEntão é uma chamada via Página ASP (Não é aberta para a internet) não sei ao certo como é feita essa conexão, pois é uma empresa terceirizada que chama as minhas procedures.
Sim tenho um Lock Table nessa procedure, mas pelo que eu sei, vc comitando a tabela é liberada. Essa procedure já vem sendo executada desde 19/06/2009.segue a procedure
CREATE OR REPLACE PROCEDURE CYBELAR_RES_NRSORTE(P_LOJA IN varchar2,
P_PDV IN VARCHAR2,
P_QTD IN NUMBER,
P_NROSORTE OUT varchar2,
P_CONFIRMA OUT NUMBER) is
/***********************************************************
* PROCEDURE : CYBELAR_RES_NRSORTE *
* OBJETIVO : RESERVAR O NRSORTE P/ A LOJA E "ESCONDER" *
DAS DEMAIS LOJAS E OUTRAS RESERVAS *
* CRIACAO : 19/06/2009 *
* VERSAO : 1.5 *
* AUTOR : FABIO A. CAMPOS CRUZ - *
***********************************************************/
look_error exception;pragma exception_init(look_error, -54);
retorno_nrsorte varchar2(5);
ListaNrsorte varchar2(1000);
RETORNOCONFIRMA NUMBER;
erro_int varchar2(1000);
vc_dir_log varchar2(100);
vc_id_log varchar2(7) := 'CYBELAR';
vc_arq_log varchar2(60) := 'NRSORTE_' || to_char(sysdate, 'DDMMYY') ||
'.LOG';
vc_nome_pgm varchar2(50) := 'PDV_NRSORTE';
vu_file utl_file.file_type;VN_QTREG NUMBER := 0;
begin
BEGIN
SELECT PINT_NM_DIRETORIO_LOG
INTO VC_DIR_LOG
FROM GEMCO_PARAMETRO_INTERFACE PINT, GEMCO_SISTEMA SIST
WHERE PINT.PINT_CD_SISTEMA = SIST.SIST_CD_SISTEMA
AND SIST.SIST_DS_SISTEMA = vc_nome_pgm;
EXCEPTION
-- SE NAO EXISTIR INFORMAR O DIRETORIO ONDE DEVERA SER
-- GERADO O LOG DE OCORRENCIAS
WHEN NO_DATA_FOUND THEN
VC_DIR_LOG := '/integra/Log';
WHEN TOO_MANY_ROWS THEN
VC_DIR_LOG := '/integra/Log';
WHEN OTHERS THEN
VC_DIR_LOG := '/integra/Log';
END;begin
vu_file := utl_file.fopen(vc_dir_log, vc_arq_log, 'r');
utl_file.fclose(vu_file);
exception
when others then
sp_int_gemco_gera_log('INICIO DO LOG',
vc_dir_log,
vc_id_log,
vc_arq_log,
sysdate,
null,
vc_nome_pgm,
0,
0,
0);
end;FOR rNrSorte IN 1 .. P_QTD loop
BEGIN
LOCK TABLE CYBELAR_NROSORTE IN EXCLUSIVE MODE;SELECT NRO.NROSORTE INTO retorno_nrsorte FROM CYBELAR_NROSORTE NRO WHERE LOJA IS NULL AND FLGUSO = 0 AND TO_CHAR(MES_ANO, 'YYYYMM') = TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'YYYYMM') AND ROWNUM <= 1 FOR UPDATE NOWAIT; ListaNrsorte := retorno_nrsorte || '|' || ListaNrsorte; UPDATE CYBELAR_NROSORTE SET FLGUSO = 1, LOJA = P_LOJA, PDV_CAIXA = P_PDV, DATANRSORTE = SYSDATE WHERE NROSORTE = retorno_nrsorte AND TO_CHAR(MES_ANO, 'YYYYMM') = TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'YYYYMM'); COMMIT; EXCEPTION WHEN look_error THEN NULL; END; RETORNOCONFIRMA := 0; VN_QTREG := VN_QTREG + 1;end loop;
COMMIT;IF VN_QTREG = 0 THEN
ERRO_INT := 'ERRO AO RESERVAR O NRSORTE (' || P_NROSORTE ||
') PARA A LOJA ' || P_LOJA || '.';
RETORNOCONFIRMA := 1;
ELSE
ERRO_INT := 'RESERVADO COM SUCESSO (' || ListaNrsorte ||
'). LOJA ' || P_LOJA;
RETORNOCONFIRMA := 0;
END IF;sp_int_gemco_gera_log('GERA LOG',
vc_dir_log,
vc_id_log,
vc_arq_log,
sysdate,
erro_int,
vc_nome_pgm,
0,
0,
0);sp_int_gemco_gera_log('FIM LOG',
vc_dir_log,
vc_id_log,
vc_arq_log,
sysdate,
null,
vc_nome_pgm,
0,
0,
0);
COMMIT;P_CONFIRMA := RETORNOCONFIRMA;
P_NROSORTE := ListaNrsorte;end cybelar_res_nrsorte;
3 de julho de 2009 às 6:25 pm #87703vieri
ParticipantePra que utilizar o lock table in exclusive mode, se ele utiliza o select for update ?
O select for update já garante isso…
isso pra mim é overhead de gerência de bloqueio.
3 de julho de 2009 às 6:34 pm #87705facc
Participante[quote=”vieri”:1b3ml10g]Pra que utilizar o lock table in exclusive mode, se ele utiliza o select for update ?
O select for update já garante isso…
isso pra mim é overhead de gerência de bloqueio.[/quote]
Pq eu estava utilizando apenas o select for update e mesmo assim estava me retornando registros duplicados
-
AutorPosts
- Você deve fazer login para responder a este tópico.