rman只读表空间的备份和恢复(Backup and recovery of RMAN read-only table space)

  • rman只读表空间备份和恢复
  • 备份只读表空间exclude方式skip readonly方式
  • exclude方式
  • skip readonly方式
  • 恢复只读表空间备份是read only状态,被破坏时是时read only备份是read only状态,被破坏时是时read write备份是read write状态,被破坏时是时read only
  • 备份是read only状态,被破坏时是时read only
  • 备份是read only状态,被破坏时是时read write
  • 备份是read write状态,被破坏时是时read only

rman只读表空间备份和恢复

当使用alter tablespace tbs read only时,数据文件会执行检查点进程(将所有脏缓冲区的内容写至磁盘),

当前的SCN号会被标注,同时存储了SCN的数据文件头部被冻结不再变化.控制文件内也会记录该数据文件的冻结信息。

特点:

1) 减少启动和关闭时间:当表空间设置为只读后,在启动和关闭时就不会对只读表空间对应的数据文件进行处理。从而减少了数据库启动和关闭的时间。

2) 减少备份恢复时间:备份只读表空间后,不需要在对其进行备份,减少了备份量

3)不同分区表放在不同表空间,历史的数据做只读,便于管理

备份只读表空间

方式:

1)exclude排除不需要备份的表空间(需要手动指定,不方便)

2)skip readonly跳过只读表空间(自动跳过)

exclude方式

1创建测试的只读表空间test01

create tablespace TEST1 datafile '/u01/app/oracle/oradata/ORCL/test1.dbf' size 10m;

create table t1(a int) tablespace test1;
insert into t1 select rownum from dual connect by rownum<=10;

alter tablespace test1 read only; 

SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             READ ONLY

2.备份只读表空间

backup tablespace test1 format '/tmp/test/%d_test1_%s.bk';

RMAN> list backup of database;


备份集列表
===================


BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
60      Full    1.12M      DISK        00:00:00     14-5月 -22
        BP 关键字: 60   状态: AVAILABLE  已压缩: NO  标记: TAG20220514T103917
段名:/tmp/test/ORCL_test1_80.bk
  备份集 60 中的数据文件列表
  File LV Type Ckp SCN    Ckp 时间 Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ---------- ----------- ------ ----
  15      Full 4202861    14-5月 -22              NO    /u01/app/oracle/oradata/ORCL/test1.dbf

3.备份时排除只读表空间

run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
configure exclude for tablespace test1;
backup as compressed backupset incremental level 0 database format '/tmp/test/%d_%s.bk';
configure exclude for tablespace test1 clear;
backup current controlfile format '/tmp/test/control_%s.bk';
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup archivelog all delete input format '/tmp/test/arch_%s';
release channel ch1;
release channel ch2;
}

skip readonly方式

backup tablespace test1 format '/tmp/test/%d_test1_%s.bk';

备份只读表空间之后

run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup as compressed backupset incremental level 0 database format '/tmp/test/%d_%s.bk' include current controlfile skip readonly;
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup archivelog all delete input format '/tmp/test/arch_%s';
release channel ch1;
release channel ch2;
}

恢复只读表空间

分三种情况:

  • 备份是read only状态,被破坏时是时read only(只需要recover)
  • 备份是read only状态,被破坏时是时read write
  • 备份是read write状态,被破坏时是时read only

备份是read only状态,被破坏时是时read only

只需要resotore即可

--先备份
backup tablespace test1 format '/tmp/test/test1_%s.bk';

--查看对应的检查点信息
SQL> select name,checkpoint_change# from v$datafile;
......
NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4307981
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4307981
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4307981
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4307981
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4202861


--生成一个完全检查点,强行写脏块更新数据文件和控制文件的检查点
SQL> alter system checkpoint;

--查看对比检查点变化情况,只读表空间检查点锁死不变
--同时也侧面证明了cdb的系统操作不会作用pdb的数据文件
SQL> select name,checkpoint_change# from v$datafile;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4308474
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4308474
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4308474
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4308474
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4202861

