文章目录

  • 1、pg\_basebackup
  • 1.1、pg\_basebackup原理
  • 1.2、语法解释
  • 1.3、pg\_basebackup进行备份
  • 1.3.1、设置 pg\_hba.conf
  • 1.3.2、备份的用户设置
  • 1.3.3、备份库成tar包
  • 1.3.4、备份成从库
  • 1.4、恢复数据库
  • 1.4.1、创建一个恢复的目录
  • 1.4.2、解压备份文件至恢复的目录
  • 1.4.3、设置restore\_command
  • 1.4.4、启动备库



1、pg_basebackup

1.1、pg_basebackup原理

官方文档:pg_basebackup (postgres.cn)

1)创建检查点,打开FPW(full page writes),创建备份标签(存储检查点位置,时间等信息)

2)通过流复制协议与数据库建立连接,WAL Sender进程向pg_basebackup发送数据库物理文件

3)pg_basebackup接收到文件后写入目标位置(压缩或不压缩)

注意:

1、该连接必须由一个超级用户或者一个具有REPLICATION权限(第 21.2 节)的用户建立。

2、并且pg_hba.conf必须显式地允许该复制连接。

3、该服务器还必须把max_wal_senders设置得足够高以留出至少一个会话用于备份以及一个用于WAL流(如果使用流)。

4、pg_basebackup,从备份开始到备份结束之间产生到wal日志都会一起备份;备份期间的dml,也能一起恢复。

5、复制的过程中,会用到零时的复制槽,所以要保证max_replication_slots够用。

pg_basebackup不仅能从主控机也能从后备机创建一个基础备份。要从后备机获得一个备份,设置后备机让它能接受复制连接(也就是,设置max_wal_sendershot_standby,并且配置基于主机的认证)。你将也需要在主控机上启用full_page_writes

注意在来自后备机的在线备份中有一些限制:

  • 不会在被备份的数据库集簇中创建备份历史文件。
  • 如果正在使用-X none,不保证备份所需的所有 WAL 文件在备份结束时被归档。
  • 如果在在线备份期间后备机被提升为主控机,备份会失败。
  • 备份所需的所有 WAL 记录必须包含足够的全页写,这要求你在主控机上启用full_page_writes并且不使用一个类似pg_compresslog的工具以archive_command从 WAL 文件中移除全页写。

1.2、语法解释

[paas-sotc-telepgtest-002][telepg][/app/backup]$pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.

Usage:
  pg_basebackup [OPTION]...

Options controlling the output:
  -D, --pgdata=DIRECTORY receive base backup into directory
  -F, --format=p|t       output format (plain (default), tar)
  -r, --max-rate=RATE    maximum transfer rate to transfer data directory
                         (in kB/s, or use suffix "k" or "M")
  -R, --write-recovery-conf
                         write configuration for replication
  -T, --tablespace-mapping=OLDDIR=NEWDIR
                         relocate tablespace in OLDDIR to NEWDIR
      --waldir=WALDIR    location for the write-ahead log directory
  -X, --wal-method=none|fetch|stream
                         include required WAL files with specified method
  -z, --gzip             compress tar output
  -Z, --compress=0-9     compress tar output with given compression level

General options:
  -c, --checkpoint=fast|spread
                         set fast or spread checkpointing
  -C, --create-slot      create replication slot
  -l, --label=LABEL      set backup label
  -n, --no-clean         do not clean up after errors
  -N, --no-sync          do not wait for changes to be written safely to disk
  -P, --progress         show progress information
  -S, --slot=SLOTNAME    replication slot to use
  -v, --verbose          output verbose messages
  -V, --version          output version information, then exit
      --no-slot          prevent creation of temporary replication slot
      --no-verify-checksums
                         do not verify checksums
  -?, --help             show this help, then exit

Connection options:
  -d, --dbname=CONNSTR   connection string
  -h, --host=HOSTNAME    database server host or socket directory
  -p, --port=PORT        database server port number
  -s, --status-interval=INTERVAL
                         time between status packets sent to server (in seconds)
  -U, --username=NAME    connect as specified database user
  -w, --no-password      never prompt for password
  -W, --password         force password prompt (should happen automatically)

