關(guān)于數(shù)據(jù)庫頁類型如下所示:
第一個(gè)參數(shù)是數(shù)據(jù)庫名或數(shù)據(jù)庫ID。
.導(dǎo)致MDF文件損壞的其他可能原因還包括:病毒攻擊、
硬盤故障、系統(tǒng)異常關(guān)機(jī)和突然斷電等。
?17 BCM page 有關(guān)每個(gè)分配單元中自最后一條 BACKUP LOG 語句之后的大容量操作所修改的區(qū)的信息
首先,您需要在受損的SQL數(shù)據(jù)庫上運(yùn)行DBCC CHECKDB,請執(zhí)行如下的命令:
要想看到這些輸出的結(jié)果,還需要設(shè)置DBCC TRACEON(3604)
?13 boot page 記錄了關(guān)于數(shù)據(jù)庫的信息,僅存于每個(gè)數(shù)據(jù)庫的第9頁
1、該程序從硬盤上掃描所有MDF文件碎片并保存為文件
為了兼容sql server 2000,第四個(gè)參數(shù)是可選的,該參數(shù)用于指定一個(gè)分區(qū)號(hào).如果不給定值或者給定0, 則顯示全部分區(qū)數(shù)據(jù)。
1.DBCC CHECKDB (Name_of _corrupt _database)
dbid 包含頁面的數(shù)據(jù)庫ID
使用說明:
?1 Data page 堆表和聚集索引的葉子節(jié)點(diǎn)數(shù)據(jù)
二 數(shù)據(jù)頁
主數(shù)據(jù)文件是數(shù)據(jù)庫的起點(diǎn)。除了存儲(chǔ)系統(tǒng)以及用戶數(shù)據(jù)以外,主數(shù)據(jù)文件還存儲(chǔ)了數(shù)據(jù)庫中的所有輔助數(shù)據(jù)文件以及重做日志文件的路徑、名稱、大小等信息。SQL Server通過讀取主數(shù)據(jù)文件得到其他數(shù)據(jù)文件及重做日志文件的信息,這個(gè)功能與Oracle控制文件相似。每個(gè)數(shù)據(jù)庫都有一個(gè)主數(shù)據(jù)文件。主數(shù)據(jù)文件的推薦文件擴(kuò)展名是 .mdf。
?10 IAM page 有關(guān)每個(gè)分配單元中表或索引所使用的區(qū)的信息
SQL Server 數(shù)據(jù)庫具有三種類型的文件

