#恢复
# 操作说明
- 使用本方式执行恢复时,要求当前数据库实例处于NOMOUNT状态。
- 执行恢复操作的数据库版本需与生成备份集的数据库版本完全一致。
- 共享集群部署中,只能在主集群上执行恢复操作(即其角色必须为MASTER_ROLE,可查询视图V$INSTANCE的INSTANCE_ROLE字段可获得集群中每个实例的角色属性)。
- 恢复命令仅SYS用户才可执行,恢复语法详细说明请参考开发手册RESTORE DATABASE和RECOVER DATABASE。
- 若已开启yasom仲裁选主,需先关闭仲裁选主再进行恢复操作,待恢复完成后再按需还原对应配置。
# 恢复
# 全量恢复
示例
-- 默认并发度为2,共享集群可指定YFS路径。
RESTORE DATABASE FROM '/YashanDB/backup/incr_1_20211209193740';
-- 指定并发度为6。
RESTORE DATABASE FROM '/YashanDB/backup/incr_1_20211209193740' PARALLELISM 6;
-- 成功恢复备份集后,若归档日志和在线日志连续且完整,YashanDB将自动应用所有日志,即全量恢复。
RECOVER DATABASE;
-- 打开数据库
ALTER DATABASE OPEN;
全量恢复属于完全恢复,成功后可以直接打开当前数据库,对于共享集群需要依次启动其他备集群(查看共享集群启停)。
恢复备份集的并发度默认设置为2,当备份集数据量大或希望提升恢复效率时,可增大并发度,并发度范围为[1-8]
。
如果备份集是加密生成的备份集,在恢复时还需要指定解密密码。
示例
-- 对加密的备份集恢复指定DECRYPTION关键字,并且密码与加密时一致
RESTORE DATABASE DECRYPTION yas2022 FROM '/YashanDB/backup/full_encryption';
# 基于tag增量备份集的连续恢复
在执行增量备份集恢复时需注意如下事项:
- 假如零级增量备份指定tag为incr_0,普通一级增量备份指定tag为incr_1_1,incr_1_2... (按顺序发起备份):
- 当指定tag为incr_1_2的一级增量备份恢复时,必须保证tag为incr_0的零级增量备份以及tag为incr_1_1的普通一级增量备份的备份文件保存目录存在且完整,否则将会触发 YAS-00313 错误。
- 假如零级增量备份指定tag为incr_0,累积一级增量备份指定tag为incr_1_1,incr_1_2... (按顺序发起备份):
- 当指定tag为incr_1_2的一级增量备份恢复时,必须保证tag为incr_0的零级增量备份的备份文件保存目录存在且完整,否则将会触发 YAS-00313 错误。
- 假如零级增量备份指定tag为incr_0,累积一级增量备份指定tag为incr_1_1,普通一级增量备份指定tag为incr_1_2,累积一级增量备份指定tag为incr_1_3,普通一级增量备份指定tag为incr_1_4... (按顺序发起备份):
- 当指定tag为incr_1_4的一级增量备份恢复时,必须保证tag为incr_0、incr_1_3的增量备份的备份文件保存目录存在且完整,否则将会触发 YAS-00313 错误。
- 当指定tag为incr_1_3的一级增量备份恢复时,必须保证tag为incr_0的零级增量备份的备份文件保存目录存在且完整,否则将会触发 YAS-00313 错误。
Note:
相比较原始的备份集恢复,基于tag的增量备份集恢复新增两个语法关键字:INCREMENTAL和NOREDO,INCREMENTAL可单独出现,NOREDO必须和INCREMENTAL成对出现。
- INCREMENTAL:指定该关键字,恢复完成之后数据库处于nomount状态,若要拉起数据库,需要先将数据库拉起至mount状态,再执行recover、open。
- NOREDO:指定该关键字,数据库处于不完整恢复,恢复完成之后数据库处于nomount状态,不恢复备份集中的redo和归档文件,该数据库不可拉起正常使用,若在最后一次恢复增量备份集后要拉起数据库正常使用,不可使用该参数。 如果连续增量备份集中包含slice文件,连续restore必须严格按照备份生成顺序restore,若未遵守该规则,可能导致slice文件丢失。 如果restore失败使用同一个备份集重复restore,可能会因为已存在slice文件导致restore失败,这种情况下只能通过手动清除对应slice文件后继续执行restore。
示例
基于tag的增量备份集恢复首次必须恢复LEVEL 0的备份集,指定NOREDO参数可加快恢复速度。
RESTORE DATABASE INCREMENTAL NOREDO FROM '/YashanDB/backup/incr_0_20211209193740';
Note:
在此基线恢复成功的基础上,可连续恢复同一数据库的增量备份集。
RESTORE DATABASE INCREMENTAL FROM '/YashanDB/backup/incr_1_20211209193740';
Note:
最后一次恢复时不可指定NOREDO参数。
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN;
Note:
执行RECOVER DATABASE完成恢复后不可再执行增量备份集恢复。
# 指定时间点恢复
本功能只适用于单机部署的数据库恢复。
示例
RESTORE DATABASE FROM '/YashanDB/backup/incr_0_20211209193516';
--成功恢复备份集后,指定日志序号时间点进行恢复
RECOVER DATABASE UNTIL TIME TO_DATE('2021-12-09 19:35:55','yyyy-mm-dd hh24:mi:ss');
--可按SCN进行指定时间点恢复,"258477020237086720"为用户在数据库发生故障前记录下的SCN值
RECOVER DATABASE until SCN 258477020237086720;
--重置redo时间线并打开数据库
ALTER DATABASE OPEN RESETLOGS;
本示例执行指定时间点恢复,属于不完全恢复,成功后需重置redo时间线。
until time的时间格式可以为:
'2021-12-09 19:35:55'
:此格式需要与当前会话的DATE_FORMAT参数所指定格式匹配。TO_DATE('2021-12-09 19:35:55','yyyy-mm-dd hh24:mi:ss')
:使用TO_DATE函数转换。TO_TIMESTAMP('2021-12-09 19:35:55','yyyy-mm-dd hh24:mi:ss')
:使用TO_TIMESTAMP函数转换。
SCN值可通过动态视图获取:
SELECT CURRENT_SCN FROM V$DATABASE;
Note:
当LSC表在备份集后生成了不可变数据文件时,在以下场景可能导致恢复后该LSC表存在数据不一致现象:
- 数据库原来的不可变数据文件全部存在,但是使用老的时间点恢复,此时该LSC表会多出部分不可变数据文件。
- 数据库原来的不可变数据文件被清理,使用基于时间点的恢复,LSC表可能丢失存储在不可变数据文件中的数据。
# 使用恢复场景
场景1:数据库无法启动
可能发生原因:
- 控制文件损坏或丢失
- 系统关键数据文件损坏或丢失
- 在线日志文件损坏或丢失
恢复方式:
- 建议采取全量恢复。
场景2:表误操作
可能发生原因:
- delete或update误操作导致表数据被删除或修改
- truncate导致表数据被清空
- drop导致表被删除
恢复方式:
若能及时发现误操作导致数据丢失,建议采取闪回的方式恢复表数据(参考UNDO_RETENTION/UNDO_FORCE_RETENTION具体含义)。
delete或update误操作,若undo被覆盖,则恢复不一定成功。闪回指令为:
FLASHBACK TABLE {table_name} TO SCN {SCN}; FLASHBACK TABLE {table_name} TO TIMESTAMP {TIMESTAMP};
truncate误操作,需确保回收站开启,回收站被覆盖,则恢复不一定成功。闪回指令为:
FLASHBACK TABLE TO BEFORE TRUNCATE;
drop误操作,需确保回收站开启,回收站被覆盖,则恢复不一定成功。闪回指令为:
FLASHBACK TABLE TO BEFORE DROP
若无法使用闪回的方式恢复,建议采取指定时间点恢复,恢复到表误操作之前的时间点。
场景3:主备模式下,主库崩溃时备库自动提升为主库,搭建新备库
可能发生原因:
- 主库操作系统崩溃
- 数据库关键文件被误删除
- 网络原因导致无法连接至主库
恢复方式:
- 若数据量大,建议采用全量恢复的方式重建备库;否则可以采用build database方式重建备库。
场景4:数据迁移
可能发生原因:
- 主库系统崩溃,需要进行异机恢复
- 数据库克隆
恢复方式:
- 全量恢复和指定时间点恢复都能完成数据库恢复,需按照具体要求选择恢复方式。
# 常见问题
恢复到与备份集不同的数据库文件或日志文件路径(例如HA架构中的主备复制)时,需要先设置DB_FILE_NAME_CONVERT和REDO_FILE_NAME_CONVERT两个配置参数指定文件路径转换。
单机部署中,若$YASDB_DATA/dbfiles目录下存在数据库文件,执行恢复将触发YAS-00311错误;共享集群部署中则要求+DG0目录(安装时默认的第一个磁盘组名称,调整为其他值时此处相应修改)下不存在数据库文件,否则将触发YAS-00311错误。
Note:
$YASDB_DATA/archive为存储归档文件的默认目录,若要执行PITR恢复操作,需保留该目录下的归档文件,以保证PITR恢复操作正常恢复。若要执行全量恢复且仅恢复备份集中的内容,则需要清空归档目录下的文件,否则执行RECOVER操作可能回放残留归档文件中的数据,导致实际恢复出的数据与备份集中的不一致。