前言
作为一个DBA,很难不去关注一款数据库的备份恢复能力。因为一旦上了生产环境,数据的安全是不容小视的。
本期体验的主题直奔YashanDB 的备份恢复,在学习的过程中也会简要的记录一下产品相关概念。这样从上至下,也能更好的理解该产品的备份恢复特性。
测试环境使用的版本是YashanDB 23.1.1.100个人版。
内容说明:以下内容均来自个人对YashanDB的官方材料学习和实验而得,如有理解不恰当之处,欢迎指正交流。
1. 产品了解
1.1 版本差异
从官方文档暂时没看出个人版、标准版和企业版在备份恢复上与什么限制和区别。YashanDB个人版、标准版和企业版功能差异
但是个人版体验不了共享集群和分布式集群架构,本来想试试,结果安装共享集群直接报错说功能不支持,看来是功能上直接做了限制。
1.2 产品简介
简介里面介绍了,支持备份恢复(物理和逻辑)还有闪回。闪回的功能前期有机会测试过,等会直接归档过来。
1.3 与Oracle兼容性
YashanDB宣称兼容Oracle,官方文档也有相关说明,但是懂事的DBA心里应该有个合适的预期。
2. 备份恢复
2.1 物理备份恢复
在官方文档的【数据库管理】模块很容易就找到了【备份恢复】相关的内容,仔细看来这部分是我们所理解的物理备份恢复。
能力上支持全备、增备、全量恢复、指定时间点恢复(也就是不完全恢复),以及压缩和加密。
有两种方式执行,一是通过SQL命令;二是使用yasrman工具。
先看看第一种通过SQL命令。
2.1.1 通过SQL命令备份数据库
1.开启归档
习惯Oracle 的命令查看归档是否开启,但是好像不支持archive log list
问题不大,可以通过视图查看
这里已经开启了归档,就不做调整了,查看一下归档路径。默认路径在$YASDB_DATA下
2.数据准备
自建了一个SKYE用户并创建了几个对象,初步主要是为了学习功能使用,数据量不大。
3.执行全备
完整命令参考:BACKUP DATABASE
#快速验证,直接使用默认配置
SQL> backup database full;
Succeed.
#备份集默认会放在$YASDB_DATA/backup/bak_{date}下,也可以通过format指定。
SQL> ! echo $YASDB_DATA
/home/yashan/yasdb_data/db-1-1
SQL> ! ls /home/yashan/yasdb_data/db-1-1/backup
bak_2023112310570880
SQL> ! ls -l /home/yashan/yasdb_data/db-1-1/backup/bak_2023112310570880
total 716668
-rw-r-----. 1 yashan yashan 20606976 Nov 23 10:57 arch0_0_31_0.bak
-rw-r-----. 1 yashan yashan 6144 Nov 23 10:57 backup_filelist
-rw-r-----. 1 yashan yashan 16777216 Nov 23 10:57 backup_profile
drwx------. 2 yashan yashan 6 Nov 23 10:57 bucket_4_0_0.bak
-rw-r-----. 1 yashan yashan 25370624 Nov 23 10:57 ctrl_0_0_0.bak
-rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_0_0_0.bak
-rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_1_0_0.bak
-rw-r-----. 1 yashan yashan 8192 Nov 23 10:57 data_2_0_0.bak
-rw-r-----. 1 yashan yashan 8192 Nov 23 10:57 data_3_0_0.bak
-rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_4_0_0.bak
-rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 data_5_0_0.bak
-rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 data_5_0_1.bak
-rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 data_5_0_2.bak
-rw-r-----. 1 yashan yashan 67108864 Nov 23 10:57 data_5_0_3.bak
--ctrl文件为备份的控制文件。
--data文件为备份的数据文件。
--arch文件为备份的归档文件。
--当业务中存在LSC表时,bucket_5_0_0.bak/下存放LSC表的可变数据文件。
--backup_profile文件为备份集元数据文件,用于备份集和数据库版本的校验,备份集恢复关键信息等。
--backup_filelist文件用于校验备份集数据的完整性正确性
SQL> select * from dba_backup_set;
RECID# START_TIME COMPLETION_TIME TYPE INCREMENT_LEVEL INCREMENT_ID# PATH TAG TRUNC_LSN COMPRESS_LEVEL INPUT_BYTES OUTPUT_BYTES RCY_BEGIN_ASN RCY_BEGIN_LFN RCY_END_ASN RCY_END_LFN COMPRESS_ALGO ENCRYPT_ALGO
--------------------- -------------------------------- -------------------------------- ------------- --------------- ------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------- -------------- --------------------- --------------------- ------------- --------------------- ------------ --------------------- ------------- ------------
1 2023-11-23 2023-11-23 FULL 0 0 /home/yashan/yasdb_data/db-1-1/backup/bak_2023112310570880 bak_2023112310570880 780791 NONE 733859840 733859840 31 768224 31 768224 NONE NONE
1 row fetched.
整个动作比较简单,数据量大的情况下,需要注意备份的时段,对系统肯定有资源上的消耗,不单是YashanDB。一般会在业务低峰期进行备份操作。
2.1.2 通过SQL命令恢复数据库
官方文档上有一个案例,直接毁坏了当前数据库的数据文件,然后使用备份集来恢复。整个流程也很顺畅,这是因为,同一个环境,关于环境配置、用户设置、目录等等都和“原库”一致,所以省去了很多环境准备的工作。
[yashan@yashandb1 ~]$ yasql / as sysdba
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL> shutdown immediate;
Succeed.
SQL> exit
[yashan@yashandb1 ~]$ cd $YASDB_DATA
[yashan@yashandb1 db-1-1]$ ll
total 12
drwxr-----. 2 yashan yashan 4096 Nov 23 10:57 archive
drwxr-----. 3 yashan yashan 34 Nov 23 10:57 backup
-rw-r-----. 1 yashan yashan 6144 Nov 23 10:57 backup_filelist.tmp
drwxr-----. 2 yashan yashan 23 Nov 21 11:49 config
drwxr-----. 2 yashan yashan 6 Oct 27 17:37 data
drwxr-----. 2 yashan yashan 185 Nov 23 08:49 dbfiles
drwxr-----. 5 yashan yashan 60 Oct 27 17:37 diag
drwxr-----. 3 yashan yashan 20 Oct 27 17:37 external
drwxr-----. 2 yashan yashan 57 Nov 17 14:24 instance
drwxr-----. 3 yashan yashan 19 Oct 27 17:37 local_fs
drwxr-----. 8 yashan yashan 105 Oct 27 17:37 log
drwxrwxr-x. 2 yashan yashan 6 Nov 17 14:24 tmp
[yashan@yashandb1 db-1-1]$ cd dbfiles/
[yashan@yashandb1 dbfiles]$ ll
total 1450584
-rw-r-----. 1 yashan yashan 25370624 Nov 23 22:05 ctrl1
-rw-r-----. 1 yashan yashan 25370624 Nov 23 22:05 ctrl2
-rw-r-----. 1 yashan yashan 25370624 Nov 23 22:05 ctrl3
-rw-r-----. 1 yashan yashan 67108864 Nov 23 21:28 dwf
-rw-r-----. 1 yashan yashan 134217728 Nov 23 02:00 redo1
-rw-r-----. 1 yashan yashan 134217728 Nov 23 02:00 redo2
-rw-r-----. 1 yashan yashan 134217728 Nov 23 10:57 redo3
-rw-r-----. 1 yashan yashan 134217728 Nov 23 22:05 redo4
-rw-r-----. 1 yashan yashan 67108864 Nov 17 14:24 swap
-rw-r-----. 1 yashan yashan 67108864 Nov 23 21:28 sysaux
-rw-r-----. 1 yashan yashan 67108864 Nov 23 21:28 system
-rw-r-----. 1 yashan yashan 67108864 Nov 18 02:00 temp
-rw-r-----. 1 yashan yashan 469762048 Nov 23 21:28 undo
-rw-r-----. 1 yashan yashan 67108864 Nov 23 17:07 users
#怕恢复失败,这里将数据文件移走即可,不用删除
[yashan@yashandb1 dbfiles]$ mkdir ~/tmp
[yashan@yashandb1 dbfiles]$ mv ./* ~/tmp/
[yashan@yashandb1 dbfiles]$ ll
total 0
#开启数据库到nomount状态
[yashan@yashandb1 dbfiles]$ yasboot cluster start -c yashandb -m nomount
type | uuid | name | hostid | index | status | return_code | progress | cost
-----------------------------------------------------------------------------------------------------------
task | 8ea0dfd60a06089a | StartYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 2
------+------------------+-------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS
#查看数据库状态
[yashan@yashandb1 dbfiles]$ yasboot cluster status -c yashandb -d
hostid | node_type | nodeid | pid | instance_status | database_status | database_role | listen_address | data_path
------------------------------------------------------------------------------------------------------------------------------------------------
host0001 | db | 1-1:1 | 2500 | started | unconnected | - | 192.168.3.176:1688 | /home/yashan/yasdb_data/db-1-1
----------+-----------+--------+------+-----------------+-----------------+---------------+--------------------+--------------------------------
#登录数据库,恢复
[yashan@yashandb1 dbfiles]$ yasql / as sysdba
YashanDB SQL Personal Edition Release 23.1.1.100 x86_64
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL> select status from v$instance;
STATUS
-------------
STARTED
1 row fetched.
SQL> ! echo $YASDB_DATA
/home/yashan/yasdb_data/db-1-1
SQL> ! ls -l /home/yashan/yasdb_data/db-1-1/backup
total 4
drwx------. 3 yashan yashan 4096 Nov 23 10:57 bak_2023112310570880
SQL> restore database from '/home/yashan/yasdb_data/db-1-1/backup/bak_2023112310570880';
Succeed.
SQL> recover database;
Succeed.
SQL> alter database open;
Succeed.
SQL> select status from v$instance;
STATUS
-------------
OPEN
1 row fetched.
SQL> conn skye/123456
Connected to:
YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux
SQL> select count(*)from user_objects;
COUNT(*)
---------------------
4
1 row fetched.
关于增备、加密、压缩等能力暂不深究。
下面再来学习学习yasrman工具,我理解应该对标的是Oracle的rman。
2.1.3 通过yasrman备份
看了官方文档,发现语法调用上基本跟BACKUP DATABASE命令比较像,它可以进行远程备份,且可以选择性将备份集保存在yasrman工具端或数据库服务端。
准备了另外一台虚拟机,部署了另外一套YashanDB,主要使用它所带的yasrman工具。
下面测试通过yasrman(192.168.3.186)上,远程备份数据库(192.168.3.176),并将备份集保存在yasrman机器上(3.186)上。
1.创建catalog(需要使用绝对路径)
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'create catalog' -D ./catalog
[Node 0]YAS-06009 invalid path: ./catalog, reason: catalog must be a absolute path
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'create catalog' -D /home/yashan2311100/catalog
create catalog successfully
#当前目录生成了一个catalog文件
[yashan2311100@yashandb ~]$ ll
total 0
drwx------ 3 yashan2311100 yashan2311100 77 Nov 27 09:16 catalog
drwxrwxr-x 11 yashan2311100 yashan2311100 211 Oct 25 11:51 soft
drwxrwxr-x 4 yashan2311100 yashan2311100 42 Oct 25 11:52 yashandb
[yashan2311100@yashandb ~]$ cd catalog
[yashan2311100@yashandb catalog]$ ll
total 4
drwx------ 2 yashan2311100 yashan2311100 6 Nov 27 09:16 backup
-rw-r----- 1 yashan2311100 yashan2311100 512 Nov 27 09:16 catalog.dwf
-rw-r----- 1 yashan2311100 yashan2311100 0 Nov 27 09:16 catalog.meta
-rw-r----- 1 yashan2311100 yashan2311100 0 Nov 27 09:16 config.ini
2.配置config(也就是设置执行备份时一些参数,比如并行度、压缩、路径等)
[yashan2311100@yashandb catalog]$ cd
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'show all'
+---------------------------+-----------+----------------+
| NAME | DEFAULT | VALUE |
+---------------------------+-----------+----------------+
| PARALLELISM | 2 | 2 |
| SECTION SIZE | 134217728 | 134217728 |
| COMPRESSION ALGORITHM | NONE | NONE |
| COMPRESSION LEVEL | LOW | LOW |
| DEST | SERVER | SERVER |
+---------------------------+-----------+----------------+
--这里的DEST默认是将备份集保存在SERVER端,将它调整到CLIENT端,也就是保存在yasrman这边
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'configure DEST CLIENT'
configure successfully
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'show all'
+---------------------------+-----------+----------------+
| NAME | DEFAULT | VALUE |
+---------------------------+-----------+----------------+
| PARALLELISM | 2 | 2 |
| SECTION SIZE | 134217728 | 134217728 |
| COMPRESSION ALGORITHM | NONE | NONE |
| COMPRESSION LEVEL | LOW | LOW |
| DEST | SERVER | CLIENT |
+---------------------------+-----------+----------------+
3.执行备份,这里跟直接使用命令备份不太一样,必须要指定TAG。
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c 'backup database full'
[Node 0]YAS-04115 "TAG" expected but missing
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c "backup database full tag 'full20231127' "
backup successfully
[yashan2311100@yashandb ~]$ ll catalog/backup/
total 0
drwx------ 2 yashan2311100 yashan2311100 295 Nov 27 11:37 full20231127
BACKUP DATABASE没有说tag必选指定,也没说可选,可能我没找到?但是前面使用命令备份的时候,没有指定tag也备份成功了…
4.查看备份集相关信息
通过list backup可以查看
[yashan2311100@yashandb ~]$ yasrman sys/123456@192.168.3.176:1688 -c "list backup"
Group: tag: full20231127, format: /home/yashan2311100/catalog/backup/full20231127, connect url: 192.168.3.176:1688, nodeCount: 1, distribution: FALSE, isClient: TRUE, offset: 0
backup path: /home/yashan2311100/catalog/backup/full20231127
在原库dba_backup_set也可以查看
list命令仅列出指定的catalog文件中存在的备份集元数据信息,因为catalog不会与数据库自动同步备份元信息,可能与数据库中DBA_BACKUP_SET视图内容不同。
备份动作就完成了。还有一个点需要注意,如果config里面配置了参数,然后command里面又指定了相关值,command的优先级更高。
恢复的动作这里不做测试了。
2.1.5 yasbak
在找工具相关的文档的时候,又发现了还有一个备份工具,叫yasbak。看描述是为了做第三方备份工具对接做准备的,这个很不错,一般对于企业来说会有多套数据库系统需要管理,备份能集中管理能很大程度上减轻运维工作量。这里就不深究了,看未来是否有机会在第三方备份工具上体验到。
2.2 Flashback 闪回
YashanDB提供了Flashback(闪回)的能力。整个完整的语法在这:FLASHBACK
YashanDB 闪回表(Flashback table)与Oracle 对比
3. 个人感受
- 有Oracle的运维基础,上手YashanDB确实比较容易。
- 其实有些细节文档都有写,但是具备了一定的经验往往容易忽略掉这些细节,自己相当然的操作,这个习惯还是不太好,得改
比如官方文档已经写了,catalog的创建需要使用绝对路径,自己仅大概看了个语法,就按照“经验”随意使用相对路径创建了
- 备份恢复这块的能力项还是挺多的,但是内容写的有些紧凑。看看后面是否会构建多维度的官方书籍以供系统性学习。
- 闪回truncate的能力着实让人眼前一亮,看来确实做了符合用户需求的个性化设计。
- 学的有点乱,测得有点乱,写的也有点乱。持续改进吧。