Berkeley DB数据库和日志文件归档

来源:互联网 发布:mac打印jpeg 编辑:程序博客网 时间:2024/04/19 08:06

Berkeley DB数据库和日志文件归档

归档数据库和日志文件目的是提供面对数据库的灾难性故障的可恢复性,最大限度地减少发生物理硬件故障导致数据丢失。
首先,你可能需要定期创建数据库快照(也就是备份),以使数据有可能从灾难性故障中恢复。快照是一个标准的备份,可以创建一个和某个时间点的数据库一致的备份;或联机备份(也称为热备份),它创建的是一段时间内未指定时间点的数据库备份。
热备份的优点在于应用程序在创建快照时可以继续读取和写入数据库。热备份的缺点是,更多的信息必须存档,并且恢复到介于开始和完成备份之间的一个不确定的时间点。
其次,创建数据库快照后,您应该定期归档环境中被创建的日志文件。日志文件对数据库存档中的完整和增量备份的文件系统是不可缺少的。快照是一个完全备份,而当前日志文件的定期归档是一个增量备份。例如,合理规划每周或每月创建一个完整的快照,以及每日归档日志文件。同时使用快照和日志文件,一个灾难性的崩溃随时可以恢复到最近的日志归档的时间。


创建标准的数据库备份,请执行以下步骤:
1.提交或中止所有正在进行的事务。
2.停止写入数据库,直到备份完成。这时允许只读操作,但不能有写操作,不允许进行文件系统操作(例如,DB_ENV->remove和DB->open方法可能不会被调用) 。
3.强制做环境下检查点(参见db_checkpoint获取更多信息) 。
4.运行db_archive -s来列出所有的数据库数据文件,并将其复制到一个备份设备,如CD-ROM、备用磁盘或磁带。
如果数据库文件存储在与其他Berkeley DB的文件不同的一个单独的目录,可以简单地存档目录而不是单个文件本身(参见DB_ENV->set_data_dir了解更多信息) 。注意:如果数据库文件在当前日志文件的生命周期内没有一个打开的DB句柄, db_archive就不会列出在它的输出中。基于此原因,采用更简单的方法,可以使用一个分开的数据库文件目录,归档整个目录而不是归档通过db_archive列出的文件。
5.运行db_archive -l来列出所有的日志文件,复制最后一个(也就是具有最高序号的那个)到一个备份设备,如CD-ROM,备用磁盘或磁带。

创建数据库的热备份,请执行以下步骤:
1.运行db_archive列出不再使用的日志文件。这些日志文件不是本机热备份的一部分,在热备份成功执行后可以被丢弃。它们可以和先前的热备份一起使用,使数据库恢复到更前的点。
2.按照先前的步骤4所描述的方法存档数据库。你不必停止正在进行的事务或强制做检查点。在热备份的情况下,您使用的复制数据库的工具必须能够以原子方式读取数据库页(如Berkeley DB的可恢复性中描述的那样)。
3.当执行热备份时,还必须归档所有步骤1中未列出的日志文件。请注意,必须保证这两个操作的顺序,即数据库文件必须在日志文件之前进行归档。这意味着,如果数据库文件和日志文件在同一个目录下,你不能简单地归档目录;您必须确保档案的正确顺序保持不变。
要归档日志文件,运行db_archive -l来列出所有数据库日志文件,并将它们复制到备份介质。如果数据库的日志文件存储在与数据库文件不同的一个单独目录中,可以简单的归档目录而不是单个文件本身(见DB_ENV->set_lg_dir方法获取更多信息) 。

一旦完成这些步骤,你的数据库就可以从灾难性故障中进行恢复(见恢复过程的详细信息)。
要更新您的快照,以便从灾难性故障中恢复到一个新的时间点,重复热备份中的步骤2 - 复制所有现有的日志文件到备份设备。这种方法适用于标准备份和热备份; 也就是说,您可以更新快照使之可用做任何一种方式备份使用。每当数据库和日志文件复制到备份介质,您可以放弃所有以前的数据库快照和保存的日志文件。仅仅归档日志文件则不允许你放弃以前的数据库快照或日志文件。

Berkeley DB日志文件删除

考虑到数据库日志文件会不断增长,最终耗尽磁盘空间。因此,Berkeley DB日志文件需要定期删除,以节省磁盘空间。出于从数据库和日志文件进行灾难性恢复,需要创建一个数据库快照或复制归档日志文件,而不是简单地删除日志文件。


日志文件可以在任何时候被删除,只要:

  •   日志文件不参与活动事务。
  •   一个检查点已被写入到后续创建的日志文件。
  •   日志文件不是在环境中唯一的日志文件。

如果你要规划灾难性故障恢复,在删除之前需要将日志文件复制到归档介质中。

   
如果你不规划灾难性故障恢复,使用以下任何一种方法可以用来删除日志文件:
1.运行带有-d选项的独立db_archive实用工具,删除不再需要的日志文件。
2.从应用程序中调用DB_ENV->log_archive方法,携带DB_ARCH_REMOVE标志,删除不再需要的日志文件。
3.从应用程序中调用DB_ENV->set_flags方法,携带DB_LOG_AUTOREMOVE标志,以删除不在使用中的任何日志文件。有了这个配置,Berkeley DB将自动删除日志文件,应用程序将不会有机会复制日志文件到备份介质。

0 0