日期:2023年7月27日
作者:Commas
簽名:(? ?_?)? 積跬步以致千里,積小流以成江海……
注釋?zhuān)喝绻X(jué)得有所幫助
,幫忙點(diǎn)個(gè)贊
,也可以關(guān)注我
,我們一起成長(zhǎng);如果有不對(duì)的地方,還望各位大佬不吝賜教,謝謝^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006
一、前言
在了解 DBCC CHECKDB
之前,我們先來(lái)弄明白 DBCC
是什么?
DBCC
是 SQL Server
中的一個(gè)命令,代表 Database Console Commands
,即數(shù)據(jù)庫(kù)控制臺(tái)命令。它提供了一系列用于執(zhí)行數(shù)據(jù)庫(kù)管理任務(wù)和診斷操作的命令。
而 DBCC CHECKDB
是其中一個(gè)最為常見(jiàn)的命令,該命令用于數(shù)據(jù)庫(kù)完整性檢查,主要檢查數(shù)據(jù)庫(kù)的物理和邏輯完整性,查找并報(bào)告數(shù)據(jù)庫(kù)中的錯(cuò)誤和問(wèn)題。當(dāng)然,也可以做一些簡(jiǎn)單的數(shù)據(jù)庫(kù)的錯(cuò)誤修復(fù)工作。
二、DBCC CHECKDB是什么
DBCC CHECKDB
是 Microsoft SQL Server
中用于檢查數(shù)據(jù)庫(kù)完整性的命令。它是一個(gè)數(shù)據(jù)庫(kù)維護(hù)命令,用于檢查數(shù)據(jù)庫(kù)的物理和邏輯完整性,以及查找和修復(fù)數(shù)據(jù)庫(kù)中的錯(cuò)誤。
使用 DBCC CHECKDB
可以幫助您發(fā)現(xiàn)數(shù)據(jù)庫(kù)中可能存在的以下問(wèn)題:
- 確保數(shù)據(jù)庫(kù)文件的物理完整性,如頁(yè)面級(jí)別的損壞、丟失或交叉鏈接等。
- 檢查數(shù)據(jù)庫(kù)中的索引是否有效,以及索引是否存在損壞或邏輯錯(cuò)誤。
- 檢查表之間的引用完整性,以及外鍵關(guān)系是否存在問(wèn)題。
- 查找數(shù)據(jù)庫(kù)中的邏輯一致性錯(cuò)誤,如數(shù)據(jù)庫(kù)對(duì)象的狀態(tài)是否正確、分區(qū)表的一致性等。
- 檢查數(shù)據(jù)庫(kù)的系統(tǒng)表結(jié)構(gòu)是否正確。
三、DBCC CHECKDB數(shù)據(jù)庫(kù)維護(hù)
要運(yùn)行 DBCC CHECKDB
數(shù)據(jù)庫(kù)維護(hù)命令,請(qǐng)使用以下 SQL
語(yǔ)法:
DBCC CHECKDB
(
{ database_name | database_id | 0}
)
[ WITH
{
[ ALL_ERRORMSGS ]
[ , EXTENDED_LOGICAL_CHECKS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , PHYSICAL_ONLY ]
[ , DATA_PURITY ]
}
]
-
database_name
|database_id
|0
:指定要檢查的數(shù)據(jù)庫(kù)的名稱(chēng)、數(shù)據(jù)庫(kù) ID 或 0(表示檢查當(dāng)前數(shù)據(jù)庫(kù))。 -
ALL_ERRORMSGS
:顯示所有錯(cuò)誤消息(默認(rèn)為僅顯示錯(cuò)誤消息)。 -
EXTENDED_LOGICAL_CHECKS
:執(zhí)行擴(kuò)展的邏輯檢查。這可能需要較長(zhǎng)時(shí)間。 -
NO_INFOMSGS
:不顯示信息消息。 -
TABLOCK
: 在運(yùn)行DBCC CHECKDB
時(shí)對(duì)數(shù)據(jù)庫(kù)加鎖。這可以防止其他用戶(hù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),但可能會(huì)影響數(shù)據(jù)庫(kù)的可用性。 -
ESTIMATEONLY
: 只返回估計(jì)的檢查資源使用情況,而不執(zhí)行實(shí)際檢查。 -
PHYSICAL_ONLY
:僅執(zhí)行物理完整性檢查。 -
DATA_PURITY
:檢查數(shù)據(jù)完整性,包括對(duì)日期、時(shí)間和二進(jìn)制數(shù)據(jù)類(lèi)型的額外檢查。
例如,運(yùn)行以下命令來(lái)檢查名為 “YourDatabaseName” 的數(shù)據(jù)庫(kù):
DBCC CHECKDB ('<DatabaseName>');
其中,<DatabaseName>
填寫(xiě)我們需要檢查的數(shù)據(jù)庫(kù)名稱(chēng)。
DBCC CHECKDB
命令可以在維護(hù)數(shù)據(jù)庫(kù)時(shí)定期運(yùn)行,以確保數(shù)據(jù)庫(kù)的完整性,并在發(fā)現(xiàn)問(wèn)題時(shí)及時(shí)采取修復(fù)措施。請(qǐng)注意,運(yùn)行此命令可能會(huì)產(chǎn)生一些系統(tǒng)負(fù)載,因此最好在非高峰時(shí)段運(yùn)行。在生產(chǎn)環(huán)境中運(yùn)行之前,最好先在測(cè)試環(huán)境中進(jìn)行測(cè)試并備份數(shù)據(jù)庫(kù)。
四、DBCC CHECKDB數(shù)據(jù)庫(kù)修復(fù)
要運(yùn)行 DBCC CHECKDB
數(shù)據(jù)庫(kù)修復(fù)命令,請(qǐng)使用以下 SQL
語(yǔ)法:
DBCC CHECKDB
(
{ database_name | database_id | 0}
[ , NOINDEX ]
[ , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
)
第一個(gè)參數(shù)上面已經(jīng)介紹過(guò)了,這里就不再贅述;
第二個(gè)參數(shù) NOINDEX
是一個(gè)可選參數(shù),用于指定是否忽略對(duì)索引的檢查。當(dāng)指定 NOINDEX
參數(shù)時(shí),將只檢查表和索引的物理完整性,而不檢查索引的邏輯完整性。
-- 檢查數(shù)據(jù)庫(kù),并忽略索引檢查
DBCC CHECKDB ('<DatabaseName>', NOINDEX);
第三個(gè)參數(shù)才是重頭戲,用于指定在發(fā)現(xiàn)數(shù)據(jù)庫(kù)問(wèn)題時(shí)的修復(fù)行為。值得一提的是,修復(fù)可能導(dǎo)致數(shù)據(jù)丟失,最好先備份后再修復(fù),把損失降到最低。
先備份,再修復(fù)
先備份,再修復(fù)
先備份,再修復(fù)
講了三遍,表示很重要,劃重點(diǎn)要考哦 ^ - ^
-
REPAIR_ALLOW_DATA_LOSS
: 當(dāng)發(fā)現(xiàn)數(shù)據(jù)庫(kù)問(wèn)題時(shí),允許嘗試進(jìn)行修復(fù),即使可能會(huì)導(dǎo)致數(shù)據(jù)丟失。這是最激進(jìn)的修復(fù)選項(xiàng),應(yīng)該謹(jǐn)慎使用。 -
REPAIR_FAST
: 嘗試使用較少的資源和較少的日志記錄來(lái)進(jìn)行修復(fù),但不保證能夠解決所有問(wèn)題。這個(gè)選項(xiàng)比較保守,適用于緊急情況下的快速修復(fù)。 -
REPAIR_REBUILD
: 嘗試使用較多的資源和更多的日志記錄來(lái)進(jìn)行修復(fù),以確保盡可能完整地修復(fù)數(shù)據(jù)庫(kù)中的問(wèn)題。
-- 檢查并嘗試使用 REPAIR_ALLOW_DATA_LOSS 修復(fù)數(shù)據(jù)庫(kù)
DBCC CHECKDB ('<DatabaseName>', REPAIR_ALLOW_DATA_LOSS);
-- 檢查并嘗試使用 REPAIR_FAST 修復(fù)數(shù)據(jù)庫(kù)
DBCC CHECKDB ('<DatabaseName>', REPAIR_FAST);
-- 檢查并嘗試使用 REPAIR_REBUILD 修復(fù)數(shù)據(jù)庫(kù)
DBCC CHECKDB ('<DatabaseName>', REPAIR_REBUILD);
其中,<DatabaseName>
填寫(xiě)我們需要檢查的數(shù)據(jù)庫(kù)名稱(chēng)。
修復(fù)選項(xiàng)安全指數(shù):REPAIR_REBUILD
> REPAIR_FAST
> REPAIR_ALLOW_DATA_LOSS
REPAIR_REBUILD
這種修復(fù)方式不會(huì)導(dǎo)致數(shù)據(jù)丟失,是一個(gè)較安全的選項(xiàng),但它只能修復(fù)一些特定類(lèi)型的問(wèn)題,如一些索引或鏈接錯(cuò)誤。對(duì)于某些更嚴(yán)重的完整性問(wèn)題,可能需要使用 REPAIR_ALLOW_DATA_LOSS
或 REPAIR_FAST
選項(xiàng)來(lái)解決,但這些選項(xiàng)可能導(dǎo)致數(shù)據(jù)丟失。
再次強(qiáng)調(diào)下,在執(zhí)行 DBCC CHECKDB
命令時(shí),無(wú)論選擇哪個(gè)修復(fù)選項(xiàng),都建議在生產(chǎn)環(huán)境中謹(jǐn)慎操作,并確保在運(yùn)行命令之前有最近的有效備份。
最后給出后面兩種有損修得復(fù)選項(xiàng)參數(shù)的常見(jiàn)用法,這里以 REPAIR_ALLOW_DATA_LOSS
舉例,如下所示:
--(1)將數(shù)據(jù)庫(kù)置于緊急模式,只允許管理員有限地訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)以診斷關(guān)鍵問(wèn)題。
ALTER DATABASE <DatabaseName> SET EMERGENCY;
--(2)將數(shù)據(jù)庫(kù)設(shè)置為一次只允許一個(gè)用戶(hù)連接,通常是將要執(zhí)行修復(fù)操作的數(shù)據(jù)庫(kù)管理員。
ALTER DATABASE <DatabaseName> SET SINGLE_USER;
--(3)對(duì)數(shù)據(jù)庫(kù)進(jìn)行一致性檢查,并嘗試修復(fù)發(fā)現(xiàn)的問(wèn)題。
DBCC CheckDB (<DatabaseName>, REPAIR_ALLOW_DATA_LOSS);
--(4)將數(shù)據(jù)庫(kù)重新設(shè)置為多用戶(hù)模式,允許正常連接數(shù)據(jù)庫(kù)。
ALTER DATABASE <DatabaseName> SET MULTI_USER;
其中,<DatabaseName>
填寫(xiě)我們需要檢查的數(shù)據(jù)庫(kù)名稱(chēng)。
五、更多常見(jiàn)的 DBCC 命令
-
數(shù)據(jù)庫(kù)完整性檢查:
DBCC CHECKDB
命令用于檢查數(shù)據(jù)庫(kù)的物理和邏輯完整性,查找并報(bào)告數(shù)據(jù)庫(kù)中的錯(cuò)誤和問(wèn)題。 -
釋放內(nèi)存:
DBCC DROPCLEANBUFFERS
命令可用于釋放數(shù)據(jù)庫(kù)緩存中的所有緩沖區(qū),以便進(jìn)行性能測(cè)試或清理緩存。 -
更新統(tǒng)計(jì)信息:
DBCC UPDATEUSAGE
命令用于更新系統(tǒng)表中的空間使用信息,以便優(yōu)化查詢(xún)性能。 -
重建索引:
DBCC INDEXDEFRAG
和DBCC DBREINDEX
命令可用于重建和整理索引,提高查詢(xún)性能。 -
清理日志:
DBCC SHRINKFILE
命令可用于收縮數(shù)據(jù)庫(kù)事務(wù)日志文件的大小。 -
查看數(shù)據(jù)庫(kù)信息:
DBCC SHOWCONTIG
命令用于顯示表或索引的碎片程度。 -
查看數(shù)據(jù)庫(kù)版本和狀態(tài):
DBCC DBINFO
命令用于顯示數(shù)據(jù)庫(kù)的版本和狀態(tài)信息。
參考文章:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-613849.html
- 《DBCC CHECKDB (Transact-SQL)》
版權(quán)聲明:本文為博主原創(chuàng)文章,如需轉(zhuǎn)載,請(qǐng)給出:
原文鏈接:https://blog.csdn.net/qq_35844043/article/details/131957779文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-613849.html
到了這里,關(guān)于【SQL Server】DBCC CHECKDB只是一個(gè)數(shù)據(jù)庫(kù)維護(hù)命令嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!