以下内容摘自《中国计算机报》本次的内容针对 SQL Server 数据库 ,但是相关原理应该可适用于其他数据库。
数据库系统主要由数据文件和日志文件两大部分构成,数据文件存储数据,日志文件存储操作数据的行为。
数据文件
数据文件有两种类型:主数据文件和次要数据文件。主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件,其扩展名是 .mdf 。除了主数据文件外其他文件都是次要数据文件,次要数据文件扩展名为 .ndf 。
日志文件
日志文件记录对数据库操作的行为,下面过程是数据操作的过程,首先将数据操作命令写入到缓存中,并立即写入日志文件,但不会立即写入数据文件。日志文
件通过一个标记来确定某个操作是否已将缓存中的数据写入数据文件。当 SQL
Server 重启后,会自动查看日志中最新的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正地将缓存中的数据写入数据文件,这种
方式可以防止那些中断的操作修改数据文件。
事务日志记录数据库操作命令,仅记录执行数据发生的动作,而不是记录数据的执行结果。因此备份事务日志后,将备份点之前已经完成的事务标记为“不活动”,而且在执行完整备份数据库后,将自动截断标记为“不活动”的日志记录。合理的安排事务日志备份将提高数据恢复的能力,可以将数据恢复到发生故障前的 1 秒钟。
各种文件丢失恢复方法
数据文件丢失
数据库系统处于运行状态时,数据库文件处于“活动”状态,数据库文件不能被删除。如果确实出现数据文件被删除的情况,可能由于以下原因: MS SQL Server 数据库服务停止;或者在企业管理器中,数据库管理员使用“分离数据库”功能,分离数据库后将数据库文件删除。
当出现数据库文件被删除时,首先需要了解数据库文件如何被删除,再利用恢复软件恢复被删除的文件。如果是在服务被停止的状态下删除,数据库文件恢复后,数据库文件即可正常加载。如果是数据库分离后的删除,数据库文件恢复后,在企业管理器中,使用附加数据库功能即可。
日志文件丢失
日志文件丢失,经常出现在硬件出现故障时,主要体现在数据文件和日志分别存储在不同的物理介质中,当介质损坏时,日志文件随之丢失,丢失 SQL Server 日志文件分为两类:无活动事务的日志和包含活动事务的日志。
SQL Server 在工作状态下无法删除日志文件,事务日志文件在 SQL Server 服务未启动的情况正点可以被删除。启动 SQL 服务后,数据库即被标志为“置疑”状态,这种状态下丢失的日志文件为无活动事务日志文件。无活动事务的日志文件丢失时,首先在企业管理器中,使用分离数据库功能,分离“置疑”的数据库。然后,使用附加数据库功能附加数据库,在附加的过程中创建新的日志文件即可。
当包含活动事务日志的文件丢失时,使用无活动事务的日志丢失处理方法,将显示“数据库和日志文件不符合,不能附加数据库”错误信息。数据库管理员首先要停止 SQL Server 服务,将数据文件备份到安全 区域。然后启动 SQL Server 服务,创建新的同名数据库,再停止 SQL Server 服务,用备份的数据文件覆盖新创建的数据文件。以单用户模式启动 SQL Server 服务后,将数据库模式设置为紧急模式,使用“ DBCC CHECKDB ”命令检验数据库的状态,完成后将数据库设置为正常模式,即可完成数据库的修复。
数据表文件丢失
在业务系统中提供的数据删除功能和数据库管理员的在维护数据库过程中,使用 Delete 命令删除数据表中的数据,产生的结果完全相同。在工作中经常会遇到误删数据的情况。管理员发出删除数据命令后,首先将删除命令记录在日志文件中,然后在数据库中执行删除操作。由于数据行记录在数据页中,已经删除的数据页并没有真正删除“ Slot ”中的数据,只是将数据页标记为已经使用,如果有新的数据写入,不会对此类数据页写入数据。
在 SQL Server 数据库中,没有提供恢复数据行命令,标准的恢复删除数据的方法是使用基于备份的事务日志时间点功能。管理员在使用日志恢复时,经过多次定位时间点,可以还原删除的数据。
当数据库管理员发现数据误删后,可以使用 Log Explorer for SQL Server 工具恢复数据。首先立即备份数据库,停止 SQL Server 服务。然后启动上述工具,使用离事务日志文件功能,加载误删的日志文件。选择目标数据表以及执行删除操作的数据用户,设置过滤条件,在浏览日志窗口中显示相关的日志,使有“ Undo Transactions ”功能生成 InsertSQL 代码并保存到文本文件中,确认脚本正确后,使用“ Run SQL Script ”功能即可完成数据恢复。
数据库恢复
数据库恢复是数据库管理员必须掌握的基本技能。 SQL Server 数据库提供了 3 种数据库恢复模型:简单模型、完全模型和大容量日志记录模型,如果数据库可用,可按照如下流程恢复数据库:
1.ant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;">
备份尾日志。尾日志记录是自上一次数据库完整备份、差异备份或者日志备份后生成的日志。
2.
还原数据库备份 。该恢复过程可以在图形模式和查询分析器中完成。当数据库不能访问时,也可恢复数据库或者日志,数据库处于恢复过程中显示的状态为“正在装载”。
3.
还原备份的事务日志备份,恢复参数为“ No Recovery ”。
4.
用同样的方法还原尾日志。在还原尾日志的过程中恢复参数设置为“ With Recovery ”,恢复过程中自动回滚未提交的事务日志,根据需要选择时间点,数据库恢复即可完成。
企业备份数据的方法各不相同,数据库管理员应该了解数据库备份策略,要经常对数据库恢复和恢复过程进行测试 ,以便应对突发的数据库灾难。