sql server 823錯誤怎么修復?
SQL Server中的Msg 823 / Msg 824 / Msg 825(讀取重試)錯誤。
.MDF文件所在存儲介質(zhì)的損壞。
在下列情況下,數(shù)據(jù)庫引擎使用主文件的文件位置信息初始化 master 數(shù)據(jù)庫中的文件位置項:
?11 PFS page 有關(guān)頁分配和頁的可用空間的信息
如今微軟的SQL Server可謂是最常用的關(guān)系型數(shù)據(jù)庫之一了。鑒于其先進的內(nèi)部結(jié)構(gòu)和高可靠性,大多數(shù)組織都選用SQL Server數(shù)據(jù)庫來存儲所有關(guān)鍵業(yè)務的數(shù)據(jù)。但是有時候,一些諸如病毒感染、操作系統(tǒng)故障、文件系統(tǒng)損壞之類的狀況會使得SQL數(shù)據(jù)庫受到損壞,以至于存儲在其中的所有數(shù)據(jù)都變得無法訪問。然而,在真實的場景中,我們在損壞的SQL Server里修復各種.mdf文件,卻并非是一件容易的事。
.使用帶有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項的 CREATE DATABASE 語句來附加數(shù)據(jù)庫時。
情況2:如果索引ID為0或1,則使用適當?shù)男迯瓦x項,如:repair_rebuild、repair_fast或repair_allow_data_loss,來再次運行DBCC CHECKDB。
除主數(shù)據(jù)文件以外的所有其他數(shù)據(jù)文件都是次要數(shù)據(jù)文件,次數(shù)據(jù)文件一般只存儲用戶數(shù)據(jù)。某些數(shù)據(jù)庫可能不含有任何次要數(shù)據(jù)文件,而有些數(shù)據(jù)庫則含有多個次要數(shù)據(jù)文件。次要數(shù)據(jù)文件的推薦文件擴展名是 .ndf。
主數(shù)據(jù)文件是數(shù)據(jù)庫的起點。除了存儲系統(tǒng)以及用戶數(shù)據(jù)以外,主數(shù)據(jù)文件還存儲了數(shù)據(jù)庫中的所有輔助數(shù)據(jù)文件以及重做日志文件的路徑、名稱、大小等信息。SQL Server通過讀取主數(shù)據(jù)文件得到其他數(shù)據(jù)文件及重做日志文件的信息,這個功能與Oracle控制文件相似。每個數(shù)據(jù)庫都有一個主數(shù)據(jù)文件。主數(shù)據(jù)文件的推薦文件擴展名是 .mdf。
SQL數(shù)據(jù)庫受損的背后原因有許多種。眾所周知,SQL數(shù)據(jù)庫的各個MDF文件其實是一些主要的數(shù)據(jù)庫文件,它們存儲著所有用戶的數(shù)據(jù),因此任何MDF文件的損壞都可能會導致整個數(shù)據(jù)庫的崩潰。可見,我們需要首先來了解MDF文件受損背后的所有可能原因:
主要用于以下情況:
如何手動修復MDF文件
?13 boot page 記錄了關(guān)于數(shù)據(jù)庫的信息,僅存于每個數(shù)據(jù)庫的第9頁
DBCC CHECK (name_of_corrupt_database, repair_fast)
0: 只顯示對象的in-row data頁和 in-row IAM 頁。
注意:您也可以為DBCC CHECKDB定義諸如no_infomsgs和infomsgs的選項參數(shù)。

