如何重置數(shù)據(jù)庫(kù)Suppect(置疑)狀態(tài)
一、 出現(xiàn)這種情況的原因
如果在日常運(yùn)行當(dāng)中,數(shù)據(jù)庫(kù)的文件或日志增長(zhǎng)方式設(shè)為以下兩種模式:
1、 文件不自動(dòng)增長(zhǎng)
此種狀態(tài)下,如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)或日志增長(zhǎng)到設(shè)定的文件大小時(shí),繼續(xù)添加數(shù)據(jù)時(shí)就沒(méi)有足夠的空間時(shí),MS SQL SERVER將把數(shù)據(jù)庫(kù)標(biāo)記為Suspect(置疑)
2、 文件自動(dòng)增長(zhǎng)但限制最大文件大小
此種狀態(tài)下,如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)或日志增長(zhǎng)到設(shè)定的最大文件大小時(shí),繼續(xù)添加數(shù)據(jù)時(shí)就沒(méi)有足夠的空間時(shí),MS SQL SERVER將把數(shù)據(jù)庫(kù)標(biāo)記為Suspect(置疑)
3、 文件自動(dòng)增長(zhǎng)也沒(méi)限制文件大小,但存放文件的磁盤剩余空間不夠了
4、 意外掉電,造成磁盤文件損壞
5、
二、解決方法:
3、
方法一:
釋放含有相關(guān)數(shù)據(jù)庫(kù)日志文件的任意磁盤驅(qū)動(dòng)器上的磁盤空間。釋放的磁盤空間使恢復(fù)系統(tǒng)可以自動(dòng)地增長(zhǎng)數(shù)據(jù)或事務(wù)日志文件。
執(zhí)行 sp_resetstatus 重置置疑狀態(tài)。
通過(guò)執(zhí)行 DBCC DBRECOVER(數(shù)據(jù)庫(kù))運(yùn)行恢復(fù)操作。
方法二:
釋放另一個(gè)磁盤驅(qū)動(dòng)器上的磁盤空間。
把可用磁盤空間不足的事務(wù)日志文件移動(dòng)到第一步所指的磁盤驅(qū)動(dòng)器上。
執(zhí)行 sp_detach_db 分離數(shù)據(jù)庫(kù)。
執(zhí)行 sp_attach_db 附加數(shù)據(jù)庫(kù),指向被移動(dòng)的文件。
方法三:
向置疑數(shù)據(jù)庫(kù)添加一個(gè)日志文件,然后執(zhí)行 sp_add_log_file_recover_suspect_db 以便在數(shù)據(jù)庫(kù)上運(yùn)行恢復(fù)操作。
解決錯(cuò)誤信息 1105,然后使數(shù)據(jù)庫(kù)聯(lián)機(jī)
對(duì)于任意一個(gè)含有錯(cuò)誤信息 1105 提到的文件組中文件的磁盤,釋放其磁盤空間。釋放磁盤空間使得文件組中的文件可以增長(zhǎng)。
執(zhí)行 sp_resetstatus 重置置疑狀態(tài)。
執(zhí)行 DBCC DBRECOVER(數(shù)據(jù)庫(kù))運(yùn)行恢復(fù)操作。
方法四:
釋放另一個(gè)磁盤驅(qū)動(dòng)器上的磁盤空間。
將可用磁盤空間不足的文件組中的數(shù)據(jù)文件移動(dòng)到第一步所指的磁盤驅(qū)動(dòng)器上。
執(zhí)行 sp_detach_db 分離數(shù)據(jù)庫(kù)。
執(zhí)行 sp_attach_db 附加數(shù)據(jù)庫(kù),指向被移動(dòng)的文件。
方法五:
向置疑數(shù)據(jù)庫(kù)添加一個(gè)數(shù)據(jù)文件,然后執(zhí)行 sp_add_data_file_recover_suspect_db 以便在數(shù)據(jù)庫(kù)上運(yùn)行恢復(fù)操作。
執(zhí)行 sp_resetstatus。
用 ALTER DATABASE 向數(shù)據(jù)庫(kù)添加一個(gè)數(shù)據(jù)文件或日志文件。
停止并重新啟動(dòng) SQL Server。
用新的數(shù)據(jù)文件或日志文件所提供的額外空間,SQL Server 應(yīng)該能完成數(shù)據(jù)庫(kù)的恢復(fù)。
釋放磁盤空間并且重新運(yùn)行恢復(fù)操作。
sp_resetstatus 關(guān)閉數(shù)據(jù)庫(kù)的置疑標(biāo)志,但是原封不動(dòng)地保持?jǐn)?shù)據(jù)庫(kù)的其它選項(xiàng)。
注意 只有在您的主要支持提供者指導(dǎo)下或有疑難解答建議的做法時(shí),才可以使用 sp_resetstatus。
否則,可能會(huì)損壞數(shù)據(jù)庫(kù)。
由于該過(guò)程修改了系統(tǒng)表,系統(tǒng)管理員必須在創(chuàng)建這個(gè)過(guò)程前,啟用系統(tǒng)表更新。要啟用更新,使用下面的過(guò)程:
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
過(guò)程創(chuàng)建后,立即禁用系統(tǒng)表更新:
sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
只有系統(tǒng)管理員才能執(zhí)行 sp_resetstatus。執(zhí)行該過(guò)程后,立即關(guān)閉 SQL Server。
語(yǔ)法為:
sp_resetstatus database_name
下面的例子將關(guān)閉 PRODUCTION 數(shù)據(jù)庫(kù)的置疑標(biāo)志。
sp_resetstatus PRODUCTION
下面是結(jié)果集:
Database 'PRODUCTION' status reset!
WARNING: You must reboot SQL Server prior to accessing this database!
注釋
sp_resetstatus 關(guān)閉數(shù)據(jù)庫(kù)上的置疑標(biāo)記。此過(guò)程更新 sysdatabases 中的命名數(shù)據(jù)庫(kù)的模式和狀態(tài)列。
在運(yùn)行此過(guò)程之前,應(yīng)參考 SQL Server 錯(cuò)誤日志并解決所有問(wèn)題。執(zhí)行 sp_resetstatus 后停止并重新啟動(dòng) SQL Server。
由于某些原因,數(shù)據(jù)庫(kù)可能成為置疑狀態(tài)??赡艿脑虬ú僮飨到y(tǒng)拒絕對(duì)數(shù)據(jù)庫(kù)資源的訪問(wèn),以及一個(gè)或多個(gè)數(shù)據(jù)庫(kù)文件不可用性或已損壞。
權(quán)限
只有 sysadmin 固定服務(wù)器角色成員才能執(zhí)行 sp_resetstatus。
示例
下例重置 PUBS 數(shù)據(jù)庫(kù)的狀態(tài)。
EXEC sp_resetstatus 'PUBS'
數(shù)據(jù)文件空間不足:
sp_add_data_file_recover_suspect_db
當(dāng)由于文件組上的"空間不足"(1105) 錯(cuò)誤而導(dǎo)致一個(gè)數(shù)據(jù)庫(kù)上的恢復(fù)不能完成時(shí),請(qǐng)為文件組添加一個(gè)數(shù)據(jù)文件。添加日志文件后,該存儲(chǔ)過(guò)程關(guān)閉置疑設(shè)置并完成數(shù)據(jù)庫(kù)的故障恢復(fù)。該參數(shù)和 ALTER DATABASE ADD FILE 的參數(shù)相同。
示例
在下面的示例中,由于文件組 fg1 中空間不足(錯(cuò)誤 1105),數(shù)據(jù)庫(kù) db1 被標(biāo)記為置疑。
sp_add_data_file_recover_suspect_db db1, fg1, file2,
'c:\Program Files\Microsoft SQL Server\MSSQL\Data\db1_file2.mdf', '1MB'
日志空間不足:
sp_add_log_file_recover_suspect_db
由于數(shù)據(jù)庫(kù)上"日志空間不足"(9002) 錯(cuò)誤造成恢復(fù)不能完成時(shí),請(qǐng)將日志文件添加到文件組中。添加日志文件后,該存儲(chǔ)過(guò)程關(guān)閉置疑設(shè)置并完成數(shù)據(jù)庫(kù)的故障恢復(fù)。參數(shù)與 ALTER DATABASE ADD LOG FILE 中的參數(shù)相同。
權(quán)限
執(zhí)行權(quán)限默認(rèn)賦予 sysadmin 固定服務(wù)器角色的成員。這些權(quán)限是不可傳遞的。
示例
在此示例中,數(shù)據(jù)庫(kù) db1 在故障恢復(fù)期間由于日志空間不足(錯(cuò)誤 9002)而標(biāo)記為置疑。
sp_add_log_file_recover_suspect_db db1, logfile2,
'c:\Program Files\Microsoft SQL Server\MSSQL\Data\db1_logfile2.ldf',
'1MB'
嚴(yán)重級(jí)別 22:SQL Server 嚴(yán)重錯(cuò)誤表的完整性置疑
這些消息表明消息中所指定的表或索引已因軟件或硬件問(wèn)題而損壞。
嚴(yán)重級(jí)別 22 錯(cuò)誤很少發(fā)生;但是,如果遇到該錯(cuò)誤,請(qǐng)運(yùn)行 DBCC CHECKDB 確定數(shù)據(jù)庫(kù)中是否有其它對(duì)象也受損壞。問(wèn)題有可能只存在于超速緩存中,而不是存在于磁盤本身。如果是這樣,重新啟動(dòng) SQL Server 將修正該問(wèn)題。要繼續(xù)工作,必須重新連接到 SQL Server。否則,用 DBCC 修復(fù)該問(wèn)題。有些情況下,有必要還原數(shù)據(jù)庫(kù)。
如果重新啟動(dòng)幫助不大,則問(wèn)題存在于磁盤上。有時(shí),摧毀在錯(cuò)誤信息中指定的對(duì)象可以解決該問(wèn)題。例如,如果消息說(shuō) SQL Server 在非聚集索引中發(fā)現(xiàn)長(zhǎng)度為 0 的行,刪除該索引然后重建。
嚴(yán)重級(jí)別 23:SQL Server 嚴(yán)重錯(cuò)誤:數(shù)據(jù)庫(kù)完整性置疑
這些消息表明由于硬件或軟件問(wèn)題,整個(gè)數(shù)據(jù)庫(kù)完整性存在問(wèn)題。
嚴(yán)重級(jí)別 23 錯(cuò)誤很少發(fā)生;但是,如果遇到,請(qǐng)運(yùn)行 DBCC CHECKDB 確定損壞的程度。問(wèn)題有可能只存在于超速緩存中,而不是存在于磁盤本身。如果是這樣,重新啟動(dòng) SQL Server 將修正該問(wèn)題。要繼續(xù)工作,必須重新連接到 SQL Server。否則,用 DBCC 修復(fù)該問(wèn)題。有些情況下,有必要重新啟動(dòng)數(shù)據(jù)庫(kù)。
DBCC CHECKDB 建議
在 Microsoft? SQL Server? 2000 中,可以在用戶使用數(shù)據(jù)庫(kù)時(shí)運(yùn)行 DBCC CHECKDB,因?yàn)?DBCC CHECKDB 在檢查每個(gè)數(shù)據(jù)庫(kù)表時(shí)在表上控制的鎖的類型均更改。
在 SQL Server 7.0 和早期版本中,DBCC CHECKDB(依次在數(shù)據(jù)庫(kù)的每個(gè)表上運(yùn)行 DBCC CHECKTABLE 和 CHECKALLOC)常常在表上控制共享鎖 (S),因而阻塞了所有的數(shù)據(jù)修改語(yǔ)言 (DML) 語(yǔ)句。
在 SQL Server 2000 中,當(dāng)檢查表時(shí) DBCC CHECKDB 在表上控制架構(gòu)鎖以防止元數(shù)據(jù)的更改,因而允許在正在檢查的表上使用除任何數(shù)據(jù)定義語(yǔ)言 (DDL) 語(yǔ)句之外的 DML 語(yǔ)句。該變化對(duì)于決定何時(shí)運(yùn)行 DBCC CHECKDB 提供了更大的靈活性,因?yàn)?DBCC CHECKDB 并不完全拒絕用戶對(duì)系統(tǒng)的使用。
DBCC CHECKDB 是大量占用 CPU 和磁盤的操作。每一個(gè)需要檢查的數(shù)據(jù)頁(yè)都必須首先從磁盤讀入內(nèi)存。另外,DBCC CHECKDB 使用 tempdb 排序。
如果在 DBCC CHECKDB 運(yùn)行時(shí)動(dòng)態(tài)執(zhí)行事務(wù),那么事務(wù)日志會(huì)繼續(xù)增長(zhǎng),因?yàn)?DBCC 命令在完成日志的讀取之前阻塞日志截?cái)唷?br>
建議在服務(wù)器負(fù)荷較少的時(shí)候運(yùn)行 DBCC CHECKDB。如果在負(fù)荷高峰期運(yùn)行 DBCC CHECKDB,那么事務(wù)吞吐量性能和 DBCC CHECKDB 完成時(shí)間性能都會(huì)受到影響。
要獲得好的 DBCC 性能的一些建議
在系統(tǒng)使用率較低時(shí)運(yùn)行 CHECKDB。
請(qǐng)確保未同時(shí)執(zhí)行其它磁盤 I/O 操作,例如磁盤備份。
將 tempdb 放到單獨(dú)的磁盤系統(tǒng)或快速磁盤子系統(tǒng)中。
允許 tempdb 在驅(qū)動(dòng)器上有足夠的擴(kuò)展空間。使用帶有 ESTIMATE ONLY 的 DBCC 估計(jì) tempdb 將需要多少空間。
避免運(yùn)行占用大量 CPU 的查詢或批處理作業(yè)。
在 DBCC 命令運(yùn)行時(shí),減少活動(dòng)事務(wù)。
使用 NO_INFOMSGS 選項(xiàng)顯著減少處理和 tempdb 的使用。
考慮使用帶有 PHYSICAL_ONLY 選項(xiàng)的 DBCC CHECKDB 來(lái)檢查頁(yè)和記錄首部的物理結(jié)構(gòu)。當(dāng)硬件導(dǎo)致的錯(cuò)誤被置疑時(shí),這個(gè)操作將執(zhí)行快速檢查。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。