Acerca de admin

Tras más de 20 años trabajando con tecnologías Oracle, me decidí a recopilar en un Blog algunas de las cosillas útiles para el día a día.

Paquete UTL_MAIL en 12c

El paquete UTL_MAIL es uno de esos paquetes que, aunque en mi opinión no debería de usarse nunca, siempre nos encontramos con casos de aplicaciones que hacen uso del mismo.
Si migramos (no update) a la 12c (creo que los ultimos patchsets de la 11g puede pasar también), nos encontramos con que aparece este error:

PLS-00201: el identificador 'SYS.UTL_MAIL' se debe declarar
PLS-00201: identifier 'SYS.UTL_MAIL' must be declared

El motivo de este error queda bastante claro en la entrada de Database PL/SQL Packages and Types Reference UTL_MAIL de la documentación de los paquetes de la 12g.

UTL_MAIL no está instalado de forma predeterminada debido al requisito de configuración SMTP_OUT_SERVER y la exposición de la seguridad que ello implica.
Con la instalación de UTL_MAIL, usted deberá configurar el sistema para agregar la salida a los puertos definidos en SMTP_OUT_SERVER .

Así pues nos tocará instalarlo a mano con:

sqlplus sys/
SQL> @$ORACLE_HOME/rdbms/admin/utlmail.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtmail.plb

y dar los permisos al esquema que nos necesite

GRANT EXECUTE ON UTL_MAIL TO esquema;

En cualquier caso, aunque lo instalemos a mano, tendremos que empezar a lidiar con el paquete UTL_SMTP, con lo que nos vendrá bien tener a mano las entradas :

Errores Private strand flush not complete en el alert.log

Vamos a echar un vistazo rápido a un error bastante común en los alert.log

Una alerta bastante común que vemos en los alertlog es

Thread 1 cannot allocate new log, sequence 6180
Private strand flush not complete

Esta línea nos indica que, no hemos completado la operación de guardar todo el REDO cuando hacemos el switch.
El término strand es la palabra que utiliza Oracle para referrse a los latches de los redo log, lo que tenemos en este caso es un caso de este tipo, y lo que nos está indicando es qeu en ved de bajar el redo en tiempo real, lo «bajará» con el commit.

Este tipo de mensajes no es alarmante a no ser que haya mas mensajes del tipo «cannot allocate new log» o «advanced to log sequence»

En cualquier caso, pueden indicarnos que hay problemas con la velocidad de IO del almacenamiento donde se encuentran o en caso de ser logs remotos con la red

Script para generar exports desde windows logando en el Event Log

Una entrada rápida para dummies sobre el export en windows.
Habitualmente la monitorizacion de los exports en plataformas windows es mas compleja que en los linux, esto es debido a que en muchos casos los equipos de gestion de los servidores windows se ciñen a la monitorizacion del visor de eventos no queriendo/pudiendo hacerlo de un fichero de texto plano como es el fichero de log del export.

¿Como solucionamos esto?

Aquí hay un pequeño script que es capaz de llevar a cabo un export y logar en el visor de sucesos el comienzo y le estado final

ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
:: Directorio desde el cual vamos a ejecutar nuestro .bat 
SET SCRIPTDIR=O:\TAREAS\BACKUP
SET ORACLE_SID=%1
SET PARALLELISM=%2
SET MYFILE=DPEXP_%ORACLE_SID%_%%U.dmp
SET MYLOG=DPEXP_%ORACLE_SID%.log
:: RUTA tiene el valor del oracle directory EXPORTS 
SET RUTA=\\SERVIDOR\DIRECTORIO
SET export_log=%RUTA%\DPEXP_%ORACLE_SID%.log

if "%1"=="" goto uso
if "%2"=="" goto SET PARALLELISM=1


EVENTCREATE /T INFORMATION /SO  EXPORT.%ORACLE_SID% /ID 36 /L APPLICATION /D "Comienza el export  de %ORACLE_SID% con paralelismo %PARALLELISM% y log %export_log%"
cd /d %SCRIPTDIR%
del %export_log%
:: Eliminamos los ficheros anteriores por seguridad (a pesar de tener el reuse)

expdp USER/PASS DIRECTORY=EXPORTS  DUMPFILE=%MYFILE% PARALLEL=%PARALLELISM%  LOGFILE=DPEXP_%ORACLE_SID%.log reuse_dumpfiles=Y FULL=Y  METRICS=Y  
SET CORRECTO=%ERRORLEVEL%

IF %CORRECTO% GTR 0  goto error 
IF "%CORRECTO%"=="0"  goto OK

:uso 
echo "USO exportar.bat  SID PARALELISMO "
SET CORRECTO=2
goto end

:error
echo "Error en la realización del export"
EVENTCREATE /T ERROR /SO EXPORT.%ORACLE_SID% /ID 1000 /L APPLICATION /D "ERROR en el export de %ORACLE_SID%"
goto end

:OK 
echo "Backup OK "
EVENTCREATE /T INFORMATION /SO EXPORT.%ORACLE_SID% /ID 1000 /L APPLICATION /D "Export de  %ORACLE_SID% finalizado OK "
goto end

:end
exit %CORRECTO%

Hay que tener en cuenta que:

  • La cuenta desde la que se lance el .bat debe de tener permisos tanto para ejecutar los binarios de oracle como para lanzar el comando EVENTCREATE
  • El ID que hemos elegido (100 y 36) es arbitrario, es deicr , hemos puesto dos IDs al azar para las pruebas.
  • Hemos de conocer a proiri el path del ORACKE DIRECTORY donde va a ir el export para ponerlo en la variable RUTA

    Si somos capaces de cumplir estas 3 premisas podremos tener en el visor de eventos de windows el comienzo y el resultado de nuestro exdp en windows.

ORA-29279 Errors using UTL_SMTP

One of the most common error using Fine Grained Acess and UTL_SMTP is the ORA-2927SMTP permanent error
This aren’t databae errors, this error are a generic authentication issue with the configuration of the SMTP server and fortunately, Oracle has a solution about it.


Contact your SMTP administrator for additional assistance as this solution may require your e-mail administrator to make the necessary changes.

More information :

  • ORA-29279 SMTP: 554 Using Utl_smtp To Send Email (Doc)
  • Document 604763.1 – Check SMTP Server Availability for ORA-29278 or ORA-29279 errors using UTL_SMTP to Send Email
  • ORA-2427 con el paquete SMTP

Errores ORA-29279 usando UTL_SMTP

Con la implementacion del Fine Grained Acess en la gestión de conexiones de la base de datos,el DBA acaba siendo en muchos casos el punto de entrada de la resolucion de errores que nada tienen que ver con el motor de la base de datos.
Uno de estos errores muy comunes son los ORA-29279 usando UTL_SMTP

Afortunadamente, Oracle es muy claro al respecto.
Los errores ORA-29279 no son un error del motor, sino que nos transmite os escalan el error que dando el servidor de correo


Contact your SMTP administrator for additional assistance as this solution may require your e-mail administrator to make the necessary changes.

Así que, claro y en botella.
Mas info en :

  • ORA-29279 SMTP: 554 Using Utl_smtp To Send Email (Doc ID 1471828.1)
  • Document 604763.1 – Check SMTP Server Availability for ORA-29278 or ORA-29279 errors using UTL_SMTP to Send Email
  • ORA-2427 con el paquete SMTP