Reproducir secuencias después de exportación incongruente

Importé una exportación de data pump (.dmp), pero luego me di cuenta de que el siguiente valor (nextval) de las secuencias era mucho más bajo que el más alto valor de la columnas pobladas.
in English

select ord_seq.nextval from dual;
–25

select max(ord_id) from orders;
–138

Y al meter nuevas hileras, los usuarios recibían este error: ORA-00001: unique constraint (SALES.PK_ORDERS) violated.

Parece que export se vuela las secuencias si están en uso durante la exportación (vea aquí.)

Para arreglar el problema tuve que reconstruir las secuencias.  Para hacerlo, extraje los comandos para crear las secuencias (create sequence) del archivo .dmp a uno de .sql y luego ejecuté el .sql en el banco de datos.

#######################
# Importación para oradb
#######################

ORACLE_SID=oradb
ORACLE_HOME=/u01/app/oracle/product/11.2.03/db_1

#dumpfile=oradb_13_12_01_full_01.dmp
#bkp_dir= /backups
$ORACLE_HOME/bin/sqlplus -s ‘/ as sysdba’ <<EOF
set pages 0 echo off feed off
CREATE or REPLACE DIRECTORY bkp_dir as ‘/backups’;
GRANT READ, WRITE ON DIRECTORY bkp_dir to SYSTEM;
quit;
EOF

$ORACLE_HOME/bin/impdp system/*** directory=bkp_dir dumpfile=oradb_13_12_01_full_%U.dmp logfile=oradb_impseq.log sqlfile=oradb_seq.sql include=sequence

El resultado de estos comandos es el archivo oradb_seq.sql en la carpeta donde bkp_dir ubique.  Pero antes de ejecutar el .sql, tuve que borrar las secuencias existentes, estas instrucciones generan los comandos para hacerlo:

SELECT ‘DROP ‘ || OBJECT_TYPE || ‘ ‘ || OWNER || ‘.’ || OBJECT_NAME || ‘;’ FROM DBA_OBJECTS
where 
owner in (<lista de dueños de objetos en ‘comillas’, separados por comas)
and object_type = ‘SEQUENCE’ order by owner, object_name;


Al estar todas las secuencias eliminadas, ejecuté los comandos para reconstruirlas:
sqlplus / as sysdba
SQL>@oradb_seq.sql

Para evadir futuras exportaciones incongruentes, use el parámetro flashback_scn cuando haga una exportación.   Aquí hay un programa que hace la exportación y automáticamente agarra el SCN del banco de datos


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s