Report bugs to <pgsql-bugs@lists.postgresql.org>.
[paas-sotc-telepgtest-002][telepg][/app/backup]$
  • F:t tar 格式输出;p plain原样输出
  • z:输出的tar备份经过gzip压缩
  • P:实时的打印备份的进度
  • v:详细模式,当使用-P,还会打印出正在备份哪个具体文件的信息
  • l:指定备份的一个标识 lable
  • R:write configuration for replication
  • X:备份的模式,串行和并行
  • f :fetch串行复制,数据复制完,再复制wal日志,如果使用tar格式,预写式日志文件将被写入到base.tar文件。
  • s :stream并行复制,数据和wal日志同步复制,如果使用tar格式,预写式日志文件被写入到一个单独的名为pg_wal.tar的文件;这个值是默认值。

1.3、pg_basebackup进行备份

1.3.1、设置 pg_hba.conf

设置 pg_hba.conf,允许客户端机器发起流复制链接

host    replication     all             0.0.0.0/0               md5

1.3.2、备份的用户设置

备份用户需要 superuser 或 replication

must be superuser or replication role to start walsender

create role backup REPLICATION LOGIN PASSWORD 'backup';

1.3.3、备份库成tar包

1、先在源库创建database和table

postgres=# create database test_rhl1;
CREATE DATABASE
postgres=# \c test_rhl1;
You are now connected to database "test_rhl1" as user "postgres".
test_rhl1=# create table tb1 (id int,name varchar(20));
CREATE TABLE
test_rhl1=# insert into tb1 values (1,'asd'),(2,'qwe'),(3,'ert');
INSERT 0 3
test_rhl1=# select * from tb1;
 id | name 
----+------
  1 | asd
  2 | qwe
  3 | ert
(3 rows)

2、备份成 tar包

[paas-sotc-telepgtest-002][telepg][/app/backup]$pg_basebackup -h134.108.68.72 -p5432 -Ubackup  -D /app/backup -Xs -F t -z -v -P -l pg_backup
Password: 
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/DD000028 on timeline 2
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_128957"
12652680/12652680 kB (100%), 1/1 tablespace                                         
pg_basebackup: write-ahead log end point: 0/DD000328
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

因为使用 -Xs stream模式且使用tar格式,预写式日志文件被写入到一个单独的名为pg_wal.tar的文件

[paas-sotc-telepgtest-002][telepg][/app/backup]$ll
total 777148
-rw------- 1 telepg telepg 795776386 Feb 11 15:02 base.tar.gz
-rw------- 1 telepg telepg     18542 Feb 11 15:02 pg_wal.tar.gz
[paas-sotc-telepgtest-002][telepg][/app/backup]$

3、在备份还未完成时,在原库进行dml,等恢复后查看是否也会备份

test_rhl1=# insert into tb1 values(4,'asdasdsd');
INSERT 0 1
test_rhl1=# insert into tb1 values(5,'asdsd');   
INSERT 0 1
test_rhl1=# select * from tb1;
 id |   name   
----+----------
  1 | asd
  2 | qwe
  3 | ert
  4 | asdasdsd
  5 | asdsd
(5 rows)

1.3.4、备份成从库

pg_basebackup -h 134.108.68.72 -p 5432 -U repl -l bk20210727 -F p -P -R -D /app/telepg/pg_data

1.4、恢复数据库

1.4.1、创建一个恢复的目录

mkdir -p  /app/telepg/pg_data_new

1.4.2、解压备份文件至恢复的目录

1、解压base.tar.gz的包

[paas-sotc-telepgtest-002][telepg][/app/backup]$ll
total 777148
-rw------- 1 telepg telepg 795776386 Feb 11 15:02 base.tar.gz
-rw------- 1 telepg telepg     18542 Feb 11 15:02 pg_wal.tar.gz
[paas-sotc-telepgtest-002][telepg][/app/backup]$tar -xvf base.tar.gz  -C /app/telepg/pg_data_new
  • 查看恢复出来的目录情况
