译者 | 李睿
审校 | 重楼
日志损坏问题通常发生在对事务日志进行备份的时候。其错误是这样描述的:
“消息26019,级别16,状态1,第1行BACKUP在数据库日志中检测到损坏。有关详细信息,请查看错误日志。BACKUP LOG异常终止。”
本文中将解释发生这个错误的原因以及如何解决这个问题。
数据库日志错误损坏意味着什么?
级别16的错误并不那么严重,这是在杂项用户错误的类别。数据库将会正常工作。如果进行一个完整的备份,它将会工作。如果运行DBCC CHECKDB,它将不会检测到错误。
但是,事务日志文件被损坏,第1行则是失败的代码行。
为什么会出现这个错误?
要找出这个错误的原因,需要检查SQL错误日志。
可以在SQL Server管理工作室(SSMS)中找到错误日志。
在“对象资源管理器”中选择“管理>SQL Server日志”,可以看到当前日志和之前的日志。双击日志,就可以看到事件和错误。
也可以检查事件查看器,进入Windows日志>应用程序,寻找MSSQL Server错误。
可能导致日志损坏的最常见问题是硬件问题。此外,一些软件也可能会损坏数据库。
例如,在执行事务时遇到电源故障可能会关闭服务器,然后日志可能会损坏。另一个常见的问题是磁盘故障。如果磁盘老旧,或者遭遇停电,或者有供电问题,就会发生这种情况。如果服务器温度过高,可能会出现硬件问题。
一些软件可以破坏日志,例如病毒和恶意软件可能会破坏日志文件。
如何解决在SQL Server数据库备份过程中检测到的日志损坏
如果对损坏的数据库进行完整备份,则备份将运行,但将使用损坏的日志文件备份数据库。
如果尝试只备份日志文件,将得到以上提到的错误。
该问题的解决方案是使用“出错时继续”(Continue on Error)选项进行备份。
要执行此操作,需要打开SSMS。
在“对象资源管理器”中右键单击“数据库”,选择“任务>备份”。
选择“事务日志”选项。
在“媒体选项”中,选择“在错误时继续”选项。
即使事务日志已损坏,这一选项也将继续执行备份。
解决这个问题的另一种方法是将数据库设置为“简单恢复”模式。
在SSMS中,进入对象资源管理器。
单击“数据库”,右键单击该数据库,然后选择“属性”。
进入“选项”页面,选择“简单恢复”模式。
使用T-SQL运行检查点(checkpoint)。
CHECKPOINT
对数据库进行完整备份。
现在能够对日志文件进行备份,而不会出现错误。
如何使用Stellar Repair for MS SQL解决SQL Server数据库备份过程中检测到的日志损坏问题
解决这个问题的另一种方法是使用Stellar Repair for MS SQL。这个软件可以使用SQL Server数据文件修复数据库,也可以使用损坏的SQL Server备份来恢复所有信息。一旦数据库恢复,就可以备份日志文件而不会出现错误。
要做到这一点,用户需要从其网站链接下载软件。
先将数据库联机。执行以下命令:
ALTER DATABASE stellardb
SET OFFLINE;
需要找到数据文件,数据文件是扩展名为.mdf的文件。该文件包含数据库信息。
如果知道mdf文件在哪里,可以浏览并选择它,然后按下“修复”按钮。
在修复之后,可以将数据保存在新数据库(New Database)中。实时数据库(Live Database)将取代当前数据库。当选择其他格式时,可以导出Excel、CSV或HTML文件中的表格和视图数据。
如果选择新数据库或实时数据库,则可以备份日志文件而不会出现错误,因为修复后的数据库不会损坏。
结论
本文介绍了在日志损坏时将会发生什么错误,还了解了发生这一错误的原因。此外,还介绍了使用“出错时继续”选项如何进行备份。最后,学习了如何使用Stellar repair for MS SQL修复数据库。
原文标题:Resolving Log Corruption Detected During Database Backup in SQL Server,作者:Daniel Calbimonte