sql数据库置疑

aiove / 2024-12-21 / 原文

sql数据库置疑

以XXX数据库为例:

1.停止SQL Server的服务,备份D:\XXX_data目录下的文件

2.启动SQL Server服务,创建一个新的数据库,命名为原来数据库的名字
若创建新数据库提示已存在,需要在查询分析器执行drop database XXX来删除数据库,然后重新建立新数据库。

3.停止SQL Server

4.把旧数据库的MDF文件(XXX.mdf)覆盖到D:\kmcy_data目录下,替换掉新的mdf文件,并把LDF文件(XXX_log.ldf)删除

5.重新启动SQL Server服务,然后在查询分析器中运行如下命令:
Use Master
go

        sp_configure 'allow updates', 1  reconfigure with override  
        go

        begin tran  
        update sysdatabases set status = 32768 where name = 'XXX'  
        --Verify one row is updated before committing  
        commit tran  
        go

6.停止并重新启动SQL Server服务,然后在查询分析器中运行如下命令:
use master
go
DBCC TRACEON(3604)
DBCC REBUILD_LOG('kmcy_v8','D:\kmcy_data\kmcy_v8_log.ldf')

7.停止并重新启动SQL Server服务,然后在查询分析器中运行如下命令:
use master
go
update sysdatabases set status = 8 where name = 'kmcy_v8'
go

        sp_configure 'allow updates', 0      reconfigure with override  
        go

8.运行dbcc checkdb(XXX) 检查数据库的完整性
若执行结果没有红字报错则修复成功,否则进行第9步修复工作

9.修复数库
①在查询分析器中运行如下命令:

        USE master  
        Go
        EXEC sp_dboption 'XXX', 'single user', 'TRUE'  
        go

--此步骤为修改数据库为单用户模式

②继续执行如下命令:

        DBCC CHECKDB ('XXX','repair_rebuild')  
        Go

--此步骤为修复数据库,执行之后若没有红字报错,则修复成功进入第④步。此语句可重复多次执行;如果一直有红字报错,请执行第③步修复操作

③高级修复命令:
DBCC CHECKDB ('XXX','repair_allow_data_loss')
Go
--此步骤为更高级别修复,可能造成部分数据丢失。此语句可重复多次执行,直至修复成功进入第④步。

④修改数据库为多用户模式命令:

        EXEC sp_dboption 'XXX', 'single user','FALSE'  
        go  

--退出前请一定要执行以上语句返回到多用户模式