--************************************
-- db_block_checking 與 db_block_checksum
--************************************
??? db_block_checking與db_block_checksum兩個參數都是對block進行檢查,然而兩者很容易混淆。事實上,兩個參數中前者是對塊做邏
輯性檢查,后者則是做物理性檢查。兩者各司其職,并不矛盾。下面分別給出具體描述。
1.db_block_checking
??????? db_block_checking 是當block發生任何變化的時候進行邏輯上的完整性和正確性檢查。該參數能夠避免內存中數據塊的損壞。塊
???的檢查將對系統會有1%到10%的性能影響。取決于對db_block_checking參數的設置。頻繁的DML將使得塊檢查帶來更多的開銷。在系統
???負荷允許的情形下建議設置為full。該參數對SYSTEM表空間始終是處于“打開”狀態,而不管該參數是否設置為OFF。下面是該參數的
???設置參考。FALSE和TRUE是為了老版本的兼容。
??????? Property???????????? Description
??????? ---------------???? ------------
??????? Parameter type???????? String
??????? Syntax???????????????????????? DB_BLOCK_CHECKING = { FALSE| OFF| LOW | MEDIUM | TRUE| FULL}? -->OFF(=FALSE),FULL(=TRUE)
??????? Defaultvalue??????? ????? FALSE
??????? Modifiable????????? ? ? ? ? ALTER SYSTEM
??????? Basic?????????????? ? ? ? ? ?? No
??????????????????????????????
2.db_block_checksum
??????? db_block_checksum 用于DBWn和direct loader數據塊寫入到磁盤時,基于塊內的所有字節計算得出一個校驗值并將其寫入塊頭。
???在該參數設置為typical和full時,當讀入時候重新計算校驗和寫出時候的校驗對比,如果不同則認為是塊損壞。如果設置為FULL模式
???,則基于update/delete應用程序語句級別的改變發生后,校驗值會被重新計算并寫入。同時對于日志塊,在寫入之前,同樣會生產校
???驗值并寫入到塊頭。該參數主要是防止IO硬件和IO子系統的錯誤。如果設置為OFF則只對系統表空間有效。下面是該參數的設置參考。
???FALSE和TRUE是為了老版本的兼容。
??????? Property???????????? Description
??????? ---------------???? ------------
??????? Parameter type???????? String
??????? Syntax???????????????????????? DB_BLOCK_CHECKSUM = { OFF| FALSE| TYPICAL | TRUE| FULL}? -->OFF(=FALSE),FULL(=TRUE)
??????? Defaultvalue???????? ? ?? TYPICAL
???????Modifiable?????????????????? ALTER SESSION,ALTER SYSTEM
??????? Basic??????????????? ????????? No
?
3.存在的問題
???如果db_block_checking = off,非系統表空間中數據在邏輯上可能已經損壞,但是 db_block_checksum 卻是無法檢查出來的(負責物
???理層面的校驗),原樣寫到磁盤原樣讀到內存,因為它只校驗塊在寫出后和讀入之間是否發生變化而不檢查寫出前是否存在邏輯上的正確。
?
???有些情況下,比如索引塊損壞,造成通過索引無法獲得數據,但是讀索引塊的時候并沒有出1578錯誤,有可能是這個原因。
???SQL>ho oerr ora 1578
???01578,00000,"ORACLE data block corrupted (file # %s, block # %s)"
???// *Cause:? Thedatablockindicated was corrupted, mostly due tosoftware
???//????????? errors.
???// *Action: Try torestorethesegmentcontaining theblockindicated. This
???//???? ?????may involve dropping thesegmentandrecreating it. Ifthere
???//????????? isa tracefile,report theerrorsinit toyour ORACLE
???//????????? representative
?
4.db_block_checking和db_block_checksum這兩個參數對性能的影響
???下面的例子中做一個測試來查看該參數對性能的影響。實際上,環境的不同將使得測試結果會大相庭徑。
????? a. 創建測試對象???????
??? b. 修改兩個參數為FALSE???????
? ?? c. 對測試表test中三次分別插入100,000行數據????????????
????? 從上面的結果可以看出插入100百萬條記錄所需的最長時間為56.87秒,最短的時間為59.13,平均時間為58.5233。
??? d. 修改兩個參數為TRUE???????
??? e. 再次測試表test中三次分別插入100,000行數據???????????
?????? 從上面的結果可以看出插入100百萬條記錄所需的最長時間為03:01.66秒,最短的時間為02:49.15,平均時間為02:57秒左右。
???????
5.總結
???a. 對結果進行對比,可以看出當將兩個block參數設置為true時,其速度比為false時慢了近30%,不過此對比根據實際環境應有所不同。
?? b. 對于性能上的差異而言,當設置兩個block參數設置為true時,將需要更多的CPU資源來生成校驗值以及進行內存塊的驗證。同時,
??????? 該操作容易引起redo copy latch的持有時間增加和引起這個latch的競爭。
?? c. 不管db_block_checking和db_block_checksum這兩個參數的值為何值,SYSTEM表空間都會進行做checking和checksum,可以通過隱含
??????? 參數_db_always_check_system_ts設置為FALSE,但為了SYSTEM表空間數據安全,不建議將這個隱含參數值設置為FALSE。
?? d. checksum 通過校驗結構夠保證寫入到數據文件與從數據文件讀取的塊前后兩者是一致的。通常對于偵測由于IO操作(磁盤損壞,硬
??????? 件損壞)引發的壞塊。但它并不偵測在內存中已經出錯的數據塊。不管錯誤與否,DBWn后會將其寫入到數據文件。
?? e. checking 則正好彌補了checksum的不足,它對數據塊在內存提供一致性驗證,確保每一個數據塊的完整性。
?? f. 更多關于Block checking, http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1094433279412
???????
6.快捷參考
有關性能優化請參考
??? Oracle 硬解析與軟解析
??? 共享池的調整與優化(Shared pool Tuning)
??? Oracle 表緩存(caching table)的使用
?
有關ORACLE體系結構請參考
??? Oracle 表空間與數據文件
??? Oracle 密碼文件
??? Oracle 參數文件
??? Oracle 聯機重做日志文件(ONLINE LOG FILE)
??? Oracle 歸檔日志
??? Oracle 回滾(ROLLBACK)和撤銷(UNDO)
??? Oracle 實例和Oracle數據庫(Oracle體系結構)
?
有關閃回特性請參考
??? Oracle 閃回特性(FLASHBACK DATABASE)
??? Oracle 閃回特性(FLASHBACK DROP &RECYCLEBIN)
??? Oracle 閃回特性(Flashback Query、Flashback Table)
??? Oracle 閃回特性(Flashback Version、Flashback Transaction)
?
有關基于用戶管理的備份和備份恢復的概念請參考
??? Oracle 冷備份
??? Oracle 熱備份
??? Oracle 備份恢復概念
??? Oracle 實例恢復
??? Oracle 基于用戶管理恢復的處理 (詳細描述了介質恢復及其處理)
??? SYSAUX表空間管理及恢復
?
有關RMAN的備份恢復與管理請參考
??? RMAN 概述及其體系結構
??? RMAN 配置、監控與管理
??? RMAN 備份詳解
??? RMAN 還原與恢復
?? RMAN 備份路徑困惑(使用plus archivelog時)
?
有關ORACLE故障請參考
??? ORA-32004 的錯誤處理
??? ORA-01658 錯誤
??? CRS-0215 錯誤處理
??? 對參數FAST_START_MTTR_TARGET = 0 的誤解及設定
??? SPFILE 錯誤導致數據庫無法啟動(ORA-01565)
?
有關ASM請參考
??? 創建ASM實例及ASM數據庫
??? ASM 磁盤、目錄的管理
?
有關SQL/PLSQL請參考
??? SQLPlus 常用命令
??? SQL 基礎 --> 集合運算(UNION 與UNION ALL)
??? SQL 基礎 --> 常用函數
??? SQL 基礎 --> 視圖(CREATE VIEW)
??? SQL 基礎 --> 多表查詢
??? SQL 基礎 --> 過濾和排序
??? SQL 基礎 --> 子查詢
??? SQL 基礎 --> 層次化查詢(START BY ... CONNECT BY PRIOR)
??? SQL 基礎 --> ROLLUP與CUBE運算符實現數據匯總
??? PL/SQL --> 游標
??? PL/SQL --> 異常處理(Exception)
??? PL/SQL --> 語言基礎
??? PL/SQL --> 流程控制
??? PL/SQL --> 隱式游標(SQL%FOUND)
??? PL/SQL --> 存儲過程
??? PL/SQL --> 函數
??? PL/SQL --> 動態SQL
?
有關ORACLE其它特性
??? 使用OEM,SQL*Plus,iSQL*Plus管理Oracle實例
??? 日志記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
??? Oralce OMF 功能詳解
??? Oracle 用戶、對象權限、系統權限 ?
? ?? Oracle 角色、配置文件
??? Oracle 分區表
??? Oracle 外部表
??? 使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
??? 簇表及簇表管理(Index clusteredtables)
??? SQL*Loader使用方法
??? 啟用用戶進程跟蹤
??? 配置非默認端口的動態服務注冊
??? system sys,sysoper sysdba 的區別
??? ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME
??? Oracle 補丁全集 (Oracle 9i 10g 11g Path)
??? Oracle 10.2.0.1 升級到 10.2.0.4
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
