viernes, 29 de julio de 2011

Oracle 11gR2: SQL*PLUS el parámetro exitcommit


En las versiones previas a Oracle Database 11gR2, la herramienta SQL*PLUS, utilizada para accesar a nivel de línea de comando la base de datos, requería que de manera explícita, se especificara la finalización de un trabajo, o en palabras más técnicas, que se hiciera un "COMMIT" después del último comando ejecutado, en caso de estar actualizando, insertando o borrando registros en una tabla, antes de hacer un "EXIT" de la herramienta, para fijar los cambios en la base de datos.

Cuando le dabamos "EXIT" y no habíamos hecho "COMMIT"- fijación de datos, automáticamente la base de datos, generaba un rollback de las transacciones pendientes de fijación.

En la versión 11gR2, las cosas han cambiado.  Ahora en la herramienta SQL*Plus, existe un nuevo parámetro llamado "exitcommit", que controla, que debe hacer la herramienta, previo a la salida de la misma, en caso de no haber hecho un COMMIT explícito.

De facto, este parámetro, esta configurado al valor "ON", por tanto, antes de salir de la herramienta, realiza un "COMMIT" explícito.
Esto es sólo, si se hace a través de la palabra EXIT, si la salida de la herramienta, es a través de darle click en la "X" de la ventana, cumple con las mismas pautas que ya previamente conocemos.  Si cerramos abruptamente la aplicación, se generará un rollback.

Veamos un ejemplo:


SQL> connect hr/hr
Connected.
SQL> select count(*) from employees;

  COUNT(*)
----------
       107

Vamos a crear una tabla de pruebas, tomando como origen los registros de la tabla employees del esquema HR.

SQL> create table pruebas as select * from employees;

Table created.

SQL> select count(*) from pruebas;

  COUNT(*)
----------
       107

Procedemos a borrar los registros de la tabla de pruebas y luego introducimos el comando "EXIT".

SQL> delete pruebas;

107 rows deleted.

SQL> exit

Nos volvemos a conectar con la herramienta de la base de datos y como puede verificar, aunque no hice "COMMIT" al final de la transacción realizada, cuando le dimos "EXIT", hizo una fijación de los cambios realizados en la base de datos.

SQL*Plus: Release 11.2.0.1.0 Production on Vie Jul 29 14:14:03 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter user-name: hr
Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from pruebas;

  COUNT(*)
----------
         0

Volvamos a repetir el ejercicio, pero esta vez, vamos a cambiar el valor de facto, del parámetro "EXITCOMMIT".
Primero que todo verifiquemos que el parámetro esta en estado "ON".

SQL*Plus: Release 11.2.0.1.0 Production on Vie Jul 29 14:14:03 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter user-name: hr
Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from pruebas;

  COUNT(*)
----------
         0

SQL> show exitcommit
exitcommit ON

Ahora procedemos a setear el parámetro al valor "OFF". Borramos la tabla de ejemplo y la volvemos a crear.

SQL> set exitcommit OFF
SQL> drop table pruebas;

Table dropped.

SQL> create table prueba as select * from employees;

Table created.

SQL> select count(*) from prueba;

  COUNT(*)
----------
       107



Borramos los registros de la tabla y sin confirmar los cambios - el borrado, a través de un COMMIT- procedemos a darle "EXIT" en la herramienta.

SQL> delete prueba;

107 rows deleted.

SQL> exit

Nos volvemos a conectar y al consultar la tabla de pruebas, logramos darnos cuenta, que efectivamente, los registros aún existen en la tabla.

SQL*Plus: Release 11.2.0.1.0 Production on Vie Jul 29 14:18:11 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter user-name: hr
Enter password:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from prueba;

  COUNT(*)
----------
       107

Conclusión: Antes de trabajar con SQL*Plus en la versión 11gR2, recuerde que la herramienta se comporta de manera diferente a sus antecesoras.  Si desea seguir utilizando SQL*Plus, tal y como lo hacía tiempo atrás, incluya en el archivo "glogin" de configuración en el directorio $ORACLE_HOME/sqlplus/admin, el parámetro con el valor "OFF", para evitar sorpresas.

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar