Como saber o que não foi commitado no banco

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
feliperenz
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Ter, 17 Jan 2006 2:35 pm
Localização: Porto Alegre \ RS
Felipe Renz
DBA Oracle

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 ?
Trevisolli
Moderador
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

Brother,

Tópico movido para o grupo de DBA's para que possam auxiliá-lo melhor.
Avatar do usuário
dr_gori
Moderador
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

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...

:-o
feliperenz
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Ter, 17 Jan 2006 2:35 pm
Localização: Porto Alegre \ RS
Felipe Renz
DBA Oracle

Pessoal,

Segue solução encontrada, este retorna o ID, das transações DML que não sofreram commit nem rollback.

Selecionar tudo

SELECT S.SID FROM V$TRANSACTION T, V$SESSION S WHERE S.SADDR = T.SES_ADDR;
Avatar do usuário
dr_gori
Moderador
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

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 :-/
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes