第11章 只读数据文件备份与恢复
只读数据文件是只读表空间的数据文件,数据块和文件头不允许更改。
制度文件头损坏后,在检查点发生时实例不会崩溃(关键数据文件头损坏后果),也不会将文件自动下线(普通数据文件头损坏后果)
# 将表空间设置为只读状态
alter tablespace users read only;
# 将表空间恢复为读写状态
alter tablespace users read write;
# 获取数据库只读表空间信息
select t.tablespace_name,d.file_id,d.file_name
from dba_tablespaces t inner join dba_data_files d
on t.tablespace_name=d.tablespace_name
where
t.status = 'READ ONLY';
备份
只读数据文件可以直接使用操作系统命令拷贝
# 备份表空间
backup as backupset tablespace users;
backup as backupset datafile 5;
# 镜像复制
backup as copy tablespace users;
backup as copy datafile 5;
# 启用备份优化(backup database时生效)
configure backup optimization on;
# 设置备份保留策略为恢复窗口3天
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
# 设置备份保留策略为冗余度2
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
# 只读数据文件使用冗余度时保留数量为 冗余度 + 1
# 只读数据文件使用恢复窗口时保留数量为 1
恢复
只读数据文件的恢复没有recover步骤
- 使数据文件下线
- 从备份还原(restore或switch)
- 使数据文件上线
run{
sql 'alter database datafile 5 offline';
restore datafile 5;
sql 'alter database datafile 5 online';
}
# 场景:在数据文件example01.dbf为只读状态时,对该文件和控制文件进行了备份,随后example01.dbf被设置成读写状态,但是example01.dbf和控制文件均未再次备份,此时example01.dbf和控制文件同时损坏
# 该场景下recover命令必须连续执行两遍,这并不是笔误 书本197页
run{
startup force nomount;
restore controlfile from '/backup/controlfile.bak';
mount database;
restore datafile 5;
recover database;
recover database;
alter database open resetlogs;
}
建议启用控制文件自动备份功能,可以在修改表空间读写状态时自动备份控制文件从而规避此种特殊情况。