1 主數(shù)據(jù)文件
主數(shù)據(jù)文件是數(shù)據(jù)庫的起點(diǎn)。除了存儲(chǔ)系統(tǒng)以及用戶數(shù)據(jù)以外,主數(shù)據(jù)文件還存儲(chǔ)了數(shù)據(jù)庫中的所有輔助數(shù)據(jù)文件以及重做日志文件的路徑、名稱、大小等信息。SQL Server通過讀取主數(shù)據(jù)文件得到其他數(shù)據(jù)文件及重做日志文件的信息,這個(gè)功能與Oracle控制文件相似。每個(gè)數(shù)據(jù)庫都有一個(gè)主數(shù)據(jù)文件。主數(shù)據(jù)文件的推薦文件擴(kuò)展名是 .mdf。
2 次要數(shù)據(jù)文件
除主數(shù)據(jù)文件以外的所有其他數(shù)據(jù)文件都是次要數(shù)據(jù)文件,次數(shù)據(jù)文件一般只存儲(chǔ)用戶數(shù)據(jù)。某些數(shù)據(jù)庫可能不含有任何次要數(shù)據(jù)文件,而有些數(shù)據(jù)庫則含有多個(gè)次要數(shù)據(jù)文件。次要數(shù)據(jù)文件的推薦文件擴(kuò)展名是 .ndf。
3 日志文件
日志文件包含著用于恢復(fù)數(shù)據(jù)庫的所有日志信息。每個(gè)數(shù)據(jù)庫必須至少有一個(gè)日志文件,當(dāng)然也可以有多個(gè)。日志文件的推薦文件擴(kuò)展名是 .ldf。
SQL Server 不強(qiáng)制使用 .mdf、.ndf 和 .ldf 文件擴(kuò)展名,但使用它們有助于標(biāo)識(shí)文件的各種類型和用途。
?? 在 SQL Server 中,數(shù)據(jù)庫中所有文件的位置都記錄在數(shù)據(jù)庫的主文件和 master 數(shù)據(jù)庫中。大多數(shù)情況下,SQL Server 數(shù)據(jù)庫引擎使用 master 數(shù)據(jù)庫中的文件位置信息。
在下列情況下,數(shù)據(jù)庫引擎使用主文件的文件位置信息初始化 master 數(shù)據(jù)庫中的文件位置項(xiàng):
.使用帶有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項(xiàng)的 CREATE DATABASE 語句來附加數(shù)據(jù)庫時(shí)。
.從 SQL Server 2000 版或 7.0 版升級(jí)時(shí)。
.還原 master 數(shù)據(jù)庫時(shí)。
二 數(shù)據(jù)頁
SQL Server用8KB 的頁來存儲(chǔ)數(shù)據(jù),并且在SQL Server里磁盤 I/O 操作在頁級(jí)執(zhí)行。也就是說,SQL Server 讀取或?qū)懭胨袛?shù)據(jù)頁。頁有不同的類型,像數(shù)據(jù)頁,GAM,SGAM等。
SQL Server把數(shù)據(jù)記錄存在數(shù)據(jù)頁(Data Page)里。數(shù)據(jù)記錄是堆表里、聚集索引里葉子節(jié)點(diǎn)的行。
數(shù)據(jù)頁由3個(gè)部分組成。頁頭(標(biāo)頭),數(shù)據(jù)區(qū)(數(shù)據(jù)行和可用空間)及行偏移數(shù)組。
要找出SQL Server給一個(gè)表分配的頁有哪些,要用到非文檔的命令DBCC IND。DBCC IND 命令用于查詢一個(gè)存儲(chǔ)對象的內(nèi)部存儲(chǔ)結(jié)構(gòu)信息,該命令有4個(gè)參數(shù), 前3個(gè)參數(shù)必須指定。它的語法如下:
第一個(gè)參數(shù)是數(shù)據(jù)庫名或數(shù)據(jù)庫ID。
第二個(gè)參數(shù)是數(shù)據(jù)庫中的對象名或?qū)ο驣D,對象可以是表或者索引視圖。
第三個(gè)參數(shù)是一個(gè)非聚集索引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,第四個(gè)參數(shù)是可選的,該參數(shù)用于指定一個(gè)分區(qū)號(hào).如果不給定值或者給定0, 則顯示全部分區(qū)數(shù)據(jù)。
和DBCC PAGE不同的是, SQL Server運(yùn)行DBCC IND不需要開啟3604跟蹤標(biāo)志.
關(guān)于數(shù)據(jù)庫頁類型如下所示:
?1 Data page 堆表和聚集索引的葉子節(jié)點(diǎn)數(shù)據(jù)
?2 Index page 聚集索引的非葉子節(jié)點(diǎn)和非聚集索引的所有索引記錄
?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í)所用到的臨時(shí)頁,排序中間操作存儲(chǔ)數(shù)據(jù)用的。
?8 GAM page 全局分配映射(Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區(qū)已經(jīng)被分配并用作何種用途。
?9 SGAM page 共享全局分配映射(Shared Global Allocation Map,GAM)頁面 這些頁面記錄了哪些區(qū)當(dāng)前被用作混合類型的區(qū),并且這些區(qū)需含有至少一個(gè)未使用的頁面。
?10 IAM page 有關(guān)每個(gè)分配單元中表或索引所使用的區(qū)的信息
?11 PFS page 有關(guān)頁分配和頁的可用空間的信息
?13 boot page 記錄了關(guān)于數(shù)據(jù)庫的信息,僅存于每個(gè)數(shù)據(jù)庫的第9頁
?15 file header page 記錄了關(guān)于數(shù)據(jù)庫文件的信息,存于每個(gè)數(shù)據(jù)庫文件的第0頁
?16 DCM page 記錄自從上次全備以來的數(shù)據(jù)改變的頁面,以備差異備份
?17 BCM page 有關(guān)每個(gè)分配單元中自最后一條 BACKUP LOG 語句之后的大容量操作所修改的區(qū)的信息
三 DBCC命令
現(xiàn)在我們來看看79號(hào)類型為1的數(shù)據(jù)頁里存放的數(shù)據(jù),這個(gè)就要用到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 包含頁面的文件編號(hào)
pagenum 文件內(nèi)的頁面
printopt 可選的輸出選項(xiàng);選用其中一個(gè)值:
0:默認(rèn)值,輸出緩沖區(qū)的標(biāo)題和頁面標(biāo)題
1:輸出緩沖區(qū)的標(biāo)題、頁面標(biāo)題(分別輸出每一行),以及行偏移量表
2:輸出緩沖區(qū)的標(biāo)題、頁面標(biāo)題(整體輸出頁面),以及行偏移量表
3:輸出緩沖區(qū)的標(biāo)題、頁面標(biāo)題(分別輸出每一行),以及行偏移量表;每一行
后跟分別列出的它的列值
要想看到這些輸出的結(jié)果,還需要設(shè)置DBCC TRACEON(3604)
?16 DCM page 記錄自從上次全備以來的數(shù)據(jù)改變的頁面,以備差異備份
1:輸出緩沖區(qū)的標(biāo)題、頁面標(biāo)題(分別輸出每一行),以及行偏移量表
.MDF文件所在存儲(chǔ)介質(zhì)的損壞。
SQL數(shù)據(jù)庫受損的背后原因有許多種。眾所周知,SQL數(shù)據(jù)庫的各個(gè)MDF文件其實(shí)是一些主要的數(shù)據(jù)庫文件,它們存儲(chǔ)著所有用戶的數(shù)據(jù),因此任何MDF文件的損壞都可能會(huì)導(dǎo)致整個(gè)數(shù)據(jù)庫的崩潰。可見,我們需要首先來了解MDF文件受損背后的所有可能原因:
?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.
DBCC CHECK (name_of_corrupt_database, repair_allow_data_loss)
情況1:如果索引ID>1,則立刻丟棄它、并重新創(chuàng)建。
-2: 顯示全部IAM頁。
?2 Index page 聚集索引的非葉子節(jié)點(diǎn)和非聚集索引的所有索引記錄
2 次要數(shù)據(jù)文件
.如果用戶將SQL數(shù)據(jù)庫存儲(chǔ)在一個(gè)壓縮的文件夾中,那么MDF文件就可能因此而被損壞。
2、打開以前掃描好的碎片文件
3、誤格式化或分區(qū)導(dǎo)致MDF文件丟失。
1、在SQLserver企業(yè)管理器里面刪除數(shù)據(jù)庫對象,導(dǎo)致MDF文件被刪除。
0:默認(rèn)值,輸出緩沖區(qū)的標(biāo)題和頁面標(biāo)題
1 主數(shù)據(jù)文件
.磁盤驅(qū)動(dòng)器受損。
用戶可以使用SQL Server的NDF文件(一些日志文件)來進(jìn)行恢復(fù)。但是在大多數(shù)損壞的案例中,單憑日志文件是不足以恢復(fù)數(shù)據(jù)庫的。因?yàn)橛袝r(shí)候在一些被嚴(yán)重?fù)p壞的情況下,其對應(yīng)的備份文件也同樣遭到了破壞。
?4 Text tree page A text page that holds large chunks of LOB values from a single column value.
printopt 可選的輸出選項(xiàng);選用其中一個(gè)值:
3 日志文件
4、開始組合MDF文件
.由于文件頭的損壞,所導(dǎo)致的MDF文件受損。
DBCC CHECK (name_of_corrupt_database, repair_fast)
SQL Server 數(shù)據(jù)庫具有三種類型的文件
dbname 包含頁面的數(shù)據(jù)庫的名稱
DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])
filenum 包含頁面的文件編號(hào)
現(xiàn)在我們來看看79號(hào)類型為1的數(shù)據(jù)頁里存放的數(shù)據(jù),這個(gè)就要用到DBCC PAGE命令,它的語法如下:
如何手動(dòng)修復(fù)MDF文件
2:輸出緩沖區(qū)的標(biāo)題、頁面標(biāo)題(整體輸出頁面),以及行偏移量表
至此為確保修復(fù)了所有損壞,請?jiān)俅芜\(yùn)行DBCC CHECKDB。如果在name_of_your_corrupt_database中顯示為0個(gè)分配錯(cuò)誤和0個(gè)一致性錯(cuò)誤,則大功告成
.某個(gè)用戶可能對數(shù)據(jù)進(jìn)行錯(cuò)誤地刪除。
3、從列表選擇掃描得到的文件
如今微軟的SQL Server可謂是最常用的關(guān)系型數(shù)據(jù)庫之一了。鑒于其先進(jìn)的內(nèi)部結(jié)構(gòu)和高可靠性,大多數(shù)組織都選用SQL Server數(shù)據(jù)庫來存儲(chǔ)所有關(guān)鍵業(yè)務(wù)的數(shù)據(jù)。但是有時(shí)候,一些諸如病毒感染、操作系統(tǒng)故障、文件系統(tǒng)損壞之類的狀況會(huì)使得SQL數(shù)據(jù)庫受到損壞,以至于存儲(chǔ)在其中的所有數(shù)據(jù)都變得無法訪問。然而,在真實(shí)的場景中,我們在損壞的SQL Server里修復(fù)各種.mdf文件,卻并非是一件容易的事。