返回首页

gbase数据、南大通用产品文档:GBase8a表级备份数据恢复

更新日期:2024年09月11日

功能说明

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
407
将备份目录中指定的表的备份数据,恢复至GBase8a MPP Cluster 数据库中。
注意

恢复表前需要先删除表。

恢复完成后需要对恢复的表执行refresh table 操作,该表才能被正常使用。
如:refresh table vcname.dbname.tbname;
语法格式
recover table .. [ [point_id]]
表4- 59 options 可选项说明
参数名称


vc_name
要恢复的数据库所属的虚拟集群名
database_name
待恢复的表所属的数据库名
table_name
待恢复的表名
cycle_id
备份周期的ID
point_id
备份点的ID
recover 命令有以下三种形式:

recover table vcname.dbname.tbname: 将表恢复到最新周期的最新备份点。

recover table vcname.dbname.tbname cycle_id: 将表恢复到指定周期cycle_id 内
的最新备份点。

recover table vcname.dbname.tbname cycle_id point_id: 将表恢复到指定周期
cycle_id 内的指定备份点point_id。
示例
示例1:对数据库中表级备份数据进行恢复。
删除待恢复的表:
$ gccli -uroot -e"drop table vc1.demo.t"
$
恢复表:
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d
/home/gbase/backupT -P gbasedba -e "recover table vc1.demo.t"

在您将集合检索至集合变量内之后,您可将值插入至该集合变量。INSERT 语句的语法略
有不同,这依赖于您想要条件到的 集合的类型。

插入至 SET 或 MULTISET 内
要插入至存储在集合变量中的 SET 或 MULTISET 内,请使用 INSERT 语句,并跟在带
有集合变量的 TABLE 关键字之后,如下图所示。
图: 插入至存储在集合变量中的 SET 或 MULTISET 内。
INSERT INTO TABLE(p_coll) VALUES(3);
TABLE 关键字使得集合变量成为集合派生的表。在 处理 SELECT 语句中的集合 部分中
描述集合派生的表。前图派生的集合是一列的虚拟表,集合的每一元素表示表的一行。在
插入之前,请将 p_coll 考虑作为包含下图展示的行(元素)的虚拟表。
图: 虚拟表元素。
5

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 295 -

7
31
19
13
在插入之后,p_coll 可能看上去像下图所示的虚拟表一样。
图: 虚拟表元素。
5
7
31
19
13
3
由于该集合为 SET,因此,将新的值添加到该集合,但未定义新元素的位置。对于
MULTISET ,适用同样的原理。
提示: 您一次仅可将一个值插入至简单的集合内。

插入至 LIST 内
如果集合为 LIST,则您可将新的元素添加在 LIST 中的特定点,或添加在 LIST 的末尾。
如同 SET 或 MULTISET 一样,
您必须首先定义集合变量,
并从数据库将集合选择至该集
合变量内。
下图展示您需要定义集合变量并从 numbers 表选择 LIST 至该集合变量内的语句。
图: 定义集合变量并选择 LIST。
DEFINE e_coll LIST(INTEGER NOT NULL);

SELECT evens INTO e_coll FROM numbers
WHERE id = 99;
此时,e_coll 的值可能为 LIST {2,4,6,8,10}。由于 e_coll 保存 LIST,因此,每一元素有在
该列表中的编号的位置。
要将元素添加在 LIST 中特定的位置,
请将 AT position 子句添加
到 INSERT 语句,如下图所示。
图: 将元素添加在 LIST 中特定的点。
INSERT AT 3 INTO TABLE(e_coll) VALUES(12);
现在,e_coll 中的 LIST 有元素 {2,4,12,6,8,10},依此顺序。
您在 AT 子句中为 position 输入的值可为数值或变量,但它必须有 INTEGER 或
SMALLINT 数据类型。您不可使用字母、浮点数值、十进制值或表达式。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 296 -


检查 LIST 集合的基数
有时,您可能想要将元素添加在 LIST 的末尾。在此情况下,您可使用 cardinality() 函数来
找到 LIST 中的元素的编号,然后输入一个大于cardinality() 返回的值的位置。
GBase 8s 允许您随同存储在列中的集合来使用 cardinality() 函数,
但不允许随同存储在集合
变量中的集合来使用。在 SPL 例程中,您可以 SELECT 语句检查列中的集合的基数,并
将该值返回给变量。
假设在 numbers 表中,其 id 列为 99 的那一行的 evens 列仍然包含集合 LIST {2,4,6,8,10}。
这一次,您想要将元素 12 添加在该 LIST 的末尾。您可使用 SPL 过程 end_of_list 实现,
如下图所示。
图: end_of_list SPL 过程。
CREATE PROCEDURE end_of_list()

DEFINE n SMALLINT;
DEFINE list_var LIST(INTEGER NOT NULL);

SELECT CARDINALITY(evens) FROM numbers INTO n
WHERE id = 100;

LET n = n + 1;

SELECT evens INTO list_var FROM numbers
WHERE id = 100;

INSERT AT n INTO TABLE(list_var) VALUES(12);

END PROCEDURE;
在 end_of_list 中,
变量 n 保存 cardinality() 返回的值,
即,
LIST 中的项数。
LET 语句使 n 递
增,
以便于 INSERT 语句可在 LIST 的最后的位置插入值。
SELECT 语句将来自该表的一
行的集合选择至集合变量 list_var 内。INSERT 语句将元素 12 插入在该列表的结尾。

VALUES 子句的语法
当您插入至 SPL 集合变量内时,VALUES 子句的语法与当您插入至集合列内时是不一样
的。将文字插入至集合变量内的语法规则如下:
在 VALUES 关键字之后使用圆括号来括起值的完整列表。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 297 -

如果您正在插入至简单的集合内,则无需使用类型构造函数或方括号。
如果您正在插入至嵌套的集合,则您需要指定文字的集合。

备份控制函数
备份控制函数可帮助进行在线备份。

pg_create_restore_point(name text)
描述:为执行恢复创建一个命名点。
(需要管理员角色)
返回值类型:text
备注:pg_create_restore_point 创建了一个可以用作恢复目的、有命名的事务日志记录,
并返回相应的事务日志位置。在恢复过程中,recovery_target_name 可以通过这个名称定位
对应的日志恢复点,并从此处开始执行恢复操作。
避免使用相同的名称创建多个恢复点,因
为恢复操作将在第一个匹配(恢复目标)的名称上停止。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
442

pg_current_xlog_location()
描述:获取当前事务日志的写入位置。
返回值类型:text
备注:pg_current_xlog_location 使用与前面那些函数相同的格式显示当前事务日志的写
入位置。如果是只读操作,不需要系统管理员权限。

pg_current_xlog_insert_location()
描述:获取当前事务日志的插入位置。
返回值类型:text
备注:pg_current_xlog_insert_location 显示当前事务日志的插入位置。插入点是事务日
志在某个瞬间的“逻辑终点”
,而实际的写入位置则是从服务器内部缓冲区写出时的终点。
写入位置是可以从服务器外部检测到的终点,
如果要归档部分完成事务日志文件,
则该操作
即可实现。插入点主要用于服务器调试目的。如果是只读操作,不需要系统管理员权限。

gs_current_xlog_insert_end_location()
描述:获取当前事务日志的插入位置。
返回值类型:text
备注:gs_current_xlog_insert_end_location 显示当前事务日志的实际插入位置。

pg_start_backup(label text [, fast boolean ])
描述:开始执行在线备份。
(需要管理员角色或复制的角色)
返回值类型:text
备注:
pg_start_backup 接受一个用户定义的备份标签(通常这是备份转储文件存放地点
的名称)

这个函数向GBase 8c 的数据目录写入一个备份标签文件,
然后以文本方式返回备
份的事务日志起始位置。
gbase=# SELECT pg_start_backup('label_goes_here');
pg_start_backup

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
443
-----------------
0/20000028
(1 row)

pg_stop_backup()
描述:完成执行在线备份。
(需要管理员角色或复制的角色)
返回值类型:text
备注:
pg_stop_backup 删除pg_start_backup 创建的标签文件,
并且在事务日志归档区里
创建一个备份历史文件。这个历史文件包含给予pg_start_backup 的标签、备份的事务日志
起始与终止位置、备份的起始和终止时间。返回值是备份的事务日志终止位置。计算出中止
位置后,当前事务日志的插入点将自动前进到下一个事务日志文件,
这样,结束的事务日志
文件可以被立即归档从而完成备份。

pg_switch_xlog()
描述:切换到一个新的事务日志文件。
(需要管理员角色)
返回值类型:text
备注:pg_switch_xlog 移动到下一个事务日志文件,以允许将当前日志文件归档(假定
使用连续归档)
。返回值是刚完成的事务日志文件的事务日志结束位置+1。如果从最后一次
事务日志切换以来没有活动的事务日志,
则pg_switch_xlog 什么事也不做,
直接返回当前事
务日志文件的开始位置。

pg_xlogfile_name(location text)
描述:将事务日志的位置字符串转换为文件名。
返回值类型:text
备注:pg_xlogfile_name 仅抽取事务日志文件名称。如果给定的事务日志位置恰好位于
事务日志文件的交界上,
这两个函数都返回前一个事务日志文件的名称。
这对于管理事务日
志归档来说是非常有利的,因为前一个文件是当前最后一个需要归档的文件。

pg_xlogfile_name_offset(location text)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
444
描述:将事务日志的位置字符串转换为文件名并返回在文件中的字节偏移量。
返回值类型:text,integer
备注:可以使用pg_xlogfile_name_offset 从前述函数的返回结果中抽取相应的事务日志
文件名称和字节偏移量。例如:
gbase=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
NOTICE:
WAL archiving is not enabled; you must ensure that all required WAL
segments are copied through other means to complete the backup
file_name
| file_offset
--------------------------+-------------
000000010000000000000020 |
3616
(1 row)

pg_xlog_location_diff(location text, location text)
描述:计算两个事务日志位置之间在字节上的区别。
返回值类型:numeric

pg_cbm_tracked_location()
描述:用于查询cbm 解析到的lsn 位置。
返回值类型:text

pg_cbm_get_merged_file(startLSNArg text, endLSNArg text)
描述:
用于将指定lsn 范围之内的cbm 文件合并成一个cbm 文件,
并返回合并完的cbm
文件名。
返回值类型:text
备注:必须是系统管理员或运维管理员才能获取cbm 合并文件。

pg_cbm_get_changed_block(startLSNArg text, endLSNArg text)
描述:用于将指定lsn 范围之内的cbm 文件合并成一个表,并返回表的各行记录。
返回值类型:records
备注:
pg_cbm_get_changed_block 返回的表字段包含:
合并起始的lsn、
合并截止的lsn、

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
445
表空间oid、库oid、表的relfilenode、表的fork number、表是否被删除、表是否被创建、表
是否被截断、表被截断后的页面数、有多少页被修改以及被修改的页号的列表。

pg_cbm_recycle_file(targetLSNArg text)
描述:删除不再使用的cbm 文件,并返回删除后的第一条lsn。
返回值类型:text

pg_cbm_force_track(targetLSNArg text,timeOut int)
描述:
强制执行一次cbm 追踪到指定的xlog 位置,
并返回实际追踪结束点的xlog 位置。
返回值类型:text

pg_enable_delay_ddl_recycle()
描述:开启延迟DDL 功能,并返回开启点的xlog 位置。需要管理员角色或运维管理员
角色打开operate_mode。
返回值类型:text

pg_disable_delay_ddl_recycle(barrierLSNArg text, isForce bool)
描述:关闭延迟DDL 功能,并返回本次延迟DDL 生效的xlog 范围。需要管理员角色
或运维管理员角色打开operate_mode。
返回值类型:records

pg_enable_delay_xlog_recycle()
描述:开启延迟xlog 回收功能,数据库主节点修复使用。
返回值类型:void

pg_disable_delay_xlog_recycle()
描述:关闭延迟xlog 回收功能,数据库主节点修复使用。
返回值类型:void

pg_cbm_rotate_file(rotate_lsn text)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
446
描述:等待cbm 解析到rotate_lsn 之后,强制切换文件,在build 期间调用。
返回值类型:void。

gs_roach_stop_backup(backupid text)
描述:停止一个内部备份工具GaussRoach 开启的备份。与pg_stop_backup 系统函数类
似,但更轻量。
返回值类型:text,内容为当前日志的插入位置。
备注:目前GBase 8c 不支持。

gs_roach_enable_delay_ddl_recycle(backupid name)
描述:开启延迟DDL 功能,并返回开启点的日志位置。与pg_enable_delay_ddl_recycle
系统函数类似,但更轻量。并且,通过传入不同的backupid,可以支持并发打开延迟DDL。
返回值类型:text,内容为返回开启点的日志位置。
备注:目前GBase 8c 不支持。

gs_roach_disable_delay_ddl_recycle(backupid text)
描述:关闭延迟DDL 功能,并返回本次延迟DDL 生效的日志范围,并删除该范围内
被用户删除的列存表物理文件。与pg_enable_delay_ddl_recycle 系统函数类似,但更轻量。
并且,通过传入不同的backupid,可以支持并发关闭延迟DDL 功能。
返回值类型:records,内容为本次延迟DDL 生效的日志范围。
备注:目前GBase 8c 不支持。

gs_roach_switch_xlog(request_ckpt bool)
描述:切换当前使用的日志段文件,并且,如果request_ckpt 为true,则触发一个全量
检查点。
返回值类型:text,内容为切段日志的位置。
备注:目前GBase 8c 不支持。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
447