GBase新闻

专注于数据库软件产品和服务,致力于成为用户最信赖的数据库产品供应商

GBASE南大通用数据库“闪回”功能使用介绍

发布时间:2024-03-18

在数据库管理领域,数据的保护与恢复一直是至关重要的任务。针对数据库开发人员“误删”数据这一高危情境,南大通用基于共享存储的数据库集群GBase 8s内置“闪回”工具,提供闪回功能来确保数据的完整性和可靠性,(马大哈们)再也不用担心“跑路”了。

GBASE南大通用闪回工具 onflsbk.sh 能够完成表的闪回功能,给用户提供单张表回退到历史某一位置的快照。具体包括 5 个步骤,如下表:

闪回工具安装和配置

这一步骤涉及工具的安装与配置文件的参数设置。闪回工具的安装包为绿色版的 tar包,只需放到指定的服务器解压即可,但需要注意解压后目录以及文件属主需要拥有执行 onlog 的权限 。

闪回工具可以通过配置目录:[安装目录名]/conf/ 下的参数文件config.properties来配置参数,包括:jdbc 的url,数据库用户名/密码,字符集,是否支持 32K,数据库目录等等。

flashback.conf 配置文件参数说明

闪回工具使用

闪回工具通过执行 shell 脚本:[安装目录名]/onflsbk.sh 来实现闪回功能。

闪回语法图

闪回程序分为“按照时间闪回”和“按照lsn号闪回”。

a. 按照时间闪回:

./onflsbk.sh -D database_name -d 'date_time' -r table_name 

  • -D database_name 是闪回命令用来选择数据库的参数,输入database_name 是被选择的数据库名;

  • -d 'date_time' 是闪回命令指定还原时间点的参数,输入的 'date_time' 是用来指定还原的目标时间点,格式: 'yyyy-mm-dd hh24:mi:ss',如果选择该参数,说明这条闪回命令是将表的数据,命令行中不能出现 -l 'lsn_number';

  • -r table_name 是闪回命令用来选择表的参数,该参数必须配合 -l 'lsn_number' 或 -d 'date_time' 中的一个参数使用,输入的 table_name 是被选择将要还原的表名,命令行中不能出现 -d 'date_time';

b. 按照 lsn 号闪回:

./onflsbk.sh -D database_name -l 'lsn_number' -r table_name

  • -D database_name 是闪回命令用来选择数据库的参数,输入的 database_name 是 被选择的数据库名;

  • -l 'lsn_number' 是闪回命令指定逻辑日志的 LSN 位置的参数,输入的'lsn_number' 是用来指定逻辑日志 LSN 位置,如果选择该参数说明这条闪回命令是通过指定逻 辑日志的 LSN 位置进行表的数据还原;

  • -r table_name 是闪回命令用来选择表的参数,该参数必须配合-l'lsn_number' 或 -d 'date_time' 中的一个参数使用,输入的 table_name 是被选择将要还原的表名,命令行中不能出现 -d 'date_time';

c. 闪回到新表:

通过 LSN 闪回到新表语法:
onflsbk.sh -D database_name -l 'lsn_number' -r table_name -t new_table_name

通过时间闪回到新表语法:
onflsbk.sh -D database_name -d 'date_time' -r table_name -t new_table_name

示例1:下面我们以“按照时间闪回”的方式进行演示。

首先,创建测试表 test_fls2;
create table test_fls2 (id int,name varchar(20),time1 datetime year to second,primary key (id));

插入测试数据,两条记录间隔 5 秒:
insert into test_fls2 values (1,'a',sysdate);
insert into test_fls2 values (2,'b',sysdate);

查询结果如下:

执行按照时间闪回命令:

./onflsbk.sh -D test -d "2023-08-15 13:38:50" -r test_fls2

会出现一个交互窗口,提示内容大概意思是:如果当前时间回溯到指定还原时间点区间内存在DDL操作很可能会让闪回报错或者闪回成功后表数据是不准确的。

直接回车或者输入“1”会继续执行,输入“2”则会直接退出;

我们这里输入“1”继续执行:

最后显示处理完成,回到工具查看表数据,已经回退到插入数据之前:

再次执行按照时间闪回命令,时间选择在插入第一条记录和第二条记录中间:
./onflsbk.sh -D test -d "2023-08-15 13:38:52" -r test_fls2

最后显示处理完成,回到工具查看表数据,已经回退到插入数据之前:

再次执行按照时间闪回命令,时间选择在插入第一条记录和第二条记录中间:
./onflsbk.sh -D test -d "2023-08-15 13:38:58" -r test_fls2

最后显示处理完成,回到工具查看表数据,已经回退到插入数据之前:

示例2:按照 LSN 号闪回的示例如下:

通过 onlog -l 查看对应时间的 LSN 号:

执行 LSN 号闪回命令:

./onflsbk.sh -D test -l '77:0xc5ec018' -r test_fls2

最后显示处理完成,回到工具查看表数据,已经回退到插入数据之前:

使用下一个 LSN 号进行闪回
./onflsbk.sh -D test -l '77:0xc5ec050' -r test_fls2

最后显示处理完成,回到工具查看表数据,已经回退到插入第一条数据之后: