这是一个非常直截了当的问题。 Firebird有一个名为 nbackup 的备份工具,而您可以进行增量备份。
如果您没有按正确的顺序进行备份,该工具会抱怨(例如,您进行0级备份,然后进行2级备份)。然后,我假设该工具在数据库中放置一个标志,指示上次备份的级别。
提供了文档here
如何检索此信息?
答案 0 :(得分:9)
据我所知,唯一的方法是查询表RDB$BACKUP_HISTORY
(没有服务管理器调用此方法)。要获得最后一次备份,您可以使用:
SELECT RDB$BACKUP_ID, RDB$TIMESTAMP, RDB$BACKUP_LEVEL, RDB$GUID, RDB$SCN, RDB$FILE_NAME
FROM RDB$BACKUP_HISTORY
ORDER BY RDB$TIMESTAMP DESC
ROWS 1
表RDB$BACKUP_HISTORY
包含以下列:
RDB$BACKUP_ID
主键RDB$TIMESTAMP
备份时间戳RDB$BACKUP_LEVEL
备份级别RDB$GUID
指导备份(这也用于备份文件中以控制和检查依赖关系)RDB$SCN
最高页面标记(见下文)RDB$FILE_NAME
已创建备份的文件名Nbackup对数据库页面进行物理备份。 SCN(页面扫描的缩写...)是用于标记数据库页面的数字。此数字在每次备份状态更改时递增,对于每个备份,nbackup有3个状态更改:nbak_state_normal(无备份) - > nbak_state_stalled(数据库写入增量文件) - > nbak_state_merge(将delta文件合并回数据库) - > nbak_state_normal(没有备份)。
第一个备份获得SCN 0,第二个SCN 3等(与哪个级别无关)。
进行1级备份时,它会查找最后一级0备份,并备份SCN高于该0级备份的SCN的所有页面(依此类推)。 Firebird 2.1发行说明中也对此进行了描述:New On-line Incremental Backup。
请注意,使用 gbak 进行备份和还原将清除RDB$BACKUP_HISTORY
表,并将所有页面的SCN重置为0.原因是gbak会创建逻辑备份物理备份。因此,使用gbak进行恢复将重写整个数据库(甚至可以更改页面大小)。这使得以前备份与nbackup无关,作为后续备份的起点:您需要从新的0级开始。
由于nbackup手册中缺少此信息,因此我在Firebird跟踪器上创建了一个故障单:http://tracker.firebirdsql.org/browse/DOC-94