如何从导出的数据在 MS SQL Server 2016 中完全重新创建数据库

Ter*_*ium 1 sql-server backup restore

最近,我的 ~40Gb 数据库中经常出现许多一致性错误。当然,我使用DBCC CHECKDB, 即使REPAIR_ALLOW_DATA_LOSS(当它询问时),但是我再次遇到错误,即使在只读操作之后也是如此。

数据库本身存储在 SSD 驱动器上,这没问题,所以我怀疑数据库文件中存在一些隐藏的错误。

所以,完整的周期:我在本地 PC 上安装了 MSSQL 2016,只连接了 1 个用户。每天我都以自定义格式获取数据(~1.5M 记录),备份基础并将数据插入基础(非批量插入,索引)。在那次行动中,没有人接触基地。后来我不时进行高负载查询(不同的统计数据)。我经常遇到一致性错误、校验和错误、索引错误(目前没有存储确切的输出)。可以通过重建索引来纠正索引错误;其他人只能通过DBCC CHECKDB使用该REPAIR_ALLOW_DATA_LOSS选项来修复。之后,它再次工作 - 一段时间。

我不相信问题出在我的 SSD 驱动器上。在过去的几年里,我在这台 PC 上尝试了不同的驱动器,行为没有改变。

我怀疑,即使在DBCC CHECKDB成功运行后,文件结构中也存在一些隐藏的错误,这些错误会导致以后出现新的错误。所以我只想将数据提取到线性文件然后导入。标准导出向导导出数百行,然后停止没有错误。

是否有一种正确且可靠的方法可以将整个数据库导出到文本/二进制文件(但不是 mssql),然后重新创建数据库而不会丢失这些文件中的数据?我尝试了备份还原,但看起来数据库一致性问题在还原过程中仍然存在。

Joh*_* N. 6

这只是一些模糊假设的总结,因为应该添加到问题中的许多细节要么在聊天中讨论过,要么还没有被问到。

** 在您继续之前**

创建数据库备份 ( WITH CHECKSUM) 并将此数据库存储在安全位置。更好的是:看到您的磁盘可能有问题,请将数据库 ( WITH CHECKSUM)备份到外部驱动器并存储在安全位置。

数据增长导致数据损坏的可能原因


  1. 您的 SSD 磁盘有损坏的区域。DBCC CHECKDB...更正数据(尽管带有REPAIR_ALLOW_DATA_LOSS)。添加数据会将其置于 SSD 的损坏区域,即使 SSD 控制器单元应避免损坏区域(一旦标记)。

解决方案:检查 SSD SMART 参数是否有错误和/或更换 SSD。

参考:如何使用 SMART 查看您的硬盘驱动器是否已死(How-To Geek 站点)


  1. 您主板的磁盘控制器(SATA 接口)在处理大量数据时出现问题。

解决方案:更换磁盘控制器和/或更新磁盘控制器驱动程序。


  1. 磁盘和/或磁盘控制器设置为使用 WRITE CACHE 机制,该机制无法跟上大量数据的导入。腐败发生在冲洗。

解决方案:关闭(磁盘)缓存机制。

参考:禁用 Windows 磁盘写入缓存以实现数据完整性和更好的性能(长白虚拟云)


一般参考:数据损坏(维基百科)