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