sql-server – 修复数据库中不一致的页面

前端之家收集整理的这篇文章主要介绍了sql-server – 修复数据库中不一致的页面前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个sql 2000 DB.由于Raid阵列故障,服务器崩溃.现在,当我们运行DBCC CHECKDB时,我们得到一个错误,即9页中有27个一致性错误.

当我们在这些页面上运行DBCC PAGE时,我们得到:

Msg 8939,Level 16,State 106,Line 1
Table error: Object ID 1397580017,index ID 2,page (1:8404521). Test (m_freeCnt == freeCnt) Failed. Values are 2 and 19.
Msg 8939,State 108,page (1:8404521). Test (emptySlotCnt == 0) Failed. Values are 1 and 0.

由于指示的索引是非聚集的,并且由包含2列的唯一constarint创建,因此我们尝试删除并重新创建索引.这导致以下错误

CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID 2. Most significant primary key is '3280'. 
The statement has been terminated.

然而跑步

Select var_id,result_on
from tests
group by var_id,result_on
having count(*)>1

返回0行.

以下是我们计划做的事情:

>恢复数据库的服务器前崩溃副本并运行DBCC CHECKDB
>如果返回清除,则再次恢复而不恢复
>应用所有后续TLOG备份
>停止生产应用程序,进行尾部日志备份并应用它
>删除prod DB并重命名新恢复的数据库以使其生效
>开始生产应用程序

有人可以用这种方法打洞吗?也许,建议采用不同的方法?我们需要的是最短的停机时间.

sql 2000
数据库大小94 GB
具有损坏页面的表具有4.6亿行数据

谢谢您的帮助.

拉吉

解决方法

您的恢复解决方案是教科书的开始方式.假设您有适当的备份并且提供了可以备份损坏数据库的事务日志,那么您的策略就是要实现的教科书.

在继续之前,您是否考虑过仅重建受影响的桌子的可能性?

有时您可以通过执行a来创建受影响的表的精确副本

select *
into NewTableFromOld
from DamagedTable

然后只需使用new删除/交换损坏的表,记住要添加适当的约束和索引.

原文链接:https://www.f2er.com/mssql/80990.html

猜你在找的MsSQL相关文章