新聞中心
SQL數(shù)據(jù)庫(kù)是現(xiàn)代應(yīng)用開(kāi)發(fā)和數(shù)據(jù)存儲(chǔ)的核心技術(shù)之一。當(dāng)數(shù)據(jù)庫(kù)發(fā)生一致性錯(cuò)誤時(shí),可能會(huì)導(dǎo)致數(shù)據(jù)不一致,數(shù)據(jù)丟失,系統(tǒng)崩潰,性能降低,甚至暴露安全風(fēng)險(xiǎn)。因此,在數(shù)據(jù)庫(kù)管理中,修復(fù)一致性錯(cuò)誤是必不可少的工作之一。

成都創(chuàng)新互聯(lián)專(zhuān)注于成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶(hù)至上,用心服務(wù)”的宗旨,從客戶(hù)的利益和觀點(diǎn)出發(fā),讓客戶(hù)在網(wǎng)絡(luò)營(yíng)銷(xiāo)中找到自己的駐足之地。尊重和關(guān)懷每一位客戶(hù),用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶(hù),用專(zhuān)業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶(hù)值得信賴(lài)的朋友,為客戶(hù)解除后顧之憂。
一致性錯(cuò)誤是什么?
SQL數(shù)據(jù)庫(kù)的一致性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的邏輯性和完整性。當(dāng)一些數(shù)據(jù)元素的邏輯關(guān)系被改變,或者數(shù)據(jù)被破壞,就會(huì)發(fā)生一致性錯(cuò)誤。一致性錯(cuò)誤的原因通常包括硬件故障,軟件故障,網(wǎng)絡(luò)故障,意外關(guān)閉數(shù)據(jù)庫(kù)等。
如何檢測(cè)一致性錯(cuò)誤?
在SQL服務(wù)器上,可以使用DBCC CHECKDB命令來(lái)檢測(cè)和修復(fù)一致性錯(cuò)誤。此命令檢查所有表,索引和其他數(shù)據(jù)庫(kù)的對(duì)象以確保其邏輯一致性和完整性。檢查數(shù)據(jù)庫(kù)后,該命令將出現(xiàn)以下結(jié)果:NO ERRORS FOUND,REPR ALLOW DATA LOSS,REPR FAST,REPR REBUILD。如果NO ERRORS FOUND,則數(shù)據(jù)庫(kù)沒(méi)有一致性錯(cuò)誤。但是,如果顯示REPR ALLOW DATA LOSS,則表明在修復(fù)一致性錯(cuò)誤時(shí)會(huì)發(fā)生數(shù)據(jù)丟失。如果顯示REPR REBUILD或REPR FAST,則必須自行查詢(xún)更多信息,以確定哪一種修復(fù)方法最適合你。
如何修復(fù)一致性錯(cuò)誤?
修復(fù)一致性錯(cuò)誤需要一定的技術(shù)知識(shí)和經(jīng)驗(yàn)。下面是一些解決SQL數(shù)據(jù)庫(kù)一致性錯(cuò)誤的方法。
方法1:還原數(shù)據(jù)庫(kù)
還原是通過(guò)還原數(shù)據(jù)庫(kù)中所有對(duì)象的備份來(lái)解決一致性問(wèn)題的一種方法。通過(guò)此方法,我們可以完全恢復(fù)數(shù)據(jù)庫(kù)以前的狀態(tài)。此方法將刪除改變的數(shù)據(jù),因此我們必須小心處理。如果你經(jīng)常使用備份,還原非常有用。要還原數(shù)據(jù)庫(kù),請(qǐng)使用SQL Server Management Studio的還原向?qū)АT谔崾灸氵x擇還原文件所在位置之前,請(qǐng)確保已連接到SQL服務(wù)器。
方法2:利用REPR_REBUILD進(jìn)行修復(fù)
REPR_REBUILD工具是解決SQL數(shù)據(jù)庫(kù)一致性問(wèn)題的另一種方法。在使用此方法之前,請(qǐng)確保已創(chuàng)建數(shù)據(jù)庫(kù)備份。該方法會(huì)通過(guò)創(chuàng)建新的索引或重新創(chuàng)建表并將數(shù)據(jù)從錯(cuò)誤表中移動(dòng)來(lái)修復(fù)損壞。在修復(fù)過(guò)程中,該方法會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),并將原始數(shù)據(jù)庫(kù)中已恢復(fù)的對(duì)象移動(dòng)到新數(shù)據(jù)庫(kù)中。如果該方法失敗,可能需要手動(dòng)重新創(chuàng)建表或索引。
方法3:利用REPR_ALLOW_DATA_LOSS進(jìn)行修復(fù)
REPR_ALLOW_DATA_LOSS是另一種修復(fù)一致性問(wèn)題的方法。此方法刪除損壞的數(shù)據(jù)和索引,并通過(guò)將新數(shù)據(jù)和索引添加到數(shù)據(jù)庫(kù)中來(lái)恢復(fù)原始數(shù)據(jù)。此方法雖然快速,但可能會(huì)導(dǎo)致數(shù)據(jù)丟失。因此,在使用此方法之前,請(qǐng)進(jìn)行備份。
結(jié)論
無(wú)論哪種方法,都必須備份數(shù)據(jù)庫(kù),以便在修復(fù)一致性錯(cuò)誤時(shí)保護(hù)數(shù)據(jù)庫(kù)。還原,REPR_REBUILD和REPR_ALLOW_DATA_LOSS是三種解決一致性問(wèn)題的方法,選擇哪種方法取決于損壞的大小和對(duì)數(shù)據(jù)的影響。對(duì)SQL數(shù)據(jù)庫(kù)進(jìn)行一致性檢查和修復(fù),可以確保數(shù)據(jù)庫(kù)的邏輯性和完整性,防止數(shù)據(jù)丟失并提高性能。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專(zhuān)注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220什么方法可以修復(fù)SQL server數(shù)據(jù)庫(kù)
SQL Server數(shù)據(jù)庫(kù)MDF文件被勒索病毒W(wǎng)ECANHELP加密修復(fù)教沖旅滲程中文散脊鎮(zhèn)段字幕
SQL Server 2023數(shù)據(jù)庫(kù)LDF損壞,只有mdf的恢復(fù)方法。
SQL Server 2023數(shù)據(jù)庫(kù)文件遭到破壞的現(xiàn)象經(jīng)常出現(xiàn),數(shù)據(jù)庫(kù)出錯(cuò)是否可以修復(fù)呢?答畢檔前案是可以的,本日志以一個(gè)sql server 2023數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)日志文件ldf損壞了,mdf正常,數(shù)據(jù)庫(kù)附加失敗的修復(fù)方法總結(jié)一下,數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)在很多時(shí)候比較復(fù)雜,當(dāng)蠢慧數(shù)據(jù)庫(kù)存在大量錯(cuò)誤的時(shí)候,使用DBCC修復(fù)也是不可以的,需要拆解數(shù)據(jù)庫(kù)來(lái)?yè)尵戎匾臄?shù)據(jù),下面是較為常見(jiàn)的一種SQL Server 2023數(shù)據(jù)庫(kù)修復(fù)方式:
1) 先及時(shí)把原來(lái)的數(shù)據(jù)庫(kù)文件(如test.mdf)備份到其他地方。
2) 停掉服務(wù)器。
3) 刪除這個(gè)test.mdf。
4) 重新建立一個(gè)test同名數(shù)據(jù)庫(kù)。
5) 刪除這個(gè)新建立的test數(shù)據(jù)庫(kù)的test.ldf文件,并用開(kāi)始備份好test.mdf文件覆蓋這個(gè)新建立的test.mdf文件。
6) 啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。此時(shí)會(huì)看到數(shù)據(jù)庫(kù)test的狀態(tài)為“置疑”。這時(shí)候不能對(duì)此數(shù)據(jù)庫(kù)進(jìn)行任何操作。
.設(shè)置數(shù)據(jù)庫(kù)允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫(kù)服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁(yè)面手清中將“允許對(duì)系統(tǒng)目錄直接修改”。
7) 設(shè)置test為緊急修復(fù)模式
update sysdatabases set status=where dbid=DB_ID(‘test’)
此時(shí)可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫(kù)處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫(kù)里面的表,但是僅僅有系統(tǒng)表
8) 下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫(kù)日志文件
dbcc rebuild_log(‘test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’)
執(zhí)行過(guò)程中,如果遇到下列提示信息:
服務(wù)器: 消息 5030,級(jí)別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫(kù)以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
說(shuō)明您的其他程序正在使用該數(shù)據(jù)庫(kù),如果剛才您在操作中使用SQL Server Enterprise Manager打開(kāi)了test庫(kù)的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。
正確執(zhí)行完成的提示應(yīng)該類(lèi)似于:
警告: 數(shù)據(jù)庫(kù) ‘test’ 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC CHECKDB 以驗(yàn)證物理一致性。將必須重置數(shù)據(jù)庫(kù)選項(xiàng),并且可能需要?jiǎng)h除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
此時(shí)打開(kāi)在SQL Server Enterprise Manager里面會(huì)看到數(shù)據(jù)庫(kù)的狀態(tài)為“只供DBO使用”。此時(shí)可以訪問(wèn)數(shù)據(jù)庫(kù)里面的用戶(hù)表了。
9) 驗(yàn)證數(shù)據(jù)庫(kù)一致性
dbcc checkdb(‘test’)
10.設(shè)置數(shù)據(jù)庫(kù)為正常狀態(tài)
sp_dboption ‘test’,’dbo use only’,’false’
如果沒(méi)有出錯(cuò),那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫(kù)啦。
11)最后一步,我們要將步驟6中設(shè)置的“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù);
SQL 的備份文件還原時(shí)出現(xiàn)“發(fā)生內(nèi)部一致性錯(cuò)誤”
還原時(shí),復(fù)選“在現(xiàn)有數(shù)據(jù)庫(kù)上強(qiáng)或裂制畝搏還原”衫耐閉
修復(fù)SQL數(shù)據(jù)庫(kù)置疑時(shí)出現(xiàn)的錯(cuò)誤
A.我們使用默認(rèn)方式建立一個(gè)供恢復(fù)使用的數(shù)據(jù)庫(kù)(如test)??梢栽赟QL Server Enterprise Manager里面建立。
B.停掉數(shù)據(jù)庫(kù)服務(wù)器。
C.將剛才生成的數(shù)據(jù)庫(kù)的日志文件test_log.ldf刪除,用要恢復(fù)的數(shù)據(jù)庫(kù)mdf文件覆蓋剛才生成的數(shù)據(jù)庫(kù)數(shù)據(jù)文件test_data.mdf。
D.啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。此時(shí)會(huì)看到數(shù)據(jù)庫(kù)test的狀態(tài)為“置疑”。這時(shí)候不能對(duì)此數(shù)據(jù)庫(kù)進(jìn)行任何操作。
E.設(shè)置數(shù)據(jù)庫(kù)允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫(kù)服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁(yè)面中將“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)選中。也可以使用如下語(yǔ)句來(lái)實(shí)現(xiàn)。
use master
go
sp_configure ‘a(chǎn)llow updates’,1
go
reconfigure with override
go
F.設(shè)置test為緊急修復(fù)模式
update sysdatabases set status=where dbid=DB_ID(‘test’)
此時(shí)可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫(kù)處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫(kù)里面的表,但是僅僅有系統(tǒng)表
G.下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫(kù)日志文件
dbcc rebuild_log(‘test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’)
執(zhí)行過(guò)程中,如果遇到下列提示信息:
服務(wù)器: 消息,級(jí)別 16,狀態(tài) 1,行
未能排它地鎖定數(shù)據(jù)庫(kù)以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
說(shuō)明您的其他程攔仿序正在使用該數(shù)據(jù)庫(kù),如果剛才您在F步驟中使用SQL Server Enterprise Manager打開(kāi)了test庫(kù)的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。
正確執(zhí)行完成的提示應(yīng)該類(lèi)似于:
警告: 數(shù)據(jù)庫(kù) ‘test’ 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC CHECKDB 以驗(yàn)證物理一致性。將必須重置數(shù)據(jù)庫(kù)選項(xiàng),并且可能需要?jiǎng)h除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
此時(shí)打開(kāi)在SQL Server Enterprise Manager里面會(huì)看到數(shù)據(jù)庫(kù)的狀態(tài)為“只供DBO使用”。此時(shí)簡(jiǎn)基纖可以訪問(wèn)數(shù)據(jù)庫(kù)里面的用戶(hù)表了。
H.驗(yàn)證數(shù)據(jù)庫(kù)一致性(可省略)
dbcc checkdb(‘test’)
一般執(zhí)行結(jié)果如下:
CHECKDB 發(fā)現(xiàn)了個(gè)分配錯(cuò)誤和鋒鏈個(gè)一致性錯(cuò)誤(在數(shù)據(jù)庫(kù) ‘test’ 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
I.設(shè)置數(shù)據(jù)庫(kù)為正常狀態(tài)
sp_dboption ‘test’,’dbo use only’,’false’
如果沒(méi)有出錯(cuò),那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫(kù)啦。
J.最后一步,我們要將步驟E中設(shè)置的“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù)。因?yàn)槠綍r(shí)直接操作系統(tǒng)表是一件比較危險(xiǎn)的事情。當(dāng)然,我們可以在SQL Server Enterprise Manager里面恢復(fù),也可以使用如下語(yǔ)句完成
sp_configure ‘a(chǎn)llow updates’,0
go
reconfigure with override
go
備份數(shù)據(jù)文件,然后按下面的步驟處理:
1.新建一個(gè)同名的數(shù)據(jù)庫(kù)(數(shù)據(jù)文件與原來(lái)的要一致)
2.再停掉sql server(注意不要分離數(shù)據(jù)庫(kù))
3.用原數(shù)據(jù)庫(kù)的數(shù)據(jù)文件覆蓋掉這個(gè)新建的數(shù)據(jù)庫(kù)
4.再重啟sql server
5.此時(shí)打開(kāi)企業(yè)管理器時(shí)會(huì)出現(xiàn)置疑,先不管,執(zhí)行下面的語(yǔ)句(注意修改其中的數(shù)據(jù)庫(kù)名)
6.完成后一般就可以訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)了,這時(shí),數(shù)據(jù)庫(kù)本身一般還要問(wèn)題,解決辦法是,利用
數(shù)據(jù)庫(kù)的腳本創(chuàng)建乎尺咐一個(gè)新的數(shù)據(jù)庫(kù),并將數(shù)據(jù)導(dǎo)進(jìn)去就行了.
USE MASTER
GO
SP_CONFIGURE ‘ALLOW UPDATES’,1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =WHERE NAME=’置疑的數(shù)據(jù)庫(kù)名’
Go
sp_dboption ‘置疑的數(shù)據(jù)庫(kù)名’, ‘single user’, ‘true’
Go
DBCC CHECKDB(‘置疑的數(shù)據(jù)庫(kù)名’)
Go
update sysdatabases set status =28 where name=’置疑的數(shù)據(jù)庫(kù)名’
Go
sp_configure ‘a(chǎn)llow updates’,reconfigure with override
Go
sp_dboption ‘置疑的數(shù)據(jù)庫(kù)名’, ‘single user’, ‘false
假設(shè)數(shù)據(jù)庫(kù)為T(mén)EST:
按以下步驟執(zhí)行
A.設(shè)置數(shù)據(jù)庫(kù)允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫(kù)服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁(yè)面中將“允許對(duì)系困察統(tǒng)目錄直接修改”一項(xiàng)選中。也可以使用如下語(yǔ)句來(lái)實(shí)現(xiàn)。
use master
go
sp_configure ‘a(chǎn)llow updates’,1
go
reconfigure with override
go
B.設(shè)置test為緊急歲純修復(fù)模式
update sysdatabases set status=where dbid=DB_ID(‘test’)
此時(shí)可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫(kù)處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫(kù)里面的表,但是僅僅有系統(tǒng)表
C.下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫(kù)日志文件
dbcc rebuild_log(‘test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’)
執(zhí)行過(guò)程中,如果遇到下列提示信息:
服務(wù)器: 消息,級(jí)別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫(kù)以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
說(shuō)明您的其他程序正在使用該數(shù)據(jù)庫(kù),如果剛才您在F步驟中使用SQL Server Enterprise Manager打開(kāi)了test庫(kù)的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。
正確執(zhí)行完成的提示應(yīng)該類(lèi)似于:
警告: 數(shù)據(jù)庫(kù) ‘test’ 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC CHECKDB 以驗(yàn)證物理一致性。將必須重置數(shù)據(jù)庫(kù)選項(xiàng),并且可能需要?jiǎng)h除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
此時(shí)打開(kāi)在SQL Server Enterprise Manager里面會(huì)看到數(shù)據(jù)庫(kù)的狀態(tài)為“只供DBO使用”。此時(shí)可以訪問(wèn)數(shù)據(jù)庫(kù)里面的用戶(hù)表了。
D.驗(yàn)證數(shù)據(jù)庫(kù)一致性(可省略)
dbcc checkdb(‘test’)
一般執(zhí)行結(jié)果如下:
CHECKDB 發(fā)現(xiàn)了個(gè)分配錯(cuò)誤和個(gè)一致性錯(cuò)誤(在數(shù)據(jù)庫(kù) ‘test’ 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
E.設(shè)置數(shù)據(jù)庫(kù)為正常狀態(tài)
sp_dboption ‘test’,’dbo use only’,’false’
如果沒(méi)有出錯(cuò),那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫(kù)啦。
F.最后一步,我們要將步驟E中設(shè)置的“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù)。因?yàn)槠綍r(shí)直接操作系統(tǒng)表是一件比較危險(xiǎn)的事情。當(dāng)然,我們可以在SQL Server Enterprise Manager里面恢復(fù),也可以使用如下語(yǔ)句完成
sp_configure ‘a(chǎn)llow updates’,0
go
reconfigure with override
go
上面的語(yǔ)句操作步驟有點(diǎn)問(wèn)題:
應(yīng)該如下:
A.我們使用默認(rèn)方式建立一個(gè)供恢復(fù)使用的數(shù)據(jù)庫(kù)(如test)??梢栽赟QL Server Enterprise Manager里面建立。
B.停掉數(shù)據(jù)庫(kù)服務(wù)器。
C.將剛才生成的數(shù)據(jù)庫(kù)的日志文件test_log.ldf刪除,用要恢復(fù)的數(shù)據(jù)庫(kù)mdf文件覆蓋剛才生成的數(shù)據(jù)庫(kù)數(shù)據(jù)文件test_data.mdf。
D.啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。此時(shí)會(huì)看到數(shù)據(jù)庫(kù)test的狀態(tài)為“置疑”。這時(shí)候不能對(duì)此數(shù)據(jù)庫(kù)進(jìn)行任何操作。
E.設(shè)置數(shù)據(jù)庫(kù)允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫(kù)服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁(yè)面中將“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)選中。也可以使用如下語(yǔ)句來(lái)實(shí)現(xiàn)。
use master
go
sp_configure ‘a(chǎn)llow updates’,1
go
reconfigure with override
go
F.設(shè)置test為緊急修復(fù)模式
update sysdatabases set status=where dbid=DB_ID(‘test’)
此時(shí)可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫(kù)處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫(kù)里面的表,但是僅僅有系統(tǒng)表
G.下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫(kù)日志文件
dbcc rebuild_log(‘test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’)
執(zhí)行過(guò)程中,如果遇到下列提示信息:
服務(wù)器: 消息,級(jí)別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫(kù)以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
說(shuō)明您的其他程序正在使用該數(shù)據(jù)庫(kù),如果剛才您在F步驟中使用SQL Server Enterprise Manager打開(kāi)了test庫(kù)的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。
正確執(zhí)行完成的提示應(yīng)該類(lèi)似于:
警告: 數(shù)據(jù)庫(kù) ‘test’ 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC CHECKDB 以驗(yàn)證物理一致性。將必須重置數(shù)據(jù)庫(kù)選項(xiàng),并且可能需要?jiǎng)h除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
此時(shí)打開(kāi)在SQL Server Enterprise Manager里面會(huì)看到數(shù)據(jù)庫(kù)的狀態(tài)為“只供DBO使用”。此時(shí)可以訪問(wèn)數(shù)據(jù)庫(kù)里面的用戶(hù)表了。
H.驗(yàn)證數(shù)據(jù)庫(kù)一致性(可省略)
dbcc checkdb(‘test’)
一般執(zhí)行結(jié)果如下:
CHECKDB 發(fā)現(xiàn)了個(gè)分配錯(cuò)誤和個(gè)一致性錯(cuò)誤(在數(shù)據(jù)庫(kù) ‘test’ 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
I.設(shè)置數(shù)據(jù)庫(kù)為正常狀態(tài)
sp_dboption ‘test’,’dbo use only’,’false’
如果沒(méi)有出錯(cuò),那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫(kù)啦。
J.最后一步,我們要將步驟E中設(shè)置的“允許對(duì)系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù)。因?yàn)槠綍r(shí)直接操作系統(tǒng)表是一件比較危險(xiǎn)的事情。當(dāng)然,我們可以在SQL Server Enterprise Manager里面恢復(fù),也可以使用如下語(yǔ)句完成
sp_configure ‘a(chǎn)llow updates’,0
go
reconfigure with override
go
數(shù)據(jù)庫(kù)出問(wèn)題、客戶(hù)告急、修復(fù)中、、沒(méi)修好、數(shù)據(jù)要完蛋、、本想放棄、、不甘心、繼續(xù)、、鼓搗半天終于搞定、、 過(guò)程如下:
sql2023 表?yè)p壞時(shí)提示 select * from A 時(shí)提示 連接中斷、、、、
1:鬧升首先將數(shù)據(jù)庫(kù)設(shè)置成單用戶(hù)模式??梢栽谄髽I(yè)管理器局租里選擇數(shù)據(jù)庫(kù)然后右鍵-屬性-選項(xiàng)里改為單用戶(hù)模式。or執(zhí)行語(yǔ)句:
sp_dboption ‘?dāng)?shù)據(jù)庫(kù)名’,’single user’,’true’
go
2:執(zhí)行DBCC CHECKDB(數(shù)據(jù)庫(kù)名)
3: 有錯(cuò)誤提示繼續(xù)執(zhí)行:DBCC CHECKTABLE(‘表名’,,REPAIR_ALLOW_DATA_LOSS) 如果出錯(cuò)的表多 那就執(zhí)行這句:
select ‘DBCC CHECKTABLE(‘+””+name+””+’,REPAIR_ALLOW_DATA_LOSS)’+” from sysobjects where xtype=’u’
然后copy出來(lái) 在桐彎兆查詢(xún)分析器里執(zhí)行即可。
這樣修復(fù)數(shù)據(jù)庫(kù)表容易丟失數(shù)據(jù) 不過(guò)沒(méi)辦法還沒(méi)想到更好的方法。、、、
1.新建一空數(shù)據(jù)庫(kù),點(diǎn)空數(shù)據(jù)庫(kù)所有任務(wù),選擇導(dǎo)入數(shù)殲運(yùn)答據(jù),數(shù)據(jù)源選擇問(wèn)題庫(kù),目標(biāo)空數(shù)據(jù)庫(kù)!注意氏慧要選擇”在SQL之間復(fù)制對(duì)象或數(shù)據(jù)”.選擇全部的表復(fù)制過(guò)去即可
2.如果還是不行,那只有用悄卜dbcc checkdb(‘dbname’,repair_allow_data_loss)修復(fù)受損庫(kù).但是可能會(huì)丟失數(shù)據(jù)!
這和我遇到的問(wèn)題是一樣的,
可以使用森巖下面的方法進(jìn)行修復(fù)(需要將數(shù)據(jù)庫(kù)名修改成你的數(shù)據(jù)庫(kù)名):
–MyDB為修復(fù)的數(shù)據(jù)名
USE MASTER
GO
SP_CONFIGURE ‘ALLOW UPDATES’,1 RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE MyDB SET EMERGENCY
GO
sp_dboption ‘MyDB’, ‘single user’, ‘true’
GO
DBCC CHECKDB(‘MyDB’,’REPAIR_ALLOW_DATA_LOSS’)
GO
ALTER DATABASE MyDB SET ONLINE
GO
sp_configure ‘哪春埋allow updates’, 0 reconfigure with override
GO
sp_dboption ‘MyDB’, ‘single user’, ‘false’
GO
如果李螞還有問(wèn)題,可以繼續(xù)進(jìn)行交流,
呵呵,希望能有幫助,^_^
關(guān)于sql數(shù)據(jù)庫(kù) 一致性錯(cuò)誤修復(fù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專(zhuān)業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣等一站式服務(wù)。
文章標(biāo)題:如何修復(fù)SQL數(shù)據(jù)庫(kù)的一致性錯(cuò)誤?(sql數(shù)據(jù)庫(kù)一致性錯(cuò)誤修復(fù))
本文來(lái)源:http://fisionsoft.com.cn/article/coideig.html


咨詢(xún)
建站咨詢(xún)