--删除,模拟破坏数据文件,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;

--数据文件15号不见了
数据文件 15: '/u01/app/oracle/oradata/ORCL/test1.dbf'

--rman恢复

run{
sql'alter database datafile 15 offline';
restore datafile 15;
sql'alter database datafile 15 online';
}

备份是read only状态,被破坏时是时read write

--备份
backup tablespace test1 format '/tmp/test/test1_%s.bk';


--转化为read write
SQL> alter tablespace test1 read write;
SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             ONLINE

SQL> col table_name for a30;
SQL> select table_name,tablespace_name from user_tables where table_name='T1';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T1                             TEST1


--修改表,同时检查点号改变
SQL> insert into t1 select * from t1;
SQL> commit;
SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> select count(*) from t1;

  COUNT(*)
----------
        20


--删除,模拟破坏数据文件,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;



--rman恢复,可以从告警日志中查看详细动作,利用归档或者没有日志切换就使用redo进行了进行恢复
run{
sql'alter database datafile 15 offline';
restore datafile 15;
recover datafile 15;
sql'alter database datafile 15 online';
}

备份是read write状态,被破坏时是时read only

SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             ONLINE

--先做备份
backup tablespace test1 format '/tmp/test/test1_%s.bk';

RMAN> list backup of tablespace test1;


备份集列表
===================


BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
117     Full    1.12M      DISK        00:00:00     15-5月 -22
        BP 关键字: 117   状态: AVAILABLE  已压缩: NO  标记: TAG20220515T110328
段名:/tmp/test/test1_139.bk
  备份集 117 中的数据文件列表
  File LV Type Ckp SCN    Ckp 时间 Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ---------- ----------- ------ ----
  15      Full 4833216    15-5月 -22              NO    /u01/app/oracle/oradata/ORCL/test1.dbf



SQL> insert into t1 select * from t1;
SQL> commit;
SQL> select count(*) from t1;

  COUNT(*)
----------
     40960

--变为read only状态,注意检查点
SQL> select name,checkpoint_change# from v$datafile;
NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4829465
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4829465
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833216

SQL> alter tablespace test1 read only;

SQL> select name,checkpoint_change# from v$datafile;
NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4829465
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4829465
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833415


--生成完全检查点
SQL> alter system checkpoint;
SQL> select name,checkpoint_change# from v$datafile;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4833517
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4833517
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833415

--现在是read only
SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             READ ONLY
SQL> select count(*) from t1;

  COUNT(*)
----------
     40960



--删除,模拟破坏数据文件,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;


SQL> select count(*) from t1;

  COUNT(*)
----------
     40960

SQL> insert into t1 select * from t1;
insert into t1 select * from t1
*
第 1 行出现错误:
ORA-00372: 此时无法修改文件 15
ORA-01110: 数据文件 15: '/u01/app/oracle/oradata/ORCL/test1.dbf'


--rman恢复
run{
sql'alter database datafile 15 offline';
restore datafile 15;
recover datafile 15;
sql'alter database datafile 15 online';
}

--对比检查点,没有变化
SQL> select name,checkpoint_change# from v$datafile;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4833517
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4833517
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833415

————————
  • RMAN read only tablespace backup and recovery
  • 备份只读表空间exclude方式skip readonly方式
  • exclude方式
  • skip readonly方式
  • 恢复只读表空间备份是read only状态,被破坏时是时read only备份是read only状态,被破坏时是时read write备份是read write状态,被破坏时是时read only
  • 备份是read only状态,被破坏时是时read only
  • 备份是read only状态,被破坏时是时read write
  • 备份是read write状态,被破坏时是时read only

RMAN read only tablespace backup and recovery

When alter tablespace TBS read only is used, the data file will execute the checkpoint process (write the contents of all dirty buffers to disk),

The current SCN number will be marked, and the header of the data file storing SCN will be frozen and will not change The freezing information of the data file will also be recorded in the control file.

