SCN異常增長導致資料庫異常關閉風險的防範
oracle資料庫SCN的異常增長,可導致資料庫異常關閉。本文對其的機制及檢測方法進行描述。
一、SCN相關知識介紹
1、SCN概述:
SCN是一個單向增長的“時鐘”,廣泛應用於資料庫恢復、事務ACID特性(指事務的原子性-Atomicity、一致性-Consistency、隔離性-Isolation、永續性-Durability,這是可靠資料庫所應具備的特性)和還有分散式事務中。
2、SCN內部儲存方式:在Oracle內部,SCN分為scn wrap、scn base兩部分儲存。SCN長度為48位,因為在早期通常只能處理32位甚至是16位的資料,所以人為地分成了低32位(scn base)和高16位(scn wrap)。
2的48次方,數值為281萬億,281474976710656。
3、Maximum Reasonable SCN:在當前時間點,SCN最大允許達到(或者說最大可能達到)的SCN值。也稱為Reasonable SCN Limit,簡稱RSL。這個值是一個限制,避免資料庫的SCN無限制地增大,甚至達到了SCN的最大值。
Maximum Reasonable SCN=(當前時間至1988年1月1日之間的天數)x24x3600xSCN每秒最大可能增長速率。
SCN每秒最大可能增長速率的數值與Oracle版本有關,11.2.0.2之前是16384,11.2.0.2及之後版本是32768。在11.2.0.2的版本中有一個隱含引數,_max_reasonable_scn_rate,其預設值就是32768,不建議調整該值。
4、SCN Headroom:指Maximum Reasonable SCN與當前資料庫SCN的差值。alert中為了容易讓人讀通常以“天”為單位。
天數=(Maximum Reasonable SCN-Current SCN)/16384/3600/24。含義為,如果按SCN的每天增長速率,多少天會到達Maximum Reasonable SCN。
二、SCN異常增長導致資料庫關閉的機制
通常情況下,SCN每秒最大允許的16K、32K增長率已經足夠,但不排除由於BUG,或者人為調整導致SCN異常增長過大,比如資料庫通過特殊手段強制開啟,手工把SCN遞增得很大。除此以外,Oracle的SCN會通過db link進行傳播,涉及到db link操作的多個庫,會將SCN同步到這些庫中的最大的SCN。
在兩個庫通過db link進行分散式事務時,假設B庫的SCN值要高於A庫的SCN,因此要將B庫的SCN增同步到A庫,但是如果B庫的SCN過高,這樣同步到A庫之後,使得A庫面臨Headroom過小的風險,那麼A庫會拒絕同步SCN,這個時候就會報ORA-19706: Invalid SCN錯誤。
遞增SCN使得Headroom過小到什麼值時會拒絕遞增(同步)SCN呢?如果打了2012年1月CPU或PSU補丁,11.2.0.2及以後的版本,是1天即24小時,其他版本是31天即744小時,打了補丁之後可以由隱含引數_external_scn_rejection_threshold_hours調整。
如果是資料庫本身操作而不是通過db link同步使得SCN增長的,其增長速率可通過系統的統計量“calls to kcmgas”和”DEBUG calls to kcmgas”得到。kcmgas的意思是get and advance SCN,即獲取並遞增SCN。
三、檢測方法
執行檢測指令碼scnhealthcheck.sql,該指令碼分為9i、10.1、10.2、11.1、11.2共5個版本。指令碼見Oracle MOS文件[ID 1393363.1]。
四、檢測結果
執行scnhealthcheck.sql指令碼後,檢測結果分為如下三種:
Result: A - SCN Headroom is good,資料庫處於正常狀態,建議短期內處理;
Result: B - SCN Headroom is low,資料庫SCN生成率過高,需要儘快處理;
Result: C - SCN Headroom is low,資料庫SCN生成率過高,需要緊急處理;
正常的檢測結果如下所示:
--------------------------------------------------------------
ScnHealthCheck
--------------------------------------------------------------
Current Date: 2012/11/30 10:46:58
Current SCN: 49749614621
SCN Headroom: 9232.3
Version: 10.2.0.4.0
--------------------------------------------------------------
Result: A - SCN Headroom is good
Apply the latest recommended patches
based on your maintenance schedule
AND set _external_scn_rejection_threshold_hours=24 after apply.
For further information review MOS document id 1393363.1
五、參考文件
1、NOTE:1376995.1 - Information on the System Change Number (SCN) and how it is used in the Oracle Database
2、NOTE:1393363.1 - Installing, Executing and Interpreting output from the "SCNhealthcheck.sql" script
3、NOTE:1388639.1 - Evidence to collect when reporting "high SCN rate" issues to Oracle Support
4、NOTE:1393360.1 - ORA-19706 and Related Alert Log Messages
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9529380/viewspace-750417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HA異常導致oracle資料庫無法啟動Oracle資料庫
- Oracle 資料庫不一致導致異常的恢復Oracle資料庫
- Oracle資料庫日常問題-歸檔異常增長Oracle資料庫
- eclipse異常關閉 導致tomcat 6.0 無法重啟EclipseTomcat
- 異常程式導致大量資源佔用
- 當機導致slave異常分析
- 【YashanDB知識庫】資料庫審計shutdown immediate操作導致資料庫異常退出資料庫
- MySQL 預插入的資料條數過多導致異常MySql
- 序列異常導致災備端應用異常處理一則
- OGG相關的CPATURE導致SYSAUX表空間異常暴增處理UX
- GDI資源洩漏導致的程式異常的解析
- DataIntegrityViolationException異常:java利用mymatis連線資料庫異常AIExceptionJava資料庫
- C#規範整理·異常與自定義異常C#
- [20210722]資料庫異常關閉的處理.txt資料庫
- 【RAC】儲存陣列電源故障導致RAC資料庫異常掛起陣列資料庫
- Oracle RAC啟動因CTSS導致的異常Oracle
- MySQL Bug導致異常當機的分析流程MySql
- 記 Laravel Observer 導致 Redis 佇列異常LaravelServerRedis佇列
- cv::Mat轉QImage導致影像色彩異常
- 資料庫事務耗時過長導致Could not retrieve transaction read-only status from server異常資料庫Server
- 【北亞資料恢復】異常斷電導致Oracle資料庫報錯的oracle資料恢復資料恢復Oracle資料庫
- 同事拿錯作業系統安裝盤,導致資料庫安裝異常作業系統資料庫
- Java異常處理最佳實踐及陷阱防範Java
- 資料庫異常hang住解決資料庫
- eclipse 異常關閉後, 再開啟時閃退,導致無法再開啟Eclipse
- 資料庫異常崩潰的元凶--OOM killer資料庫OOM
- 資料庫異常關閉後無法啟動問題處理一例資料庫
- java物件導向(異常)Java物件
- 異常-編譯期異常和執行期異常的區別編譯
- 資料庫異常智慧分析與診斷資料庫
- 資料庫連線異常故障報告資料庫
- 資料庫連線異常處理思路資料庫
- 今晚遷移資料庫異常順利資料庫
- 異常篇——異常處理
- 異常和異常呼叫鏈
- 伺服器架構導致的SEO收錄異常伺服器架構
- 異常連線導致的記憶體洩漏排查記憶體
- crontab導致CPU異常的問題分析及處理