SQL数据库置疑修复说明文档
一, 数据库置疑产生的原因 二, 数据库置疑的预防 三, 数据库置疑的修复 一,数据库置疑产生的原因
1、 SQL Server所在分区空间是否够?数据库文件大小是否达到最大文件限制?
FAT32的格式只支持四G以内的文件
2、 数据库文件损坏或被非正常删除时出现这种情况 3、 病毒防火墙的扫描也会引起数据库置疑
4、 当SQL Server启动时,将会尝试获得对数据库文件的排他访问权,如果此时该文
件被其他程序占用,或者遗失,数据库将会被标记为置疑。 5、 电脑非法关机也会造成数据库置疑 6、 电脑磁盘有坏道有可能造成数据库置疑
二,数据库置疑的预防
1、 数据库存放的盘符,空间是否够大,经常检查盘符的空间 2、 数据库存放的盘符的格式设置为NTFS格式
3、 进行病毒清除时,尽量把SQL服务停掉,再进行检查 4、 尽量减少非正常关机 5、 建议客户购买后备电源
6、 给客户实施软件之后一定要做好自动备份 7、 建议客户每隔一定时间手动备份一次
三,数据库置疑的修复
1, 点击后台登录时,如果提示如下图片就有可能表示数据库置疑了
2, 需要确认检查数据库置疑,打开企业管理器中的数据库目录,如下图显示
表示置疑
(Master)数据库)
下面所有修复置疑的语法,在没有特别提到时,默认数据库都请选择3, 修复置疑(必须在SQL的查询分析器中才能进行数据修复置疑工作)
A、 打开查询分析器,当数据置疑之后在查询分析器中是看不到置疑的数据
库名称的,所以进入查询分析器之后,所选数据库默认(Master)数据库即可。(复制下面置疑语法到查询分析器中执行。 --修复数据库置疑的语法
SP_configure 'allow update',1 go
RECONFIGURE WITH OVERRIDE go
update sysdatabases set status=-32768
where name='zmsoftpos_cs'--数据库名称 go
dbcc rebuild_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”是置疑的数据库名称,请根据客户实际的置疑数据库进行更改名称,其他的内容不变
B、 拷入置疑语法之后,请按F5执行,如果显示框内显示的内容如下表示
置疑修复成功
C、 置疑修复成功之后,再到如上图的master下拉框架内就可以选择所修
复的置疑数据库了,此时置疑是修复成功了,但是并不代表此数据库就没有问题了,请暂时不要进软件,我们还需要检查数据库有没有问题。
4, 检查修复置疑好的数据库是否正常
A、 打开查询分析器选中修复好的数据库名称,输入“dbcc checkdb”语法,
再按F5执行,根据数据库的大小执行需要的时间不确定,请耐心等待,执行完之后在显示框内就会显示一些相关内容如下图:
如上图所示,把显示框拖到最下面,如果“CHECKDB 发现了 0 个分配错误和 0 个一致性错误”即表示此数据库已经好了,不用再修复了,客户即可进入软件进行操作了。
备注:(以下的语法就不用再执行了)
B、 如果执行“dbcc checkdb”后显示框内显示了很多红色的记录,那么表
示这个数据库的有些表还有错误需要修复
5, 修复过程如下:(修复过程中语法内的数据库名称都根据客户使用的数据库
进行更改)
A、 首先退出所有的客户端软件与企业管理器,只打开查询分析器,默认数
据库“Master”,拷入如下语法执行:
sp_dboption 'zmsoftpos_cs','single user','true'
备注:其中的数据库名称根据客户使用的数据库进行更改。此语法是把数据库设置为“单用户模式”
B、 设置为单用户模式之后,拷入如下语法进行多次执行 dbcc checkdb(zmsoftpos_cs,REPAIR_REBUILD)
备注:数据库名称根据客户使用的数据库进行更改。此语法可以多次执行,也需要多次执行,每执行完一次拖到显示框内的最后面如果“发现的是0个分配错误与O个一致性错误”就不用再修复了,只需执行下面语法即可 Sp_dboption 'zmsoftpos_cs','single User', 'False', 备注:下面的语法也不需执行了。
如果执行多次之后:“CHECKDB 发现了 N个分配错误和 N个一致性错误”不会再次减少时,表示此语法修复不成功,需要进行下面的修复过程。
C、 再把下面语法拷进入,进行多次执行:
dbcc checkdb ('zmsoftpos_cs',REPAIR_allow_data_loss)
备注:此语法的执行与上面“ B ”点中执行的语法过程一样,执行到此步骤百分之九十以上的数据库都是可以修复的。如果执行到最后分配错误与一致性错误还不减少,那么执行下面的”D”操作
D、 拷入如下语法执行:
exec sp_MSforeachtable 'dbcc dbreindex(''?'')'
备注:执行此语法时,此时的“ Master ”数据库名称一定要选择修复的数据库名称,执行才会生效。执行完成之后,再使用“ dbcc checkdb ”语法再检查一次,如果是“发现的是0个分配错误与O个一致性错误”表示修复成功,如果是:“CHECKDB 发现了 N个分配错误和 N个一致性错误” 表示此数据库坏得很历害,使用此方法已不能修复成功了。必面使用其他方法了。最后不管修复成不成功都要使用下面的语法结尾: Sp_dboption 'zmsoftpos_cs','single User', 'False' 备注:把之前的单用户模块解除掉
6, 在上面的修复过程中不能解决的问题,再使用BCP命令语法进行修复 例:以超市版本为例,超市版本的数据库名称为:zmsoftpos_cs
A、打开帐套管理新建一个相同的帐套,数据库名称就会是zmsoftpos_cs_01的帐套名称,新建好之后,一定要使用后台登录进去一次,再退出后台。
B、打开查询分析器,选择好帐套数据库“zmsoftpos_cs”把下面的语法拷进入按F5执行:
select 'if EXISTS(SELECT * FROM zmsoftpos_cs_01..sysobjects WHERE name = ' + char(39) + name + char(39) + ')'+char(13)+ 'delete from zmsoftpos_cs_01..'+name from zmsoftpos_cs..sysobjects where type='U'and name
执行完成之后在下面的显示框架内就会出现如下语法:
name
not
in
('system_sheet_setup','system_mode_file','system_image') order by
使用鼠标左击一下图片中红色圆圈内的按钮,就会选中下面的语法,然后再到红色圆圈内的按钮上点鼠标右键,点击另存为,就会出现如下对话:
其中的保存类型一定要先选择所有文件,然后再到文件名处,填写好如图片中输入的名称,然后点保存!
C、以上的语法另存为之后,再拷入以下的语法执行:
select 'bcp zmsoftpos_cs..'+name+' out f:\\data\\'+name+'.txt -c -S127.0.0.1 -Usa_ -P422426362227001' from zmsoftpos_cs..sysobjects where xtype='U' and name
备注:以上的语法中有一个文件存放路径,“f:\\data\\”此路径根据实际的情况创建,然后更改过来,再执行。执行之后,按照上面的方法,点击另存为如下图:
name
not
in
('system_sheet_setup','system_mode_file','system_image') order by
其中的保存类型也要先选择所有文件,然后再到文件名中填入如图上的名称:导出数据.bat文件名,然后再点保存,保存的路径一定要是上面语法中设置中文件夹的路径。
D、此时再选择超市版本的zmsoftpos_cs_01的帐套名称,然后在左上角的文件中打开找到之前保存的“删除数据.sql”的文件,把其中的 ”delete from”全部替换成“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文件,此时您的数据库修复的工作就大功告成了。。
因篇幅问题不能全部显示,请点此查看更多更全内容