sql >> Base de Datos >  >> RDS >> Oracle

Cómo resolver ORA-29913 con tablas externas

ORA-29913 es uno de los errores comunes cuando se trabaja con tablas externas en la base de datos Oracle. Estaríamos buscando varias formas en que se puede producir el error y qué se puede hacer para resolver el error

(1) Archivo externo no encontrado o permiso incorrecto

SQL> select * from Scott.example_external_table;
select * from example_external_table
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file test1.dat in TEST_DIR not found
ORA-06512: at "SYS.ORACLE_LOADER", line 14
ORA-06512: at line 1

Al analizar la tabla, obtiene un mensaje similar:

SQL> ejecutar sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');
BEGIN sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE'); FIN;
*
ERROR en la línea 1:
ORA-29913:error al ejecutar la llamada ODCIEXTTABLEOPEN
ORA-29400:error del cartucho de datos
KUP-04040:archivo test1 .dat en TEST_DIR no encontrado
ORA-06512:en “SYS.DBMS_STATS”, línea 7161
ORA-06512:en “SYS.DBMS_STATS”, línea 7174
ORA-06512:en línea 1

O de manera general

ORA-20011: Approximate NDV failed:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file <file_name> in <directory_name> not found

Motivo

Los archivos externos se han movido de la ubicación correcta

SQL> select * from dba_directories ;

OWNER DIRECTORY_NAME DIRECTORY_PATH
------ -------------- -----------------------
SYS TEST_DIR /u01/oradata/external_files

Compruebe los nombres de archivo asociados con la tabla externa

select * from dba_external_locations
where table_name='EXAMPLE_EXTERNAL_TABLE';OWNER TABLE_NAME LOCATION DIRECTORY_OWNER DIRECTORY_NAME
----- ------------- -------- --------------- ---------------
SYS EXAMPLE_EXTERNAL_TABLE test1.dat SYS TEST_DIR
SYS EXAMPLE_EXTERNAL_TABLE test2.dat SYS TEST_DIR

Ahora verificando a nivel del sistema operativo
$ cd /u01/oradata/external_files
$ ls test[1-2]/dat
No existe tal archivo o directorio

Entonces los archivos no están presentes en la ubicación correcta

Ambas consultas anteriores se pueden combinar como se muestra a continuación

select TABLE_NAME, DIRECTORY_PATH||'/'||LOCATION file_name from DBA_EXTERNAL_LOCATIONS loc, dba_directories dir
where loc.DIRECTORY_OWNER=dir.OWNER
and loc.DIRECTORY_NAME=dir.DIRECTORY_NAME
and loc.OWNER='&1' and loc.TABLE_NAME='&2';

Resolución:
Regresar ambos archivos a la ubicación original

$ mv /u02/oradata/external_files/test2.dat /u01/oradata/external_files
$ mv /u02/oradata/external_files/test1.dat /u01/oradata/external_files

Ahora
Ambos enunciados a continuación tendrán éxito

select * from Scott.example_external_table;
execute sys.dbms_stats.gather_table_stats('SCOTT','EXAMPLE_EXTERNAL_TABLE');

(2) Formato de datos incorrecto en archivo externo

ERROR en la línea 1:
ORA-29913:error al ejecutar la llamada ODCIEXTTABLEFETCH
ORA-30653:límite de rechazo alcanzado
ORA-06512:en “SYS.ORACLE_LOADER”, línea 14
ORA-06512:en línea 1

Motivo

(i) El archivo externo puede tener líneas vacías
(ii) Verifique el delimitador TAB o el delimitador HEX

una. El delimitador TAB '\t', utilizado por Oracle, está representado por un valor HEX '09'
b. El valor HEX en el archivo de datos debe coincidir con el valor HEX especificado en la declaración
CREATE
c. La especificación HEX en la declaración CREATE debería verse como 0X'gt;' o 0x''
(iii) Si la columna se agregó a la tabla externa, la misma debería estar presente en el archivo externo

Resolución
Verifique el error en el registro y corrija el problema en consecuencia

(3) Error con columna nula

ERROR en la línea 1:
ORA-29913:error al ejecutar la llamada ODCIEXTTABLEOPEN
ORA-29400:error de cartucho de datos
KUP-04043:no se encontró la columna de la tabla en la fuente externa:

Motivo
El archivo externo tiene valores nulos para la última columna que originalmente es una columna numérica. Cuando cambiamos el nulo a un número 0, entonces la consulta tiene éxito.

