ora 00600 2622 當前日誌組損壞

2021-07-10 08:48:13 字數 3048 閱讀 5407

一、前言

引用:在oracle

內部,scn

分為兩部分儲存,分別稱之為scn wrap

和scn base

。可能是由於在早些年通常只能處理32

位甚至是16

位的資料,所以人為的分成了低32

位(scnbase

)和高16

位(scn wrap

)。而scn wrap

和scn base

是以2個16

進製的數儲存的。

重要公式:

scn= (scn_wrp * 4294967296) + scn_bas

4294967296

為4gscn 的增長方式:the scn base is incremented for each scnincrement.when the base reaches a limit, scn wrap is incremented.

scn 的增長方式:翻譯:先是scn base

遞增,當scn base

遞增到乙個上限值(也是4g

)後,scnwrap

就進1位。scn base

又從0開始遞增。

語法:1

、修改前8位,包含scn_base和scn_wrap,使用 :

sql> oradebug poke 0x149876fa0 8 0x7ae00031938

before: [149876fa0, 149876fa8) = 0000000000000000

after: [149876fa0, 149876fa8) = 00031938 000007ae

2、32

位平台的修改scn,

修改,修改scn_wrap

來推進scn

,使用:

sql> oradebug poke 0x0049c0950 4 1

before: [0049c0950, 0049c0954) = 00000000

after:  [0049c0950, 0049c0954) = 00000001

注意:

1、  oradebug dumpvar sga kcsgscn_出來的之中【後的數值代表物理記憶體的開始位置,例如,149876fa0,也是1個16進製制的數。

2、  base位和wrap位共有16位,共8個位元組,例如 0x7ae00031938,代表scn的乙個總和。

細節:在資料庫遇到ora-600[2662],scn不一致(又沒有日誌)的時候,我們首先想到的就是去推進資料庫的scn,讓資料庫能夠open起來,搶救其中的資料,但是由於各種亂用的情況,oracle scn的pach出來後

(11.2.0.4,12.0.1.0預設就遮蔽),遮蔽了以前大部分傳統的推進scn的方法

(adjust_scn, _minimum_giga_scn),現在能夠推進scn的有oradebug,bbed,修改控制檔案.本文就列舉通過ue修改控制檔案scn來推進資料庫scn的方法

二、案例分享

新網資料庫,斷電重啟後,當前日誌組損壞:當前資料庫版本(非常重要):11.2.0.4當前重做日誌組(current redo)損壞,如下圖:

辦法a不成功首先想到的是使用不一致性開啟資料庫:alter system set  「_allow_error_simulation」=true ;alter system set  「_allow_resetlogs_corruption」=true ;alter session set events '10015 trace nameadjust_scn level 6';效果如下:

原因當前是11.2.0.4的資料庫,所以只能用bbed或者oradebug方式來推進scn,於是我選擇了oradebug

辦法b成功

1、  思想:查詢當前資料檔案的scn號為5379469,而上述報ora-600的錯誤中有個數字[5380357]相近。根據官方解釋,這個數字就是scn中的當前最新scn wrap的值。那麼我們的資料庫檔案的確過老了,所以要推進資料檔案的scn值。錯誤說明:error:

ora-600 [2662] [a][c] [d] [e]

arguments:

arg [a] current scn wrap

arg current scn base

arg [c] dependent scn wrap

arg [d] dependent scn base

arg [e] where present this is the dba wherethedependent scn came from.

2、  開始推進scn號:①  首先還是需要在pfile中加入不一致性引數:*._allow_resetlogs_corruption=true

②  再確定自己想要推進至scn值,為了保險這裡我設定為6380358,比原來多100萬。並得到其16進製表達。

③  接著使用改好的pfile,mount資料庫。重建控制檔案,recover database。

④  sql>oradebug setmypid

sql>oradebug dumpvar sga kcsgscn --顯示當前的kscgscn

sql>oradebug poke 0x06001ae70 8 0x0000000000615b46      注意上面推進的scn號,一定要以0x開頭,因為這裡要讓oradebug讓其識別為16進製制的數。

再次說明0x06001ae70,為物理記憶體的開始位址,可以第二個sql查詢得到。

然後重新建庫(非常重要),匯入資料。

三、練習

為了加深印象,我自己又在自己電腦上做了乙個測試(資料庫版本11.2.0.4),使用oradebug來推進scn,加深自己的印象。將當前資料庫的scn號8443905906979,推進到8443905907000,湊成乙個整數。

問題:明明我推進到8443905907000

成功了,但在查詢時卻變成了8443905907001

。為什麼會多1

,雖然不影響資料庫執行,但這是乙個問題,

還在繼續查證。

獲取當前日期

js獲取當前時間 獲取當前時間戳 function getnowdate 時間戳轉所需樣式 timechange.js long型別時間轉換為日期 擴充套件date的format方法 date.prototype.format function format if y test format for...

Jquery對當前日期的操作 格式化當前日期

對date的擴充套件,將 date 轉化為指定格式的string 月 m 日 d 小時 h 分 m 秒 s 季度 q 可以用 1 2 個佔位符,年 y 可以用 1 4 個佔位符,毫秒 s 只能用 1 個佔位符 是 1 3 位的數字 date.prototype.format function fmt...

Jquery對當前日期的操作 格式化當前日期

jquery對當前日期的操作 格式化當前日期 對date的擴充套件,將 date 轉化為指定格式的string 月 m 日 d 小時 h 分 m 秒 s 季度 q 可以用 1 2 個佔位符,年 y 可以用 1 4 個佔位符,毫秒 s 只能用 1 個佔位符 是 1 3 位的數字 date.protot...