characteristic:

1) Reduce startup and shutdown time: when the tablespace is set to read-only, the data files corresponding to the read-only tablespace will not be processed during startup and shutdown. This reduces the time for database startup and shutdown.

2) Reduce backup and recovery time: after backing up the read-only table space, it is not necessary to back it up, which reduces the amount of backup

3) Different partition tables are placed in different table spaces, and historical data is read-only for easy management

Backing up read-only tablespaces

Method:

1) Exclude exclude tablespaces that do not need to be backed up (need to be specified manually, inconvenient)

2) Skip readonly skip read-only tablespaces (auto skip)

exclude方式

1 create a read-only table space test01 for the test

create tablespace TEST1 datafile '/u01/app/oracle/oradata/ORCL/test1.dbf' size 10m;

create table t1(a int) tablespace test1;
insert into t1 select rownum from dual connect by rownum<=10;

alter tablespace test1 read only; 

SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             READ ONLY

2. Backup read-only tablespaces

backup tablespace test1 format '/tmp/test/%d_test1_%s.bk';

RMAN> list backup of database;


备份集列表
===================


BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
60      Full    1.12M      DISK        00:00:00     14-5月 -22
        BP 关键字: 60   状态: AVAILABLE  已压缩: NO  标记: TAG20220514T103917
段名:/tmp/test/ORCL_test1_80.bk
  备份集 60 中的数据文件列表
  File LV Type Ckp SCN    Ckp 时间 Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ---------- ----------- ------ ----
  15      Full 4202861    14-5月 -22              NO    /u01/app/oracle/oradata/ORCL/test1.dbf

3. Exclude read-only tablespaces during backup

run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
configure exclude for tablespace test1;
backup as compressed backupset incremental level 0 database format '/tmp/test/%d_%s.bk';
configure exclude for tablespace test1 clear;
backup current controlfile format '/tmp/test/control_%s.bk';
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup archivelog all delete input format '/tmp/test/arch_%s';
release channel ch1;
release channel ch2;
}

skip readonly方式

backup tablespace test1 format '/tmp/test/%d_test1_%s.bk';

After backing up read-only tablespaces

run {
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup as compressed backupset incremental level 0 database format '/tmp/test/%d_%s.bk' include current controlfile skip readonly;
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup archivelog all delete input format '/tmp/test/arch_%s';
release channel ch1;
release channel ch2;
}

Restore read-only tablespaces

There are three situations:

  • 备份是read only状态,被破坏时是时read only(只需要recover)
  • 备份是read only状态,被破坏时是时read write
  • 备份是read write状态,被破坏时是时read only

备份是read only状态,被破坏时是时read only

Just need to restore

--先备份
backup tablespace test1 format '/tmp/test/test1_%s.bk';

--查看对应的检查点信息
SQL> select name,checkpoint_change# from v$datafile;
......
NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4307981
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4307981
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4307981
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4307981
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4202861


--生成一个完全检查点,强行写脏块更新数据文件和控制文件的检查点
SQL> alter system checkpoint;

--查看对比检查点变化情况,只读表空间检查点锁死不变
--同时也侧面证明了cdb的系统操作不会作用pdb的数据文件
SQL> select name,checkpoint_change# from v$datafile;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4308474
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4308474
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4308474
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4308474
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4202861

--删除,模拟破坏数据文件,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;

--数据文件15号不见了
数据文件 15: '/u01/app/oracle/oradata/ORCL/test1.dbf'

--rman恢复

run{
sql'alter database datafile 15 offline';
restore datafile 15;
sql'alter database datafile 15 online';
}

备份是read only状态,被破坏时是时read write

--备份
backup tablespace test1 format '/tmp/test/test1_%s.bk';


--转化为read write
SQL> alter tablespace test1 read write;
SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             ONLINE

SQL> col table_name for a30;
SQL> select table_name,tablespace_name from user_tables where table_name='T1';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T1                             TEST1


