orden de incremento en secuencia Oracle

Iniciado por d91, 11 Octubre 2015, 13:53 PM

0 Miembros y 1 Visitante están viendo este tema.

d91

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 (sql) [Seleccionar]

CREATE SEQUENCE NUEVASEQUENCIA
START WITH 1
INCREMENT BY 1
MINVALUE 1
NOMAXVALUE;

de una vez les dejo el trigger que la hace funcionar
Código (oracle8) [Seleccionar]

CREATE OR REPLACE TRIGGER T_INCREMENTAR
BEFORE INSERT ON TAB_RANGO
FOR EACH ROW
SELECT NUEVASEQUENCIA.NEXTVAL INTO :NEW.IDRANGO FROM DUAL;
END;


Carloswaldo

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.

CitarOn 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