Avanzar una secuencia en Oracle sin traumas

Mi nombre es Carla y me defino como una apasionada de conocer, compartir ideas, divertirme y aprender todo lo relacionado con Oracle.
Alegre y creativa, con un alto grado de autoexigencia, que busca, incluso sin querer, una forma diferente de ver un mismo problema o solución. Defensora del trabajo en equipo en todas las facetas de la vida y de disfrutar todo lo que haces, siempre con humildad.
Actualmente cuento con más de 15 años de experiencia como administradora de Oracle, habiendo ocupado previamente posiciones como desarrolladora en la rama de Inteligencia de Negocios. Fue en ese momento que me di cuenta de que no quería centrarme en el desarrollo, sino participar en todas las capas que involucraban los datos, desde el despliegue de la base de datos hasta su explotación final.
Siempre estoy dispuesta a ayudar y compartir conocimientos. Creo firmemente que con la tecnología hay que divertirse y no verla como una competencia. La persona con la que tienes que ser el mejor es contigo mismo.
Una secuencia en Oracle es un objeto de base de datos que se utiliza para generar números únicos, generalmente para asignarlos como valores de claves primarias en tablas.
Las secuencias permiten incrementar automáticamente un valor numérico, evitando la necesidad de calcularlo manualmente y asegurando que no haya duplicados.
Cada vez que se llama a la secuencia, se genera un nuevo número basado en las propiedades configuradas (inicio, incremento, valor máximo, etc.).
Características principales:
START WITH: Define el primer valor generado por la secuencia.
INCREMENT BY: Especifica en cuánto se incrementa cada valor.
MAXVALUE / NOMAXVALUE: Define el valor máximo permitido.
CYCLE / NOCYCLE: Indica si la secuencia debe reiniciarse desde el valor inicial al alcanzar el máximo.
CACHE / NOCACHE: Especifica si los valores se deben almacenar en memoria para mejorar el rendimiento.
En Oracle, existen dos enfoques principales para modificar una secuencia y hacer que comience desde un valor distinto:
Recreación de la secuencia (eliminar y volver a crear). Ups!!!
Incrementar la secuencia sin recrearla (utilizado en versiones < 12c)
Uso de ALTER SEQUENCE ... RESTART MINVALUE (sin eliminar la secuencia).
A continuación, se describen los pros y contras de cada método:
Recreación de la secuencia
Ventajas:
Control total sobre la configuración: Puedes cambiar todos los parámetros de la secuencia, como START WITH, INCREMENT BY, CACHE, MAXVALUE, etc.
Compatibilidad universal: Este método es compatible con todas las versiones de Oracle Database, incluidas las más antiguas.
Desventajas:
Interrupción de dependencias: Si la secuencia tiene dependencias (como triggers o procedimientos que la utilizan), estas podrían fallar temporalmente tras eliminarla.
Pérdida de histórico: Eliminar y recrear la secuencia reinicia su metadato, lo que podría complicar el seguimiento del historial de valores generados.
Mayor complejidad: Requiere pasos adicionales, como verificar dependencias y evitar conflictos con valores existentes en tablas.
Incrementar la secuencia sin recrearla (utilizado en versiones < 12c)
En versiones < 12c hay una forma de avanzarla sin recrearla, la cual consiste en modificar el incremento al número al que queremos avanzar, seleccionar próximo valor y volver a establecer el incremento al valor original.
Ventajas:
Rápido avance de la secuencia: Este método permite avanzar la secuencia en bloques grandes de manera controlada y rápida. Útil si necesitas reservar un rango específico de valores para ciertas operaciones.
Simplicidad:Es sencillo de implementar, ya que solo requiere modificar temporalmente el valor de INCREMENT BY, obtener el nuevo valor de la secuencia con NEXTVAL y luego restaurar el incremento original.
No requiere reiniciar la secuencia: A diferencia de reiniciar la secuencia con un DROP y CREATE, este método preserva la continuidad de los valores generados.
Inconvenientes:
Riesgo de cambios concurrentes:Si otros procesos acceden a la secuencia mientras el INCREMENT BY está modificado, podrían obtener valores inesperadamente grandes o inconsistentes.
Potencial de errores humanos: Si olvidas restaurar el incremento a su valor original, podrías generar valores no deseados, lo que puede llevar a problemas en las aplicaciones que dependen de la secuencia.
ALTER SEQUENCE OWNER.NOMBRE_SECUENCIA INCREMENT BY 3000;
select OWNER.NOMBRE_SECUENCIA.nextval from dual;
ALTER SEQUENCE OWNER.NOMBRE_SECUENCIA INCREMENT BY 1;
Uso de ALTER SEQUENCE ... RESTART MINVALUE
Ventajas:
Simplicidad y rapidez: Modificar la secuencia con ALTER es un proceso directo que evita la eliminación y recreación.
Preservación de dependencias: Las dependencias de la secuencia permanecen intactas, lo que reduce el riesgo de errores en procedimientos o triggers.
Conservación del histórico: El objeto secuencia conserva sus metadatos originales, manteniendo el registro de su uso.
Desventajas:
El comando ALTER SEQUENCE ... RESTART solo está disponible en Oracle 12c y versiones posteriores.
Limitaciones en otros parámetros: Con ALTER SEQUENCE no puedes cambiar ciertos atributos como CACHE o CYCLE; solo ajustas el valor inicial.
En mi caso es necesario avanzar una secuencia a un valor específico, por lo que analizando ambos métodos el más rápido, eficiente e implica menos riesgo (versión > 12.1) sería restart.
SYS@cdbxxxx> show con_name;
CON_NAME
------------------------------
PDB_XXXXX
SYS@cdbxxxx> ALTER SEQUENCE OWNER.NOMBRE_SECUENCIA RESTART MINVALUE 2025000000;
Sequence altered.
Tenemos secuencia lista para su uso.



