暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORA-00800: soft external error

IT小Chen 2021-05-10
3600

问题描述:

通过自动化编排安装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老师的一篇文章
                          https://www.eygle.com/archives/2013/08/oracle_high_priority_processes.html
                          在繁忙的系统中,我们总是会期望提高某些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将明显下降。

                            #####chenjuchao 2021-05-09 15:15#####

                            文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论