Unlogged table在金仓Kingabse数据库备份还原和集群中的相关体现

1、unlogged table的定义

若建表时指定了unlogged,则该表为一个不受日志记录的表,被写入到其中的数据不会被写到预写式日志中,因此这种表的速度会比普通表快。
但是,由于不会有日志记录,因此在崩溃时也是不安全的,在崩溃之后或者非干净关闭之后会被自动地截断;表中的内容也不会被复制到后备服务器中;表上创建的任何视图也会自动地不被日志记录。

2、unlogged table在物理备份与还原中的表现

由于unlogged table不会记录日志,在物理备份还原上也会有一定的体现,表现如下:
1、全量备份
初始化一个单机数据库,创建基础数据(创建unlogged表,并插入数据,执行checkpoint):
CREATE UNLOGGED TABLE a (a int);
insert into a values (generate_series(1,20000));
checkpoint;
1)查看unlogged表的数据量
在这里插入图片描述
2)执行全量备份
./sys_rman --config=/home/zym/0308/kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup
3)停止数据库,备份原data目录,并创建新的data目录
4)还原到数据库停止状态
./sys_rman --config=/home/zym/0308/kbbr_repo/sys_rman.conf --stanza=kingbase restore
5)恢复后,重启数据库,连接数据库,查看表数据
在这里插入图片描述
可见,最终只还原了表,没有还原数据。
2、增量备份
连接数据库,创建基础数据(创建unlogged表,并插入数据,执行checkpoint):
CREATE UNLOGGED TABLE a (a int);
insert into a values (generate_series(1,20000));
checkpoint;
1)查看unlogged表的数据量
在这里插入图片描述
2)执行增量备份
./sys_rman --config=/home/zym/0308/kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup
3)停止数据库,备份原data目录,并创建新的data目录
4)还原到数据库停止状态
./sys_rman --config=/home/zym/0308/kbbr_repo/sys_rman.conf --stanza=kingbase restore
5)恢复后,重启数据库,连接数据库,查看表
在这里插入图片描述
可见,最终只还原了表,没有还原数据。
3、差异备份
连接数据库,创建基础数据(创建unlogged表,并插入数据,执行checkpoint):
CREATE UNLOGGED TABLE a (a int);
insert into a values (generate_series(1,20000));
checkpoint;
1)查看unlogged表的数据量
在这里插入图片描述
2)执行差异备份
./sys_rman --config=/home/zym/0308/kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=diff backup
3)停止数据库,备份原data目录,并创建新的data目录
4)还原到数据库停止状态
./sys_rman --config=/home/zym/0308/kbbr_repo/sys_rman.conf --stanza=kingbase restore
5)恢复后,重启数据库,连接数据库,查看表
在这里插入图片描述
可见,最终只还原了表,没有还原数据。

3、unlogged table在集群上表现

由于unlogged table不会记录日志,在集群上也会有一定的体现,表现如下:
1、新建unlogged table
1)主机创建unlogged table,并插入数据
create unlogged table test_unlogged (a int ,b text default now());
insert into test_unlogged values(generate_series(1,100));
在这里插入图片描述
2) \d+查看备库(仅有8192bytes),说明备库无数据,仅有表结构。
在这里插入图片描述
2)备库unlogged table执行select报错
test=# select * from test_unlogged;
ERROR: cannot access temporary or unlogged relations during recovery
3)创建一个unlogged table的视图,视图创建成功,备库无法查询该视图
主库创建视图:
create view v_test as select * from test_unlogged;
主库可以正常查询该视图,备库查询该视图报错:
test=# select * from v_test;
ERROR: cannot access temporary or unlogged relations during recovery
4)重启集群
重启集群后,同集群重启前表现一致,主机unlogged table中数据未丢失,可正常查询。
5)向主库unlogged table 插入2G左右数据后,停止主机data
备机成功升主,原主机恢复成备机加入集群后,新主机中unlogged table为空,且现在的备机\d+查询表数据也为空,数据丢失。

2、新建普通表,插入数据后将该表修改为unlogged表
1)主机创建普通表,插入数据
create table test1_unlogged (a int ,b text default now());
insert into test1_unlogged values(generate_series(1,1000000));
主机查询表:
在这里插入图片描述
备机查询表:
在这里插入图片描述
2)主机修改表为unlogged表,主备查询该表,主机查询正常,备机无法查询,且通过\d+ 查询备机表大小,备机表原来大小为66MB,修改为unlogged后,备机表大小为8192bytes
alter table test_unlogged set unlogged;
主机查询表:
在这里插入图片描述
备机查询表:
在这里插入图片描述
3)创建一个该table的视图,视图创建成功,备库无法查询该视图
4)重启集群,重启后同集群重启前表现一致
5)主备切换,切换后unlogged table中数据为空
新主查看表:
在这里插入图片描述
总结:
unlogged表,备份还原只会保护表结构,不会保护表数据
unlogged表,表上创建的任何视图也会自动地不被日志记录
unlogged表,表中的内容也不会被复制到后备服务器中
【更多人大金仓数据库信息, 详见 https://help.kingbase.com.cn 】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值