sql >> Databáze >  >> RDS >> Oracle

Proč v Oracle SQL nejsou odstraněné (nepotvrzené) řádky viditelné v aktuální relaci, ale viditelné v jiných relacích?

Stejně jako diskuse o vlastnostech ACID, na které ziesemer vás odkázal, měli byste vědět o Ovládání více verzí souběžnosti nebo MVCC. Chcete-li vědět „všechno o tom“, zvažte přečtení Řízení souběžnosti a obnova v databázových systémech od Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (k dispozici ke stažení).

V Oracle a dalších podobných MVCC DBMS, když zahájíte transakci, je uchována poznámka o časovém razítku, které identifikuje tento čas zahájení (ale hodnota časového razítka nemusí být nutně jednoduchá hodnota 'sekundy od Unix Epoch'). Zatímco transakce běží, neuvidí žádná data vložená s časovým razítkem po jejím začátku. Systém uchovává předchozí verze datových stránek dostupné pro transakce, které stále běží. Když transakce zapíše stránku, vytvoří novou kopii s novým časovým razítkem, ale tato kopie není zpřístupněna ostatním transakcím, dokud se modifikující transakce nepotvrdí, a dokonce i poté je zpřístupněna pouze transakcím, které začínají po potvrzení.



  1. Proč vytváříte pohled v databázi?

  2. 12c Redakce dat

  3. Zřetězení sloupců vrátí Null Mysql - Php

  4. Odstranění duplicitních hodnot na základě pouze jednoho sloupce tabulky