español - scripts oracle ejemplos
¿Oracle permite la opción de lectura no confirmada? (3)
En db2, una consulta con una cláusula ''with ur'' permite que la consulta sea una lectura no confirmada, al igual que la cláusula ''with nolock'' en mysql. ¿Existe tal opción en Oracle también? Si no, ¿por qué?
La respuesta de Tom Kyte es el oráculo WRT correcto, no existe una lectura sucia debido a su arquitectura de control de concurrencia de varias versiones (MVCC).
Desde la perspectiva de la funcionalidad de la aplicación, estoy completamente de acuerdo con Tom; no hay una buena razón o lecturas sucias.
¿Por qué usarlo fuera de Oracle? Donde no hay MVCC (por ejemplo, MySQL, Ingres) es un truco para evitar problemas de bloqueo que pueden ralentizar el rendimiento o hacer que el sistema de bloqueo se "quede sin bloqueos" si no se ajusta correctamente. De la misma manera que necesita ajustar la reversión / deshacer en Oracle, debe administrar el sistema de bloqueo en bases de datos que no sean de MVCC.
Entonces, ¿por qué podría ser útil con Oracle ? Como un aumento de rendimiento para funciones de solo lectura donde "datos incorrectos" es altamente improbable y altamente intrascendente. En MySQL / DB2 / Ingres / Informix (no estoy seguro acerca de SQL Server / Sybase) se puede usar para omitir la facilidad de administración de bloqueos para el rendimiento.
Aquí hay un ejemplo de una situación donde las lecturas no necesitan consistencia:
- Lista de todos los productos
Aquí hay un ejemplo de una situación donde las lecturas necesitan consistencia:
- Lista de productos en stock
Oracle simplemente no concibe lecturas sucias, ni podría "agregarse como una característica" sin perder realmente el beneficio del rendimiento (es decir, se necesitarían demasiados trucos para obtener los datos sucios en la verdadera arquitectura MVCC de Oracle).
Si bien las respuestas anteriores son realmente correctas, puede echar un vistazo a las Transacciones autónomas, pero tenga en cuenta que no son recomendables y puede consultar aquí Transacciones autónomas y las desventajas aquí Transacciones autónomas: una función mal entendida .
Tom proporciona una excelente respuesta a esto: en niveles de aislamiento de transacciones
Él dice:
El nivel de aislamiento LEER NO COMPROMETIDO permite lecturas sucias. Oracle Database no usa lecturas sucias, ni siquiera las permite. El objetivo básico de un nivel de aislamiento READ UNCOMMITTED es proporcionar una definición basada en estándares que permita lecturas sin bloqueo.
...
Ahora, una base de datos que permitió una lectura sucia ... no solo devuelve la respuesta incorrecta, sino que también devuelve ... [una respuesta] ... que nunca existió en la tabla. En una base de datos multiusuario, una lectura sucia puede ser una característica peligrosa. Personalmente, nunca he visto la utilidad de eso ...
El punto aquí es que la lectura sucia no es una característica; más bien, es una responsabilidad. En Oracle Database, simplemente no es necesario. Obtiene todas las ventajas de una lectura sucia, sin bloqueo, sin ninguno de los resultados incorrectos.