3、從列表選擇掃描得到的文件
?7 Sort page 排序時所用到的臨時頁,排序中間操作存儲數(shù)據(jù)用的。
除此之外,用戶還可能在訪問受損的SQL數(shù)據(jù)庫時,遇到其他類型的錯誤提示。可見,數(shù)據(jù)庫管理員應當立即采取措施,以防止任何類型的
數(shù)據(jù)丟失。
pagenum 文件內(nèi)的頁面
MDF文件修復工具是一款專為sql server數(shù)據(jù)文件刪除而制作的MDF數(shù)據(jù)庫文件恢復工具,這款軟件可以從磁盤掃描刪除的SQL數(shù)據(jù)文件碎片,并把它們組合成一個完整的MDF文件。有需要的不妨來下載試試!
.從 SQL Server 2000 版或 7.0 版升級時。
為了兼容sql server 2000,第四個參數(shù)是可選的,該參數(shù)用于指定一個分區(qū)號.如果不給定值或者給定0, 則顯示全部分區(qū)數(shù)據(jù)。
.元數(shù)據(jù)的損壞錯誤。
至此為確保修復了所有損壞,請再次運行DBCC CHECKDB。如果在name_of_your_corrupt_database中顯示為0個分配錯誤和0個一致性錯誤,則大功告成
.在某個SQL Server帳號下,所進行的任何修改或變更。
SQL Server 不強制使用 .mdf、.ndf 和 .ldf 文件擴展名,但使用它們有助于標識文件的各種類型和用途。
日志文件包含著用于恢復數(shù)據(jù)庫的所有日志信息。每個數(shù)據(jù)庫必須至少有一個日志文件,當然也可以有多個。日志文件的推薦文件擴展名是 .ldf。
要找出SQL Server給一個表分配的頁有哪些,要用到非文檔的命令DBCC IND。DBCC IND 命令用于查詢一個存儲對象的內(nèi)部存儲結(jié)構(gòu)信息,該命令有4個參數(shù), 前3個參數(shù)必須指定。它的語法如下:
.導致MDF文件損壞的其他可能原因還包括:病毒攻擊、硬盤故障、系統(tǒng)異常關(guān)機和突然斷電等。
后跟分別列出的它的列值
使用教程:
?4 Text tree page A text page that holds large chunks of LOB values from a single column value.
第二個參數(shù)是數(shù)據(jù)庫中的對象名或?qū)ο驣D,對象可以是表或者索引視圖。
-2: 顯示全部IAM頁。
SQL Server 數(shù)據(jù)庫具有三種類型的文件
1 主數(shù)據(jù)文件
主數(shù)據(jù)文件是數(shù)據(jù)庫的起點。除了存儲系統(tǒng)以及用戶數(shù)據(jù)以外,主數(shù)據(jù)文件還存儲了數(shù)據(jù)庫中的所有輔助數(shù)據(jù)文件以及重做日志文件的路徑、名稱、大小等信息。SQL Server通過讀取主數(shù)據(jù)文件得到其他數(shù)據(jù)文件及重做日志文件的信息,這個功能與Oracle控制文件相似。每個數(shù)據(jù)庫都有一個主數(shù)據(jù)文件。主數(shù)據(jù)文件的推薦文件擴展名是 .mdf。
2 次要數(shù)據(jù)文件
除主數(shù)據(jù)文件以外的所有其他數(shù)據(jù)文件都是次要數(shù)據(jù)文件,次數(shù)據(jù)文件一般只存儲用戶數(shù)據(jù)。某些數(shù)據(jù)庫可能不含有任何次要數(shù)據(jù)文件,而有些數(shù)據(jù)庫則含有多個次要數(shù)據(jù)文件。次要數(shù)據(jù)文件的推薦文件擴展名是 .ndf。
3 日志文件
日志文件包含著用于恢復數(shù)據(jù)庫的所有日志信息。每個數(shù)據(jù)庫必須至少有一個日志文件,當然也可以有多個。日志文件的推薦文件擴展名是 .ldf。
SQL Server 不強制使用 .mdf、.ndf 和 .ldf 文件擴展名,但使用它們有助于標識文件的各種類型和用途。
?? 在 SQL Server 中,數(shù)據(jù)庫中所有文件的位置都記錄在數(shù)據(jù)庫的主文件和 master 數(shù)據(jù)庫中。大多數(shù)情況下,SQL Server 數(shù)據(jù)庫引擎使用 master 數(shù)據(jù)庫中的文件位置信息。
在下列情況下,數(shù)據(jù)庫引擎使用主文件的文件位置信息初始化 master 數(shù)據(jù)庫中的文件位置項:
.使用帶有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項的 CREATE DATABASE 語句來附加數(shù)據(jù)庫時。
.從 SQL Server 2000 版或 7.0 版升級時。
.還原 master 數(shù)據(jù)庫時。
二 數(shù)據(jù)頁
SQL Server用8KB 的頁來存儲數(shù)據(jù),并且在SQL Server里磁盤 I/O 操作在頁級執(zhí)行。也就是說,SQL Server 讀取或?qū)懭胨袛?shù)據(jù)頁。頁有不同的類型,像數(shù)據(jù)頁,GAM,SGAM等。
SQL Server把數(shù)據(jù)記錄存在數(shù)據(jù)頁(Data Page)里。數(shù)據(jù)記錄是堆表里、聚集索引里葉子節(jié)點的行。
數(shù)據(jù)頁由3個部分組成。頁頭(標頭),數(shù)據(jù)區(qū)(數(shù)據(jù)行和可用空間)及行偏移數(shù)組。
要找出SQL Server給一個表分配的頁有哪些,要用到非文檔的命令DBCC IND。DBCC IND 命令用于查詢一個存儲對象的內(nèi)部存儲結(jié)構(gòu)信息,該命令有4個參數(shù), 前3個參數(shù)必須指定。它的語法如下:
第一個參數(shù)是數(shù)據(jù)庫名或數(shù)據(jù)庫ID。
第二個參數(shù)是數(shù)據(jù)庫中的對象名或?qū)ο驣D,對象可以是表或者索引視圖。
第三個參數(shù)是一個非聚集索引ID或者 1, 0, 1, or 2. 值的含義:
0: 只顯示對象的in-row data頁和 in-row IAM 頁。
1: 顯示對象的全部頁, 包含IAM 頁, in-row數(shù)據(jù)頁, LOB 數(shù)據(jù)頁row-overflow 數(shù)據(jù)頁 . 如果請求的對象含有聚集所以則索引頁也包括。
-1: 顯示全部IAM頁,數(shù)據(jù)頁, 索引頁 也包括 LOB 和row-overflow 數(shù)據(jù)頁。
-2: 顯示全部IAM頁。
Nonclustered index ID:顯示索引的全部 IAM頁, data頁和索引頁,包含LOB和 row-overflow數(shù)據(jù)頁。
為了兼容sql server 2000,第四個參數(shù)是可選的,該參數(shù)用于指定一個分區(qū)號.如果不給定值或者給定0, 則顯示全部分區(qū)數(shù)據(jù)。
和DBCC PAGE不同的是, SQL Server運行DBCC IND不需要開啟3604跟蹤標志.
關(guān)于數(shù)據(jù)庫頁類型如下所示:
?1 Data page 堆表和聚集索引的葉子節(jié)點數(shù)據(jù)
?2 Index page 聚集索引的非葉子節(jié)點和非聚集索引的所有索引記錄
?3 Text mixed page A text page that holds small chunks of LOB values plus internal parts of text tree. These can be shared between LOB values in the same partition of an index or heap.
?4 Text tree page A text page that holds large chunks of LOB values from a single column value.
?7 Sort page 排序時所用到的臨時頁,排序中間操作存儲數(shù)據(jù)用的。
?8 GAM page 全局分配映射(Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區(qū)已經(jīng)被分配并用作何種用途。
?9 SGAM page 共享全局分配映射(Shared Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區(qū)當前被用作混合類型的區(qū),并且這些區(qū)需含有至少一個未使用的頁面。
?10 IAM page 有關(guān)每個分配單元中表或索引所使用的區(qū)的信息
?11 PFS page 有關(guān)頁分配和頁的可用空間的信息
?13 boot page 記錄了關(guān)于數(shù)據(jù)庫的信息,僅存于每個數(shù)據(jù)庫的第9頁
?15 file header page 記錄了關(guān)于數(shù)據(jù)庫文件的信息,存于每個數(shù)據(jù)庫文件的第0頁
?16 DCM page 記錄自從上次全備以來的數(shù)據(jù)改變的頁面,以備差異備份
?17 BCM page 有關(guān)每個分配單元中自最后一條 BACKUP LOG 語句之后的大容量操作所修改的區(qū)的信息
三 DBCC命令
現(xiàn)在我們來看看79號類型為1的數(shù)據(jù)頁里存放的數(shù)據(jù),這個就要用到DBCC PAGE命令,它的語法如下:
dbcc page 命令讀取數(shù)據(jù)頁結(jié)構(gòu)的命令DBCC Page。
該命令為非文檔化的命令,具體如下:
DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])
具體參數(shù)描述如下:
dbid 包含頁面的數(shù)據(jù)庫ID
dbname 包含頁面的數(shù)據(jù)庫的名稱
filenum 包含頁面的文件編號
pagenum 文件內(nèi)的頁面
printopt 可選的輸出選項;選用其中一個值:
0:默認值,輸出緩沖區(qū)的標題和頁面標題
1:輸出緩沖區(qū)的標題、頁面標題(分別輸出每一行),以及行偏移量表
2:輸出緩沖區(qū)的標題、頁面標題(整體輸出頁面),以及行偏移量表
3:輸出緩沖區(qū)的標題、頁面標題(分別輸出每一行),以及行偏移量表;每一行
后跟分別列出的它的列值
要想看到這些輸出的結(jié)果,還需要設置DBCC TRACEON(3604)
DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])
?17 BCM page 有關(guān)每個分配單元中自最后一條 BACKUP LOG 語句之后的大容量操作所修改的區(qū)的信息
?? 在 SQL Server 中,數(shù)據(jù)庫中所有文件的位置都記錄在數(shù)據(jù)庫的主文件和 master 數(shù)據(jù)庫中。大多數(shù)情況下,SQL Server 數(shù)據(jù)庫引擎使用 master 數(shù)據(jù)庫中的文件位置信息。
.由于文件頭的損壞,所導致的MDF文件受損。
三 DBCC命令
0:默認值,輸出緩沖區(qū)的標題和頁面標題
因此在本文中,我們將和您討論修復受損SQL數(shù)據(jù)庫的最佳解決方法。不過在開始之前,讓我們先來了解一下SQL數(shù)據(jù)庫受損的背后原因。
SQL Server 數(shù)據(jù)庫具有三種類型的文件
用DBCC CHECKDB來修復受損MDF文件的步驟
要想看到這些輸出的結(jié)果,還需要設置DBCC TRACEON(3604)
1:輸出緩沖區(qū)的標題、頁面標題(分別輸出每一行),以及行偏移量表
.某個用戶可能對數(shù)據(jù)進行錯誤地刪除。
DBCC CHECK (name_of_corrupt_database, repair_allow_data_loss)
?2 Index page 聚集索引的非葉子節(jié)點和非聚集索引的所有索引記錄
該命令為非文檔化的命令,具體如下:
情況1:如果索引ID>1,則立刻丟棄它、并重新創(chuàng)建。