一、前言
引用:在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...