Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Teoría en transacciones

Estas en el tema de Teoría en transacciones en el foro de Oracle en Foros del Web. Buen día comunidad Estudiando un poco el tema de transacciones sobre oracle y haciendo algunas pruebas, me he encontrado con algunas cosas de las cuales ...
  #1 (permalink)  
Antiguo 27/05/2010, 11:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Teoría en transacciones

Buen día comunidad


Estudiando un poco el tema de transacciones sobre oracle y haciendo algunas pruebas, me he encontrado con algunas cosas de las cuales me gustaría saber la teoría y el funcionamiento interno que hace oracle en estos aspectos.
Código SQL:
Ver original
  1. SQL> CREATE TABLE prueba(num NUMBER);
  2.  
  3. Tabla creada.
  4.  
  5. SQL> INSERT INTO prueba VALUES(1);  
  6.  
  7. 1 fila creada.
  8.  
  9. SQL> INSERT INTO prueba VALUES(2);
  10.  
  11. 1 fila creada.
  12. SQL> ALTER TABLE prueba ADD num2 NUMBER;
  13.  
  14. Tabla modificada.
  15.  
  16. SQL> ROLLBACK;
  17.  
  18. ROLLBACK terminado.
  19.  
  20. SQL> SELECT *FROM prueba;
  21.  
  22.        NUM       NUM2
  23. ---------- ----------
  24.          1
  25.          2

De esto se deduce, que una sentencia DDL hace un commit implicito de la transacción y la finaliza, ya que al hacer rollback, los registros fueron previamente confirmados por la sentencia DDL.


Mi segunda prueba, fue la que me trajo interrogantes.
Código SQL:
Ver original
  1. SQL> INSERT INTO prueba (num) VALUES(3);
  2.  
  3. 1 fila creada.
  4.  
  5. SQL> SELECT *FROM prueba;
  6.  
  7.        NUM       NUM2
  8. ---------- ----------
  9.          1
  10.          2
  11.          3
  12.  
  13. SQL> ALTER TABLE prueba ADD num3 NUMBERS;
  14. ALTER TABLE prueba ADD num3 NUMBERS
  15.                             *
  16. ERROR en línea 1:
  17. ORA-00902: tipo de dato no válido
  18.  
  19.  
  20. SQL> ROLLBACK;
  21.  
  22. ROLLBACK terminado.
  23.  
  24. SQL> SELECT *FROM prueba;
  25.  
  26.        NUM       NUM2
  27. ---------- ----------
  28.          1
  29.          2
  30.          3

Ejecuto una sentencia DDL con un error (tipo de dato NUMBERS) y efectivamente me muestra el error. Pero al hacer rollback, me doy cuenta que aunque fue una sentencia DDL fallida, me ha ejecutado el commit implicito. :

En una tercera prueba hago esto:
Código SQL:
Ver original
  1. SQL> INSERT INTO prueba (num) VALUES(4);
  2.  
  3. 1 fila creada.
  4.  
  5. SQL> SELECT *FROM prueba;
  6.  
  7.        NUM       NUM2
  8. ---------- ----------
  9.          1
  10.          2
  11.          3
  12.          4
  13.  
  14. SQL> ALTER TABLE prueba DROP num2;
  15. ALTER TABLE prueba DROP num2
  16.                         *
  17. ERROR en línea 1:
  18. ORA-00905: falta una palabra clave
  19.  
  20.  
  21. SQL> ROLLBACK;
  22.  
  23. ROLLBACK terminado.
  24.  
  25. SQL> SELECT *FROM prueba;
  26.  
  27.        NUM       NUM2
  28. ---------- ----------
  29.          1
  30.          2
  31.          3

En este caso, aunque mandé una sentencia DDL errornea (Por un error de sintaxis), al hacer ROLLBACK si me deja deshacer los cambios.

En ultimas mi pregunta es:
Cual es la secuencia que realiza ORACLE al ejecutar sentencias DDL dentro de una transacción en curso?

Muchas gracias por su atención
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #2 (permalink)  
Antiguo 28/05/2010, 09:48
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Teoría en transacciones

Hola huesos52,

Umm coye no estoy seguro de lo que digo al 100%, pero al parecer el ultimo error es encontrado por asi decirlo en la etapa de parse de la sentencia DDL y el penultimo error es encontrado en la etapa de execute de la sentencia. Ya que en el parse se esta validando la estructura en si del sql. Ahora por como se ven las cosas el commit implicito es realizado antes del execute de la setencia por como lo demuestra tu investigacion ya que no hubo quejas con la estructura del sql sino con el tipo de dato. Esta muy interesante tu post, estoy investigando....

Aqui un link en ingles de como funcionan las setencias DML y al final hablan de como difieren las DDL. Ahora lo que si quiero saber es en que fase realiza el commit implicito, solo supongo que es despues del parse. Las fase no las listo xq no estoy completamente seguro de cuales son, sin embargo en el link hablan un poco de eso.

http://ovir.icp.ac.ru/oracle/doc/ser...6/sqlconce.htm

Saludos,
  #3 (permalink)  
Antiguo 28/05/2010, 10:52
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Teoría en transacciones

Sois unos cracks los dos.

Gracias a este foro y a vosotros , siempre encuentro cosas nuevas y utiles para mi trabajo.
  #4 (permalink)  
Antiguo 28/05/2010, 12:36
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Teoría en transacciones

Ante todo... mil gracias. El enlace que me diste, es un muy buen punto de arranque. Sin embargo, también sigo buscando por mi cuenta y cualquier novedad la postearé.


Un saludo a ambos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 28/05/2010, 13:51
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
De acuerdo Respuesta: Teoría en transacciones

Hola, esta muy interesante esto.

He buscado algo en la web y en la documentación de 11g. Me he encontrado una tablita bien interesante donde al parecer se muestra como caracteristica nueva que el commit implicito puede ser deshabilitado (Confirmar esto). Ahora bien, nuestro escenario seria

AutoCommit

OFF

DDLCommitBehavior

ON

Relationship

Configuración recomendada. Las sentencias DDL son implicitamente comiteadas antes y despues del execute. Todas las otras sentencias requieren un commit explicito.

Basado en lo posteado antes, en el ultimo caso, la sentencia no paso la validacion del sql o el parse por asi decirlo y por ende ni penso en realizar el execute. La penultima Realizo el parse, se podria decir que estaba correcta, hizo commit, hizo execute y esta fallo por el tipo de dato he hizo rollback del DDL.

He aqui otro enlace que nos habla un poco de como funcionan dichas transacciones. (Revisar tabla 8-1 o leerlo todo) (Ingles)

http://download.oracle.com/docs/cd/E...3065/trans.htm

Saludos huesos52, jc3000, y a toda la comunidad que presta su apoyo a los post.

Excelente que nunca nos conformemos con solo saber un poco.

  #6 (permalink)  
Antiguo 28/05/2010, 15:01
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Teoría en transacciones


Perfecto.

Muchísimas gracias 8vio. Una respuesta así era la que estaba buscando.

Apenas llevo unos meses incursionando en este mundo y todavía no domino como buscar en esta extensa pero excelente documentación.

Son unos tesos.

saludos desde colombia
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 31/05/2010, 09:19
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 16 años
Puntos: 6
Respuesta: Teoría en transacciones

Excelente que te haya servido.... Igualmente aprendi algo nuevo con este post, muchas gracias por el reto.

Un misterio mas, resuelto

Saludos y suerte.
  #8 (permalink)  
Antiguo 01/06/2010, 18:56
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Teoría en transacciones

Q grandes k-r-j !!!!!!!
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red

Etiquetas: transacciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:30.