您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“sqlserver關(guān)于DBCC CHECKDB的知識點有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
通過執(zhí)行下列操作檢查指定數(shù)據(jù)庫中所有對象的邏輯和物理完整性:
對數(shù)據(jù)庫運行 DBCC CHECKALLOC。
對數(shù)據(jù)庫中的每個表和視圖運行 DBCC CHECKTABLE。
對數(shù)據(jù)庫運行 DBCC CHECKCATALOG。
驗證數(shù)據(jù)庫中每個索引視圖的內(nèi)容。
使用 FILESTREAM 在文件系統(tǒng)中存儲 varbinary(max) 數(shù)據(jù)時,驗證表元數(shù)據(jù)和文件系統(tǒng)目錄和文件之間的鏈接級一致性。
驗證數(shù)據(jù)庫中的 Service Broker 數(shù)據(jù)。
DBCC CHECKDB 其實主要做兩件事情:
檢查數(shù)據(jù)庫里有沒有損壞發(fā)生(不檢查禁用的索引)
盡力修復(fù)數(shù)據(jù)庫損壞,使數(shù)據(jù)庫能夠被重新正常訪問。
DBCC CHECKDB 最佳實踐
建議對生產(chǎn)系統(tǒng)頻繁使用 PHYSICAL_ONLY 選項。 使用 PHYSICAL_ONLY 可以極大地縮短對大型數(shù)據(jù)庫運行 DBCC CHECKDB 的運行時間。 同時建議您定期運行沒有選項的 DBCC CHECKDB。 應(yīng)當(dāng)以什么頻率執(zhí)行這些運行任務(wù)將取決于各個企業(yè)及其生產(chǎn)環(huán)境。
DBCC CHECKDB修復(fù)參數(shù)
示例:DBCC CHECKDB ('db_name', REPAIR_FAST);
1. REPAIR_ALLOW_DATA_LOSS 嘗試修復(fù)報告的所有錯誤。 這些修復(fù)可能會導(dǎo)致一些數(shù)據(jù)丟失。
2. REPAIR_FAST 保留該語法只是為了向后兼容。 未執(zhí)行修復(fù)操作。
3. REPAIR_REBUILD,執(zhí)行不會丟失數(shù)據(jù)的修復(fù)。 這包括快速修復(fù)(如修復(fù)非聚集索引中缺少的行)以及更耗時的修復(fù)(如重新生成索引)。此參數(shù)不修復(fù)涉及 FILESTREAM 數(shù)據(jù)的錯誤。
DBCC CHECKDB是否加鎖
DBCC CHECKDB默認(rèn)不加鎖而是工作在一個隱藏的數(shù)據(jù)庫快照,執(zhí)行DBCC CheckDB時指定了TABLOCK選項才會加鎖
DBCC CHECKDB參數(shù)說明
ALL_ERRORMSGS:顯示針對每個對象報告的所有錯誤。 默認(rèn)情況下顯示所有錯誤消息。
EXTENDED_LOGICAL_CHECKS:如果兼容性級別為 100 (SQL Server 2008) 或更高,則對索引視圖、XML 索引和空間索引(如果存在)執(zhí)行邏輯一致性檢查。
NO_INFOMSGS:取消顯示所有信息性消息。
NOINDEX:指定不應(yīng)對用戶表的非聚集索引執(zhí)行會占用很大系統(tǒng)開銷的檢查。 這將減少總執(zhí)行時間。 NOINDEX 不影響系統(tǒng)表,因為總是對系統(tǒng)表索引執(zhí)行完整性檢查。
PHYSICAL_ONLY:將檢查限制為頁和記錄標(biāo)頭的物理結(jié)構(gòu)完整性以及數(shù)據(jù)庫的分配一致性。 設(shè)計該檢查是為了以較小的開銷檢查數(shù)據(jù)庫的物理一致性,但它還可以檢測會危及用戶數(shù)據(jù)安全的殘缺頁、校驗和錯誤以及常見的硬件故障。因此,使用 PHYSICAL_ONLY 選項可能會大幅減少對較大數(shù)據(jù)庫運行 DBCC CHECKDB 所需的時間,所以對需要頻繁檢查的生產(chǎn)系統(tǒng),建議使用此選項。我們?nèi)匀唤ㄗh完整地定期執(zhí)行 DBCC CHECKDB。
ESTIMATEONLY:顯示運行包含所有其他指定選項的 DBCC CHECKDB 時所需的 tempdb 空間估計量。 不執(zhí)行實際數(shù)據(jù)庫檢查。
DATA_PURITY:使 DBCC CHECKDB 檢查數(shù)據(jù)庫中是否存在無效或越界的列值。
TABLOCK:使 DBCC CHECKDB 獲取鎖,而不使用內(nèi)部數(shù)據(jù)庫快照。 這包括一個短期數(shù)據(jù)庫排他 (X) 鎖。 TABLOCK 可使 DBCC CHECKDB 在負(fù)荷較重的數(shù)據(jù)庫上運行得更快,但 DBCC CHECKDB 運行時會減少數(shù)據(jù)庫上可獲得的并發(fā)性。
DBCC CHECKDB錯誤消息
DBCC CHECKDB 命令結(jié)束之后,便會將一個消息寫入 SQL Server 錯誤日志。 如果 DBCC 命令成功執(zhí)行,則消息指示成功以及命令的運行時間。 如果 DBCC 命令在完成檢查之前由于錯誤而停止,則消息將指示命令已終止,并指示狀態(tài)值和命令運行的時間。 下表列出并說明了此消息中可包含的狀態(tài)值。
State 描述
0 出現(xiàn)錯誤號 8930。 這表示元數(shù)據(jù)中存在的損壞終止了 DBCC 命令。
1 出現(xiàn)錯誤號 8967。 存在一個內(nèi)部 DBCC 錯誤。
2 在緊急模式數(shù)據(jù)庫修復(fù)過程中出錯。
3 這表示元數(shù)據(jù)中存在的損壞終止了 DBCC 命令。
4 檢測到斷言或訪問違規(guī)。
5 出現(xiàn)終止了 DBCC 命令的未知錯誤
sp_MSforeachDB
sp_MSforeachdb是微軟提供的不公開的存儲過程,存儲在master數(shù)據(jù)庫中??梢杂脕韺δ硞€數(shù)據(jù)庫的所有表或某個SQL服務(wù)器上的所有數(shù)據(jù)庫進行管理,下面將對此進行詳細(xì)介紹。
sp_MSforeachDB使用DBCC CHECKDB的示例:
use master
exec sp_MSforeachDB 'DBCC CHECKDB ([?]) WITH ALL_ERRORMSGS, EXTENDED_LOGICAL_CHECKS, DATA_PURITY,NO_INFOMSGS'
其中?表示通配符,表示所有數(shù)據(jù)庫
DBCC CHECKDB 遇到的一些錯誤及分析
1、There is insufficient memory available in the buffer pool. [SQLSTATE 42000] (Error 802) During undoing of a logged operation in database 'HistoryDB', an error occurred at log record ID (5106285:51843537:99). Typically, the specific failure is logged previously as an error in the operating system error log. Restore the database or file from a backup, or repair the database. [SQLSTATE 42000] (Error 3314) A database snapshot cannot be created because it failed to start.
原因分析:報錯很明顯:緩沖池中沒有足夠的可用內(nèi)存。檢查是否數(shù)據(jù)庫HistoryDB特別大導(dǎo)致,如果是則在DBCC CHECKDB時加上PHYSICAL_ONLY 選項
2、Object ID 34 (object 'sys.sysschobjs'): DBCC could not obtain a lock on this object because the lock request timeout period was exceeded. This object has been skipped and will not be processed.
原因分析:當(dāng)我看到這個錯誤時,我問自己一個問題:“DBCC CHECKDB執(zhí)行鎖嗎?”答案是否定的。從SQL Server 2005開始,DBCC CheckDB工作在一個隱藏的數(shù)據(jù)庫快照上。數(shù)據(jù)庫快照是數(shù)據(jù)庫的只讀副本。由于快照I/O開銷,您可以看到服務(wù)器上出現(xiàn)了一些阻塞,或者用戶速度較慢,但肯定沒有鎖。這個時候要檢查自己的DBCC CHECKDB是否加了TABLOCK選項,如果是則取消TABLOCK選項
“sqlserver關(guān)于DBCC CHECKDB的知識點有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。