SQL SERVER数据库修复

数据库错误如下:

消息 824,级别 24,状态 2,第 2 行
SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:143744,但实际为 24490:1539394346)。在文件 'E:\数据库\ET.mdf' 中、偏移量为 0x00000046300000 的位置对数据库 ID 14 中的页 (1:143744) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书


解决方式如下:

出现上述问题的原因大致为高速读写的时候出现了中断等现象导致的一致性问题,最直接的做法就是忽略此不一致,当然修复后会有少数数据丢失。修复基本步骤为三个环节,第一是将对应的数据库改为单用户,第二步是通过DBCC CHECKDB忽略不一致,第三步则修改数据库为多用户。基本没有问题,可是仍然会有意外,所以在操作之前自己做好打算。

第一步:使用ManagementStudio连接数据库将其改为单用户;

执行查询语句

ALTER DATABASE database_name SET SINGLE_USER
如果此时有很多连接,那么此操作异常慢,有的人则写存储过程将连接都关闭,确实可行,可是有最简便的方式,如下图:

找到如下图位置:


确定之后就会弹出框让你确定是否关闭所有连接,如下:


确定即可,很快就好了。

第二步:执行检查,下面的SQL是本人常用的,目前没有问题,可能不同的场景用法不一样。

DBCC CHECKDB ('database_name', repair_allow_data_loss) with NO_INFOMSGS

操作完成后即可恢复多用户操作了。

第三步:恢复为多用户

ALTER DATABASE database_name SET MULTI_USER
这一步基本没有问题,因为前面是单用户访问,如果有另外一个连接不小心连接进来,那么你就无法操作了,因为已经有一个连接。常用的做法是强制杀掉那个连接,同样有部分人可能会写存储过程,然而我不想在生成环境做过多的尝试,所以用ManagementStudio自带的活动和监视器去做。打开ManagementStudio操作如下:


点开活动和监视器后进入:


选中对应的数据库,右键出现如下:


终止进程就杀死了那个单用户的占用了,后就可以执行你的多用户修改语句了。

到此为止操作成功,不过不同的环境和出错的原因不一致,如要操作还是要慎重的。祝好运

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于修复 SQL Server 数据库,可以尝试以下方法: 1. 使用 SQL Server Management Studio (SSMS) 工具进行修复: - 运行 SSMS 工具,并连接到目标数据库实例。 - 在对象资源管理器中,右键单击要修复数据库,选择 "任务" -> "修复"。 - 在修复向导中,选择适当的修复选项,如 "仅检查完整性" 或 "执行修复"。 - 根据向导的指示完成修复过程。 2. 使用 Transact-SQL 语句进行修复: - 打开 SQL Server Management Studio,并连接到目标数据库实例。 - 新建查询窗口,并执行以下语句: ``` USE master; GO ALTER DATABASE [数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DBCC CHECKDB ([数据库名], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS; GO ALTER DATABASE [数据库名] SET MULTI_USER; GO ``` - 将 "[数据库名]" 替换为要修复数据库名称,并执行上述语句。 3. 使用 DBCC CHECKDB 命令行工具进行修复: - 打开命令提示符或 PowerShell 窗口。 - 运行以下命令进行数据库修复: ``` sqlcmd -E -S [服务器名] -d master -Q "ALTER DATABASE [数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE" DBCC CHECKDB ([数据库名], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS sqlcmd -E -S [服务器名] -d master -Q "ALTER DATABASE [数据库名] SET MULTI_USER" ``` - 将 "[服务器名]" 替换为 SQL Server 实例的名称,"[数据库名]" 替换为要修复数据库名称,并执行上述命令。 在执行数据库修复操作之前,请确保你已经进行了适当的备份,并了解修复可能会导致数据丢失的风险。同时,建议在修复之前咨询专业的数据库管理员或 SQL Server 支持团队以获取更多指导。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值