mysql置疑原因_SQL SERVER2000数据库置疑处理详解
一、數(shù)據(jù)庫置疑產(chǎn)生的原因
1、SQL Server所在分區(qū)空間是否足夠,數(shù)據(jù)庫文件大小是否達(dá)到最大文件限制,FAT32事務(wù)格式只支持4G以內(nèi)的文件?
2、數(shù)據(jù)庫文件損壞或被非正常刪除時會出現(xiàn)這種情況;
3、病毒防火墻的掃面也可能會引起數(shù)據(jù)庫置疑;
4、當(dāng)SQL
Server啟動時,將會嘗試獲得對數(shù)據(jù)庫文件的排他訪問權(quán),如果此時該文件被其他程序占用,或者遺失,數(shù)據(jù)庫將會被標(biāo)記為置疑;
5、電腦非法關(guān)機(jī)也可能會造成數(shù)據(jù)庫置疑;
6、電腦磁盤有壞道可能會造成數(shù)據(jù)庫置疑。
二、數(shù)據(jù)庫置疑的預(yù)防
1、數(shù)據(jù)庫文件存放的磁盤或磁帶,空間是否夠大,經(jīng)常檢查盤符的空間;
2、數(shù)據(jù)庫文件存放的磁盤格式設(shè)置為NTFS格式;
3、進(jìn)行病毒清除時,盡量將SQL Server服務(wù)停掉,再進(jìn)行殺毒操作,不過一般不會影響數(shù)據(jù)庫;
4、盡量減少非正常關(guān)機(jī);
5、建議購買后備電源;
6、實(shí)施軟件之后一定要做好自動備份處理。
7、建議每隔一定時間進(jìn)行一次數(shù)據(jù)庫全備份。
三、數(shù)據(jù)庫置疑測試環(huán)境搭建
1、分離數(shù)據(jù)庫,備份數(shù)據(jù)庫數(shù)據(jù)文件和日志文件
在SQL
Server2000企業(yè)管理器下,選中數(shù)據(jù)庫mytest庫,右鍵菜單中—所有任務(wù)—分離數(shù)據(jù)庫,對mytest數(shù)據(jù)庫實(shí)現(xiàn)分離操作。然后在C:\Program
Files\Microsoft SQL
Server\MSSQL\Data目錄下將mytest_Data.MDF和mytest_Log.LDF兩個文件做備份處理;如果mytest_Log.LDF已損壞,則只備份mytest_Data.MDF處理。
2、新建同名數(shù)據(jù)庫
在企業(yè)管理器中創(chuàng)建同名數(shù)據(jù)庫mytest,數(shù)據(jù)庫數(shù)據(jù)文件名和日志文件名需和原庫一致。
3、停止SQL Server服務(wù)
4、替換數(shù)據(jù)文件
只將備份的mytest_Data.MDF替換掉剛創(chuàng)建的mytest數(shù)據(jù)庫的mytest_Data.MDF文件
5、啟動SQL
Server服務(wù),此時由于mytest_Log.LDF日志文件出現(xiàn)問題,導(dǎo)致mytest數(shù)據(jù)庫處于置疑狀態(tài),在置疑狀態(tài)下,無法對數(shù)據(jù)庫做任何操作,如下圖所示:
四、數(shù)據(jù)庫置疑恢復(fù)
4.1、只備份了數(shù)據(jù)文件,無日志文件的情況
1、設(shè)置數(shù)據(jù)庫允許直接操作系統(tǒng)表。
此操作可以在企業(yè)管理器(SQL Server Enterprise
Manager)里面選擇數(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
2、設(shè)置mytest數(shù)據(jù)庫為緊急修復(fù)模式
在查詢分析器中使用如下語句:
-- -32768:將模式改為只讀/脫機(jī)/緊急模式
update sysdatabases set status=-32768 where
dbid=DB_ID('mytest')
此時刷新數(shù)據(jù)庫,可以在企業(yè)管理器(SQL Server Enterprise
Manager)里面看到該數(shù)據(jù)庫處于“只讀\置疑\脫機(jī)\緊急模式”可以看到數(shù)據(jù)庫里面的表,但是僅僅有系統(tǒng)表。
3、重建數(shù)據(jù)庫日志文件
下面執(zhí)行真正的恢復(fù)操作,在查詢分析器中用dbcc
rebuild_log命令來重建數(shù)據(jù)庫日志文件(重建路徑根據(jù)你實(shí)際的數(shù)據(jù)庫路徑來)
dbcc rebuild_log('mytest','C:\Program
Files\Microsoft SQL Server\MSSQL\Data\mytest_Log.LDF')
執(zhí)行過程中,如出現(xiàn)如下錯誤:
服務(wù)器: 消息 5030,級別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
原因:說明其他程序正在使用該數(shù)據(jù)庫,如果之前在第3步中使用企業(yè)管理器打開了mytest庫的系統(tǒng)表,那么退出企業(yè)管理器就可以了。
該命令正常執(zhí)行的結(jié)果提示如下:
警告: 數(shù)據(jù)庫 'mytest' 的日志已重建。已失去事務(wù)的一致性。應(yīng)運(yùn)行 DBCC
CHECKDB 以驗(yàn)證物理一致性。將必須重置數(shù)據(jù)庫選項(xiàng),并且可能需要刪除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
此時,打開企業(yè)管理器,會看到該數(shù)據(jù)庫的狀態(tài)為“只供DBO使用”,這表示可以訪問數(shù)據(jù)庫里面的用戶表了。
4、驗(yàn)證數(shù)據(jù)庫一致性(數(shù)據(jù)庫較大時,會耗費(fèi)一定的時間)
在查詢分析器中執(zhí)行如下命令:
dbcc checkdb('mytest')
一般執(zhí)行結(jié)果:
'sysobjects' 的 DBCC 結(jié)果。
對象 'sysobjects' 有 27 行,這些行位于 1 頁中。
'sysindexes' 的 DBCC 結(jié)果。
對象 'sysindexes' 有 41 行,這些行位于 2 頁中。
'syscolumns' 的 DBCC 結(jié)果。
對象 'syscolumns' 有 271 行,這些行位于 6 頁中。
'systypes' 的 DBCC 結(jié)果。
對象 'systypes' 有 26 行,這些行位于 1 頁中。
'syscomments' 的 DBCC 結(jié)果。
對象 'syscomments' 有 95 行,這些行位于 7 頁中。
...
CHECKDB 發(fā)現(xiàn)了 0 個分配錯誤和 0 個一致性錯誤(在數(shù)據(jù)庫 'mytest' 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
5、設(shè)置數(shù)據(jù)庫為正常狀態(tài)
在查詢分析器中執(zhí)行:
sp_dboption 'mytest','dbo use
only','false'
如果提示命令已成功完成,且沒有報錯,那么恭喜,現(xiàn)在就可以正常的使用恢復(fù)后的數(shù)據(jù)庫啦。
6、最后一步,需要將第1步中設(shè)置的“允許對系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù)。因?yàn)槠綍r直接操作系統(tǒng)表是一件比較危險的事情。當(dāng)然,我們可以在企業(yè)管理器里面直接修改恢復(fù),也可以在查詢分析器中使用如下語句完成:
use master
go
sp_configure 'allow updates',0
reconfigure with override
go
執(zhí)行結(jié)果一般如下:
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
已將配置選項(xiàng) 'allow updates' 從 1 改為 0。請運(yùn)行 RECONFIGURE 語句以安裝。
4.2、備份了數(shù)據(jù)文件,日志文件的情況
1、設(shè)置數(shù)據(jù)庫允許直接操作系統(tǒng)表。
此操作可以在企業(yè)管理器(SQL Server Enterprise
Manager)里面選擇數(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
運(yùn)行結(jié)果:
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
已將配置選項(xiàng) 'allow updates' 從 0 改為 1。請運(yùn)行 RECONFIGURE 語句以安裝。
2、設(shè)置mytest數(shù)據(jù)庫為緊急模式
在查詢分析器中使用如下語句:
-- 32768:將模式改為置疑\緊急模式
update sysdatabases set status=32768 where
dbid=DB_ID('mytest')
此時刷新數(shù)據(jù)庫,可以在企業(yè)管理器(SQL Server Enterprise
Manager)里面看到該數(shù)據(jù)庫處于“置疑\緊急模式”,但是什么都看不到。
3、設(shè)置數(shù)據(jù)庫為單用戶模式
下面執(zhí)行真正的恢復(fù)操作,使用如下命令設(shè)置數(shù)據(jù)庫為單用戶模式。
sp_dboption 'mytest','single
user',true
此時,打開企業(yè)管理器,會看到該數(shù)據(jù)庫的狀態(tài)由“置疑\緊急模式”變?yōu)椤熬o急模式”,仍然看不到任何表之類的文件。
4、驗(yàn)證數(shù)據(jù)庫一致性(數(shù)據(jù)庫較大時,會耗費(fèi)一定的時間)
在查詢分析器中執(zhí)行如下命令:
dbcc checkdb('mytest')
一般執(zhí)行結(jié)果:
'sysobjects' 的 DBCC 結(jié)果。
對象 'sysobjects' 有 27 行,這些行位于 1 頁中。
'sysindexes' 的 DBCC 結(jié)果。
對象 'sysindexes' 有 41 行,這些行位于 2 頁中。
'syscolumns' 的 DBCC 結(jié)果。
對象 'syscolumns' 有 271 行,這些行位于 6 頁中。
'systypes' 的 DBCC 結(jié)果。
對象 'systypes' 有 26 行,這些行位于 1 頁中。
'syscomments' 的 DBCC 結(jié)果。
對象 'syscomments' 有 95 行,這些行位于 7 頁中。
...
CHECKDB 發(fā)現(xiàn)了 0 個分配錯誤和 0 個一致性錯誤(在數(shù)據(jù)庫 'mytest' 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
5、修改mytest數(shù)據(jù)庫狀態(tài)
update sysdatabases set status=28 where
name='mytest'
此時,刷新下數(shù)據(jù)庫,可以看到mytest數(shù)據(jù)的狀態(tài)也恢復(fù)正常,且能看到相關(guān)數(shù)據(jù)文件了,
status參數(shù)說明:
1 = autoclose;使用 sp_dboption 設(shè)置。
4 = select into/bulkcopy;使用 sp_dboption 設(shè)置。
8 = trunc. log on chkpt;使用 sp_dboption 設(shè)置。--//設(shè)完檢查點(diǎn)后即清除日志
16 = torn page detection,使用 sp_dboption 設(shè)置。--//殘缺頁檢測
32 = loading。
64 = pre recovery。
128 = recovering。
256 = not recovered。
512 = offline;使用sp_dboption 設(shè)置。
1024 = read only;使用 sp_dboption 設(shè)置。
2048 = dbo use only;使用
sp_dboption 設(shè)置。
4096 = single user;使用 sp_dboption 設(shè)置。--//單用戶
32768 = emergency mode。--//緊急恢復(fù)模式
4194304 = autoshrink。
1073741824 = cleanly shutdown。
注意:這里的status=28(28=16+8+4)三種模式的組合。
6、最后一步,需要將第1步中設(shè)置的“允許對系統(tǒng)目錄直接修改”一項(xiàng)恢復(fù)。因?yàn)槠綍r直接操作系統(tǒng)表是一件比較危險的事情。當(dāng)然,我們可以在企業(yè)管理器里面直接修改恢復(fù),也可以在查詢分析器中使用如下語句完成:
use master
go
sp_configure 'allow updates',0
reconfigure with override
go
執(zhí)行結(jié)果一般如下:
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
已將配置選項(xiàng) 'allow updates' 從 1 改為 0。請運(yùn)行 RECONFIGURE 語句以安裝。
7、修改mytest數(shù)據(jù)庫為多用戶模式
sp_dboption 'mytest','single
user',false
根據(jù)以上操作步驟執(zhí)行相關(guān)操作后,如果不出什么意外,你的數(shù)據(jù)就成功恢復(fù)了。
總結(jié)
以上是生活随笔為你收集整理的mysql置疑原因_SQL SERVER2000数据库置疑处理详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何处理db2中文不显示
- 下一篇: PostgreSQL入门篇学习笔记(七)