如何在InterBase XE7中通过在线转储实现备份
Dmitry Kuzmenko,2016年9月8日
自2007版本起,InterBase支持在线转储–在线数据库文件复制。与gbak -b/-c不同,这使您在复制后即可获得可直接使用的数据库,无需从备份中“恢复”(备份本身并非数据库)。在线转储速度非常快,几乎等同于操作系统级别的文件复制。
使用以下命令对数据库进行在线转储:
gbak -d [options] database target
(完整的转储说明可在文档Doc\OpGuide.pdf中查找,或点击此处查看)
与数据库文件一样,目标文件可以任意命名和扩展名。命令执行结果将生成一个与原始数据库等效的转储文件,但该文件处于只读模式。
首次运行此命令所需的时间为扫描(读取)源数据库的时间加上写入目标文件的时间。
在目标文件处于只读模式期间,它与数据库文件保持关联。首次转储时,将读取并复制整个数据库文件到目标。第二次及后续转储时,仅将更改的页面写入目标。这被称为“增量转储”。
重要提示!InterBase XE7在每次重复执行转储命令时(当然,使用相同的文件名),仅读取数据库的更改页面并写入目标。XE7之前的其他版本会读取整个源数据库。因此,性能有所不同,XE7要快得多。如果源数据库中没有页面被更改,XE7的增量转储大约只需1秒,而InterBase2007-XE3则需要花费读取整个数据库文件所需的时间。该时间取决于源数据库的大小和存储速度。例如,如果存储速度约为400MB/秒,那么扫描100GB的数据库将需要250秒(4分10秒)。
注意:InterBase XE7支持XE7(ODS 16)、XE/XE3(ODS 15)和2009(ODS 13)的数据库文件格式。上述提到的智能扫描功能仅适用于XE7(ODS 16)数据库格式。
如果您需要将目标文件切换为读写模式(正常模式),请使用命令:
gfix target -mode read_write
但此后,目标文件将失去与数据库的关联,后续再运行gbak -d database target将不再可能,因为目标文件被视为“另一个”数据库。
如果您希望完全覆盖目标文件,而不是进行增量转储,请使用-ov选项:
gbak -d -ov database target
转储的转储
首次转储的转储可以正常工作,但后续的增量转储则不行。例如,首先执行:
gbak -d database target1
这里我们得到target1作为完整转储的只读数据库。
接下来执行:
gbak -d target1 target2
如您所见,我们创建了转储的转储。是的,此命令会将target1复制到target2。两个目标文件都将处于只读模式。但如果我们再次重复这两个命令,从数据库到target1的更改将不会被复制到target2。因此,target2将保持在首次初始复制后的状态,且不会出现任何错误或警告消息。
所以,如果您想进行转储的转储,应仅使用完整转储:
gbak -d -ov target1 target2
必须使用-ov选项,以确保target2将被target1的源数据写入(并覆盖)。
备份方案1
不同时间间隔的转储示例:
gbak -d database target
例如,每小时运行一次。这里我们有生产源数据库和落后一小时的“备份”副本target。
此外,每24小时我们还可以运行:
gbak -d database target2
这里我们有生产数据库、落后1小时的target副本,以及落后24小时的target2副本。
您可以从一个数据库创建任意数量的转储。
毋庸置疑,目标转储可以作为只读数据库用于任何目的–报表、分析等,适用于不需要查看实时数据库的任务。
优点:每个转储可以独立调度。
缺点:最新和最旧转储之间存在时间差。
备份方案2
按顺序转储到不同目标。在这种情况下,您需要调整某个调度器(操作系统或自定义)按指定时间间隔运行以下命令:
gbak -d database target1
gbak -d database target2
gbak -d database target3
如果这些命令之间的间隔为1小时,您将获得如下转储(备份):
target1在12:00,target2在13:00,target3在14:00。下一次运行转储target1将在15:00更新,依此类推。结果,我们将拥有最近3小时的数据库副本。
优点:我们拥有多个小时的转储,且与原始数据库保持接近。
缺点:调度这些命令稍显复杂。即在此示例中,转储命令需要按精确时间调度:
转储到target1在00:00、03:00、06:00…
转储到target2在01:00、04:00、07:00…
转储到target3在02:00、05:00、08:00…
总结
Gbak -d可用于本地存储的转储,也可用于网络转储–因为增量转储仅向目标发送更改的页面。因此,目标可以放置在远程网络存储上。但当然,网络必须具有足够的带宽以匹配本地存储的速度。否则,写入目标将变慢。
在线转储不仅可以用作创建数据库在线备份副本的工具,还可以用作实现系统“水平扩展”的工具,以平衡生产、报表和分析应用程序的负载。
虽然您看到在线转储是获取在线数据库副本的最快方式(而不是gbak -b/-c),但由于转储操作基于页面,如果数据库损坏,它可能会跳过某些页面上的损坏。因此,您仍然需要使用老牌的gbak -b/-c来检查数据库一致性,但可以比之前减少检查频率。