Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

No Oracle SQL, por que as linhas excluídas (não confirmadas) não são visíveis na sessão atual, mas visíveis em outras sessões?


Assim como a discussão das propriedades ACID para as quais ziesemer encaminhou você, você deve saber sobre o Controle de simultaneidade de várias versões ou MVCC. Se você quiser saber 'tudo sobre isso', leia Concurrency Control e Recuperação em Sistemas de Banco de Dados por Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (disponível para download).

No Oracle e em outros DBMS MVCC semelhantes, quando você inicia uma transação, é mantida uma nota de um carimbo de data/hora que identifica essa hora de início (mas o valor do carimbo de data/hora não é necessariamente um simples valor de 'segundos desde o Unix Epoch'). Enquanto essa transação estiver em execução, ela não verá nenhum dado inserido com um carimbo de data/hora após sua hora de início. O sistema mantém as versões anteriores das páginas de dados disponíveis para transações que ainda estão em execução. Quando a transação grava uma página, ela cria uma nova cópia com um novo carimbo de data/hora, mas essa cópia não é disponibilizada para outras transações até que a transação modificadora seja confirmada e, mesmo assim, ela é disponibilizada apenas para transações iniciadas após a confirmação.