这是个很简单的问题。Firebird有一个名为nbackup的备份工具,而您可以进行增量备份。
如果没有按照正确的顺序进行备份(例如,进行0级备份,然后是第2级备份),则该工具会发出抱怨。然后,我假设该工具在数据库中放置了一个标志,指示上一次备份的级别。
文档提供这里
我怎样才能检索到这些信息?
发布于 2014-08-28 18:40:14
据我所知,唯一的方法是查询表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 guid (在备份文件中也使用它来控制和检查依赖项)RDB$SCN最高页面标记(见下文)RDB$FILE_NAME文件名Nbackup对数据库页进行物理备份。SCN (页面扫描的缩写)用于标记数据库页的数字。此数字在每次备份状态更改时都会增加,对于每一次具有nbackup的备份,有3种状态更改: nbak_state_normal (无备份)、-> nbak_state_stalled (数据库写入增量文件)、-> nbak_state_merge (将增量文件合并回数据库)、-> nbak_state_normal (无备份)。
第一个备份得到SCN 0,第二个SCN 3,等等(不管是哪个级别)。
当您进行一级备份时,它将查找最后一个0级备份,并使用高于该级别0备份(以此类推)的SCN备份所有页面。火鸟2.1发布说明中也描述了这一点:新的在线增量备份。
注意,使用gbak进行备份和还原将清除RDB$BACKUP_HISTORY表,并将所有页面的SCN重置为0。其原因是gbak创建逻辑备份而不是物理备份。因此,使用gbak进行还原将重写整个数据库(甚至可以更改页面大小)。这使得以前的备份没有意义,作为后续备份的起点:您需要从一个新的0级别开始。
由于nbackup手册中缺少此信息,我已在Firebird跟踪器上创建了一张票证:http://tracker.firebirdsql.org/browse/DOC-94
https://stackoverflow.com/questions/25555214
复制相似问题