ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤
異常關(guān)機(jī)后,金蝶帳套突然無法訪問,發(fā)現(xiàn)數(shù)據(jù)庫置疑,使用此方案解決:
注意:在做任何修復(fù)操作之前,請務(wù)必備份.mdf/.ndf以及.ldf文件。
一般情況下這樣可以解決:
1、將數(shù)據(jù)庫設(shè)置為應(yīng)急狀態(tài)
ALTER DATABASE AIS20150723104254 SET emergency
2、將數(shù)據(jù)庫設(shè)置為單用戶模式
ALTER DATABASE AIS20150723104254 SET SINGLE_USER
3、對數(shù)據(jù)庫進(jìn)行檢查修復(fù)
DBCC CheckDB (AIS20150723104254, REPAIR_ALLOW_DATA_LOSS)
REPAIR_ALLOW_DATA_LOSS代表,若此錯誤不能修復(fù)時,系統(tǒng)將直接刪除相關(guān)數(shù)據(jù)。
DBCC ?checkdb (AIS20150723104254, REPAIR_REBUILD)
嘗試直接修復(fù)數(shù)據(jù)庫錯誤
使用上面兩個語句進(jìn)行數(shù)據(jù)庫檢查修復(fù),如果返回結(jié)果中沒有了紅色的提示文字,說明修復(fù)成功
此數(shù)據(jù)庫執(zhí)行CHECKDB的過程中發(fā)現(xiàn)一些表的索引被破壞,于是針對具體的表進(jìn)行重建索引的操作:
DBCC DBREINDEX(表名)
完成后可以運(yùn)行dbcc checkdb(db_name)檢查數(shù)據(jù)庫的完整性.
4、最后,取消單用戶模式即可。
exec sp_dboption AIS20150723104254, N'single', N'false'
ALTER DATABASE AIS20151130094910 SET MULTI_USER
日志文件損壞或丟失時,可以嘗試此方法:
方法一:
先停止數(shù)據(jù)庫服務(wù),備份數(shù)據(jù)文件(MDF/LDF):
A. 我們使用默認(rèn)方式建立一個供恢復(fù)使用的數(shù)據(jù)庫(如AIS20131106110002)。可以在SSQL Server Management Studio里面建立。
B. 停掉數(shù)據(jù)庫服務(wù)器。
C. 將剛才生成的數(shù)據(jù)庫的日志文件AIS20131106110002_log.ldf刪除,用要恢復(fù)的數(shù)據(jù)庫mdf文件覆蓋剛才生成的數(shù)據(jù)庫數(shù)據(jù)文件AIS20131106110002_data.mdf。
D. 啟動數(shù)據(jù)庫服務(wù)器。此時會看到數(shù)據(jù)庫AIS20131106110002的狀態(tài)為“置疑”。這時候不能對此數(shù)據(jù)庫進(jìn)行任何操作。
E. 設(shè)置數(shù)據(jù)庫允許直接操作系統(tǒng)表。此操作可以在SQL Server Management Studio里面選擇數(shù)據(jù)庫服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁面中將“允許對系統(tǒng)目錄直接修改”一項(xiàng)選中。也可以使用如
下語句來實(shí)現(xiàn)。
use ? master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F. 設(shè)置AIS20131106110002為緊急修復(fù)模式
alter database AIS20131106110002 set emergency
此時可以在SQL Server Management Studio里面看到該數(shù)據(jù)庫處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫里面的表,但是僅僅有系統(tǒng)表
G. 下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫日志文件
dbcc ? rebuild_log( 'AIS20131106110002 ', 'D:\MSSQL2008\Data\AIS20131106110002_log.ldf ')
SQL 2012版本以后版本時:
alter database AIS20131106110002 Rebuild Log on (name=AIS20131106110002_log,filename='D:\MSSQL2008\AIS20131106110002_log.ldf')
執(zhí)行過程中,如果遇到下列提示信息:
服務(wù)器: ? 消息 ? 5030,級別 ? 16,狀態(tài) ? 1,行 ? 1
未能排它地鎖定數(shù)據(jù)庫以執(zhí)行該操作。
DBCC ? 執(zhí)行完畢。如果 ? DBCC ? 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
打開單用戶模式即可
ALTER DATABASE AIS20131106110002 SET SINGLE_USER
或
alter database AIS20131106110002 set SINGLE_USER with ROLLBACK IMMEDIATE
警告: ? 數(shù)據(jù)庫 ? 'AIS20131106110002 ' ? 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 ? DBCC ? CHECKDB ? 以驗(yàn)證物理一致性。
DBCC ? 執(zhí)行完畢。如果 ? DBCC ? 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
此時可以訪問數(shù)據(jù)庫里面的用戶表了。
H. 驗(yàn)證數(shù)據(jù)庫一致性(可省略)
dbcc ? checkdb( 'AIS20131106110002 ')
一般執(zhí)行結(jié)果如下:
CHECKDB ? 發(fā)現(xiàn)了 ? 0 ? 個分配錯誤和 ? 0 ? 個一致性錯誤(在數(shù)據(jù)庫 ? 'AIS20131106110002 ' ? 中)。
DBCC ? 執(zhí)行完畢。如果 ? DBCC ? 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
如果發(fā)現(xiàn)出問題,可使用下面方法嘗試修復(fù):
一、
dbcc checkdb(AIS20131106110002,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(AIS20131106110002,REPAIR_REBUILD)
二、
使用Repair_Allow_Data_Loss選項(xiàng)修復(fù)數(shù)據(jù)庫。
優(yōu)點(diǎn): 可能可以恢復(fù)盡量多的數(shù)據(jù)
缺點(diǎn):
a) ?不一定能夠?qū)⑷垮e誤修復(fù),還有可能越修越多。同時,需要大量時間,需要經(jīng)過多次執(zhí)行修復(fù)命令.十幾次,甚至數(shù)十次.修復(fù)時間不能預(yù)估.
b) ?就算我們將所有錯誤修復(fù),我們也不能保證數(shù)據(jù)在應(yīng)用程序邏輯這一層次上的數(shù)據(jù)正確性,您需要找您的應(yīng)用程序提供商來檢查數(shù)據(jù)在程序邏輯層次是否正確。
dbcc checkdb (‘’, REPAIR_ALLOW_DATA_LOSS) go
—此命令可能需要運(yùn)行多次,才能完全修復(fù)。
三、
通過BCP,DTS,select into等方式將好的表,或者表中好的數(shù)據(jù)導(dǎo)出來。建議使用BCP的方法,這樣可以最大限度的回復(fù)數(shù)據(jù).BCP會停在出錯的紀(jì)錄上,但是前面的數(shù)據(jù)就能成功導(dǎo)出.使用DTS或Select into的話, 我們很難判斷最大限度能導(dǎo)出的記錄數(shù).
優(yōu)點(diǎn):導(dǎo)出來的數(shù)據(jù)保證在應(yīng)用程序邏輯這一層次的正確性
缺點(diǎn):不會修復(fù)數(shù)據(jù)庫中存在的錯誤,丟失的數(shù)據(jù)量會比較大,取決于第7步的運(yùn)行結(jié)果。
二和三摘自:
I. 設(shè)置數(shù)據(jù)庫為正常狀態(tài)
exec sp_dboption AIS20131106110002, N'single', N'false'
ALTER DATABASE AIS20131106110002 SET MULTI_USER
如果沒有出錯,那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫啦。
J. 最后一步,我們要將步驟E中設(shè)置的“允許對系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù)。因?yàn)槠綍r直接操作系統(tǒng)表是一件比較危險的事情。當(dāng)然,我們可以在SQL Server Management Studio里面恢復(fù),也可以使用如下語句完
成
use master
go
sp_configure 'allow updates',0
go
reconfigure with override
go
注意,SQL2012后,系統(tǒng)無sp_dboption這個存儲過程,可以用附件文本的方式,在MASTER中創(chuàng)建此存儲過程即可。
方法二:
1、把問題數(shù)據(jù)庫文件備份到其它目錄
停掉SQLSERVER服務(wù),把服務(wù)器上出問題的數(shù)據(jù)庫, 假設(shè)名稱為 ErrorDB的數(shù)據(jù)庫文件及日志文件備份復(fù)制到其他目錄,然后直接將其刪除,把其數(shù)據(jù)庫文件及日志文件也刪除
2、新建同名數(shù)據(jù)庫
啟動SQLSERVER服務(wù),新建同名數(shù)據(jù)庫ErrorDB,文件目錄和文件名和原來一致
3、用備份的數(shù)據(jù)庫文件替換新的數(shù)據(jù)庫文件
停掉SQLSERVER服務(wù),把備份的數(shù)據(jù)庫文件替換新的數(shù)據(jù)庫文件(只替換數(shù)據(jù)庫文件,不替換日志文件)
啟動SQLSERVER服務(wù),打開數(shù)據(jù)庫,這時數(shù)據(jù)庫應(yīng)該是不能訪問的
-------------------設(shè)置應(yīng)急模式、單用戶模式、檢查修復(fù)數(shù)據(jù),取消單用戶模式----------------------
4、將數(shù)據(jù)庫設(shè)置為應(yīng)急狀態(tài)
alter database ErrorDB set emergency
執(zhí)行后,為了保險起見,重新停止、開啟的SQLSERVER服務(wù)
再打開數(shù)據(jù)庫,已經(jīng)可以看到里面的內(nèi)容了,如表,視圖,存儲過程等
數(shù)據(jù)庫名稱后有緊急標(biāo)志,能看到數(shù)據(jù)庫結(jié)構(gòu),但無法進(jìn)行備份等操作
5、將數(shù)據(jù)庫設(shè)置為單用戶模式
ALTER DATABASE ErrorDB SET SINGLE_USER
6、對數(shù)據(jù)庫進(jìn)行檢查修復(fù)
dbcc checkdb(ErrorDB,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(ErrorDB,REPAIR_REBUILD)
操作后,仍然停止啟動SQLSERVER服務(wù)(不確定是否需要,我只是為了想無干擾查看執(zhí)行后的數(shù)據(jù)庫狀況)
7、取消單用戶模式即可
exec sp_dboption ErrorDB, N'single', N'false'
ALTER DATABASE ErrorDB SET MULTI_USER
總結(jié)
以上是生活随笔為你收集整理的ais文件还原到mysql_SQLSERVER 数据库可疑的解决步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bat执行exe程序_dos命令star
- 下一篇: mysql工作中遇到的问题_MySQL工