加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:52:34 所属栏目:MsSql教程 来源:网络整理
导读:我们有一个SQL 2000 DB.由于Raid阵列故障,服务器崩溃.现在,当我们运行DBCC CHECKDB时,我们得到一个错误,即9页中有27个一致性错误. 当我们在这些页面上运行DBCC PAGE时,我们得到: Msg 8939,Level 16,State 106,Line 1Table error: Object ID 1397580017,index
我们有一个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删除/交换损坏的表,记住要添加适当的约束和索引.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读