
(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'
(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)
(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