Oracle
 sql >> Base de données >  >> RDS >> Oracle

Dans Oracle SQL, pourquoi les lignes supprimées (non validées) ne sont-elles pas visibles dans la session en cours mais visibles dans d'autres sessions ?

Ainsi que la discussion des propriétés ACID auxquelles ziesemer vous a référé, vous devriez connaître contrôle de la concurrence multi-version ou MVCC. Si vous voulez tout savoir à ce sujet, pensez à lire Concurrency Control et récupération dans les systèmes de bases de données par Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (disponible en téléchargement).

Dans Oracle et d'autres SGBD MVCC similaires, lorsque vous démarrez une transaction, une note est conservée d'un horodatage qui identifie cette heure de début (mais la valeur d'horodatage n'est pas nécessairement une simple valeur "secondes depuis l'époque Unix"). Pendant que cette transaction est en cours d'exécution, elle ne verra aucune donnée insérée avec un horodatage après son heure de début. Le système conserve les versions précédentes des pages de données disponibles pour les transactions en cours d'exécution. Lorsque la transaction écrit une page, elle crée une nouvelle copie avec un nouvel horodatage, mais cette copie n'est pas mise à la disposition des autres transactions tant que la transaction de modification n'est pas validée, et même alors, elle n'est disponible que pour les transactions qui démarrent après la validation.