修改日期 | 修改人 | 备注 |
2019-04-01 14:17:41[当前版本] | 梁 | 补充 |
2019-03-14 11:01:35 | 柯 | 1 |
2018-12-29 16:34:34 | 梁 | 补充 |
2018-12-29 15:56:56 | 梁 | 补充 |
数据库坏了怎么办?数据库置疑了怎么办?数据库修复简要办法
------------下文的语句中的MenuItem是举例的,具体表名,需要大家根据情况,自行替换------------
------------如果数据库是置疑的,从第一步开始------------
------------如果数据库不是置疑的,从11开始------------
1、分离数据库
2、将坏的数据库文件备份到单独文件夹
3、解压一个空白数据库出来(注意SQL版本)
4、附加空白数据库
5、停止SQL服务
6、删除之前解压出来的空白数据库文件
7、拷贝备份的mdf文件,到data目录
8、启动SQL服务
9、打开查询分析器,依次执行下列语句,记得修改第三步Log文件的路径。
--第一、
exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE /* 打开修改系统表的开关 */
--第二、
update sysdatabases set status=32768 where name='yumstone' /* 设置数据库状态 */
--第三、
DBCC REBUILD_LOG ('yumstone','c:\Program Files\Yumstone\4.0\Server\Data\yumstone_Log.LDF') /* 重建LDF文件 */
--第四、
update sysdatabases set status=0 where name='yumstone' /* 重置数据库状态 */
--第五、
restore database yumstone WITH RECOVERY /* 恢复数据库 */
--第六、
exec sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE /* 关闭打开修改系统表的开关 */
10、上述语句执行完以后,几乎就可以解除置疑。
11、SQL企业管理器,找到有问题的数据库,设置为单用户
12、关闭企业管理器,选择master数据库,执行DBCC检查
dbcc checkdb('yumstone')
13、找出全部有问题的表,比如下述描述中的MemberItem表就是有问题的。
CHECKDB 发现了 0 个分配错误和 4 个一致性错误(在表 'MemberItem' 中,该表的对象 ID 为 155147598)。
14、对上一步找出来的有问题的表,执行语句dbcc dbReindex('MenuItem'),尝试进行索引修复。
15、对于重建索引修复不了的表,执行语句dbcc checktable('MenuItem'),尝试进行表修复。
checkTable语句可能需要执行多次,直到不再出现报错为止。
16、对于checktable修复不了的表,需要用bcp指令导出数据;bcp导出的时候,会自动过滤掉坏的数据,然后清除完表内容以后,再导入即可。(-U后面跟的是SQL的管理员账号sa,-P后面跟的是SQL管理员的密码)
操作方式如下:
A、关闭查询分析器
B、开始=》运行=》CMD
C、执行bcp指令,例如:bcp yumstone.dbo.MenuItem out c:\MenuItem.txt -c -Usa -P此处填写SQL的sa账号的密码
D、打开查询分析器,执行语句:Truncate table MenuItem
E、关闭查询分析器,并打开CMD程序
F、执行bcp指令,例如:bcp yumstone.dbo.MenuItem in c:\MenuItem.txt -c -Usa -P此处填写SQL的sa账号的密码
17、在对Yumstone数据库,做dbcc检查,确保没问题,如果有问题,重复上述步骤。
18、最后执行语句 exec yum_reindex对Yumstone数据库的所有表重建索引。
19、关闭查询分析器,打开企业管理器,去除单用户设置。
20、启动软件服务。