miércoles, 3 de junio de 2026

ORA-00800: soft external error, arguments, Set Priority Failed, VKTM

Hace unos días atrás experimenté un error poco común.

El Alert de la base de datos mostraba la siguiente información:
adrci> show alert

ADR Home = /opt/app/oracle/diag/rdbms/cdb/cdb:
*************************************************************************
Output the results to file: /tmp/alert_10232_1404_cdb_1.ado
adrci> exit

Errors in file /opt/app/oracle/diag/rdbms/cdb/cdb/trace/cdb_vktm_14835.trc  (incident=128072) (PDBNAME=CDB$ROOT):
ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Incident details in: /opt/app/oracle/diag/rdbms/cdb/cdb/incident/incdir_128072/cdb_vktm_14835_i128072.trc
Error attempting to elevate VKTM's priority: no further priority changes will be attempted for this process

Al observar la información de referencia de los incidentes, los mismos mostraban el contenido a continuación:
adrci> show incident

ADR Home = /opt/app/oracle/diag/rdbms/cdb/cdb:
*************************************************************************
INCIDENT_ID          PROBLEM_KEY         CREATE_TIME
-------------------- ------------------- ----------------------------------------
128072               ORA 800             2026-05-27 03:47:30.907000 -06:00
133193               ORA 800             2026-05-27 03:55:48.114000 -06:00
2 rows fetched

adrci> show incident -mode brief

ADR Home = /opt/app/oracle/diag/rdbms/cdb/cdb:
*************************************************************************

**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
   INCIDENT_ID                   128072
   STATUS                        ready
   CREATE_TIME                   2026-05-27 03:47:30.907000 -06:00
   PROBLEM_ID                    9
   CLOSE_TIME                    
   FLOOD_CONTROLLED              none
   ERROR_FACILITY                ORA
   ERROR_NUMBER                  800
   ERROR_ARG1                    Set Priority Failed
   ERROR_ARG2                    VKTM
   ERROR_ARG3                    Check traces and OS configuration
   ERROR_ARG4                    Check Oracle document and MOS notes
   ERROR_ARG5                    
   ERROR_ARG6                    
   ERROR_ARG7                    
   ERROR_ARG8                    
   ERROR_ARG9                    
   ERROR_ARG10                   
   ERROR_ARG11                   
   ERROR_ARG12                   
   SIGNALLING_COMPONENT          background_proc
   SIGNALLING_SUBCOMPONENT       
   SUSPECT_COMPONENT             
   SUSPECT_SUBCOMPONENT          
   ECID                          
   IMPACTS                       0

**********************************************************
INCIDENT INFO RECORD 2
**********************************************************
   INCIDENT_ID                   133193
   STATUS                        ready
   CREATE_TIME                   2026-05-27 03:55:48.114000 -06:00
   PROBLEM_ID                    9
   CLOSE_TIME                    
   FLOOD_CONTROLLED              none
   ERROR_FACILITY                ORA
   ERROR_NUMBER                  800
   ERROR_ARG1                    Set Priority Failed
   ERROR_ARG2                    VKTM
   ERROR_ARG3                    Check traces and OS configuration
   ERROR_ARG4                    Check Oracle document and MOS notes
   ERROR_ARG5                    
   ERROR_ARG6                    
   ERROR_ARG7                    
   ERROR_ARG8                    
   ERROR_ARG9                    
   ERROR_ARG10                   
   ERROR_ARG11                   
   ERROR_ARG12                   
   SIGNALLING_COMPONENT          background_proc
   SIGNALLING_SUBCOMPONENT       
   SUSPECT_COMPONENT             
   SUSPECT_SUBCOMPONENT          
   ECID                          
   IMPACTS                       0
2 rows fetched
En bases de datos Oracle, el proceso VKTM (Virtual Keeper of Time) es un proceso en segundo plano que actúa como el "reloj maestro" de la instancia. Se encarga de publicar y sincronizar la hora (tanto en segundos como en alta resolución) para evitar llamadas repetitivas al sistema operativo y garantizar un rendimiento óptimo.

En dicho servidor, habíamos experimentado serios problemas de rendimiento con un proceso pesado de cierre nocturno, dejándo el mismo por decirle de alguna manera inciclado. Los jobs de la base de datos no levantaban automáticamente ni manualmente. La primera acción, fue reiniciar el contenedor de base de datos. Cuando aplicamos el procedimiento "clásico" de todo informático, el proceso de cierre de día, concluyó sin inconvenientes y los jobs volvieron a arrancar por cuenta propia sin errores.

Durante la noche de ese mismo día, volvió a repetirse el escenario de la noche anterior. Los jobs estaban abajo nuevamente y no levantaban manualmente.

Para complicar más el tema, los jobs que consumían un dblink a otra base de datos, dejaban bloqueados los objetos involucrados en el proceso, provocando también que los EOD del otro servidor fallaran en su intento por concluir.

El problema se había duplicado.

Revisando nuevamente el alert, revise el detalle de los errores que previamente había visto, pero que no había tenido tiempo para investigar.

Con lo que encontré en el ALERT, procedí a consultar en el MOS y  este apuntaba a 2 posibles causas del error.

La menos probable es que existiera un problema con los permisos de un archivo binario en el $ORACLE_HOME con el nombre oradism.

oradism es una utilidad especializada en segundo plano de Oracle Database en sistemas Unix/Linux que permite al software de Oracle realizar operaciones del sistema operativo que requieren privilegios como el usuario "root", principalmente bloquear/desbloquear la memoria del Área Global del Sistema (SGA) y establecer prioridades de ejecución más altas para procesos críticos

[oracle@asrv_001 ~]$ less /opt/app/oracle/diag/rdbms/cdb/cdb/incident/incdir_128072/cdb_vktm_14835_i128072.trc
[oracle@asrv_001 ~]$ ls -l $ORACLE_HOME/bin/oradism
-rwsr-x---. 1 root oinstall 147848 Apr 17  2019 /opt/app/oracle/product/19c/bin/oradism
[oracle@asrv_001 ~]$ ps -ef | grep vktm
oracle   13493 25178  0 09:32 pts/0    00:00:00 grep --color=auto vktm
oracle   17437     1  0 03:55 ?        00:00:02 ora_vktm_cdb

Lo segundo me dice la nota es que verificara la configuración de un parámetro a nivel de sistema operativo: cpu.rt_runtime_us.

Este es un parámetro del kernel Linux relacionado con la planificación (scheduler) de procesos de tiempo real (Real-Time Scheduling).

Su función es limitar cuánto tiempo de CPU pueden consumir los procesos con políticas de planificación de tiempo real (SCHED_FIFO y SCHED_RR) para evitar que monopolizen completamente los CPUs y bloqueen los procesos normales del sistema.

[oracle@asrv_001 ~]$ exit
logout
[opc@asrv_001 ~]$ sudo -s /bin/bash
[root@asrv_001 opc]# cat /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us
0

El valor "0" indica que los procesos de tiempo real NO pueden ejecutar tiempo de CPU. Sin embargo, en la práctica Oracle Database no utiliza procesos RT, por lo que probablemente no notarás ningún impacto directo, pero ...

Revisando otras publicaciones, encontré que otras personas habían experimientado un problema parecido y habían resuelto seteando el parámetro a un valor de 950000 que por lo general es el valor de facto en servidores con Oracle Database.

Lo hice en caliente primero para ver si sucedía algo malo. 

Como no encontré problemas, procedí a configurar un servicio que se encargará de registrar el cambio cada vez que el sistema reiniciara.
[root@asrv_001 opc]# echo 950000 > /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us


[root@asrv_001 opc]# ls -lat /usr/local/bin/
total 24
drwxr-xr-x.  2 root root   49 Mar 17  2023 .
-rwxr-xr-x.  1 root root 6404 Mar 17  2023 coraenv
-rwxr-xr-x.  1 root root 6823 Mar 17  2023 oraenv
-rwxr-xr-x.  1 root root 2445 Mar 17  2023 dbhome
drwxr-xr-x. 12 root root 4096 Sep 25  2022 ..

[root@asrv_001 opc]# cat /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us
950000
[root@asrv_001 opc]# cat /usr/local/bin/set_oracle_rt

#!/bin/bash
echo 950000 > /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us

[root@asrv_001 opc]# vi /usr/local/bin/set_oracle_rt

[root@asrv_001 bin]# cat /etc/systemd/system/oracle-rt.service
[Unit]
Description=Oracle RT Runtime Fix
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set_oracle_rt
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
[root@asrv_001 bin]#

[root@asrv_001 opc]# cd /usr/local/bin/
[root@asrv_001 bin]# ls -lat
total 28
drwxr-xr-x.  2 root root   70 May 27 09:40 .
-rw-r--r--.  1 root root   82 May 27 09:40 set_oracle_rt
-rwxr-xr-x.  1 root root 6404 Mar 17  2023 coraenv
-rwxr-xr-x.  1 root root 6823 Mar 17  2023 oraenv
-rwxr-xr-x.  1 root root 2445 Mar 17  2023 dbhome
drwxr-xr-x. 12 root root 4096 Sep 25  2022 ..
[root@asrv_001 bin]# chmod +x set_oracle_rt
[root@asrv_001 bin]# ls -lat
total 28
drwxr-xr-x.  2 root root   70 May 27 09:40 .
-rwxr-xr-x.  1 root root   82 May 27 09:40 set_oracle_rt
-rwxr-xr-x.  1 root root 6404 Mar 17  2023 coraenv
-rwxr-xr-x.  1 root root 6823 Mar 17  2023 oraenv
-rwxr-xr-x.  1 root root 2445 Mar 17  2023 dbhome
drwxr-xr-x. 12 root root 4096 Sep 25  2022 ..
[root@asrv_001 bin]# vi /etc/systemd/system/oracle-rt.service
[root@asrv_001 bin]# systemctl daemon-reload
[root@asrv_001 bin]# systemctl enable oracle-rt.service
Created symlink from /etc/systemd/system/multi-user.target.wants/oracle-rt.service to /etc/systemd/system/oracle-rt.service.
[root@asrv_001 bin]# systemctl start oracle-rt.service
[root@asrv_001 bin]# systemctl status oracle-rt.service
● oracle-rt.service - Oracle RT Runtime Fix
   Loaded: loaded (/etc/systemd/system/oracle-rt.service; enabled; vendor preset: disabled)
   Active: active (exited) since Wed 2026-05-27 09:42:27 CST; 38s ago
  Process: 16295 ExecStart=/usr/local/bin/set_oracle_rt (code=exited, status=0/SUCCESS)
 Main PID: 16295 (code=exited, status=0/SUCCESS)

May 27 09:42:27 asrv_001 systemd[1]: Starting Oracle RT Runtime Fix...
May 27 09:42:27 asrv_001 systemd[1]: Started Oracle RT Runtime Fix.
[root@asrv_001 bin]# cat /usr/local/bin/set_oracle_rt
#!/bin/bash
echo 950000 > /sys/fs/cgroup/cpu,cpuacct/user.slice/cpu.rt_runtime_us
[root@asrv_001 bin]#

Resultado obtenido, desde que configuré el servicio con el seteo del parámetro, no he vuelto a registar el error en la bitácora de la base de datos, ni he tenido problemas con el desempeño del EOD, ni con la inicialización de los JOBS.

Así, que si tienes algo parecido, quizás esta sea la solución.

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM