首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能知道上一次增量备份的级别,即使用Firebird的nbackup进行的备份?

是否有可能知道上一次增量备份的级别,即使用Firebird的nbackup进行的备份?
EN

Stack Overflow用户
提问于 2014-08-28 18:01:55
回答 1查看 781关注 0票数 8

这是个很简单的问题。Firebird有一个名为nbackup的备份工具,而您可以进行增量备份。

如果没有按照正确的顺序进行备份(例如,进行0级备份,然后是第2级备份),则该工具会发出抱怨。然后,我假设该工具在数据库中放置了一个标志,指示上一次备份的级别。

文档提供这里

我怎样才能检索到这些信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-28 18:40:14

据我所知,唯一的方法是查询表RDB$BACKUP_HISTORY (没有服务管理器对此进行调用)。要获得您可以使用的最后一个备份:

代码语言:javascript
复制
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,等等(不管是哪个级别)。

  • SCN 0:备份前的页面
  • SCN 1:备份期间写入/更新到增量文件的页面
  • SCN 2:在将增量文件合并为主备份期间写入/更新的页面(虽然我不确定写回主文件的增量文件中的页面是否得到SCN 1或2)
  • SCN 3:在第一次backup+merge结束后编写/更新的页面
  • ..。
  • SCN6:结束第二个backup+merge后编写/更新的页面

当您进行一级备份时,它将查找最后一个0级备份,并使用高于该级别0备份(以此类推)的SCN备份所有页面。火鸟2.1发布说明中也描述了这一点:新的在线增量备份

注意,使用gbak进行备份和还原将清除RDB$BACKUP_HISTORY表,并将所有页面的SCN重置为0。其原因是gbak创建逻辑备份而不是物理备份。因此,使用gbak进行还原将重写整个数据库(甚至可以更改页面大小)。这使得以前的备份没有意义,作为后续备份的起点:您需要从一个新的0级别开始。

由于nbackup手册中缺少此信息,我已在Firebird跟踪器上创建了一张票证:http://tracker.firebirdsql.org/browse/DOC-94

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25555214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档