Resolución
Para cargar un valor NULL, debemos incluir el delimitador ENCLOSED BY en la definición de la tabla.

registros delimitados por nueva línea
campos terminados por ','
opcionalmente encerrados por ' ' <<<=====
valores de campo faltantes son nulos

(4) ORA-29913 también puede ocurrir si Oracle no puede crear los archivos de registro también. Por lo tanto, verifique el permiso de los directorios

(5) Error de directorio de tabla externa
El error ORA-29913 también puede ocurrir en tablas externas cuando no otorga permisos de lectura y escritura al directorio:

CREAR O REEMPLAZAR DIRECTORIO extdir COMO '/u01/oradata/testdir';
CONCEDER LECTURA EN DIRECTORIO testdir A ;
CONCEDER ESCRITURA EN DIRECTORIO testdir A ;

Aquí hay buena información sobre la tabla externa, debe consultar

¿Qué son las TABLAS EXTERNAS en Oracle?

(1) Las tablas externas son tablas de solo lectura donde los datos se almacenan en archivos planos fuera de la base de datos

(2) Puede usar la función de tabla externa para acceder a archivos externos como si fueran tablas dentro de la base de datos.

(3)   Cuando crea una tabla externa, define su estructura y ubicación en Oracle. Básicamente, solo almacena los metadatos dentro del oráculo

(4) Cuando consulta la tabla, Oracle lee la tabla externa y devuelve los resultados como si los datos se hubieran almacenado en la base de datos.

(5) El servidor de Oracle proporciona dos controladores principales de Oracle para leer los archivos planos

  • Oracle_loader:se utiliza para leer los archivos planos mediante la tecnología Oracle Loader. Básicamente, permite leer los archivos que se pueden interpretar utilizando la tecnología de carga sql
  • Oracle_datapump:se utiliza tanto para importar como para exportar datos utilizando un formato independiente de la plataforma

Artículos relacionados
Tablas externas de Oracle:consulte esta publicación para obtener información sobre el uso de la tabla externa en Oracle con un ejemplo, cómo crear una tabla externa, cómo usarla
Crear tabla de Oracle:las tablas son la unidad básica de almacenamiento de datos en una base de datos de Oracle. Cubrimos cómo usar el comando de creación de tabla de Oracle para crear una tabla con clave externa/clave principal
Expresión faltante de ORA-00936:Aprenda a solucionar problemas de la expresión faltante de ORA-00936 en SQL de Oracle. ¿Cuáles son las diversas soluciones, cómo podemos evitarlo, errores de Oracle para estos errores
ORA-01017:nombre de usuario/contraseña no válidos; inicio de sesión denegado:aprenda la posible resolución de ORA-01017 nombre de usuario/contraseña no válidos; inicio de sesión denegado. Cómo resolverlo rápidamente sin mucho esfuerzo Cómo resolverlo y corregirlo
ORA-00911:carácter no válido:esta publicación es para causas comunes de ORA-00911:carácter no válido en Oracle con ejemplos y resolución para ayudarlo a completar el trabajo
ORA-00900:Esta publicación para las diversas soluciones para ORA-00900 declaración sql no válida. Motivos del error. Cómo depurarlo y resolverlo rápidamente,
ORA-03113:fin de archivo en el canal de comunicación:verifique el método para resolver ORA -03113:fin de archivo en canal de comunicación. Este error podría ocurrir en el inicio de la base de datos, ejecutando el programa
Documentación de Oracle

Cursos recomendados

Aquí está el buen curso de Udemy para Oracle SQL
Oracle-Sql-Step-by-step:este curso cubre sql básico, uniones, creación de tablas y modificación de su estructura, creación de vistas, unión, unión, todo y mucho más. . Un gran curso y un curso imprescindible para principiantes de SQL
El curso completo de certificación de Oracle SQL :Este es un buen curso para cualquier persona que quiera estar preparado para trabajar con habilidades de desarrollador de SQL. Un buen curso explicado
Oracle SQL Developer:fundamentos, consejos y trucos :muchos desarrolladores utilizan la herramienta para desarrolladores Oracle Sql. Este curso nos brinda trucos y lecciones sobre cómo usarlo de manera efectiva y convertirnos en un desarrollador sql productivo
Oracle SQL Performance Tuning Masterclass 2020 :El ajuste del rendimiento es una de las habilidades críticas y más buscadas. Este es un buen curso para aprender sobre esto y comenzar a realizar ajustes de rendimiento de sql