標題:[MySQL]MSSQL數(shù)據(jù)庫823錯誤解決方法

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作和遂寧托管服務(wù)器的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗和案例。
出處:
時間:Sat, 12 Apr 2008 10:12:27 +0000
作者:ah011
地址:
內(nèi)容:
1.日志文件被破壞823錯誤
----------------------
日志文件被破壞的數(shù)據(jù)庫文件,通過如下方法附加上去后,數(shù)據(jù)庫里所有的表都不能訪問,提示錯誤832,請問要如何解決??
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
update sysdatabases set status=-32768 where dbid=DB_ID('linyi_pljy')
go
dbcc rebuild_log('linyi_pljy','e:\Program Files\Microsoft SQL Server\MSSQL\Data\linyi_pljy_log.ldf')
go
sp_dboption 'linyi_pljy','dbo use only','false'
go
sp_configure 'allow updates',0
go
reconfigure with override
go
---------------------
2.附加數(shù)據(jù)庫文件時,提示823錯誤
----------------------
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE /* 打開修改系統(tǒng)表的開關(guān) */
update sysdatabases set status = 32768 where name = '數(shù)據(jù)庫名'
DBCC REBUILD_LOG ('數(shù)據(jù)庫名', 'E: dzzdatabase dzz1204_Log.LDF' )
update sysdatabases set status = 0 where name = '數(shù)據(jù)庫名'
restore database 數(shù)據(jù)庫名 WITH RECOVERY
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE /* 關(guān)閉打開修改系統(tǒng)表的開關(guān) */
3因為停電等原因造成MSSQL數(shù)據(jù)庫,提示823錯誤
----------------------
USE MASTER
GO
sp_dboption 'databaseName', 'single user', 'true'
Go
DBCC CHECKDB('databaseName', REPAIR_REBUILD)
Go
USE databaseName
go
exec sp_msforeachtable 'DBCC CHECKTABLE('''?''',REPAIR_REBUILD)'
go
sp_dboption 'databaseName', 'single user', 'false'
Go
如果還不行,可以采用允許丟失數(shù)據(jù)的方式修復(fù),如下:
USE MASTER
GO
sp_dboption 'databaseName', 'single user', 'true'
Go
DBCC CHECKDB('databaseName', REPAIR_ALLOW_DATA_LOSS)
Go
USE databaseName
go
exec sp_msforeachtable 'DBCC CHECKTABLE('''?''',REPAIR_REBUILD)'
go
sp_dboption 'databaseName', 'single user', 'false'
Go
4.數(shù)據(jù)庫恢復(fù)資料
----------------------
SQL Server數(shù)據(jù)庫備份有兩種方式,一種是使用BACKUP DATABASE將數(shù)據(jù)庫文件備份出去,另外一種就是直接拷貝數(shù)據(jù)庫文件mdf和日志文件ldf的方式。下面將主要討論一下后者的備份與恢復(fù)。本文假定您能熟練使用SQL Server Enterprise Manager(SQL Server企業(yè)管理器)和SQL Server Quwey Analyser(SQL Server查詢分析器)
1、正常的備份、恢復(fù)方式
正常方式下,我們要備份一個數(shù)據(jù)庫,首先要先將該數(shù)據(jù)庫從運行的數(shù)據(jù)服務(wù)器中斷開,或者停掉整個數(shù)據(jù)庫服務(wù)器,然后復(fù)制文件。
卸下數(shù)據(jù)庫的命令:Sp_detach_db 數(shù)據(jù)庫名
連接數(shù)據(jù)庫的命令:Sp_attach_db或者sp_attach_single_file_db
s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]
sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′
使用此方法可以正確恢復(fù)SQL Sever7.0和SQL Server 2000的數(shù)據(jù)庫文件,要點是備份的時候一定要將mdf和ldf兩個文件都備份下來,mdf文件是數(shù)據(jù)庫數(shù)據(jù)文件,ldf是數(shù)據(jù)庫日志文件。
例子:
假設(shè)數(shù)據(jù)庫為test,其數(shù)據(jù)文件為test_data.mdf,日志文件為test_log.ldf。下面我們討論一下如何備份、恢復(fù)該數(shù)據(jù)庫。
卸下數(shù)據(jù)庫:sp_detach_db 'test'
連接數(shù)據(jù)庫:sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf'
sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'
2、只有mdf文件的恢復(fù)技術(shù)
由于種種原因,我們?nèi)绻敃r僅僅備份了mdf文件,那么恢復(fù)起來就是一件很麻煩的事情了。
如果您的mdf文件是當前數(shù)據(jù)庫產(chǎn)生的,那么很僥幸,也許你使用sp_attach_db或者sp_attach_single_file_db可以恢復(fù)數(shù)據(jù)庫,但是會出現(xiàn)類似下面的提示信息
設(shè)備激活錯誤。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有誤。
已創(chuàng)建名為 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。
但是,如果您的數(shù)據(jù)庫文件是從其他計算機上復(fù)制過來的,那么很不幸,也許上述辦法就行不通了。你也許會得到類似下面的錯誤信息
服務(wù)器: 消息 1813,級別 16,狀態(tài) 2,行 1
未能打開新數(shù)據(jù)庫 'test'。CREATE DATABASE 將終止。
設(shè)備激活錯誤。物理文件名 'd:\test_log.LDF' 可能有誤。
怎么辦呢?別著急,下面我們舉例說明恢復(fù)辦法。
A.我們使用默認方式建立一個供恢復(fù)使用的數(shù)據(jù)庫(如test)。可以在SQL Server Enterprise Manager里面建立。
B.停掉數(shù)據(jù)庫服務(wù)器。
C.將剛才生成的數(shù)據(jù)庫的日志文件test_log.ldf刪除,用要恢復(fù)的數(shù)據(jù)庫mdf文件覆蓋剛才生成的數(shù)據(jù)庫數(shù)據(jù)文件test_data.mdf。
D.啟動數(shù)據(jù)庫服務(wù)器。此時會看到數(shù)據(jù)庫test的狀態(tài)為“置疑”。這時候不能對此數(shù)據(jù)庫進行任何操作。
E.設(shè)置數(shù)據(jù)庫允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁面中將“允許對系統(tǒng)目錄直接修改”一項選中。也可以使用如下語句來實現(xiàn)。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.設(shè)置test為緊急修復(fù)模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此時可以在SQL Server Enterprise Manager里面看到該數(shù)據(jù)庫處于“只讀\置疑\脫機\緊急模式”可以看到數(shù)據(jù)庫里面的表,但是僅僅有系統(tǒng)表
G.下面執(zhí)行真正的恢復(fù)操作,重建數(shù)據(jù)庫日志文件
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
執(zhí)行過程中,如果遇到下列提示信息:
服務(wù)器: 消息 5030,級別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。[brown]
說明您的其他程序正在使用該數(shù)據(jù)庫,如果剛才您在F步驟中使用SQL Server Enterprise Manager打開了test庫的系統(tǒng)表,那么退出SQL Server Enterprise Manager就可以了。
正確執(zhí)行完成的提示應(yīng)該類似于:
[brown]警告: 數(shù)據(jù)庫 'test' 的日志已重建。已失去事務(wù)的一致性。應(yīng)運行 DBCC CHECKDB 以驗證物理一致性。將必須重置數(shù)據(jù)庫選項,并且可能需要刪除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
此時打開在SQL Server Enterprise Manager里面會看到數(shù)據(jù)庫的狀態(tài)為“只供DBO使用”。此時可以訪問數(shù)據(jù)庫里面的用戶表了。
H.驗證數(shù)據(jù)庫一致性(可省略)
dbcc checkdb('test')
一般執(zhí)行結(jié)果如下:
CHECKDB 發(fā)現(xiàn)了 0 個分配錯誤和 0 個一致性錯誤(在數(shù)據(jù)庫 'test' 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
I.設(shè)置數(shù)據(jù)庫為正常狀態(tài)
sp_dboption 'test','dbo use only','false'
如果沒有出錯,那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫啦。
J.最后一步,我們要將步驟E中設(shè)置的“允許對系統(tǒng)目錄直接修改”一項恢復(fù)。因為平時直接操作系統(tǒng)表是一件比較危險的事情。當然,我們可以在SQL Server Enterprise Manager里面恢復(fù),也可以使用如下語句完成
sp_configure 'allow updates',0
go
reconfigure with override
go
sqlserver附加數(shù)據(jù)庫錯誤823的解決方案2008-10-13 15:06sqlserver附加數(shù)據(jù)庫錯誤823的解決方案一、SQL-Server附加數(shù)據(jù)庫時失敗。
1、異常情況:服務(wù)器在正常運行的情況下突然斷電,導(dǎo)致數(shù)據(jù)庫文件損壞,具體表現(xiàn)是:數(shù)據(jù)庫名后面有“(置疑)”字樣。
2、異常分析:關(guān)于823錯誤的 SQL-SERVER 中的幫助:
================================
錯誤 823
嚴重級別 24
消息正文
在文件 "%4!" 的偏移量 %3! 處的 %2! 過程中,檢測到 I/O 錯誤 %1!。
解釋
Microsoft SQL Server 在對某設(shè)備進行讀或?qū)懻埱髸r遇到 I/O 錯誤。該錯誤通常表明磁盤問題。但是,錯誤日志中在錯誤 823 之前記錄的其它核心消息應(yīng)指出涉及了哪個設(shè)備。
3、解決辦法:
在SQL-Server企業(yè)管理器中,新建同名數(shù)據(jù)庫(這里假設(shè)為Test)后,停止數(shù)據(jù)庫,把損壞的數(shù)據(jù)庫文件Data.mdf和Test_log.LDF覆蓋剛才新建數(shù)據(jù)庫目錄下的Data.mdf和Test_log.LDF,同時刪除Test_log.LDF文件;啟動數(shù)據(jù)庫服務(wù),發(fā)現(xiàn)數(shù)據(jù)庫名Test后面有“置疑”字樣。不要緊,打開SQL自帶查詢分析器,分別執(zhí)行如下SQL語句:
第一、
exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE /* 打開修改系統(tǒng)表的開關(guān) */
第二、
update sysdatabases set status=32768 where name='數(shù)據(jù)庫名' /* 設(shè)置數(shù)據(jù)庫狀態(tài) */
第三、
DBCC REBUILD_LOG ('數(shù)據(jù)庫名','D:\database\Test_Log.LDF') /* 重建LDF文件 */
第四、
update sysdatabases set status=0 where name='數(shù)據(jù)庫名' /* 重置數(shù)據(jù)庫狀態(tài) */
第五、
restore database 數(shù)據(jù)庫名 WITH RECOVERY /* 恢復(fù)數(shù)據(jù)庫 */
第六、
exec sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE /* 關(guān)閉打開修改系統(tǒng)表的開關(guān) */
按照此方法操作,應(yīng)該能修復(fù)數(shù)據(jù)庫正常訪問了。如果問題依然存在,最笨的一個方法就是新建另一個數(shù)據(jù)庫,把原數(shù)據(jù)庫(Test)各個表的數(shù)據(jù)導(dǎo)出到新建數(shù)據(jù)庫表中。
============================================================
補充說明:用上面的六步把數(shù)據(jù)庫置疑的問題解決了,但是數(shù)據(jù)庫表里還有損壞的表(inf_gdscode),把壞表導(dǎo)出的時候也不成功。最后在查詢分析器里運行:
USE nmgbt_hcxuexipos (數(shù)據(jù)庫名)
GO
DBCC CHECKTABLE ('inf_gdscode',REPAIR_ALLOW_DATA_LOSS)
GO
如果庫文件和日志文件一塊附加都附加不上的話,按以下步驟操作:
1,在sqlserver中新建庫(新建沒有表的空庫,庫名為你附加失敗的庫名),記住數(shù)據(jù)庫文件存放地址(最好指定目錄)。
2,停止sqlserver服務(wù),在新建的庫文件目錄下將日志文件刪除(.ldf),然后將附加失敗的庫文件覆蓋進去。
3,啟動sqlserver服務(wù),但不停止一切連接該庫的服務(wù)。
然后執(zhí)行語句:
use master
go
alter database db_name set emergency
go
4、置為單用戶模式,并重建日志:
alter database db_name set single_user with rollback immediate
go
alter database db_name Rebuild Log on (name=log_name,filename='C:\log_name.ldf')
go
alter database dbname set multi_user
go
其中日志文件目錄及文件名按實際情況填寫。
5、dbcc checkdb嘗試修復(fù)庫。
Use master
go
sp_dboption 數(shù)據(jù)庫名, single, true
dbcc checkdb(dbname,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(dbname,REPAIR_REBUILD)
go
sp_dboption 數(shù)據(jù)庫名, single, false
go
如果修復(fù)過程中有錯誤則庫損壞嚴重,可能修復(fù)失敗。
網(wǎng)頁標題:sqlserver823,sql42883
網(wǎng)頁路徑:http://chinadenli.net/article23/dsisccs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、App開發(fā)、軟件開發(fā)、定制網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)