Epi*_*lon 8 database firebird firebird2.5
这是一个非常直截了当的问题.Firebird有一个名为nbackup的备份工具,而您可以进行增量备份.
如果您没有按正确的顺序进行备份,该工具会抱怨(例如,您进行0级备份,然后进行2级备份).然后,我假设该工具在数据库中放置一个标志,指示上次备份的级别.
我该如何检索这些信息?
据我所知,唯一的方法是查询表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
Run Code Online (Sandbox Code Playgroud)
该表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(将delta文件合并回数据库) - > nbak_state_normal (没有备份).
第一个备份获得SCN 0,第二个SCN 3等(与哪个级别无关).
进行1级备份时,它会查找最后一级0备份,并备份SCN高于该0级备份的SCN的所有页面(依此类推).这在Firebird 2.1发行说明中也有描述:新的在线增量备份.
请注意,使用gbak进行备份和还原将清除RDB$BACKUP_HISTORY
表并将所有页面的SCN重置为0.原因是gbak创建了逻辑备份而不是物理备份.因此,使用gbak进行恢复将重写整个数据库(甚至可以更改页面大小).这使得以前的备份与nbackup无关,作为后续备份的起点:您需要从新的0级开始.
由于nbackup手册中缺少此信息,我在Firebird跟踪器上创建了一张票:http://tracker.firebirdsql.org/browse/DOC-94