SQL数据库置疑修复
专业修复置疑sql数据库方法
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) + zmsoftpos_cs_01..'+name type='U'and name 执行完成之后在下面的显示框架内就会出现如下语法: from name ')'+char(13)+ 'delete from where in not zmsoftpos_cs..sysobjects ('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 文件,此时您的数据库修复的 工作就大功告成了. .