SQL Server数据库被置疑的解决方案
在企業使用SQL Server時,有時會因為各種原因遇到SQL Server數據庫置疑的情況,那么是什么原因產生數據庫置疑呢?對于這樣的問題要如何預防?遇到后要如何解決呢?本文主要對這幾個疑問進行解答。
?
- 數據庫置疑產生的原因
- SQL Server所在分區空間是否夠?數據庫文件大小是否達到最大文件限制?
FAT32的格式只支持4G以內的文件
?
- 數據庫置疑的預防
- 數據庫存放的盤符,空間是否夠大,經常檢查盤符的空間
- 數據庫存放的盤符的格式設置為NTFS格式
- 進行病毒清除時,盡量把SQL服務停掉,再進行檢查
- 盡量減少非正常關機
- 建議客戶購買后備電源
- 給客戶實施軟件之后一定要做好自動備份
- 建議客戶每隔一定時間手動備份一次
?
- ?數據庫置疑的修復
- 點擊后臺登錄時,如果提示如下圖片就有可能表示數據庫置疑了
?
???
???
下面所有修復置疑的語法,在沒有特別提到時,默認數據庫都請選擇(Master)數據庫)
--修復數據庫置疑的語法
?
SP_configure 'allow update',1
go
RECONFIGURE WITH OVERRIDE
go
update sysdatabases
set status=-32768
where name='zmsoftpos_cs'--數據庫名稱
go
dbccrebuild_log('zmsoftpos_cs','D:\zmsoftpos_cs_log')--重新建立日志
Go
update sysdatabases
set status=26
where name='zmsoftpos_cs'
Go
Sp_configure 'allow update',0
Go
Reconfigure with override
GO
備注:其中所有的“zmsoftpos_cs”是置疑的數據庫名稱,請根據客戶實際的置疑數據庫進行更改名稱,其他的內容不變
?
如上圖所示,把顯示框拖到最下面,如果“CHECKDB發現了 0個分配錯誤和 0個一致性錯誤”即表示此數據庫已經好了,不用再修復了,客戶即可進入軟件進行操作了。
備注:(以下的語法就不用再執行了)
?
sp_dboption 'zmsoftpos_cs','single user','true'
備注:其中的數據庫名稱根據客戶使用的數據庫進行更改。此語法是把數據庫設置為“單用戶模式”
?
dbcc?checkdb(zmsoftpos_cs,REPAIR_REBUILD)
備注:數據庫名稱根據客戶使用的數據庫進行更改。此語法可以多次執行,也需要多次執行,每執行完一次拖到顯示框內的最后面如果“發現的是0個分配錯誤與O個一致性錯誤”就不用再修復了,只需執行下面語法即可
Sp_dboption 'zmsoftpos_cs','single User','False',
備注:下面的語法也不需執行了。
如果執行多次之后:“CHECKDB 發現了 N個分配錯誤和N個一致性錯誤”不會再次減少時,表示此語法修復不成功,需要進行下面的修復過程。
?
dbcc checkdb ('zmsoftpos_cs',REPAIR_allow_data_loss)
備注:此語法的執行與上面“ B ”點中執行的語法過程一樣,執行到此步驟百分之九十以上的數據庫都是可以修復的。如果執行到最后分配錯誤與一致性錯誤還不減少,那么執行下面的”D”操作
?
?exec sp_MSforeachtable'dbcc dbreindex(''?'')'
備注:執行此語法時,此時的“Master ”數據庫名稱一定要選擇修復的數據庫名稱,執行才會生效。執行完成之后,再使用“dbcc checkdb”語法再檢查一次,如果是“發現的是0個分配錯誤與O個一致性錯誤”表示修復成功,如果是:“CHECKDB發現了N個分配錯誤和N個一致性錯誤”
表示此數據庫壞得很歷害,使用此方法已不能修復成功了。必面使用其他方法了。最后不管修復成不成功都要使用下面的語法結尾:
Sp_dboption 'zmsoftpos_cs','single User', 'False'
備注:把之前的單用戶模塊解除掉
?
????? 例:以超市版本為例,超市版本的數據庫名稱為:zmsoftpos_cs
A、打開帳套管理新建一個相同的帳套,數據庫名稱就會是zmsoftpos_cs_01的帳套名稱,新建好之后,一定要使用后臺登錄進去一次,再退出后臺。
B、打開查詢分析器,選擇好帳套數據庫“zmsoftpos_cs”把下面的語法拷進入按F5執行:
select 'if EXISTS(SELECT * FROM zmsoftpos_cs_01..sysobjectsWHERE name = ' + char(39) + name + char(39) +?')'+char(13)+ 'delete from zmsoftpos_cs_01..'+name fromzmsoftpos_cs..sysobjects where type='U'and name not in('system_sheet_setup','system_mode_file','system_image') order by name
執行完成之后在下面的顯示框架內就會出現如下語法:
使用鼠標左擊一下圖片中紅色圓圈內的按鈕,就會選中下面的語法,然后再到紅色圓圈內的按鈕上點鼠標右鍵,點擊另存為,就會出現如下對話:
其中的保存類型一定要先選擇所有文件,然后再到文件名處,填寫好如圖片中輸入的名稱,然后點保存!
?
C、以上的語法另存為之后,再拷入以下的語法執行:
select 'bcp zmsoftpos_cs..'+name+' out f:\data\'+name+'.txt-c -S127.0.0.1 -Usa_ -P422426362227001' from zmsoftpos_cs..sysobjects wherextype='U'
and name not in('system_sheet_setup','system_mode_file','system_image') order by name
備注:以上的語法中有一個文件存放路徑,“f:\data\”此路徑根據實際的情況創建,然后更改過來,再執行。執行之后,按照上面的方法,點擊另存為如下圖:
其中的保存類型也要先選擇所有文件,然后再到文件名中填入如圖上的名稱:導出數據.bat文件名,然后再點保存,保存的路徑一定要是上面語法中設置中文件夾的路徑。
?
D、此時再選擇超市版本的zmsoftpos_cs_01的帳套名稱,然后在左上角的文件中打開找到之前保存的“刪除數據.sql”的文件,把其中的
”deletefrom”全部替換成“truncate table”,然后再按F5執行。
?
E、把D點的語法執行完成之后,還是選擇zmsoftpos_cs.01帳套再執行以下的語法:
select 'bcp zmsoftpos_cs_01..'+name+' in f:\data\'+name+'.txt-c -S127.0.0.1 -Usa_ -P422426362227001'
from zmsoftpos_cs..sysobjects where xtype='U' and name not in('system_sheet_setup','system_mode_file','system_image') order by name
其中的路徑f:\data\一定要與“C”點中的路徑一致。按F5執行之后,按照C點的步驟,把顯示框內的語法另存為“導入數據.bat”的文件名,保存到語法的路徑文件夾內。
?
F、以上的步驟操作完成之后,打開以上語法存放的徑路,先雙擊導出數據文件,雙擊之后就會出現如下對話框架:
此界面表示,正在從原帳套里面把數據導出來,請您靜心等待,導出完成之后此界面會自動關閉的。
等待完成之后,再雙擊”導入數據.bat”文件,也會出現如上的界面。也請您靜心等待,導出完成之后界面也會自動關閉。
?
G、以上的步驟都完成之后,請把zmsoftpos_cs_01的帳套,備份一次,然后把zmsoftpos_cs與zmsoftpos_cs_01兩個帳套都刪掉,然后新建超市版本的帳套,把恢復備份的zmsoftpos_cs_01文件,此時您的數據庫修復的工作就大功告成了。。
總結
以上是生活随笔為你收集整理的SQL Server数据库被置疑的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python --函数
- 下一篇: 泛型实现List(ListT)排序