ORA-00600


ORA-00600

1 前言

ORA-006000 錯誤,一般都會涉及到Oracle 的BUG 問題。所以這種問題很難解決。這里只 能對已經發生過的,進行一些總結。以供對比和判斷。如果各種條件能完全匹配,則可以 嘗試進行對應方法的解決。如果條件不匹配,在購買Oracle 服務的情況下,可以申請 Oracle 支持。

另外,也有可能信息補充不及時,最好是直接到 MOS 賬號上查詢。

下面各個部分,以錯誤的第一個參數為區分點。

1.1 3020

1.2 kcblin_3

總體來說,這個參數的報錯,是由於內存管理方面的問題。比如參數設置過大,或者內 存自動管理與手動管理的沖突等。

觸發條件及解決方法
  1. _PGA_MAX_SIZE 設置超過2G,
    解決方法
    1. 將該參數值調整至2G,或者更低
    2. 升級至12.2
    3. 安裝補丁:17951233
  2. SORT_AREA_SIZE 設置過大
    觸發條件
    • 操作系統使用大頁
    • 以下三個參數被設置並生效 workarea_size_policy=manual sort_area_size=2147483647 sort_area_retained_size=2147483647
    解決方法
    設置sort_area_size=2145386946 或者更小
  3. _smm_max_size 設置過大
    觸發條件
    _SMM_MAX_SIZE 設置超過2G.
    解決方法
    1. 升級至12.2
    2. 安裝補丁:17951233
  4. 內存參數配置沖突
    觸發條件
    一方面是使用了內存的自動管理memory_target/sga_target,又手動設置了以下幾個參數:
    • sort_area_size
    • hash_area_size
    • workarea_size_policy
    解決辦法
    將以上三個參數去除。

1.3 kghfrunp

kghfrunp - kernel generic heap manager free unused space in a heap free unpinned space 堆管理時,用於釋放未不再使用的內存空間和釋放pin的空間。

1.3.1 no duration

EXPDP執行時報錯ORA-00600[kghfrunp: no duration]。 當操作需要SGA釋放部分領域來使用時,由於沒有正常釋放就會報錯ORA-00600[kghfrunp]。 Bug 13914613 Excessive time holding shared pool latch in kghfrunp with auto memory management 回避策為

SQL> alter system set "_enable_shared_pool_durations"=false scope=spfile;

1.4 kdBlkCheckError

 

1.4.1 現象

在數據庫宕機前出現ORA-00600錯誤。 日志內容如下:

ORA-01595: error freeing extent (4) of rollback segment (31))
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [kdBlkCheckError], [3], [3], [18018], [], [], [], [], [], [], [], []
Corrupt Block Found
         TSN = 2, TSNAME = UNDOTBS1
         RFN = 3, BLK = 3, RDBA = 12582915
         OBJN = 2, OBJD = -1, OBJECT = , SUBOBJECT =
         SEGMENT OWNER = , SEGMENT TYPE =
Wed Aug 02 10:00:05 2017
Dumping diagnostic data in directory=[cdmp_20170802100005], requested by (instance=1, osid=24055 (SMON)), summary=[incident=48868].
Errors in file /oracle/app/oracle/diag/rdbms/aiboss/aiboss/trace/aiboss_smon_24055.trc  (incident=61108):
ORA-00600: internal error code, arguments: [kdBlkCheckError], [3], [3], [18018], [], [], [], [], [], [], [], []
Incident details in: /oracle/app/oracle/diag/rdbms/aiboss/aiboss/incident/incdir_61108/aiboss_smon_24055_i61108.trc
Wed Aug 02 10:00:11 2017
PMON (ospid: 24025): terminating the instance due to error 474
System state dump requested by (instance=1, osid=24025 (PMON)), summary=[abnormal instance termination].
System State dumped to trace file /oracle/app/oracle/diag/rdbms/aiboss/aiboss/trace/aiboss_diag_24035.trc
Instance terminated by PMON, pid = 24025
Wed Aug 02 10:40:19 2017

1.4.2 分析

  • 錯誤分析 ORA-01595,ORA-00607,ORA-00600錯誤出現后,10:00:05秒Oracle開啟記錄此錯誤的相關信息,隨后 Oracle PMON進行由SMON於無法清理資源,無法保證數據一致性而停止實例。 ORA-01595錯誤提的是數據庫smon 進行清理回滾段的extent. 說明undo表空間出現問題。
  • BUG 確認

從宕機前的日志記錄來看,數據庫遇到的是oracle BUG 12349316. 依據為:

freeing extent (4) of rollback segment (31))                         =====> 與oracle BUG 12349316引發的條件一致,都是在清理extent時引發BUG.
[kdBlkCheckError], [ 3], [ 3], [ 18018]                              =====> 與oracle BUG 12349316 中600錯誤返回參數一致,都帶有18018.
trace 日志(aiboss_smon_24055_i61108.trc)中發現 delete extent 函數    =====> FRAME [ 32] (ktusp_delextent()+76 -> ktsxr_delete())

1.4.3 故障處理

主要的處理思路是先跳過有問題的undo段,然后重建undo表空間

  • 修改參數文件 數據庫啟動時,查找參數文件的順序是spfile<ORACLE_SID>.ora –> init<ORACLE_SID>.ora –> init.ora. 因此Oracle 數據庫傾向於使用spfile啟動數據庫。一般環境中也都使用spfile. 如何確認數據庫使用的是spfile 還是pfile,使用 " show parameter spfile " 命令即可查看。

    當數據庫使用的是spfile參數文件時,由於spfile是 二進制 文件,我們不便於直接修改,因此需要先創建出一個pfile 文本文件。

    create pfile='/tmp/pfile.ora' from spfile;
    此命令的執行不需要啟動數據庫,進入sqlplus環境即可。
    
     在參數文件中加入以下內容:
    undo_management = MANUAL             # UNDO 段管理方式改為manual
    # 其他可添加內容:
    *.fast_start_parallel_rollback=high  # 以4*cpu 個數開啟回滾進程,但是實際上不會真的開始這么多。
    *._allow_resetlogs_corruption = true # 如果數據庫需要恢復,且undo與redo不一致,部分redo 無法恢復時需要此參數,允許resetlogs
    
  • 啟動數據庫

    startup mount pfile='/tmp/pfile.ora';
    alter database open;
    

    如果數據庫需要recovery,則執行以下命令:

    recover database until cancel;
    alter database open resetlogs;
    
  • offline存在活動事務的的undo塊

    select segment_name,status,tablespace_name
    from dba_rollback_segs
    where status not in ('ONLINE', 'OFFLINE') ;
    
    SEGMENT_NAME                   STATUS           TABLESPACE_NAME
    ------------------------------ ---------------- ------------------------------
    _SYSSMU3_4004931649$           NEEDS RECOVERY   UNDOTBS1
    _SYSSMU4_1126976075$           NEEDS RECOVERY   UNDOTBS1
    _SYSSMU5_4011504098$           NEEDS RECOVERY   UNDOTBS1
    

    將以上內容添加至剛創建的/tmp/pfile.ora中:

    _CORRUPTED_ROLLBACK_SEGMENTS = ('_SYSSMU3_4004931649$','_SYSSMU4_1126976075$','_SYSSMU5_4011504098$')
    

    "_corrupted_rollback_segments" 作用是不使用這幾個回滾段。

  • 重啟數據庫

    startup force pfile='/tmp/pfile.ora';
    
  • 重新創建undo 表空間

    alter tablespace undotbs1 offline ;
    drop tablespace undotbs1 including contents and datafiles;
    create undo tablespace undotbs1 datafile '/data0/aiboss/undotbs1.dbf' size 30G autoextend off;
    alter system set undo_tablespace='UNDOTBS1';
    
  • 重啟數據庫 重啟數據庫前,需要修改/tmp/pfile.ora 參數文件,將以下參數去除:

    undo_management=manual
    _allow_resetlogs_corruption=true
    fast_start_parallel_rollback=high
    

    重啟:

    startup force pfile='/tmp/pfile.ora';
    create spfile from pfile='/tmp/pfile.ora';
    startup force;
    

1.5 keltnfy-ldmInit

 

1.5.1 [46][1]

hostname 修改后,沒有在/etc/hosts 中添加ip 與hostname 的對應關系。

1.6 kkzlpllg:5

該錯誤是materialized view 中出現的。錯誤信息如下:

ORA-00600: internal error code, arguments: [kkzlpllg:5], [], [], [], [], [], [], [], [], [], [], []
ORA-06512: at \"SYS.DBMS_SNAPSHOT\", line 2809
ORA-06512: at \"SYS.DBMS_SNAPSHOT\", line 3025
ORA-06512: at \"SYS.DBMS_SNAPSHOT\", line 2994
  • 原因

    出現這個錯誤信息,是由於之前刪除物化視圖與刪除表之間的順序不對。引起的數據字典sys.snap_logdep$中的數據,在進行刷新 或者建立物化視圖時,數據出現多行而無法完成完成操作引起的。

    我們刪除物化視圖和表時,一定要先刪除物化視圖,再刪除物化視圖日志,最后再刪除表。如果順序錯了,有些信息是不會被刪除掉的。

  • 解決

    將sys.snap_logdep$ 中rscn 列是空值的字段設置為非空即可。比如:

      select * from sys.snap_logdep$ where rscn is null;
    
     TABLEOBJ#     SNAPID SNAPTIME        RSCN
    ---------- ---------- --------- ----------
         85590          3 16-NOV-17
         77461          3 16-NOV-17
    
     update sys.snap_logdep$ set rscn=999999 where rscn is null;
    
    2 rows updated.
    
    SQL> commit;
    

Author: HALBERD E-mail: halberd.lee@gmail.com Tel: 18258160531

Created: 2020-05-22 Fri 20:25

Validate


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM