数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。

数据库数据恢复环境&故障:
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。
存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。
虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。

数据库数据恢复过程:
1、将存储上所有磁盘标记后取出,经过硬件工程师检测没有发现有硬盘存在硬件故障,都可以正常读取。以只读方式将所有磁盘进行扇区级全盘镜像。镜像完成后将所有磁盘按照原样还原到原存储中。后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始数据造成二次破坏。
2、北亚企安数据恢复工程师编写数据库碎片扫描程序扫描数据库碎片。根据NDF文件的页面特征,按照文件号和页号拼接碎片,重组生成那些大小变为0kb的NDF文件。
3、使用SQLServer文件检测工具检测所有数据文件,结果发现拼接出的数个NDF文件有少量的空页,其他文件正常。
4、进一步分析发现数据页在存储层面已经不存在了,这些数据页无法恢复,即这几个NDF文件无法完整恢复。
5、尝试附加数据库,报错 “处理数据库的日志时出错,如果可能请从备份还原。如果没有可用的备份,可能需要重新生成日志。”
6、修改系统表,从系统表剔除掉最后添加的LDF文件,计算并修改校验。尝试进行无日志附加数据库,报错:“数据库存在一致性错误。”
1副本.jpg

7、修改系统表中记录这几个损坏的NDF文件的块数量的值,改为和拼接出来的NDF文件块的数量一致,更改这4个NDF文件首页,计算并修改校验值。
8、无日志附加数据库,仍然报错“数据库存在一致性错误。”
9、由于空页都出现在这几个NDF文件后面的十几个块中,截断文件对数据完整性影响不大。重新修改系统表和NDF文件,将数据库中记录NDF文件的块数量的值改为等于报错的块前一页,计算并修改校验。
10、重新进行无日志附加数据库,报错“由于数据库没有完全关闭,无法重新生成日志。”
3副本.jpg

11、修改MDF文件中的数据库的状态值,让数据库认为是完全关闭的。
12、重新附加数据库,附加成功。
4副本.jpg

数据库数据恢复结果:
数据库文件成功附加后,由用户方通过数据库中的对象进行查询&验证,经过查询验证,确定表中信息基本完整,数据恢复完整。用户方认可数据恢复结果。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
97 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
28 4
|
2月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
49 11
|
3月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
3月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
3月前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
266 3
|
3月前
|
SQL 关系型数据库 MySQL
SQL数据库和 SQLserver数据库
【8月更文挑战第19天】SQL数据库和 SQLserver数据库
56 2
|
3月前
|
SQL 存储 安全
SQL Server数据库创建
【8月更文挑战第19天】SQL Server数据库创建
36 1
|
3月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
69 2
|
3月前
|
SQL Java 关系型数据库
应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库
该博客文章介绍了在JSP中使用JDBC连接SQL Server数据库的方法,包括加载数据库驱动、建立数据库连接的过程,并提供了一个使用DriverManager类创建数据库连接的Java示例代码。