--修改表,同时检查点号改变
SQL> insert into t1 select * from t1;
SQL> commit;
SQL> alter system switch logfile;
SQL> alter system checkpoint;
SQL> select count(*) from t1;

  COUNT(*)
----------
        20


--删除,模拟破坏数据文件,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;



--rman恢复,可以从告警日志中查看详细动作,利用归档或者没有日志切换就使用redo进行了进行恢复
run{
sql'alter database datafile 15 offline';
restore datafile 15;
recover datafile 15;
sql'alter database datafile 15 online';
}

备份是read write状态,被破坏时是时read only

SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             ONLINE

--先做备份
backup tablespace test1 format '/tmp/test/test1_%s.bk';

RMAN> list backup of tablespace test1;


备份集列表
===================


BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
117     Full    1.12M      DISK        00:00:00     15-5月 -22
        BP 关键字: 117   状态: AVAILABLE  已压缩: NO  标记: TAG20220515T110328
段名:/tmp/test/test1_139.bk
  备份集 117 中的数据文件列表
  File LV Type Ckp SCN    Ckp 时间 Abs Fuz SCN Sparse Name
  ---- -- ---- ---------- ---------- ----------- ------ ----
  15      Full 4833216    15-5月 -22              NO    /u01/app/oracle/oradata/ORCL/test1.dbf



SQL> insert into t1 select * from t1;
SQL> commit;
SQL> select count(*) from t1;

  COUNT(*)
----------
     40960

--变为read only状态,注意检查点
SQL> select name,checkpoint_change# from v$datafile;
NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4829465
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4829465
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833216

SQL> alter tablespace test1 read only;

SQL> select name,checkpoint_change# from v$datafile;
NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4829465
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4829465
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4829465
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833415


--生成完全检查点
SQL> alter system checkpoint;
SQL> select name,checkpoint_change# from v$datafile;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4833517
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4833517
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833415

--现在是read only
SQL> select tablespace_name,contents,status from dba_tablespaces;

TABLESPACE_NAME                CONTENTS              STATUS
------------------------------ --------------------- ---------
SYSTEM                         PERMANENT             ONLINE
SYSAUX                         PERMANENT             ONLINE
UNDOTBS1                       UNDO                  ONLINE
TEMP                           TEMPORARY             ONLINE
USERS                          PERMANENT             ONLINE
TEST1                          PERMANENT             READ ONLY
SQL> select count(*) from t1;

  COUNT(*)
----------
     40960



--删除,模拟破坏数据文件,
rm -f /u01/app/oracle/oradata/ORCL/test1.dbf
SQL> alter system flush buffer_cache;


SQL> select count(*) from t1;

  COUNT(*)
----------
     40960

SQL> insert into t1 select * from t1;
insert into t1 select * from t1
*
第 1 行出现错误:
ORA-00372: 此时无法修改文件 15
ORA-01110: 数据文件 15: '/u01/app/oracle/oradata/ORCL/test1.dbf'


--rman恢复
run{
sql'alter database datafile 15 offline';
restore datafile 15;
recover datafile 15;
sql'alter database datafile 15 online';
}

--对比检查点,没有变化
SQL> select name,checkpoint_change# from v$datafile;

NAME                                               CHECKPOINT_CHANGE#
-------------------------------------------------- ------------------
/u01/app/oracle/oradata/ORCL/system01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/sysaux01.dbf                     4833517
/u01/app/oracle/oradata/ORCL/undotbs01.dbf                    4833517
/u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf             2159413
/u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf             2159413
/u01/app/oracle/oradata/ORCL/users01.dbf                      4833517
/u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf            2159413
/u01/app/oracle/oradata/ORCL/orclpdb/system01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/sysaux01.dbf             3272499
/u01/app/oracle/oradata/ORCL/orclpdb/undotbs01.dbf            3272499
/u01/app/oracle/oradata/ORCL/orclpdb/users01.dbf              3272499
/u01/app/oracle/oradata/ORCL/test1.dbf                        4833415