domingo, 23 de julio de 2023

El trabajo "SYSTEM"."SYS_IMPORT_FULL" se ha parado debido a un error fatal

El trabajo "SYSTEM"."SYS_IMPORT_FULL" se ha parado debido a un error fatal

Hola.

Estoy obteniendo el siguiente error al intentar importar una base de datos Oracle 19c con la utilidad impdp

Importante mencionar que estoy haciendo un full import por lo que es requisito que todos los tablespaces de la base de datos fuente existan en la base de datos destino.

Oracle-impdp-SYSTEM-SYS_IMPORT_FULL

C:\WINDOWS\system32>impdp FULL=y DUMPFILE=230710EXPDAT.DMP LOGFILE=full_log_import.log
Import: Release 19.0.0.0.0 - Production on Dom Jul 23 14:07:20 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Usuario: system
Contrase±a:

Conectado a: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

La tabla maestra "SYSTEM"."SYS_IMPORT_FULL_05" se ha cargado/descargado correctamente
Iniciando "SYSTEM"."SYS_IMPORT_FULL_05": system/******** FULL=y DUMPFILE=230710EXPDAT.DMP LOGFILE=full_log_import.log
Procesando el tipo de objeto DATABASE_EXPORT/PRE_SYSTEM_IMPCALLOUT/MARKER
Procesando el tipo de objeto DATABASE_EXPORT/PRE_INSTANCE_IMPCALLOUT/MARKER
Procesando el tipo de objeto DATABASE_EXPORT/TABLESPACE
ORA-39014: Uno o mßs trabajos han salido antes de tiempo.
ORA-39029: el trabajo 1 con el nombre de proceso "DW00" ha terminado antes de tiempo
ORA-39014: Uno o mßs trabajos han salido antes de tiempo.
ORA-39029: el trabajo 2 con el nombre de proceso "DW00" ha terminado antes de tiempo
El trabajo "SYSTEM"."SYS_IMPORT_FULL_05" se ha parado debido a un error fatal en Dom Jul 23 14:10:40 2023 elapsed 0 00:03:00


Solución

Primero hay que revisar el alert log para tener mas información acerca del error.

El alert log se encuentra en una ruta similar a esta (BACKGROUND_DUMP_DEST): F:\app\oracle\diag\rdbms\{dbname}\{sid}\trace\alert_{dbname}.log

Al analizar el contenido del alert log encuentro el siguiente error:

2023-07-23T14:07:56.542039-04:00
Exception [type: INT_DIVIDE_BY_ZERO, ] [] [PC:0x7FFCCA342CE2, skgfrcre()+450]
Errors in file F:\APP\ORACLE\diag\rdbms\cmsdrdb\cmsdrdb\trace\cmsdrdb_dw00_8884.trc (incident=15825):
ORA-07445: se ha encontrado una excepción: volcado de memoria [skgfrcre()+450] [INT_DIVIDE_BY_ZERO] [] [PC:0x7FFCCA342CE2] [] []
Incident details in: F:\APP\ORACLE\diag\rdbms\cmsdrdb\cmsdrdb\incident\incdir_15825\cmsdrdb_dw00_8884_i15825.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.

El error se encuentra justo después de un comando CREATE TABLESPACE. Este tablespace no estaba creado en la base de datos destino por lo que no puede encontrarlo. 

Con esta información verifico que todos los tablespaces de la base de datos fuente existan en la base de datos destino. La ubicación de los datafiles puede ser diferente pero los tablespaces deben existir con el mismo nombre. Esto es un requisito para un full import.

SQL> select name from v$tablespace;

Después de crear el tablespace faltante, repito la instrucción de import impdp y finalmente puedo importar la base de datos.

El trabajo "SYSTEM"."SYS_IMPORT_FULL_06" ha terminado con 14 error(es) en Dom Jul 23 14:52:37 2023 elapsed 0 00:07:18

Espero les sirva.

jueves, 13 de julio de 2023

ORA-12154: TNS:no se ha podido resolver el identificador de conexión especificado

ORA-12154: TNS:no se ha podido resolver el identificador de conexión especificado 

Hola.

Estoy teniendo el siguiente error al intentar importar un backup de base de datos de Oracle 19c con el comando impdp justo después la creación de una nueva base de datos.

C:\WINDOWS\system32>impdp system/pwd@myhost:1521/MYINSTANCE FULL=y DUMPFILE=FILEEXPDAT.DMP LOGFILE=full_log_import.log

Import: Release 19.0.0.0.0 - Production on MiÚ Jul 12 19:58:41 2023

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

UDI-12154: la operación ha generado un error ORACLE 12154

ORA-12154: TNS:no se ha podido resolver el identificador de conexión especificado

El error es un tanto genérico porque no ofrece mucha información y las causas pueden ser diversas. 

En mi caso particular es importante mencionar que la base de datos está recién creada y este comportamiento ya lo he experimentado con una base de datos nueva.

Solución

  • Verificar que existe el archivo tnsnames.ora en la siguiente ubicación: $ORACLE_HOME/network/admin/tnsnames.ora

Si no existe el archivo, crearlo manualmente y generar una entrada con la descripción del servicio en el siguiente formato:

MYSERVICE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-1KG2CLC)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYSERVICE)
)
)

  • En la misma ubicación, verificar que el archivo sqlnet.ora contenga TNSNAMES en el parámetro NAMES.DIRECTORY_PATH

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

  • En este punto verificar si la aplicación ya reconoce el servicio y puede conectarse.
Se puede verificar que el servicio responde usando la utilidad tnsping

$ORACLE_HOME\bin>tnsping MYSERVICE
  • En este y otros casos es importante que el listener esté prendido cuando se inicia la base de datos para que reconozca la instancia de Oracle.  

Lo primero que hay que revisar es que el listener esté activo y que tenga comunicación con la instancia/servicio de Oracle. Para esto ejecutar la siguiente instrucción en un command prompt:

C:\WINDOWS\system32>lsnrctl status

LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 12-JUL-2023 19:57:24

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Conectßndose a (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

TNS-12541: TNS:no hay ningún listener

 TNS-12560: TNS:error del adaptador de protocolo

  TNS-00511: No hay ningún listener

   64-bit Windows Error: 61: Unknown error

Como se ve en este caso, el estatus del listener está apagado por lo que hay que prenderlo pero debe ser en el siguiente orden que incluye reiniciar la base de datos.

1.- En otro command prompt conectarse a la base de datos y apagarla con el comando: shutdown immediate

Oracle shutdown immediate

2.- En el otro command prompt prender el listener con el comando: lsnrctl start

oracle listener lsnrctl start

*Si es necesario se puede usar también el comando: lsnrctl stop

3.- En el command prompt de la base de datos, iniciar la base de datos con el comando: startup

oracle startup command

Al iniciarse la base de datos, el listener la va a reconocer y reportar como un servicio disponible.

4.- Por último, verificar el estatus del listener con el comando: lsnrctl status

lsnrctl status command

Con este orden de reinicio pude corregir el error inicial que tenía.

Espero les sirva.


viernes, 7 de julio de 2023

PostgreSQL ERROR: relation “table” does not exist 42P01

PostgreSQL ERROR: relation “table” does not exist 42P01 


Hola.

PostgreSQL está devolviendo el siguiente error al ejecutar un stored procedure que utiliza diversas tablas dentro de una base de datos.

SQL Exception occurred (SQL STATE = 42P01) - detailMessage - ERROR: relation “table” does not exist

PostgreSQL ERROR: relation “table” does not exist



Importante mencionar que el stored es reconocido y ejecutado sin problemas pero las tablas que se utilizan dentro provocan el error al momento de ejecución. 

El stored está firmado con el nombre del esquema pero las tablas no tienen la firma del esquema.

Solución.

La línea de conexión a la base de datos tanto en pgAdmin como en la aplicación están usando el parámetro currentSchema con el nombre del esquema de las tablas y es aquí donde se encontraba el problema.

jdbc:postgresql://dev-host.com:5432/dev_db?currentSchema=myschema

En la línea de conexión, el parámetro currentSchema debe estar en camel case format para que el esquema sea reconocido en la conexión y por lo tanto las tablas del esquema también lo sean.


Espero les sirva.