[paas-sotc-telepgtest-002][telepg][/app/backup]$cd /app/telepg/pg_data_new
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$ll
total 64
-rw------- 1 telepg telepg   210 Feb 11 14:59 backup_label
drwx------ 7 telepg telepg    67 Feb 11 14:52 base
-rw------- 1 telepg telepg    30 Feb 11 00:00 current_logfiles
drwx------ 2 telepg telepg  4096 Feb 11 15:28 global
drwx------ 2 telepg telepg  4096 Jul 29  2021 log
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_commit_ts
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_dynshmem
-rw------- 1 telepg telepg  4826 Jun 15  2021 pg_hba.conf
-rw------- 1 telepg telepg  1636 Jun 15  2021 pg_ident.conf
drwx------ 4 telepg telepg    68 Feb 11 14:59 pg_logical
drwx------ 4 telepg telepg    36 Jun 15  2021 pg_multixact
drwx------ 2 telepg telepg     6 Nov  1 15:26 pg_notify
drwx------ 2 telepg telepg     6 Feb 11 14:59 pg_replslot
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_serial
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_snapshots
drwx------ 2 telepg telepg     6 Nov  1 15:26 pg_stat
drwx------ 2 telepg telepg     6 Feb 11 14:59 pg_stat_tmp
drwx------ 2 telepg telepg     6 Aug 19 17:51 pg_subtrans
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_tblspc
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_twophase
-rw------- 1 telepg telepg     3 Jun 15  2021 PG_VERSION
drwx------ 3 telepg telepg    28 Feb 11 15:27 pg_wal
drwx------ 2 telepg telepg    90 Aug 19 17:30 pg_xact
-rw------- 1 telepg telepg    88 Jun 15  2021 postgresql.auto.conf
-rw------- 1 telepg telepg 26814 Jul 28  2021 postgresql.conf
-rw------- 1 telepg telepg     0 Feb 11 14:59 tablespace_map
  • 查看wal日志里面是空的
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$cd pg_wal/
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new/pg_wal]$ll
total 0
drwx------ 2 telepg telepg 6 Feb 11 14:59 archive_status
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new/pg_wal]$cd archive_status/
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new/pg_wal/archive_status]$ll
total 0
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new/pg_wal/archive_status]$
  • 多了一个backup_label
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$cat backup_label 
START WAL LOCATION: 0/DD000028 (file 0000000200000000000000DD)
CHECKPOINT LOCATION: 0/DD000060
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2022-02-11 14:59:18 CST
LABEL: pg_backup
START TIMELINE: 2

2、解压pg_wal.tar.gz的包

[paas-sotc-telepgtest-002][telepg][/app/backup]$mkdir wal_back
[paas-sotc-telepgtest-002][telepg][/app/backup]$tar -xvf pg_wal.tar.gz  -C /app/backup/wal_back/
00000002.history
archive_status/00000002.history.done
0000000200000000000000DD
[paas-sotc-telepgtest-002][telepg][/app/backup]$cd wal_back/
[paas-sotc-telepgtest-002][telepg][/app/backup/wal_back]$ll
total 16388
-rw------- 1 telepg telepg 16777216 Feb 11 14:59 0000000200000000000000DD
-rw------- 1 telepg telepg       41 Feb 11 14:59 00000002.history
drwxr-x--- 2 telepg telepg       35 Feb 11 15:33 archive_status

1.4.3、设置restore_command

  • restore_command
  • 它告诉PostgreSQL如何获取归档WAL文件段。与archive_command相似,这也是一个shell命令字符串。它可以包含%f(将被期望的日志文件名替换)和%p(将被日志文件被拷贝的目标路径名替换)。(路径名是相对于当前工作目录的,即集簇的数据目录)。如果你需要在命令中嵌入一个真正的%字符,可以写成%%。

修改配置文件

port = 54321 ---因为本机已经有了一个5432的端口的,所以修改这个配置
restore_command = 'cp /app/backup/wal_back/%f %p'

1.4.4、启动备库

1、直接启动报错

pg_ctl start -D /app/telepg/pg_data_new
waiting for server to start....2022-02-11 15:39:26.607 CST [131871] LOG:  starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2022-02-11 15:39:26.607 CST [131871] LOG:  listening on IPv4 address "0.0.0.0", port 54321
2022-02-11 15:39:26.608 CST [131871] LOG:  listening on Unix socket "/tmp/.s.PGSQL.54321"
2022-02-11 15:39:26.619 CST [131871] LOG:  redirecting log output to logging collector process
2022-02-11 15:39:26.619 CST [131871] HINT:  Future log output will appear in directory "log".
 stopped waiting
pg_ctl: could not start server
Examine the log output.

日志:

2022-02-11 15:39:26.703 CST,,,131873,,620612ae.20321,3,,2022-02-11 15:39:26 CST,,0,FATAL,XX000,"could not locate required checkpoint record",,"If you are restoring from a backup, touch ""/app/telepg/pg_data_new/recovery.signal"" and add required recovery options.
If you are not restoring from a backup, try removing the file ""/app/telepg/pg_data_new/backup_label"".
Be careful: removing ""/app/telepg/pg_data_new/backup_label"" will result in a corrupt cluster if restoring from a backup.",,,,,,,""

2、根据提示创建recovery.signal

touch /app/telepg/pg_data_new/recovery.signal

3、再次启动数据库,成功启动

