从对象级别备份中还原所有对象

要将对象级别备份中的所有对象还原到其最初提取时的数据库,请使用 vbr 还原任务以及创建备份所使用的配置文件,如以下示例所示:

$ vbr --task restore --config-file MySchema.ini
Copying...
1871652633 out of 1871652633, 100%
All child processes terminated successfully.
restore done!

数据库必须处于开启状态。

通过配置配置文件中的 objectRestoreMode 参数,您可以指定 Vertica 如何对重复的对象作出反应。

HDFS 存储位置不支持对象级别备份和还原。

将对象还原到已更改的群集

与从完整数据库备份进行还原不同,vbr 支持在向群集添加节点后还原对象级别备份。创建对象级别备份时不在群集中的任何节点都不参与还原。您可以在还原后重新平衡群集,从而在新节点之间分配数据。

删除节点、更改节点名称或更改 IP 地址后,不能还原对象级别备份。若尝试在执行此类更改后还原对象级别备份,将导致 vbr 失败并显示以下消息:

Preparing...
Topology changed after backup; cannot restore.
restore failed!

还原后的投影时期

所有对象级别备份和还原事件都被视为 DDL 事件。如果某个表不参与对象级别备份(可能由于节点处于关闭状态),还原备份会对投影产生以下影响:

  • 投影时期重置为 0。

  • 投影必须还原其不具有的任何数据(通过比较时期和其他恢复过程)。

还原期间的编录锁

与其他数据库一样,Vertica 事务将遵循严格的锁定协议,以便保持数据完整性。

将对象级别备份还原到处于 UP 状态的群集时,vbr 会首先复制数据并管理存储容器。如有必要,vbr 会拆分容器。此进程不需要任何数据库锁。

完成数据复制任务后,vbr 首先需要一个表对象锁 (O-lock),然后需要一个全局编录锁 (GCLX)。

在某些情况下,当该进程尝试获取表中的 O 锁时,其他数据库操作(例如 DML 语句)会保持正在进行。在这种情况下,vbr 进程会被阻止,直到 DML 语句完成并释放锁为止。依次获得 O-lock 和 GCLX 锁之后,vbr 会阻止其他在同一个表上需要锁的操作。

vbr 持有其锁时,将阻止同时修改表。为了允许完成对象级别的还原,将取消数据库系统操作(例如将数据从内存传输到磁盘的 Tuple Mover (TM))。

编录还原事件

每个对象级别备份都包含一个数据库编录部分,称为片段。片段包含选定对象、其依赖对象和主体对象。编录片段在结构上类似于数据库编录,但包含一个表示对象信息的子集。可以从编录片段中读取所还原的对象,并使用此类对象来更新全局和局部编录。

已还原备份中的每个对象将在编录中进行更新。如果对象不再存在,vbr 会将该对象从编录中删除。不在备份中的任何依赖对象也将从编录中删除。

vbr 实用程序将使用现有的依赖项验证方法来检查编录,并将还原事件添加到每个已还原表的编录中。该事件还包括发生该事件的时期。如果某个节点缺少还原表事件,则该节点将还原锚定在给定表上的投影。

Vertica 支持将对象复制和还原到目标数据库,但最多支持比当前数据库版本晚一个次要版本。例如,您可以将对象从 11.0.x 数据库复制或还原到 11.1.x 数据库。不同版本的还原或复制过程与相同版本的过程相同。

如果还原或复制的对象需要数据库中不存在的更高版本的 UDx 库,Vertica 将显示以下错误:

ERROR 2858:  Could not find function definition

通过在目标数据库中安装兼容库,您可以解决此问题。

执行还原时,如果编录大小大于节点中可用总内存的 5%,则对象级还原可能会失败。在这种情况下,Vertica 建议从备份中还原单个对象。有关详细信息,请参考 还原单个对象

另请参阅