扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
数据库网络管理员都有可能遇到数据库崩溃的时候。若故障发生时,计算机未必有时间把未完成的事务和内存中的数据页写入磁盘,将可能出现数据丢失或者数据库不能正常访问的故障,轻则使企业的业务系统不能运行,重则可能会给企业带来灾难性的损失。数据库管理员最重要的职责是保证数据库系统正常运行,为决策层领导提供数据支持,这是数据库管理员的基本目标。数据库管理员需要了解数据库文件结构原理,不同情况下数据丢失的恢复方法,以沉着应对各种数据丢失的突发事件。
文件组成原理
SQL Server数据库系统主要由两大部分组成,分别是数据文件以及日志文件。数据文件存储数据,日志文件存储操作数据的行为。
数据文件
SQL Server数据库包含两种类型的数据文件:主数据文件和次要数据文件。主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件。主数据文件默认文件扩展名是.mdf。除主数据文件以外的所有其他数据文件都是次要数据文件。某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是.ndf。
日志文件
日志文件在数据库中作用十分重要。在执行数据操作的过程中,首先将数据操作命令写入到缓存中,并立即写入日志文件,但不会立即写入数据文件。日志文件通过一个标记点来确定某个操作是否已将缓存中的数据写入数据文件。当SQLServer重启后,会自动查看日志中最新的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正地将缓存中的数据写入数据文件。这可以防止那些中断的操作修改数据文件。
事务日志记录数据库操作命令,仅记录执行数据发生的动作,而不是记录数据的执行结果。因此备份事务日志后,将备份点之前已经完成的事务标记为“不活动”,而且在执行完整备份数据库后,将自动截断标记为“不活动”的日志记录。合理的安排事务日志备份将提高数据恢复的能力,可以将数据恢复到发生故障前的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能够帮助管理员管理、监控数据库日志,如图1所示。Log Explorer支持联机事务日志文件和离线事务日志文件。当管理员发现数据误删后,建议立即备份数据库,停止SQL Sever服务。启动该工具,使用离线事务日志文件功能,加载误删的日志文件。选择目标数据表以及执行删除操作的数据库用户,设置过滤条件,在浏览日志窗口中显示相关的日志,使用“Undo Transactions”功能生成InsertSQL代码并保存到文本文件中,确认脚本正确后,使用“Run SQL Script” 功能即可完成数据恢复。用户错误执行“Update”脚本后,使用同样的方法可以生成“Update”脚本,将数据恢复到修改前的状态。
数据库恢复
数据库恢复是数据库管理员必须掌握的基本技能。SQL Server数据库提供了3种数据恢复模型,分别为:简单模型、完全模型、大容量日志记录模型。
如果数据库可用,可按照如下流程恢复数据库:
1. 备份尾日志。尾日志记录是自上一次数据库完整备份、差异备份或者日志备份后生成的日志。
2. 还原数据库备份。该恢复过程可以在图形模式和查询分析器中完成,如图2所示。当数据库不能访问时,也可恢复数据库或者日志,数据库处于恢复过程中显示的状态为“正在装载”。
3.还原备份的事务日志备份,恢复参数为“No Recovery”。
4.用同样的方法还原尾日志。在还原尾日志的过程中恢复参数设置为“With Recovery”,恢复过程中自动回滚未提交的事务日志,根据需要选择时间点,数据库恢复即可完成。
企业备份数据的方法各不相同,数据库管理员应该了解数据库备份策略,要经常对数据库恢复和恢复过程进行测试,以便应对突发的数据库灾难。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者