Estou usando o Oracle 11.1 e gostaria de descobrir se duas linhas em uma tabela foram inseridas pela mesma transação.
Existe uma instrução SQL fácil para mapear uma linha para um ID de transação? A tabela é uma tabela somente de inserção.
Quais são minhas opções? Alguma solução básica serviria, eu realmente não quero alguma ferramenta extra para analisar os arquivos de log.
Obrigado
Você pode obter o SCN para uma linha com a pseudocoluna ORA_ROWSCN
A menos que você tenha definido o rastreamento de dependência em nível de linha para a tabela, isso relatará o SCN da última alteração no bloco em que a linha está, o que pode não ser muito útil. Você pode ativar o rastreamento de dependência em nível de linha apenas no
create table
tempo, portanto, pode ser necessário descartar e recriar sua tabela.Observe que o rastreamento em nível de linha aumenta o tamanho de cada linha em 6 bytes.
com dependências de linha:
sem rowdependencies (norowdependencies é o padrão):
Não há uma maneira 100% confiável de mapear linhas para transações, a menos que você adicione colunas personalizadas.
Usar
ORA_ROWSCN
, mesmo comROWDEPENDENCIES
ativado, nem sempre é preciso. O teste de Jack está correto e mostra que uma única transação salvará todas as linhas com o mesmo SCN. No entanto, também é possível que uma transação diferente crie uma linha com o mesmo SCN.Resultados da amostra:
Os resultados não são determinísticos e serão diferentes para cada sistema. Às vezes, os
ORA_ROWSCN
s são exclusivos e a consulta não retorna resultados. Mas eu não confiaria que isso sempre seria verdade.