Question

J'utilise Oracle 11.1 et je voudrais savoir si deux lignes dans une table où Inséré par la même transaction.

Y at-il une instruction SQL facile à tracer une ligne à un identifiant de transactions? Le tableau est un insert seule table.

Quelles sont mes options? Une solution de baisc ferait, je ne veux pas vraiment quelque outil supplémentaire pour analyser les fichiers journaux.

Merci

Autres conseils

Il n'y a aucun moyen fiable à 100% à la carte des lignes à des transactions, sauf si vous ajoutez des colonnes personnalisées.

Utilisation ORA_ROWSCN, même avec ROWDEPENDENCIES activé, ne sont pas toujours précis. Le test de Jack est correct, et montre qu'une seule transaction sauvera toutes les lignes avec le même SCN. Cependant, il est également possible pour un autre transaction pour créer une ligne avec le même SCN.

--Create a table with ROWDEPENDENCIES enabled.
drop table rowscn_test;
create table rowscn_test(a number) rowdependencies;

--Create 100 jobs to insert and commit one row.
begin
    for i in 1 .. 100 loop
        dbms_scheduler.create_job(
            job_name   => 'rowscn_'||i,
            job_type   => 'PLSQL_BLOCK',
            job_action => 'begin insert into rowscn_test values(1); commit; end;',
            enabled    => true
        );
    end loop;
end;
/

--If ORA_ROWSCN was reliable then this query would not return any rows.
select ora_rowscn, count(*)
from rowscn_test
group by ora_rowscn
having count(*) > 1;

Exemple de résultats:

ORA_ROWSCN      COUNT(*)
----------      --------
12124183417057   2

Les résultats ne sont pas déterministe et sera différent pour chaque système. Parfois, les ORA_ROWSCNs sont uniques et la requête renvoie aucun résultat. Mais je ne me fierais pas à ce être toujours vrai.

scroll top