Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: d91 en 11 Octubre 2015, 13:53 pm



Título: orden de incremento en secuencia Oracle
Publicado por: d91 en 11 Octubre 2015, 13:53 pm
alguien me podría decir que le hace falta a esta secuencia de Oracle para que siempre mantenga el orden de incremento, puesto que al cerrar la base de datos y volverla a abrir me aparece incrementada hasta 10 valores arriba de donde se había quedado antes de cerrar la base de datos
Código
  1. CREATE SEQUENCE NUEVASEQUENCIA
  2. START WITH 1
  3. INCREMENT BY 1
  4. MINVALUE 1
  5. NOMAXVALUE;
  6.  
de una vez les dejo el trigger que la hace funcionar
Código
  1. CREATE OR REPLACE TRIGGER T_INCREMENTAR
  2. BEFORE INSERT ON TAB_RANGO
  3. FOR EACH ROW
  4. SELECT NUEVASEQUENCIA.NEXTVAL INTO :NEW.IDRANGO FROM DUAL;
  5. END;
  6.  
  7.  


Título: Re: orden de incremento en secuencia Oracle
Publicado por: Carloswaldo en 13 Octubre 2015, 17:26 pm
Hola,

Esto muy probablemente ocurre por el modo en que se comporta el caché para secuencias de Oracle. Por defecto Oracle pone en caché un número de valores de la secuencia para usarlos más rápido, pero si la base de datos se cae o se apaga, esos valores se pierden.

https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm

Para que esto no ocurra podrías poner la opción NOCACHE al crear la secuencia. Aunque lo más óptimo sería que la base de datos no tenga que apagarse a cada rato.

Citar
On thing that should be mentioned is that there is no guarantee that a sequence will not be lost. If the sequence is cached, or if a transaction that used a sequence is rolled back, then loss of that sequence number is possible in the event of a database shutdown or crash. Sequences should not be used with the expectation of:

1. Preservation of each number in the sequence.
2. Monitonical purity of the sequence being generated.

http://dbaforums.org/oracle/index.php?s=14afceab24ace3a29a6b0a2a44b55730&showtopic=917&view=findpost&p=2891