SQL 数据库中的损坏随时可能发生。重要的是尽早发现并尽快解决问题。
作为一个 SQL Server 管理员,工作中必定会遇到一些问题。问题可能很少,也可能涉及范围很广,但最糟糕和最令人担忧的问题是 SQL 数据库的页面级损坏。就像一场噩梦一般,SQL Server 中的页面损坏会危及服务器上保存的所有关键数据。即使管理员(具有完全权限)也无法访问数据,从而对整个组织的工作流程造成障碍。尽可能多地了解这些损坏、其原因和解决方案,是摆脱这种噩梦的唯一途径。
SQL中页面级损坏背后的原因SQL 数据库中的基本存储单位是页;所有数据库信息都以页面的形式存储。SQL Server 数据库文件具有 MDF 和 LDF 扩展名。所以基本上,所有的 LDF 和 MDF 文件在逻辑上都分为几百页,每个单独的页面在服务器上都有自己的位置。如果 SQL Server中的页面遭受损坏,那么这些页面中的每一个页面都会开始受到感染。因为修复小块数据比修复整个文件更容易,所以通常建议,在尝试修复文件之前先修复单个页面。
但在开始解决问题之前,必须先找到问题的根源。那么,为什么会发生 SQL 页面级损坏呢?
- SQL 中页面级损坏的第一大原因是硬件故障。如果硬盘出现问题,则最有可能这就是页面损坏的原因。因此,必须定期监控硬盘、服务器机箱和系统中的其他硬件,以避免遇到此类问题。
- 必须确保对服务器的电源进行管理。在数据库运行时,电源发生问题也可能会导致数据库的页面级损坏。
- 将新软件下载到服务器时要小心。如果服务器被病毒或恶意软件感染,也可能会导致数据库损坏。
- 虽然我们知道,维护一个健康服务器的最好方法之一就是使用最新补丁对其进行更新,但是,不幸的是,安装错误的更新也可能会导致数据库损坏。
- 有时,服务器本身无法诊断的问题也可能会导致数据库损坏。但是,除了定期检查数据库的功能之外,别无他法。
如果以上这些原因中的任何一个导致了服务器故障,并且您怀疑造成了数据库的损坏,此时,应该将数据库上的所有数据进行备份,并立即启动补救程序(如果您是非专业数据库修复人员,请务必第一时间求助于专业的数据恢复公司,而不要试图自行修复,这样只能让问题复杂化)。
修复 SQL 数据库页面级损坏同样,在开始之前,需要备份原始的 MDF 和 LDF 文件,然后,基于这个参考点开始数据库的恢复。另外,请从Internet下载文本比较工具和数据比较工具。这些工具有助于对损坏数据和原始数据进行逐个比较。
请按照以下步骤操作:
一、使用文本比较工具检查原始文件和损坏文件之间的差异。
二、在损坏的文件上,运行 DBCC CHECKDB 命令。这个命令可以检查数据库文件,显示问题区域的位置,并提示数据修复的最低要求。
三、要检查受感染页面的内容,请运行 DBCC PAGE 命令。首先打开跟踪标记 3604。
DBCC TRACEON (3604)
DBCC PAGE ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
filenum 和 pagenum 与页面 ID 相关,它们与各种系统表相关。
printopt 参数为 0,1,2,3
- 0 -打印页眉。
- 1 – 打印带有每行十六进制转储的页眉
- 2 – 打印带有完整页面十六进制转储的页眉
- 3 – 打印带有详细每行解释的页眉
四、要确认页码和物理偏移量,请强制逻辑一致性错误并尝试通过运行以下命令来读取表:
SELECT * from dbo.tablename
五、现在已确认损坏的位置,使用文本比较工具将损坏的文件与原始文件的最新备份进行比较。
六、为了便于理解,请从受感染文件中复制损坏的页面并将其粘贴到文本比较工具中。
七、使用数据比较工具将损坏的页面与原始页面的最新版本进行比较。能够看到异常数据的同步比较。
八、修复页面并对恢复的文件运行 DBCC CHECKDB 命令。
如果已正确恢复并修复了损坏的数据,则恢复的文件中应该没有异常。
这种方法的缺点- 如果多个位置或大面积损坏,可能会影响其他类型的页面,从而导致 SQL Server 无法打开文件。
- 直接编辑文件是一种容易出错的方法。校验和是逐页计算的,如果未能正确复制/粘贴,则会发生 I/O 错误,可能无法打开数据库。
- 这个解决方案需要时间,并且需要事先练习这种操作,才能确保成功。
对于专业人员,可以尝试以上修复方法。对于非专业数据库修复人员,请立即联系专业的数据恢复公司,以尽快获得数据库修复,避免问题复杂化以及保护数据不发生丢失现象。鸿萌从事数据恢复近 20 年,拥有丰富的案例经验和专业资深的技术团队,随时为用户提供紧急咨询和数据恢复服务。
,