ORA-00800: soft external error

chenoracle發表於2021-05-09

問題描述:

透過自動化編排安裝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將明顯下降。


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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2771420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章