Como solucionar el error ORA-12899: VALUE TOO LARGE FOR COLUMN

Pues eso amig@s,

Si al importar un dump entre una versión de Oracle 10g y 11g nos aparece el error ORA-12899 se debe a que la configuración del charset de Oracle en la bbdd donde hemos hecho el export es distinta a la versión donde estamos realizand el import. En concreto el parámetro que indica que configuración charset tiene nuestra bbdd son dos, el NLS_CHARACTERSET y el NLS_LENGTH_SEMANTICS.

Como dependiendo del charset, oracle interpreta que un valor puede ocupar una o dos posiciones en cada registro, esto puede ocasionar un desbordamiento de un campo en concreto. Por ejemplo si un campo está definido en la bbdd original a 40 posiciones, si tenemos un charset diferente, al hacer el import interpretará que necesita para tal charset 42 posiciones para grabar los datos del registros y como no entra, devuelve el error 12899.

Solución:

1-Nos conectamos a la bbdd original y obtenemos la configuración de los dos parámetros:

select parameter,value from nls_session_parameters where parameter=’NLS_LENGTH_SEMANTICS';

select parameter,value from nls_session_parameters where parameter=’NLS_CHARACTERSET';

2-Nos conectamos a la nueva bbdd y ejecutamos:

alter system set nls_length_semantics=CHAR scope=both;

Luego la paramos y la arrancamos en modo restrictivo:

c:\sqlplus /nolog
conn / as sysdba;
shutdown;
startup restrict;
Alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;

Voila! ya nos dejará realizar el import sin ningun error :)

Espero que les resulte útil.
Salu2.
Share on Google Plus
    Blogger Comment

1 comentarios:

Karol Romero dijo...

Hola!!!

Es muy valioso tu aporte, me ha sido de mucha ayuda.
Lo único es que al hacer Shutdown el proceso se hacia muy lento y se detenia, solo use shutdown immediate y todo funciono perfecto, la importación se realizó perfectamente.

Gracias, Dios te bendiga.

Karol