ORACLE Error ORA-29913: error in executing ODCIEXTTABLEOPEN callout al cargar SH.costs desde sales_transactions_ext
|
Preparando un entorno de Laboratorio con ORACLE 12c con los esquemas de ejemplo de ORACLE, como paso previo para para hacer pruebas de migración a PostgreSQL, me he encontrado con algunos problemas en la creación del esquema SH (Sales History), uno de los más interesantes para probar la Migración a PostgreSQL, al tener tablas particionadas de tipo Range. Sin embargo, en la creación del esquema SH, no se pudo cargar la tabla particionada costs, la cual se carga de la tabla externa sales_transactions_ext, al producirse un error del tipo ORA-29913: error in executing ODCIEXTTABLEOPEN callout al cargar SH.costs desde sales_transactions_ext |
Vaya lata. Hace muchos años que tocaba Oracle, y además, en aquella época no tenía los conocimientos de base de datos que tengo ahora. Vamos, que hace mucho, y en su día, tampoco es que fuese muy bueno. En cualquier caso, me ha sorprendido un poco, como a día de hoy no he encontrado ninguna solución al buscar en Internet por este error (si se tratase de otro motor de base de datos menos extendido, vale, pero de Oracle no me lo esperaba, la verdad). Al final, perdiendo dos o tres horas, con mis conocimientos nulos de Oracle lo he conseguido solventar, pero claro, he perdido la mañana del Domingo, que rabia. Bueno aquí va, para quién le pueda interesar.
Lo que estaba haciendo era crear los esquemas de ejemplo de Oracle, ejecutando algo similar a lo siguiente (ya estaba descomprimido el ZIP, y ejecutad el perl de las rutas).
su - oracle cd /temp/db-sample-schemas-master sqlplus / as sysdba @mksample Password Password hrpw oepw pmpw ixpw shpw bipw USERS TEMP $ORACLE_HOME/demo/schema/log/ localhost:1521/orcl
|
El problema es que al intentar cargar la tabla particionada SH.costs desde la tabla externa sales_transactions_ext, se produjo el siguiente error, y la tabla SH.costs se quedó sin cargar (esto se podía ver en los logs de la carga).
loading COSTS using external table
Table created.
INSERT /*+ append */ INTO costs * ERROR at line 1: ORA-29913: error in executing ODCIEXTTABLEOPEN callout ORA-29400: data cartridge error KUP-04001: error opening file $ORACLE_HOME/demo/schema/log/ext_1v3.log
|
La tabla externa SH.sales_transactions_ext estaba creada de la siguiente forma:
CREATE TABLE sales_transactions_ext ( PROD_ID NUMBER, CUST_ID NUMBER, TIME_ID DATE, CHANNEL_ID NUMBER, PROMO_ID NUMBER, QUANTITY_SOLD NUMBER, AMOUNT_SOLD NUMBER(10,2), UNIT_COST NUMBER(10,2), UNIT_PRICE NUMBER(10,2) ) ORGANIZATION external ( TYPE oracle_loader DEFAULT DIRECTORY data_file_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII TERRITORY AMERICA BADFILE log_file_dir:'ext_1v3.bad' LOGFILE log_file_dir:'ext_1v3.log' FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY '^' LDRTRIM ( PROD_ID , CUST_ID , TIME_ID DATE(10) "YYYY-MM-DD", CHANNEL_ID , PROMO_ID , QUANTITY_SOLD , AMOUNT_SOLD , UNIT_COST , UNIT_PRICE ) ) LOCATION ('sale1v3.dat') ) REJECT LIMIT unlimited;
|
Se había creado con éxito, pero no se podía acceder a ella de ningún modo, ya que se producía el error que comentábamos antes.
Finalmente, parece que el problema estaba con la definición de los directorios en ORACLE. El directorio LOG_FILE_DIR estaba definido sobre la ruta $ORACLE_HOME/demo/schema/log/, y la solución fue simplemente recrear dicho directorio de la siguiente forma:
CREATE OR REPLACE directory LOG_FILE_DIR AS '/u01/app/oracle/product/12.1.0/db_1/demo/schema/log'; |
Realizado esto, comprobamos que ya podíamos acceder con éxito a la tabla SH.sales_transactions_ext, y seguidamente cargamos manualmente la tabla SH.costs, ejecutando el siguiente comando.
INSERT /*+ append */ INTO sh.costs ( prod_id, time_id, channel_id, promo_id, unit_cost, unit_price ) SELECT prod_id, time_id, channel_id, promo_id, AVG(unit_cost), AVG(amount_sold/quantity_sold) FROM sh.sales_transactions_ext GROUP BY prod_id, time_id, channel_id, promo_id; |
Objetivo conseguido. Ya tenemos cargada la tabla particionada SH.costs con sus 82.112 filas.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.
|
]
[Autor: GuilleSQL]
|
|
|