Boa tarde,
Tenho uma duvida, por exemplo rodo n scripts em sessões separadas, sem dar commit, gostaria de saber como posso saber o que ainda não foi commmitado, existe isso ?
Como saber o que não foi commitado no banco
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 17 Jan 2006 2:35 pm
- Localização: Porto Alegre \ RS
Felipe Renz
DBA Oracle
DBA Oracle
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Tópico movido para o grupo de DBA's para que possam auxiliá-lo melhor.
Tópico movido para o grupo de DBA's para que possam auxiliá-lo melhor.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Não, pois o ORACLE tem leitura consistente, ou seja, as outras sessões só conseguem ver o que já foi comitado.
MAS, dá pra fazer um tipo de LOG pra resolver esse problema.
Algo assim:
* Você cria uma tabela com os seguintes campos:
- SESSIONID
- INICIO
- FIM
- OBS (opcional)
Depois, você cria uma procedure com PRAGMA AUTONOMOUS TRANSACTION. (com isso, essa procedure é executada numa "sessão separada", você pode comitar dentro dela que não vai atrapalhar o resto).
Nessa procedure, você RECEBE como parâmetro o SESSION_ID do seu script. (veja esse link)
* Daí a procedure faz um SELECT na tabela que você criou. SE o sessionID não foi encontrado, INSERE (colocando a data de inicio). Se já existe, faz UPDATE colocando a dataFIM. E COMMITA depois disso.
Dessa forma, basta você executar essa procedure no INICIO e no FIM de cada script. Ele vai salvar nessa tabela de LOG as informações que você quer.
Pra ficar 100% mesmo, você ainda pode fazer uma VIEW dessa tabela com a V$SESSION pra ver se a sessão continua viva. (tipo: se por acaso o programa INICIOU - gravou no LOG e depois abortou na metade...
Pela V$SESSION tem como ver se as sessões que não possuem FIM ainda estão VIVAS...
MAS, dá pra fazer um tipo de LOG pra resolver esse problema.
Algo assim:
* Você cria uma tabela com os seguintes campos:
- SESSIONID
- INICIO
- FIM
- OBS (opcional)
Depois, você cria uma procedure com PRAGMA AUTONOMOUS TRANSACTION. (com isso, essa procedure é executada numa "sessão separada", você pode comitar dentro dela que não vai atrapalhar o resto).
Nessa procedure, você RECEBE como parâmetro o SESSION_ID do seu script. (veja esse link)
* Daí a procedure faz um SELECT na tabela que você criou. SE o sessionID não foi encontrado, INSERE (colocando a data de inicio). Se já existe, faz UPDATE colocando a dataFIM. E COMMITA depois disso.
Dessa forma, basta você executar essa procedure no INICIO e no FIM de cada script. Ele vai salvar nessa tabela de LOG as informações que você quer.
Pra ficar 100% mesmo, você ainda pode fazer uma VIEW dessa tabela com a V$SESSION pra ver se a sessão continua viva. (tipo: se por acaso o programa INICIOU - gravou no LOG e depois abortou na metade...
Pela V$SESSION tem como ver se as sessões que não possuem FIM ainda estão VIVAS...
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 17 Jan 2006 2:35 pm
- Localização: Porto Alegre \ RS
Felipe Renz
DBA Oracle
DBA Oracle
Pessoal,
Segue solução encontrada, este retorna o ID, das transações DML que não sofreram commit nem rollback.
Segue solução encontrada, este retorna o ID, das transações DML que não sofreram commit nem rollback.
SELECT S.SID FROM V$TRANSACTION T, V$SESSION S WHERE S.SADDR = T.SES_ADDR;
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
beleza, mas nesse caso você vai estar olhando TUDO que está pendente. Vai ter uncommited data de várias pessoas...
Vai ter que "catar" ali no meio o que te interessa :-/
Vai ter que "catar" ali no meio o que te interessa :-/
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes