问题描述:

通过自动化编排安装Oracle 19C单机后,在告警日志里发现有ORA-00800的错误。
环境说明:

DB:Oracle 19.3.0.0
OS:Redhat 7.6

告警日志信息:

Errors in file /oracle/product/diag/rdbms/oradb/oradb/trace/oradb_vktm_12297.trc  (incident=120046):
ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Incident details in: /oracle/product/diag/rdbms/oradb/oradb/incident/incdir_120046/oradb_vktm_12297_i120046.trc
2021-05-08T19:08:06.701554+08:00
Error attempting to elevate VKTM's priority: no further priority changes will be attempted for this process
VKTM started with pid=5, OS id=12297

问题描述:

[oracle@cjcdb01 ~]$ oerr ora 00800
00800, 00000, "soft external error, arguments: [%s], [%s], [%s], [%s], [%s]"
// *Cause:  An improper system configuration or setting resulted in failure.
//          This failure is not fatal to the instance at the moment, however, this might result
//          in an unexpected behavior during query execution.
// *Action: Check the database trace files and rectify system settings or the configuration.
//          For additional information, refer to Oracle database documentation or refer to
//          My Oracle Support (MOS) notes.

不正确的系统配置或设置导致故障。这个失败目前对实例不是致命的,但是,这可能会导致在查询执行期间发生意外行为。
问题分析:

查看oradb_vktm_12297.trc、oradb_vktm_12297_i120046.trc日志没有查到有用的信息,查看mos ID 2718971.1,对该错误有更详细的说明。
该错误是在尝试提升VKTM的优先级时出错,并且不会对此进程优先级进行更改。
产生此问题的原因可能是因为系统配置不当,或权限问题引起的。
需要检查 $ORACLE_HOME/bin/oradism文件权限。
Oradism should be owned by root:dba with 4750 to be able to set priority of processes defined in _high_priority_processes(default - LG*/LGWR/LMS) and _highest_priority_proesses (default - VKTM).
ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], for Oracle Linux (文档 ID 2718971.1)

解决方案:

检查优先级别设置

1] Check the priority of VKTM or LMS* @RDBMS level
select a.ksppinm  "Parameter",
       b.ksppstvl "Session Value",
       c.ksppstvl "Instance Value",
       a.KSPPDESC "Describtion"
  from x$ksppi a, x$ksppcv b, x$ksppsv c
 where a.indx = b.indx
   and a.indx = c.indx
   and a.ksppinm like '_%'
   and a.ksppinm like '_highest_priority_process%';

如果VKTM或LMS*没有优先级,请提高优先级

本次案例查询结果就是VKTM,不需要执行。

SQL> alter system set "_high_priority_processes"='VKTM' scope=spfile;

重启实例后,再次查看

SQL> show parameter "_high_priority_processes";

确保权限是正确的

$ cd $ORACLE_HOME/bin/oradism
$ ls -lrt oradism
-rwsr-x--- 1 root oinstall 147848 Apr 17 2019 oradism >>>>>>>>>>>>>>>>>>>>>>>> Correct one

查看当前权限

[oracle@sy-vm-finm-db01 bin]$ pwd
/oracle/product/19.3/db/bin
[oracle@sy-vm-finm-db01 bin]$ ls -l |grep oradism
-rwxr-x--- 1 oracle oinstall    147848 Apr 17  2019 oradism

对比另一套19C数据库权限。

[oracle@sy-vm-obs-db01 bin]$ ls -l oradism 
-rwsr-x--- 1 root oinstall 147848 Apr 17  2019 oradism

修改权限

[root@sy-vm-finm-db01 bin]# chown root.oinstall oradism
[root@sy-vm-finm-db01 bin]# chmod u+s oradism
[root@sy-vm-finm-db01 bin]# ls -l oradism 
-rwsr-x--- 1 root oinstall 147848 Apr 17  2019 oradism

再次重启数据库,ORA-00800问题消失。
关于oracle进程优先级的说明:

参考eygle老师的一篇文章

在繁忙的系统中,我们总是会期望提高某些Oracle进程的优先级,使其能够更容易的获得CPU资源,执行重要的任务。
在Oracle 10g之前,这样的工作要通过操作系统上的设置来实现。
在Oracle 10gR2中,一个新的隐含参数被引入到数据库中,用于配置提升Oracle后台进程的优先级。
这个核心参数是: _high_priority_processes
在 10.2 版本中,Oracle 缺省的对 LMS* 设置高优先级,在11g开始,对 LMS*||VKTM 设置高优先级。
在Linux平台上,进程的内核调用分为三类:
TS - SCHED_OTHER (SCHED_NORMAL) ,这是分时调度策略,缺省的正常级别;
FF - SCHED_FIFO,这是实时调度策略,先到先服务,先进先出;
RR  - SCHED_RR,实时调度策略,时间片轮转;
其中 FF,RR 都是实时调度队列的,实时进程调度队列,是从优先级最高的进程运行,如果当前运行的是FIFO进程,如果进程不主动让出CPU,其他进程都不能运行,如果是RR(时间片轮转)的,则不会一直独占CPU,运行一段时间会被切换出来。

关于VKTM进程的说明:

参考 https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968373.html
VKTM进程消耗大量CPU的问题
11g中引入了VKTM后台进程,VKTM是virtual keeper of time的缩写,
该进程负责提供时钟时间(每秒更新一次)以及参考时间服务(每20ms更新一次,仅在进程高优先级情况下可用),该参考时间服务用于各种基于时间间隔的度量。  
VKTM在SGA中发布这些计时信息,以便各种RDBMS Client可以廉价和快速了解时间信息。
Wall-clock 时钟时间每一秒更新一次且单调递增。 
而参考时间计数(Reference-time)则每20ms更新一次,且仅当VKTM运行在高优先级情况下时可用。   
在某些环境下VKTM持续消耗较多的CPU,特别是在虚拟化的环境中例如Vmware、Vbox等; 
对于这些虚拟化环境若是非产品production环境,则可以考虑将VKTM进程不要运行在高优先级上,虽然这会导致Reference-time参考时间计数不可用,但是实际不会产生必要的性能度量不可用的问题。 
在11g中默认_high_priority_processes隐藏参数指定了LMS*和VKTM运行在高优先级下,可以通过修改该参数,仅让LMS运行在高优先级下,这样VKTM所消耗的CPU将明显下降。

作者:chenoracle

最后修改:2022 年 02 月 20 日
如果觉得我的文章对你有用,请随意赞赏