大家好,又见面了,我是你们的朋友全栈君。
在企业使用SQL Server时,有时会因为各种原因遇到SQL Server数据库置疑的情况,那么是什么原因产生数据库置疑呢?对于这样的问题要如何预防?遇到后要如何解决呢?本文主要对这几个疑问进行解答。
FAT32的格式只支持4G以内的文件
下面所有修复置疑的语法,在没有特别提到时,默认数据库都请选择(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文件,此时您的数据库修复的工作就大功告成了。。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125160.html原文链接:https://javaforall.cn