sábado, 8 de junio de 2013

TNS-12599

¿Tiene usted una base de datos en Oracle 11.1 o 11.2? ¿Ve usted muchos de estos errores en su fila alert.log? Acaso son producidos por el bug 9844654. Este bug produce estos errores en bases de datos que son controladas por Enterprise Manager. Según lo que he leído, este bug no es importante pero si le molesta, hay un ajuste (patch) y una solución provisional (workaround):

Sun Jul 22 02:00:08 2012
***********************************************************************
NI cryptographic checksum mismatch error: 12599.
  VERSION INFORMATION:
     TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
     Oracle Bequeath NT Protocol Adapter for 64-bit Windows: Version 11.2.0.1.0 - Production
     Windows NT TCP/IP NT Protocol Adapter for 64-bit Windows: Version 11.2.0.1.0 - Production
  Time: 22-JUL-2012 02:00:08
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12599
   
TNS-12599: TNS:cryptographic checksum mismatch
    ns secondary err code: 2526
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0

Savepoint (parte 6)

Se puede hacer un rollback o un roll en una transacción. Se puede hacer un rollback hasta un savepoint, pero no es posible hacer un roll hasta un savepoint:

SQL> alter session set nls_language = 'SPANISH';

Sesion modificada.

SQL>

Creamos una tabla y ponemos datos dentro:

SQL> create table names
  2  (first_name varchar2(10));

Tabla creada.

SQL> insert into names values ('Andrew');

1 fila creada.

SQL>


Luego hacemos un roll y los datos desaparecen:

 SQL> roll;

Rollback terminado.

SQL> select * from names;

ninguna fila seleccionada

SQL>


Ahora hacemos la misma cosa pero esta vez el roll es seguido por la palabra blah que es una etiqueta:

SQL> insert into names values ('Brian');

1 fila creada.

SQL> roll blah;

Rollback terminado.

SQL> select * from names;

ninguna fila seleccionada

SQL>

Ponemos el nombre Colin en la tabla y creamos un savepoint:


 SQL> insert into names values ('Colin');

1 fila creada.

SQL> savepoint colin;

Punto de grabacion creado.

SQL>

Y lo hacemos otra vez con David:

SQL> update names set first_name = 'David';

1 fila actualizada.

SQL> savepoint david;

Punto de grabacion creado.

SQL> update names set first_name = 'Edward';

1 fila actualizada.

SQL>

Ahora hacemos un rollback hasta el savepoint david. Éste funciona, el nombre Edward desaparece y el nombre David reaparece:

SQL> rollback to savepoint david;

Rollback terminado.

SQL> select first_name from names;

FIRST_NAME
----------
David

SQL>


Por fin, intentamos hacer un roll hasta el savepoint colin. Éste no funciona. Oracle piensa que to savepoint colin sea una etiqueta y hace un roll de la transacción entera:

SQL> roll to savepoint colin;

Rollback terminado.

SQL> select first_name from names;

ninguna fila seleccionada

SQL>

jueves, 6 de junio de 2013

Savepoint (parte 5)

Este ejemplo fue probado en Oracle 10. Creamos un savepoint andrew. Luego creamos un savepoint brian. Hacemos un rollback al savepoint andrew. Tras hacer éste, el savepoint brian desaparece porque fue creado después del savepoint andrew. Entonces intentamos a hacer otro rollback al savepoint brian y, por supuesto, éste no funciona. 

SQL> create table names
  2  (first_name varchar2(10))
  3  /

Tabla creada.

SQL> insert into names values ('Andrew')
  2  /

1 fila creada.

SQL> savepoint andrew
  2  /

Punto de grabacion creado.

SQL> update names set first_name = 'Brian'
  2  /

1 fila actualizada.

SQL> savepoint brian
  2  /

Punto de grabacion creado.

SQL> update names set first_name = 'Colin'
  2  /

1 fila actualizada.

SQL> rollback to savepoint andrew
  2  /

Rollback terminado.

SQL> select first_name from names
  2  /

FIRST_NAME
----------
Andrew

SQL> rollback to savepoint brian
  2  /
rollback to savepoint brian
*
ERROR en linea 1:
ORA-01086: nunca se establecio el punto de grabacion
'BRIAN'

SQL> select first_name from names
  2  /

FIRST_NAME
----------
Andrew

SQL>