[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$pg_ctl start -D /app/telepg/pg_data_new
waiting for server to start....2022-02-11 15:46:10.219 CST [132432] LOG:  starting PostgreSQL 12.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2022-02-11 15:46:10.219 CST [132432] LOG:  listening on IPv4 address "0.0.0.0", port 54321
2022-02-11 15:46:10.221 CST [132432] LOG:  listening on Unix socket "/tmp/.s.PGSQL.54321"
2022-02-11 15:46:10.234 CST [132432] LOG:  redirecting log output to logging collector process
2022-02-11 15:46:10.234 CST [132432] HINT:  Future log output will appear in directory "log".
 done
server started
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$ps -ef|grep postgres
telepg   129080 128997  0 15:00 pts/2    00:00:00 psql -Upostgres
telepg   129091 349224  0 15:00 ?        00:00:00 postgres: postgres test_rhl1 [local] idle
telepg   132432      1  0 15:46 ?        00:00:00 /app/telepg/pg12.5/bin/postgres -D /app/telepg/pg_data_new
telepg   132433 132432  0 15:46 ?        00:00:00 postgres: logger   
telepg   132438 132432  0 15:46 ?        00:00:00 postgres: checkpointer   
telepg   132439 132432  0 15:46 ?        00:00:00 postgres: background writer   
telepg   132441 132432  0 15:46 ?        00:00:00 postgres: stats collector   
telepg   132445 132432  0 15:46 ?        00:00:00 postgres: walwriter   
telepg   132446 132432  0 15:46 ?        00:00:00 postgres: autovacuum launcher   
telepg   132447 132432  0 15:46 ?        00:00:00 postgres: archiver   last was 00000003.history
telepg   132448 132432  0 15:46 ?        00:00:00 postgres: logical replication launcher   
telepg   132462 130738  0 15:46 pts/0    00:00:00 grep --color=auto postgres
telepg   349224      1  0  2021 ?        00:01:47 /app/telepg/pg12.5/bin/postgres -D /app/telepg/pg12.5_data
telepg   349225 349224  0  2021 ?        00:00:00 postgres: logger   
telepg   349227 349224  0  2021 ?        00:00:04 postgres: checkpointer   
telepg   349228 349224  0  2021 ?        00:02:08 postgres: background writer   
telepg   349229 349224  0  2021 ?        00:02:13 postgres: walwriter   
telepg   349230 349224  0  2021 ?        00:02:34 postgres: autovacuum launcher   
telepg   349231 349224  0  2021 ?        00:00:32 postgres: archiver   last was 0000000200000000000000DD.00000028.backup
telepg   349232 349224  0  2021 ?        00:03:53 postgres: stats collector   
telepg   349233 349224  0  2021 ?        00:00:07 postgres: logical replication launcher   
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$

4、检查备份期间的dml是否生效

结果:发现在备份期间的操作也会成功恢复

[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$psql -p54321 -Upostgres
psql (12.5)
Type "help" for help.

postgres=# \c test_rhl1
You are now connected to database "test_rhl1" as user "postgres".
test_rhl1=# \l
test_rhl1=# select * from tb1;
 id |   name   
----+----------
  1 | asd
  2 | qwe
  3 | ert
  4 | asdasdsd ---备份期间insert
  5 | asdsd    ---备份期间insert
(5 rows)

5、查看启动成功后的目录变化

  • backup_label后多了 .old,但里面的内容没有变化
  • 多了 postmaster.opts
  • 多了 postmaster.pid
  • recovery.signal自动删除
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$ll
total 72
-rw------- 1 telepg telepg   210 Feb 11 14:59 backup_label.old
drwx------ 7 telepg telepg    67 Feb 11 14:52 base
-rw-r----- 1 telepg telepg    30 Feb 11 15:46 current_logfiles
drwx------ 2 telepg telepg  4096 Feb 11 15:48 global
drwx------ 2 telepg telepg  4096 Feb 11 15:41 log
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_commit_ts
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_dynshmem
-rw------- 1 telepg telepg  4826 Jun 15  2021 pg_hba.conf
-rw------- 1 telepg telepg  1636 Jun 15  2021 pg_ident.conf
drwx------ 4 telepg telepg    68 Feb 11 15:46 pg_logical
drwx------ 4 telepg telepg    36 Jun 15  2021 pg_multixact
drwx------ 2 telepg telepg    18 Feb 11 15:46 pg_notify
drwx------ 2 telepg telepg     6 Feb 11 14:59 pg_replslot
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_serial
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_snapshots
drwx------ 2 telepg telepg     6 Nov  1 15:26 pg_stat
drwx------ 2 telepg telepg    84 Feb 11 15:50 pg_stat_tmp
drwx------ 2 telepg telepg    18 Feb 11 15:46 pg_subtrans
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_tblspc
drwx------ 2 telepg telepg     6 Jun 15  2021 pg_twophase
-rw------- 1 telepg telepg     3 Jun 15  2021 PG_VERSION
drwx------ 3 telepg telepg   140 Feb 11 15:46 pg_wal
drwx------ 2 telepg telepg    90 Aug 19 17:30 pg_xact
-rw------- 1 telepg telepg    88 Jun 15  2021 postgresql.auto.conf
-rw------- 1 telepg telepg 26843 Feb 11 15:38 postgresql.conf
-rw-r----- 1 telepg telepg    63 Feb 11 15:46 postmaster.opts
-rw-r----- 1 telepg telepg    90 Feb 11 15:46 postmaster.pid
-rw------- 1 telepg telepg     0 Feb 11 14:59 tablespace_map.old
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$cat backup_label.old 
START WAL LOCATION: 0/DD000028 (file 0000000200000000000000DD)
CHECKPOINT LOCATION: 0/DD000060
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2022-02-11 14:59:18 CST
LABEL: pg_backup
START TIMELINE: 2
[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$cat postmaster.opts
/app/telepg/pg12.5/bin/postgres "-D" "/app/telepg/pg_data_new"

[paas-sotc-telepgtest-002][telepg][/app/telepg/pg_data_new]$cat postmaster.pid
132432
/app/telepg/pg_data_new
1644565570
54321
/tmp
0.0.0.0
 54321001        23
ready

6、查看启动期间数据库的日志

  1. 发现会先进行starting archive recovery,restored log file
  2. 等archive recovery complet,之后就可以启动库了
2022-02-11 15:46:10.234 CST,,,132432,,62061442.20550,1,,2022-02-11 15:46:10 CST,,0,LOG,00000,"ending log output to stderr",,"Future log output will go to log destination ""csvlog"".",,,,,,,""
2022-02-11 15:46:10.236 CST,,,132434,,62061442.20552,1,,2022-02-11 15:46:10 CST,,0,LOG,00000,"database system was interrupted; last known up at 2022-02-11 14:59:18 CST",,,,,,,,,""
2022-02-11 15:46:10.306 CST,,,132434,,62061442.20552,2,,2022-02-11 15:46:10 CST,,0,LOG,00000,"starting archive recovery",,,,,,,,,""
2022-02-11 15:46:10.309 CST,,,132434,,62061442.20552,3,,2022-02-11 15:46:10 CST,,0,LOG,00000,"restored log file ""00000002.history"" from archive",,,,,,,,,""
2022-02-11 15:46:10.331 CST,,,132434,,62061442.20552,4,,2022-02-11 15:46:10 CST,,0,LOG,00000,"restored log file ""0000000200000000000000DD"" from archive",,,,,,,,,""
2022-02-11 15:46:10.379 CST,,,132434,,62061442.20552,5,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"redo starts at 0/DD000028",,,,,,,,,""
2022-02-11 15:46:10.380 CST,,,132434,,62061442.20552,6,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"consistent recovery state reached at 0/DD000328",,,,,,,,,""
2022-02-11 15:46:10.380 CST,,,132432,,62061442.20550,2,,2022-02-11 15:46:10 CST,,0,LOG,00000,"database system is ready to accept read only connections",,,,,,,,,""
2022-02-11 15:46:10.384 CST,,,132434,,62061442.20552,7,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"redo done at 0/DD000328",,,,,,,,,""
2022-02-11 15:46:10.384 CST,,,132434,,62061442.20552,8,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"last completed transaction was at log time 2022-02-11 15:01:00.25688+08",,,,,,,,,""
2022-02-11 15:46:10.402 CST,,,132434,,62061442.20552,9,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"restored log file ""0000000200000000000000DD"" from archive",,,,,,,,,""
2022-02-11 15:46:10.446 CST,,,132434,,62061442.20552,10,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"selected new timeline ID: 3",,,,,,,,,""
2022-02-11 15:46:10.501 CST,,,132434,,62061442.20552,11,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"archive recovery complete",,,,,,,,,""
2022-02-11 15:46:10.505 CST,,,132434,,62061442.20552,12,,2022-02-11 15:46:10 CST,1/0,0,LOG,00000,"restored log file ""00000002.history"" from archive",,,,,,,,,""
2022-02-11 15:46:10.527 CST,,,132432,,62061442.20550,3,,2022-02-11 15:46:10 CST,,0,LOG,00000,"database system is ready to accept connections",,,,,,,,,""