本文内容来自YashanDB官网,原文内容请见 doc.yashandb.com/yashandb/23...
SQL命令方式的备份恢复操作适用于单机/共享集群部署的数据库。
操作示例
以下为对单机部署的数据库执行备份恢复的模拟场景:
1.通过yasql连接数据库,将数据库切换到归档模式,归档模式必须在数据库MOUNT状态下才能开启。
shell
$ yasql sales/sales
SQL> ALTER DATABASE ARCHIVELOG;
Copied!
2.模拟业务场景,在数据库中创建表并插入数据。
sql
CREATE TABLE backuptable (b1 INT,b2 INT);
INSERT INTO backuptable VALUES (2,3);
COMMIT;
Copied!
3.执行数据全量备份。
sql
BACKUP DATABASE FULL FORMAT '/YashanDB/backup/full_20211212181530';
Copied!
Caution:
确保"/YashanDB/backup"目录存在且YashanDB安装用户具有读写权限,如果指定的数据备份目录已存在,则会触发 YAS-00318 错误。
4.使用具有DBA权限的用户查询DBA_BACKUP_SET视图,检查备份详情。
sql
SELECT RECID
RECID
1 2023-06-19 2023-06-19 FULL 0 0 /YashanDB/backup/full_20211212181530 bak_2023061902151684 53767 NONE 516325376 516325376 8 51469 8 51471 NONE NONE
Copied!
5.检查生成的备份集物理文件。
diff
$ cd /YashanDB/backup/full_20211212181530
$ ls -rlt
total 504232
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
drwx
-rw-r
-rw-r
Copied!
其中:
- ctrl_*文件为备份的控制文件。
- data_*文件为备份的数据文件。
- arch_*文件为备份的归档文件。
- redo_*文件为备份的在线日志文件,仅在备库执行备份生成的备份集中存在 。
- 当业务中存在LSC表时,bucket_4_0_0.bak/下存放LSC表的可变数据文件。
- backup_profile文件为备份集元数据文件,用于备份集和数据库版本的校验,备份集恢复关键信息等。
- backup_filelist文件用于校验备份集数据的完整性正确性。
6.模拟灾难场景,删除数据库文件。
Warn:
以下操作只能在测试环境上执行,请勿直接在生产环境上测试。
shell
$ cd $YASDB_DATA/dbfiles
$ rm -rf ./*
$ ls -rlt
total 0
Copied!
7.重启数据库到NOMOUNT状态,执行恢复,然后检查新增数据是否恢复。
sql
SHUTDOWN IMMEDIATE;
exit;
$ yasboot cluster start -c yashandb -m nomount
$ yasql sales/sales
SQL> RESTORE DATABASE FROM '/YashanDB/backup/full_20211212181530';
RECOVER DATABASE;
ALTER DATABASE OPEN;
SELECT b1,b2 FROM backuptable;
B1 B2
2 3
Copied!
归档文件备份恢复
归档日志备份恢复的SQL命令操作方式适用于单机/共享集群部署的数据库。
以下为对单机部署的数据库执行归档备份和恢复的模拟场景:
# 备份示例
使用本方式执行备份时,要求数据库运行于OPEN状态且归档模式开启。
1.通过yasql连接数据库,将数据库切换到归档模式,归档模式必须在数据库MOUNT状态下才能开启。
shell
$ yasql username/password
SQL> ALTER DATABASE ARCHIVELOG;
Copied!
2.模拟业务场景,在数据库中创建表并插入数据,并执行多次切换LOGFILE生成多个归档。
sql
CREATE TABLE backuptable (b1 INT,b2 INT);
INSERT INTO backuptable VALUES (2,3);
COMMIT;
ALTER SYSTEM SWITCH LOGFILE;
Copied!
sql
SELECT SEQUENCE
Copied!
3.指定归档的SEQUENCE区间备份。
sql
SELECT SEQUENCE
SEQUENCE
1 525940019749924864 525940036244176896
2 525940036244176896 525940261064138752
3 525940261064138752 525940261064138752
4 525940261064138752 525940261064138752
5 525940261064138752 525940400603951104
BACKUP ARCHIVELOG SEQUENCE BETWEEN 2 AND 5 FORMAT '/YashanDB/backup/SEQUENCE_2_5';
Copied!
Note:
因为上述示例中在切日志期间并未做任何业务,所以部分归档的SCN起始是一样的,实际生产环境中表现正常。
4.使用具有DBA权限的用户查询DBA_ARCHIVE_BACKUPSET视图,检查备份详情。
sql
SELECT RECID
RECID
1 1 2024-01-26 2024-01-26 ARCHIVE /YashanDB/backup/SEQUENCE_2_5 bak_2024012611380123 NONE NONE NONE 17362944 17362944 2 5 525940036244176896 525940400603951104
Copied!
5.检查生成的备份集物理文件。
diff
$ cd /YashanDB/backup/SEQUENCE_2_5
$ ls -rlt
total 16960
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
Copied!
其中:
- arch*为独立的归档文件,arch{instanceId}{resetId}{asn}_{secId},分别表示节点的ID,resetlogs的id,归档文件的序列号ASN,归档文件的分片序列号。
- backup_profile文件为备份集元数据文件,用于备份集和数据库版本的校验,备份集恢复关键信息等。
- backup_filelist文件用于校验备份集数据的完整性正确性。
# 恢复示例
使用本方式执行恢复时,要求当前数据库实例处于执行完RESTORE且未执行RECOVER的MOUNT状态,然后检查归档文件是否恢复到指定目录。
除指定SEQUENCE区间外,也可指定为时间、SCN区间,详见BACKUP ARCHIVELOG。
diff
$ cd /YASDATA/archive
$ ll -rlt
total 23296
-rw-r
-rw-r
-rw-r
-rw-r
-rw-r
$ rm arch_0_3.ARC arch_0_5.ARC
$ ll -rlt
total 23272
-rw-r
-rw-r
-rw-r
SQL> RESTORE ARCHIVELOG SEQUENCE BETWEEN 2 AND 4 FROM SEARCHDIR '/YashanDB/backup';
$ ll -rlt
total 23284
-rw-r
-rw-r
-rw-r
-rw-r
Copied!