--************************************
-- db_block_checking 與 db_block_checksum
--************************************
??? db_block_checking與db_block_checksum兩個(gè)參數(shù)都是對(duì)block進(jìn)行檢查,然而兩者很容易混淆。事實(shí)上,兩個(gè)參數(shù)中前者是對(duì)塊做邏
輯性檢查,后者則是做物理性檢查。兩者各司其職,并不矛盾。下面分別給出具體描述。
1.db_block_checking
??????? db_block_checking 是當(dāng)block發(fā)生任何變化的時(shí)候進(jìn)行邏輯上的完整性和正確性檢查。該參數(shù)能夠避免內(nèi)存中數(shù)據(jù)塊的損壞。塊
???的檢查將對(duì)系統(tǒng)會(huì)有1%到10%的性能影響。取決于對(duì)db_block_checking參數(shù)的設(shè)置。頻繁的DML將使得塊檢查帶來更多的開銷。在系統(tǒng)
???負(fù)荷允許的情形下建議設(shè)置為full。該參數(shù)對(duì)SYSTEM表空間始終是處于“打開”狀態(tài),而不管該參數(shù)是否設(shè)置為OFF。下面是該參數(shù)的
???設(shè)置參考。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數(shù)據(jù)塊寫入到磁盤時(shí),基于塊內(nèi)的所有字節(jié)計(jì)算得出一個(gè)校驗(yàn)值并將其寫入塊頭。
???在該參數(shù)設(shè)置為typical和full時(shí),當(dāng)讀入時(shí)候重新計(jì)算校驗(yàn)和寫出時(shí)候的校驗(yàn)對(duì)比,如果不同則認(rèn)為是塊損壞。如果設(shè)置為FULL模式
???,則基于update/delete應(yīng)用程序語句級(jí)別的改變發(fā)生后,校驗(yàn)值會(huì)被重新計(jì)算并寫入。同時(shí)對(duì)于日志塊,在寫入之前,同樣會(huì)生產(chǎn)校
???驗(yàn)值并寫入到塊頭。該參數(shù)主要是防止IO硬件和IO子系統(tǒng)的錯(cuò)誤。如果設(shè)置為OFF則只對(duì)系統(tǒng)表空間有效。下面是該參數(shù)的設(shè)置參考。
???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,非系統(tǒng)表空間中數(shù)據(jù)在邏輯上可能已經(jīng)損壞,但是 db_block_checksum 卻是無法檢查出來的(負(fù)責(zé)物
???理層面的校驗(yàn)),原樣寫到磁盤原樣讀到內(nèi)存,因?yàn)樗恍r?yàn)塊在寫出后和讀入之間是否發(fā)生變化而不檢查寫出前是否存在邏輯上的正確。
?
???有些情況下,比如索引塊損壞,造成通過索引無法獲得數(shù)據(jù),但是讀索引塊的時(shí)候并沒有出1578錯(cuò)誤,有可能是這個(gè)原因。
???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這兩個(gè)參數(shù)對(duì)性能的影響
???下面的例子中做一個(gè)測(cè)試來查看該參數(shù)對(duì)性能的影響。實(shí)際上,環(huán)境的不同將使得測(cè)試結(jié)果會(huì)大相庭徑。
????? a. 創(chuàng)建測(cè)試對(duì)象???????
??? b. 修改兩個(gè)參數(shù)為FALSE???????
? ?? c. 對(duì)測(cè)試表test中三次分別插入100,000行數(shù)據(jù)????????????
????? 從上面的結(jié)果可以看出插入100百萬條記錄所需的最長(zhǎng)時(shí)間為56.87秒,最短的時(shí)間為59.13,平均時(shí)間為58.5233。
??? d. 修改兩個(gè)參數(shù)為TRUE???????
??? e. 再次測(cè)試表test中三次分別插入100,000行數(shù)據(jù)???????????
?????? 從上面的結(jié)果可以看出插入100百萬條記錄所需的最長(zhǎng)時(shí)間為03:01.66秒,最短的時(shí)間為02:49.15,平均時(shí)間為02:57秒左右。
???????
5.總結(jié)
???a. 對(duì)結(jié)果進(jìn)行對(duì)比,可以看出當(dāng)將兩個(gè)block參數(shù)設(shè)置為true時(shí),其速度比為false時(shí)慢了近30%,不過此對(duì)比根據(jù)實(shí)際環(huán)境應(yīng)有所不同。
?? b. 對(duì)于性能上的差異而言,當(dāng)設(shè)置兩個(gè)block參數(shù)設(shè)置為true時(shí),將需要更多的CPU資源來生成校驗(yàn)值以及進(jìn)行內(nèi)存塊的驗(yàn)證。同時(shí),
??????? 該操作容易引起redo copy latch的持有時(shí)間增加和引起這個(gè)latch的競(jìng)爭(zhēng)。
?? c. 不管db_block_checking和db_block_checksum這兩個(gè)參數(shù)的值為何值,SYSTEM表空間都會(huì)進(jìn)行做checking和checksum,可以通過隱含
??????? 參數(shù)_db_always_check_system_ts設(shè)置為FALSE,但為了SYSTEM表空間數(shù)據(jù)安全,不建議將這個(gè)隱含參數(shù)值設(shè)置為FALSE。
?? d. checksum 通過校驗(yàn)結(jié)構(gòu)夠保證寫入到數(shù)據(jù)文件與從數(shù)據(jù)文件讀取的塊前后兩者是一致的。通常對(duì)于偵測(cè)由于IO操作(磁盤損壞,硬
??????? 件損壞)引發(fā)的壞塊。但它并不偵測(cè)在內(nèi)存中已經(jīng)出錯(cuò)的數(shù)據(jù)塊。不管錯(cuò)誤與否,DBWn后會(huì)將其寫入到數(shù)據(jù)文件。
?? e. checking 則正好彌補(bǔ)了checksum的不足,它對(duì)數(shù)據(jù)塊在內(nèi)存提供一致性驗(yàn)證,確保每一個(gè)數(shù)據(jù)塊的完整性。
?? f. 更多關(guān)于Block checking, http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1094433279412
???????
6.快捷參考
有關(guān)性能優(yōu)化請(qǐng)參考
??? Oracle 硬解析與軟解析
??? 共享池的調(diào)整與優(yōu)化(Shared pool Tuning)
??? Buffer cache 的調(diào)整與優(yōu)化(一)
??? Oracle 表緩存(caching table)的使用
?
有關(guān)ORACLE體系結(jié)構(gòu)請(qǐng)參考
??? Oracle 密碼文件
??? Oracle 參數(shù)文件
??? Oracle 聯(lián)機(jī)重做日志文件(ONLINE LOG FILE)
??? Oracle 歸檔日志
??? Oracle 回滾(ROLLBACK)和撤銷(UNDO)
??? Oracle 數(shù)據(jù)庫實(shí)例啟動(dòng)關(guān)閉過程
??? Oracle 10g SGA 的自動(dòng)化管理
??? Oracle 實(shí)例和Oracle數(shù)據(jù)庫(Oracle體系結(jié)構(gòu))
?
有關(guān)閃回特性請(qǐng)參考
??? Oracle 閃回特性(FLASHBACK DATABASE)
??? Oracle 閃回特性(FLASHBACK DROP &RECYCLEBIN)
??? Oracle 閃回特性(Flashback Query、Flashback Table)
??? Oracle 閃回特性(Flashback Version、Flashback Transaction)
?
有關(guān)基于用戶管理的備份和備份恢復(fù)的概念請(qǐng)參考
??? Oracle 冷備份
??? Oracle 熱備份
??? Oracle 基于用戶管理恢復(fù)的處理 (詳細(xì)描述了介質(zhì)恢復(fù)及其處理)
?
有關(guān)RMAN的備份恢復(fù)與管理請(qǐng)參考
??? RMAN 備份詳解
??? RMAN 還原與恢復(fù)
??? RMAN catalog 的創(chuàng)建和使用
??? 基于catalog 創(chuàng)建RMAN存儲(chǔ)腳本
使用RMAN遷移文件系統(tǒng)數(shù)據(jù)庫到ASM
?? RMAN 備份路徑困惑(使用plus archivelog時(shí))
?
有關(guān)ORACLE故障請(qǐng)參考
??? ORA-00119,ORA-00132 錯(cuò)誤處理
??? 又一例SPFILE設(shè)置錯(cuò)誤導(dǎo)致數(shù)據(jù)庫無法啟動(dòng)
??? 對(duì)參數(shù)FAST_START_MTTR_TARGET = 0 的誤解及設(shè)定
??? SPFILE 錯(cuò)誤導(dǎo)致數(shù)據(jù)庫無法啟動(dòng)(ORA-01565)
?
有關(guān)ASM請(qǐng)參考
??? 創(chuàng)建ASM實(shí)例及ASM數(shù)據(jù)庫
??? ASM 磁盤、目錄的管理
?
有關(guān)SQL/PLSQL請(qǐng)參考
??? SQLPlus 常用命令
??? 替代變量與SQL*Plus環(huán)境設(shè)置
??? 使用Uniread實(shí)現(xiàn)SQLplus翻頁功能
??? SQL 基礎(chǔ) --> NEW_VALUE 的使用
??? SQL 基礎(chǔ) --> 集合運(yùn)算(UNION 與UNION ALL)
??? SQL 基礎(chǔ) --> 視圖(CREATE VIEW)
??? SQL 基礎(chǔ) --> 創(chuàng)建和管理表
??? SQL 基礎(chǔ) --> 分組與分組函數(shù)
??? SQL 基礎(chǔ) --> 層次化查詢(START BY ... CONNECT BY PRIOR)
??? SQL 基礎(chǔ) --> ROLLUP與CUBE運(yùn)算符實(shí)現(xiàn)數(shù)據(jù)匯總
??? PL/SQL --> 異常處理(Exception)
??? PL/SQL --> 流程控制
??? PL/SQL --> 包的創(chuàng)建與管理
??? PL/SQL --> 隱式游標(biāo)(SQL%FOUND)
??? PL/SQL --> INSTEAD OF 觸發(fā)器
??? PL/SQL --> 動(dòng)態(tài)SQL
??? PL/SQL --> 動(dòng)態(tài)SQL的常見錯(cuò)誤
?
有關(guān)ORACLE其它特性
??? Oracle 常用目錄結(jié)構(gòu)(10g)
??? 使用OEM,SQL*Plus,iSQL*Plus管理Oracle實(shí)例
??? 日志記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
??? Oralce OMF 功能詳解
??? Oracle 用戶、對(duì)象權(quán)限、系統(tǒng)權(quán)限 ?
? ?? Oracle 角色、配置文件
??? Oracle 分區(qū)表
??? Oracle 外部表
??? 使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
??? 簇表及簇表管理(Index clusteredtables)
??? 數(shù)據(jù)泵 EXPDP 導(dǎo)出工具的使用
??? 數(shù)據(jù)泵 IMPDP 導(dǎo)入工具的使用
??? 導(dǎo)入導(dǎo)出 Oracle 分區(qū)表數(shù)據(jù)
??? SQL*Loader使用方法
??? 啟用用戶進(jìn)程跟蹤
??? 配置非默認(rèn)端口的動(dòng)態(tài)服務(wù)注冊(cè)
??? 配置ORACLE 客戶端連接到數(shù)據(jù)庫
??? system sys,sysoper sysdba 的區(qū)別
??? ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME
??? Oracle 補(bǔ)丁全集 (Oracle 9i 10g 11g Path)
??? Oracle 10.2.0.1 升級(jí)到 10.2.0.4
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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