miércoles, 5 de junio de 2013

Savepoint (parte 4)

Este ejemplo fue probado en Oracle 10. Creamos un savepoint sp1. Luego creamos un savepoint sp2. Hacemos un rollback al savepoint sp2. Entonces hacemos otro rollback al savepoint sp1. Éste es posible porque el savepoint sp1 ya existía cuando el savepoint sp2 fue creado:

SQL> create table nombres
  2  (nombre1 varchar2(10))
  3  /

Tabla creada.

SQL> insert into nombres values ('Andrew')
  2  /

1 fila creada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Andrew

SQL> savepoint sp1
  2  /

Punto de grabacion creado.

SQL> update nombres set nombre1 = 'Brian'
  2  /

1 fila actualizada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL> savepoint sp2
  2  /

Punto de grabacion creado.

SQL> update nombres set nombre1 = 'Colin'
  2  /

1 fila actualizada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Colin

SQL> rollback to savepoint sp2
  2  /

Rollback terminado.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL> rollback to savepoint sp1
  2  /

Rollback terminado.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Andrew

SQL>

martes, 4 de junio de 2013

Savepoint (parte 3)

En este ejemplo, probado en Oracle 10, tenemos dos savepoints con el mismo nombre:

SQL> create table nombres
  2  (nombre1 varchar2(10))
  3  /

Tabla creada.

SQL> insert into nombres values ('Andrew')
  2  /

1 fila creada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Andrew

SQL>

Aquí creamos el primer savepoint, lo cual se llama sp1:

SQL> savepoint sp1
  2  /

Punto de grabacion creado.

SQL> update nombres set nombre1 = 'Brian'
  2  /

1 fila actualizada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL>

Y aquí creamos el segundo (con el mismo nombre):

SQL> savepoint sp1
  2  /

Punto de grabacion creado.

SQL> update nombres set nombre1 = 'Colin'
  2  /

1 fila actualizada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Colin

SQL>

Hacemos un rollback al savepoint:

SQL> rollback to savepoint sp1
  2  /

Rollback terminado.

SQL>

Es el último savepoint que funciona y por eso el nombre que tenemos ahora es Brian:

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL>

domingo, 2 de junio de 2013

Savepoint (parte2)

Este ejemplo fue probado en Oracle 10. Un savepoint desaparece tras hacer un commit. Si intentas emplearlo después, Oracle te da un ORA-01086:

 SQL> create table nombres
  2  (nombre1 varchar2(10))
  3  /

Tabla creada.

SQL> insert into nombres values ('Andrew')
  2  /

1 fila creada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Andrew

SQL> savepoint sp1
  2  /

Punto de grabacion creado.

SQL> update nombres set nombre1 = 'Brian'
  2  /

1 fila actualizada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL> commit
  2  /

Confirmacion terminada.

SQL> rollback to savepoint sp1
  2  /
rollback to savepoint sp1
*
ERROR en linea 1:
ORA-01086: nunca se establecio el punto de grabacion
'SP1'

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL>

sábado, 1 de junio de 2013

Savepoint (parte 1)

Con un savepoint, se puede hacer un rollback hasta una etiqueta creada durante una transacción. Este ejemplo, probado en Oracle 10, muestra el uso normal de un savepoint. Para empezar, creamos una tabla:

 SQL> create table nombres
  2  (nombre1 varchar2(10))
  3  /

Tabla creada.

SQL>


Y ponemos un nombre en la tabla:

SQL> insert into nombres values ('Andrew')
  2  /

1 fila creada.

SQL>

Entonces miramos el nombre en la tabla y creamos un savepoint:

SQL> select * from nombres
  2  /

NOMBRE1
----------
Andrew

SQL>

El savepoint se llama sp1:

SQL> savepoint sp1
  2  /

Punto de grabacion creado.

SQL>

Ahora cambiamos el nombre en la tabla:

SQL> update nombres set nombre1 = 'Brian'
  2  /

1 fila actualizada.

SQL> select * from nombres
  2  /

NOMBRE1
----------
Brian

SQL>


Por fin, hacemos un rollback al savepoint sp1: 

SQL> rollback to savepoint sp1
  2  /

Rollback terminado.

SQL>

Y verificamos que el nombre en la tabla sea Andrew otra vez:

SQL> select * from nombres
  2  /

NOMBRE1
----------
Andrew

SQL>