案例说明:

此案例,为复现“current time may be rewound”错误。对于数据库环境,在使用前必须保证系统时间的正确性。如果数据库创建后,再将系统时间修改为创建数据库之前的时间,在运行过程中将有可能导致新老事务判断及事务一致性出现问题,比如Oracle数据库事务的scn是和当前的timestamp有关联的。

数据库版本:

test=# select version();
version
----------------------------------------------------------------------------------------------------------
Kingbase V008R003C002B0290 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
(1 row)

1、当前系统时间

[kingbase@node1 bin]$ date
Fri May 13 10:23:31 CST 2022

2、初始化实例

[kingbase@node1 bin]$ ./initdb -U system -W 123456  --case-insensitive -D /data/kingbase/v8r3_290/data1
The files belonging to this database system will be owned by user "kingbase".
This user must also own the server process. .......
Success. You can now start the database server using: ./sys_ctl -D /data/kingbase/v8r3_290/data1 -l logfile start

3、查看数据库创建时间

1)查看controlfile中systemID

[kingbase@node1 bin]$ ./sys_controldata -D /data/kingbase/v8r3_290/data1
sys_control version number: 830
Catalog version number: 201608131
Database system identifier: 7097041251382751474
Database cluster state: shut down
sys_control last modified: Fri 13 May 2022 10:24:52 AM CST
Latest checkpoint location: 0/1B231E8
Prior checkpoint location: 0/1AE2720
Latest checkpoint's REDO location: 0/1B231E8
Latest checkpoint's REDO WAL file: 000000010000000000000001
.......

2)查看数据库创建时间

[kingbase@node1 bin]$ ./ksql -U system -W 123456 test
ksql (V008R003C002B0290)
Type "help" for help. test=# select to_timestamp(((7097041251382751474>>32) &(2^32 -1)::bigint));
to_timestamp
---------------------
2022-05-13 02:24:42
(1 row)

4、修改数据库时间(修改后时间早于数据库创建时间)

[root@node1 ~]# date 051010102022
Tue May 10 10:10:00 CST 2022
[root@node1 ~]# date
Tue May 10 10:10:04 CST 2022 [kingbase@node1 bin]$ ./ksql -U system -W 123456 test
ksql (V008R003C002B0290)
Type "help" for help. test=# select now();
now
-------------------------------
2022-05-10 10:10:24.956613+08
(1 row)

5、执行sys_rman备份

1)sys_rman初始化

[kingbase@node1 bin]$ ./sys_rman init -h 127.0.0.1 -U system -p 54321 -d test -B /data/kingbase/v8r3_290/db_bk -D /data/kingbase/v8r3_290/data1
Password for user system: [kingbase@node1 bin]$ ls -lh /data/kingbase/v8r3_290/db_bk/
total 4.0K
drwx------ 2 kingbase kingbase 6 May 10 10:24 backups
-rw-rw-r-- 1 kingbase kingbase 41 May 10 10:24 sys_rman.conf
lrwxrwxrwx 1 kingbase kingbase 31 May 10 10:24 wal -> /data/kingbase/v8r3_290/archive

2)执行数据库全量备份

=== 出现“current time may be rewound”错误。===

[kingbase@node1 bin]$ ./sys_rman backup -b full -U system -d test -B /data/kingbase/v8r3_290/db_bk -D /data/kingbase/v8r3_290/data1
Password for user system:
ERROR: current time may be rewound. Please retry with full backup mode.

6、解决方案

1)对数据库通过sys_dmp备份

[kingbase@node1 bin]$ date
Tue May 10 10:17:24 CST 2022 [kingbase@node1 bin]$ ./sys_dump -U system -W 123456 test -f ~/db.sql

2)重新初始化实例

[kingbase@node1 bin]$ ./initdb -U system -W 123456 --case-insensitive -D /data/kingbase/v8r3_290/data2
......
load security database ... ok
syncing data to disk ... ok Success. You can now start the database server using: ./sys_ctl -D /data/kingbase/v8r3_290/data2 -l logfile start

3)配置归档并启动新实例

[kingbase@node1 data2]$ cat kingbase.conf |grep -i archive_
archive_mode = on # enables archiving; off, on, or always
archive_command = 'test ! -f /data/kingbase/v8r3_290/archive/%f && cp %p /data/kingbase/v8r3_290/archive/%f' # command to use to archive a logfile segment
archive_dest = '/data/kingbase/v8r3_290/archive' # set archive logfile dest absolute path
# ! waring: if set archive_dest, ignore archive_command.
#archive_timeout = 0 # force a logfile segment switch after this # 启动实例
[kingbase@node1 bin]$ ./sys_ctl -D /data/kingbase/v8r3_290/data2 start

4)将原库备份导入新实例

[kingbase@node1 bin]$ ./ksql -U system -W 123456 test < ~/db.sql
SET
SET
SET
SET
SET
set_config
-----------------
"$USER", PUBLIC
(1 row) SET
SET
SET
COMMENT
COPY 0
COPY 0

5)执行sys_rman备份

# sys_rman 初始化
[kingbase@node1 bin]$ ./sys_rman init -h 127.0.0.1 -U system -p 54321 -d test -B /data/kingbase/v8r3_290/db_bk -D /data/kingbase/v8r3_290/data2
Password for user system: # sys_rman执行全备
[kingbase@node1 bin]$ ./sys_rman backup -b full -U system -d test -B /data/kingbase/v8r3_290/db_bk -D /data/kingbase/v8r3_290/data2
Password for user system: INFO: validate: RBNB3P backup and archive log files by CRC

6)查看备份信息

