创建对象级别备份

使用对象级别备份可备份单个架构或表。对象级备份特别适用于多租户数据库站点。例如,一个国际机场可以使用多租户数据库来表示其架构中的不同航线。然后,可以使用表来维护不同类型的航线信息,其中包括“抵达 (ARRIVALS)”、“出港 (DEPARTURES)”以及“乘客 (PASSENGER)”信息。对于此类组织,通过创建特定架构的对象级备份,您可以按航线租户或任何其他重要数据分段进行还原。

若要创建一个或多个对象级备份,请创建一个配置文件,该文件用于指定备份位置、对象级备份名称以及要包括的对象的列表(一个或多个架构和表)。您可以将 includeObjectsexcludeObjects 参数与通配符一起使用,以指定所需对象。有关指定要包含对象的详细信息,请参阅包括和排除对象

有关完整备份或对象级别备份的配置文件的详细信息,请参阅示例 vbr 配置文件配置文件参考

尽管并非必须,但 Vertica 建议您首先创建一个完整备份,然后再创建任何对象级别备份。

执行备份

在您可以创建备份之前,必须先使用 vbr -init 任务准备备份目录。您还必须创建一个配置文件来指定要备份的对象。

使用数据库群集中某个节点的数据库管理员帐户,从终端运行 vbr。您无法以 root 身份运行 vbr

您可以创建对象级别备份,如下例所示。

$ vbr --task backup --config-file objectbak.ini
Preparing...
Found Database port:  5433
Copying...
[==================================================] 100%
All child processes terminated successfully.
Committing changes on all backup sites...
backup done!

命名约定

为每个对象级备份配置文件提供一个独特的描述性名称。例如,在机场航站楼,基于架构的备份配置文件使用的命名约定为:带有航线前缀,后跟进一步的描述。例如:

AIR1_daily_arrivals_backup

AIR2_hourly_arrivals_backup

AIR2_hourly_departures_backup

AIR3_daily_departures_backup

当存在数据库和对象级别备份时,您就可以对所选的备份进行恢复。

了解对象级别备份的内容

对象级别备份仅包含还原架构或表所需的元素,其中包括选定对象、依赖对象和主体对象。对象级别备份包括以下内容:

  • 存储:属于任何指定对象的数据文件

  • 元数据:包括群集拓扑、时间戳、时期、AHM 等

  • 编录片段:序列化到主体对象和依赖对象中的永久编录对象

例如,AIR2 包含的某些元素是其父架构、表、命名序列、主键和外键约束等。要创建此类备份,vbr 将保存与该表直接关联的对象。它还保存任何依赖项(如外键 (FK) 表),并创建要从中还原备份的对象映射。

在对象级别备份之后进行更改

请注意对象级别备份后所做的更改如何影响后续备份。假设您创建一个对象级别备份,然后从数据库中删除架构和表。在这种情况下,您删除的对象也会从后续备份中删除。如果您未保存对象备份的存档,则此类对象可能会永久丢失。

如果在创建表备份之后更改表名,还原备份之后,对表名的更改将失效。假设您在创建一个备份后删除了一位用户,而该用户拥有该备份中的任何选定对象或依赖对象。在这种情况下,还原备份会重新创建对象并将所有权分配给执行还原操作的用户。如果某个已还原对象的所有者仍然存在,则该用户会保留这个已还原对象的所有权。

要从备份中还原已删除的表:

  1. 将新创建的表从 t1 重命名为 t2。

  2. 还原包含 t1 的备份。

  3. 还原 t1。表 t1 和 t2 现在同时存在。

有关 Vertica 如何处理对象覆盖的信息,请参考 [misc] 中的 objectRestoreMode 参数。

完成对象备份后,K-safety 可能会提高。如果同时出现以下两种情况,则备份还原失败:

  • K-safety 提高。

  • 备份中的任何表都没有足够的投影。

更改主体对象和依赖对象

如果您先创建一个备份,然后删除一个主体对象,则还原备份会还原该主体对象。如果已还原对象的所有者也被删除,则 Vertica 会将已还原对象分配给当前 dbadmin。

您可以在 vbr 配置文件中指定 Vertica 如何处理对象覆盖。有关详细信息,请参考 [misc] 中的 objectRestoreMode 参数。

标识和自动增量序列是依赖对象,因为它们必须与其表同时存在。对象级别备份包括此类对象以及它们所依赖的表。

命名序列不是依赖对象,因为它们自主存在。在您删除使用某个命名序列的表之后,该命名序列仍然存在。在这种情况下,命名序列是一个主体对象。因此,您必须备份命名序列和表。如果在您还原表时命名序列尚不存在,则您可以重新生成序列。如果该序列存在,则 vbr 会使用它,而不会进行修改。如果您还原完整数据库,然后将表备份还原到较新的时期,则序列值可能会重复。

考虑约束引用

当数据库对象通过约束进行关联时,您必须将它们一起备份。例如,如果某架构所含表的约束仅引用该架构中的表,则可以对此架构进行备份。但是,如果某架构包含的表具有另一个架构中某个表的 FK/PK 约束,则无法对此架构进行备份。要备份第二个表,您必须将另一个架构包括在选定对象的列表中。

对象级别备份的配置文件

vbr 会自动将具有不同备份名称但备份位置相同的配置进行关联。

始终创建一个群集范围内的配置文件以及一个或多个指向同一备份位置的对象级配置文件。由于各个备份之间的存储是共享的,因此相同数据不会存在多个副本。对于对象级别备份,使用相同的备份位置会使 vbr 遇到较少的 OID 冲突预防技巧。避免 OID 冲突预防可以减少还原备份时出现的问题。

使用具有相同备份位置的群集和对象配置文件时,vbr 会包括附加配置来确保在完成完整群集还原后可以使用对象级别备份。还原完整群集的一种方法是使用完整数据库备份来启动群集。群集再次处于运行状态后,您即可还原架构和表的最近对象级别备份。

尝试使用对象级别配置文件还原完整数据库失败,导致以下错误:

VMart=> /tmp/vbr --config-file=Table2.ini -t restore
Preparing...
Invalid metadata file. Cannot restore.
restore failed!

有关详细信息,请参阅从对象级别备份中还原所有对象

备份时期

每个备份都包括可以将其内容还原到的时期。当 vbr 还原数据时,Vertica 会更新到当前时期。

vbr 会在错误出现和备份失败之前尝试创建对象级别备份五次。