小编Jcl*_*Jcl的帖子

在线页面恢复达到 1000 个限制

我的任务是尝试恢复遭受损坏的数据库(由于 I/O 故障,此后已修复)。我不熟悉数据库或它包含的内容。

我得到了一个旧的(约 3 周)完整备份和一系列事务日志……但是缺少事务日志,所以我只能恢复到某个日期。大约有 2.5 周的数据丢失(并且有大量数据不断添加到此数据库中)。

我还获得了损坏数据库的副本(可以访问,但有很多页面损坏/丢失)。

我已经尝试了典型的DBCC CHECKDB命令(仍然没有repair_allow_data_loss,如果没有其他方法,那将是我的最后手段)。

在多次访问数据库之后(db 是一个 1.5 TB 的小怪物,我所做的一切都很慢并且需要一段时间),我尝试从上次已知的良好备份中对损坏的页面进行在线页面还原。

为此,我编写了一个脚本,该脚本RESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'DBCC CHECKDB输出中创建了许多命令(基本上是一个正则表达式和一个不同的命令)......到目前为止一切顺利,它说我已经达到了 1000 页的限制每个文件(此数据库上有 8 个文件)每个还原命令。

所以它要求我“完成在线恢复”,但我不知道如何做到这一点......我没有尾日志或任何比我开始的完整备份更完整的东西,所以我基本上不知道如何完成恢复以继续尝试其余页面。

我试过一个,RESTORE DATABASE <foo> WITH RECOVERY但也没有用,它要求我提供一个我没有的日志。

有没有人对我如何尝试从这里恢复任何东西有任何提示?或者如何“完成”在线恢复以便我可以继续尝试恢复更多页面?如果我尝试离线还原,我会遇到同样的问题(基本上是添加WITH NORECOVERY到所有内容,然后尝试在最后将其恢复?)

手动处理数据库基本上是可以撤消的……有数百个表有数百万行,并且没有明确的含义。SELECT在几百万行之后,损坏的数据库将在查询中失败,但我不确定我能找出哪里。我试过重建所有非聚集索引,但有行数据损坏的页面,所以这也不起作用。

一些数据丢失是可以接受的,但至少应该尝试实现数据库的一致性。

损坏的数据库仍然在线并且客户端正在处理它(因此它不断获取新数据),因此我在实验室工作台上所做的任何过程都应该在之后在生产数据库上重现(停机对它来说很难)。

这是 SQL Server 2014 企业版

PS:我不是DBA...我是程序员,但是客户尝试了一些“专家”的sql灾难恢复服务,他们已经放弃了,所以我被要求看一下,看看我是否可以做任何事情。


更新:经过多次测试,逐页恢复是行不通的,所以我们放弃了这个想法。我们将进行手动恢复(从损坏的表中手动选择丢失的记录并将它们插入到上次已知的良好备份中),为其做一些自动化工具(同样,有成百上千的表)。

sql-server t-sql recovery restore sql-server-2014

13
推荐指数
1
解决办法
1410
查看次数

标签 统计

recovery ×1

restore ×1

sql-server ×1

sql-server-2014 ×1

t-sql ×1