[kingbase@node1 bin]$ ./sys_rman show -b full -U system -d test -B /data/kingbase/v8r3_290/db_bk
==========================================================================================================
ID Recovery time Mode Current/Parent TLI Time Data start_lsn stop_lsn Status
==========================================================================================================
RBNB3P 2022-05-10 10:38:53 FULL 1 / 0 328s 69MB 0/2000028 0/2000130 OK
[kingbase@node1 bin]$ ./sys_rman validate -b full -U system -d test -B /data/kingbase/v8r3_290/db_bk
INFO: validate: RBNB3P backup and archive log files by CRC
INFO: backup validation completed successfully
[kingbase@node1 bin]$ ./sys_rman show -b full -U system -d test -B /data/kingbase/v8r3_290/db_bk
==========================================================================================================
ID Recovery time Mode Current/Parent TLI Time Data start_lsn stop_lsn Status
==========================================================================================================
RBNB3P 2022-05-10 10:38:53 FULL 1 / 0 328s 69MB 0/2000028 0/2000130 OK

=== 如上所示,sys_rman备份问题解决。====

KingbaseES V8R3 由于修改系统时间导致sys_rman备份故障案例的更多相关文章

  1. C/C++ 修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析

    修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析 介绍 最近修复项目问题时,发现当系统时间往前修改后,会导致sem_timedwait函数一直阻塞.通过搜索了发现int sem_ ...

  2. Wince修改系统时间问题

           当我们需要修改到系统时间的时候,需要用到下面四个函数:SetLoaclTime,GetLocalTime,SetSystemTime,GetSystemTime.这四个函数是用来修改或者 ...

  3. linux下修改系统时间

    一.查看时间: [root@localhost ~]# date2016年 11月 19日 星期六 12:46:37 CST 二.修改时间,修改系统时间 [root@localhost ~]# dat ...

  4. Linux下修改系统时间并写入BIOS

    我们一般使用“date -s”命令来修改系统时间.比如将系统时间设定成2005年7月26日的命令如下. #date -s 07/26/2005 将系统时间设定成下午11点12分0秒的命令如下. #da ...

  5. Linux怎样修改系统时间

    修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: #date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下. ...

  6. linux修改系统时间date命令加clock -w

    http://m.jb51.net/LINUXjishu/117784.html 修改linux系统时间的方法(date命令) 11-18 23:22:27作者:脚本之家 命令格式为: date -s ...

  7. CentOS修改系统时间

    CentOS修改系统时间 操作: 1. date –s '1987-05-02 10:10:10' 2. clock –w //将日期写入CMOS 补充: 修改Linux时间一般涉及到3个命令: 1. ...

  8. C#技术点--修改系统时间

    C#的System.DateTime类提供了对日期时间的封装,用它进行时间的转换和处理很方便,但是我没有在其中找到任何可以用来修改系统时间的成员.用过VC.VB等的朋友可能知道,我们可以调用Win32 ...

  9. ubuntu16.4下使用QT修改系统时间

    我也是在网上找的,自己随便改了一下六个lineEdit控件,每个控件输入日期时间,点击按钮触发函数可修改时间. 1 //一键修改系统时间 QString year = ui->lineEdit_ ...

随机推荐

  1. 集合容器和Hash表

    集合容器 集合相当于一个容器,在我们使用Arraylist的时候添加参数相当与放了一个容器中.这里面的元素是可以重复的 在HashSet中添加元素是没有重复的,我们来写一个测试看一下 public s ...

  2. JTable和MVC设计模式

    JTable: 用JTable类可以以表格的形式显示和编辑数据 . JTable类的对象并不存储数据,它只是数据的表现 data MVC ~数据,表现和控制三者分离,各负其责 ~M=Model(模型) ...

  3. 记一次requests请求乱码的问题

    太懒了,直接说原因吧: 请求返回的内容含有emoji表情 我的解决办法是替换掉emoji字符: 安装库:pip install emoji 替换:emoji.demojize(CONTENT) 注意, ...

  4. Solution -「二项式定理与组合恒等式」一些练习

    Task 1 \(\mathcal{Prob:}\) \((3x - 2y)^{18}\) 的展开式中, \(x^5y^{13}\) 的系数是什么?\(x^8y^9\) 的系数是什么? \(\math ...

  5. 性能浪费的日志案例和使用Lambda优化日志案例

    有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费.而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能 性能浪费的日志案例 日志可以帮助我们快速的定位问题,记录程序运行过程中的 ...

  6. 众妙之门玄之又玄,游戏系统中的伪随机(Pseudo-Randomization)和真随机(True-Randomization)算法实现Python3

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_212 有人说,如果一个人相信运气,那么他一定参透了人生.想象一下,如果你在某款moba游戏中,在装备平平,队友天坑的情况下,却刀刀 ...

  7. Vue ref属性 && props配置项

    1 // # ref属性: 2 // # 1.用来给元素或者子组件注册引用信息(id的替代者) 3 // # 2.应用在html标签上获取的是真实的DOM元素,应用在组件标签上是组件实例对象(vc) ...

  8. 新型MPP的Doris数据库:数据模型和数据分区使用详解

    Apache Doris是一个现代化的MPP分析性数据库产品.是一个由百度开源,在2018年贡献给Apache基金会,成为有顶级开源项目.仅需要亚秒级响应时间即可获得查询结果,可以有效地支持实时数据分 ...

  9. 故障案例 | lsof是怎么"影响"MySQL计算打开文件句柄数的

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 lsof中附加不同参数产生的结果也不同,小心"踩坑". 1. ...

  10. Java集合容器的深度理解

    Java容器里有很多写好的容器API,这使我们很方便的可以存储.操作我们的数据. 下面是我写的容器的特点,一些容器的不同之处,从底层源码解析一下容器实现原理 一.常用的容器目录 上图可以看出,java ...