Oracle数据库RMAN灾难恢复

目录

一、环境准备

1.1.连接数据库,记录关键信息

1.2.创建专用测试环境

1.2.1.创建表空间

1.2.2.创建测试用户

1.2.3.进行用户授权

1.3.创建测试表并插入相应数据

二、配置并执行RMAN备份

2.1.配置rman关键参数

2.1.1.连接目标数据库并查看当前配置

2.1.2.必须开启的配置

2.1.3.再次查看配置

2.2.编写脚本

2.3.执行脚本

2.4.验证备份可用性

2.5.查看备份信息

2.6.添加验证数据并进行归档(制造差异好进行对比)

2.6.1.在备份完成后再次对测试的数据表进行新增数据

2.6.2.归档最后的变更

2.6.3.备份这个最后的归档日志

三、模拟存储完全损坏

3.1.删除所有的数据库文件(彻底进行破坏)

3.1.1.查看数据库所有的重要文件

3.1.2.删除所有重要文件(模拟存储损坏)

3.1.3.尝试对测试表插入新的数据

四、使用RMAN进行恢复

4.1.查看当前数据库情况

4.2.强制关闭数据库

4.3.将数据库启动到nomount状态(使用最小化的pfile)

4.4.从自动备份恢复spfile

4.5.恢复控制文件

4.6.恢复数据文件

4.7.应用归档日志

4.7.1.第一次执行

4.7.2.第二次执行(尝试强制恢复到备份点)

4.8.打开数据库

4.9.立即备份新的控制文件

五、验证恢复完整性

5.1.验证数据库当前状态

5.2.验证数据完整性

5.2.1.不完全备份恢复

5.2.2.完全备份恢复

六、备份健康检查(日常维护)

6.1.检查备份状态

6.2.验证备份策略

6.3.定期验证备份可用性


一、环境准备

1.1.连接数据库,记录关键信息

sqlplus / as sysdba

SELECT

DBID, -- ① 记录这个!灾难恢复的关键,我这里是DBID:1747225139

NAME AS DB_NAME, -- ② 记录这个!

LOG_MODE

FROM V$DATABASE;

1.2.创建专用测试环境

启动环境

1.2.1.创建表空间

查看当前存在的表空间:

select tablespace_name,status,contents from dba_tablespaces;

创建测试所需使用的表空间,并指定数据文件存放位置以及自动扩展:

CREATE TABLESPACE rman_test DATAFILE '/u01/app/oracle/oradata/orcl/rman_test01.dbf' SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 32766M;

1.2.2.创建测试用户

CREATE USER rmanlab IDENTIFIED BY oracle DEFAULT TABLESPACE rman_test QUOTA UNLIMITED ON rman_test;

1.2.3.进行用户授权

GRANT CONNECT, RESOURCE, CREATE TABLE TO rmanlab;

1.3.创建测试表并插入相应数据

bash 复制代码
CONNECT rmanlab/oracle

CREATE TABLE recovery_test (
    id NUMBER GENERATED ALWAYS AS IDENTITY,
    test_time TIMESTAMP DEFAULT SYSTIMESTAMP,
    test_data VARCHAR2(100),
    backup_phase VARCHAR2(20)
);

-- 插入备份前数据(用于验证恢复)

INSERT INTO recovery_test (test_data, backup_phase) VALUES ('数据-备份前', 'PRE_BACKUP');

COMMIT;

-- 验证数据,应有1条记录:'数据-备份前'

SELECT * FROM recovery_test;

二、配置并执行RMAN备份

2.1.配置rman关键参数

2.1.1.连接目标数据库并查看当前配置

rman target /

show all

2.1.2.必须开启的配置

CONFIGURE CONTROLFILE AUTOBACKUP ON; -- 救命设置!

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/backup/autobackup/cf_%F'; -- 固定目录

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

2.1.3.再次查看配置

SHOW ALL;

2.2.编写脚本

注意:这里需要提前创建目录

授权:chown -R oracle:oinstall /u01/backup

cd ~

mkdir oracle_autobackup_scripts

cd oracle_autobackup_scripts

vi autobackup_rman_test.rman

bash 复制代码
RUN {
    -- 1. 强制归档当前日志
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    
    -- 2. 0级全库备份
    BACKUP INCREMENTAL LEVEL 0 DATABASE 
        FORMAT '/u01/backup/autobackup/data/full_0_%d_%T_%U'
        TAG 'FULL_LEVEL0';
    
    -- 3. 备份并删除归档日志
    BACKUP ARCHIVELOG ALL
        FORMAT '/u01/backup/autobackup/data/archlog_%d_%T_%U'
        DELETE INPUT;
    
    -- 4. 备份参数文件
    BACKUP SPFILE 
        FORMAT '/u01/backup/autobackup/data/spfile_%d_%T_%U';
    
    -- 5. 备份控制文件
    BACKUP CURRENT CONTROLFILE 
        FORMAT '/u01/backup/autobackup/data/control_%d_%T_%U';
    
    -- 6. 删除过期备份(可选)
    DELETE NOPROMPT OBSOLETE;
}

2.3.执行脚本

rman target / @/home/oracle/oracle_autobackup_scripts/autobackup_rman_test.rman

日志输出

oracle@rac01 oracle_autobackup_scripts\]$ rman target / @/home/oracle/oracle_autobackup_scripts/autobackup_rman_test.rman Recovery Manager: Release 19.0.0.0.0 - Production on Wed Apr 8 16:31:44 2026 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1747225139) RMAN\> RUN { 2\> # 1. 强制归档当前日志 3\> SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; 4\> 5\> # 2. 0级全库备份 6\> BACKUP INCREMENTAL LEVEL 0 DATABASE 7\> FORMAT '/u01/backup/autobackup/data/full_0_%d_%T_%U' 8\> TAG 'FULL_LEVEL0'; 9\> 10\> # 3. 备份并删除归档日志 11\> BACKUP ARCHIVELOG ALL 12\> FORMAT '/u01/backup/autobackup/data/archlog_%d_%T_%U' 13\> DELETE INPUT; 14\> 15\> # 4. 备份参数文件 16\> BACKUP SPFILE 17\> FORMAT '/u01/backup/autobackup/data/spfile_%d_%T_%U'; 18\> 19\> # 5. 备份控制文件 20\> BACKUP CURRENT CONTROLFILE 21\> FORMAT '/u01/backup/autobackup/data/control_%d_%T_%U'; 22\> 23\> # 6. 删除过期备份(可选) 24\> DELETE NOPROMPT OBSOLETE; 25\> } 26\> using target database control file instead of recovery catalog sql statement: ALTER SYSTEM ARCHIVE LOG CURRENT Starting backup at 08-APR-26 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=297 device type=DISK channel ORA_DISK_1: starting incremental level 0 datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf input datafile file number=00006 name=/u01/app/oracle/oradata/orcl/users_data02.dbf input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/ts_app_data01.dbf input datafile file number=00007 name=/u01/app/oracle/oradata/orcl/rman_data01.dbf input datafile file number=00008 name=/u01/app/oracle/oradata/orcl/rman_test01.dbf channel ORA_DISK_1: starting piece 1 at 08-APR-26 channel ORA_DISK_1: finished piece 1 at 08-APR-26 piece handle=/u01/backup/autobackup/data/full_0_ORCL_20260408_084l24kq_1_1 tag=FULL_LEVEL0 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 08-APR-26 Starting backup at 08-APR-26 current log archived using channel ORA_DISK_1 channel ORA_DISK_1: starting archived log backup set channel ORA_DISK_1: specifying archived log(s) in backup set input archived log thread=1 sequence=53 RECID=16 STAMP=1230049946 input archived log thread=1 sequence=54 RECID=17 STAMP=1230049949 channel ORA_DISK_1: starting piece 1 at 08-APR-26 channel ORA_DISK_1: finished piece 1 at 08-APR-26 piece handle=/u01/backup/autobackup/data/archlog_ORCL_20260408_094l24kt_1_1 tag=TAG20260408T163229 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 channel ORA_DISK_1: deleting archived log(s) archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_53_1219444403.dbf RECID=16 STAMP=1230049946 archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_54_1219444403.dbf RECID=17 STAMP=1230049949 Finished backup at 08-APR-26 Starting backup at 08-APR-26 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 08-APR-26 channel ORA_DISK_1: finished piece 1 at 08-APR-26 piece handle=/u01/backup/autobackup/data/spfile_ORCL_20260408_0a4l24ku_1_1 tag=TAG20260408T163230 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 08-APR-26 Starting backup at 08-APR-26 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set channel ORA_DISK_1: starting piece 1 at 08-APR-26 channel ORA_DISK_1: finished piece 1 at 08-APR-26 piece handle=/u01/backup/autobackup/data/control_ORCL_20260408_0b4l24l0_1_1 tag=TAG20260408T163232 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 08-APR-26 Starting Control File and SPFILE Autobackup at 08-APR-26 piece handle=/u01/backup/autobackup/cf_c-1747225139-20260408-02 comment=NONE Finished Control File and SPFILE Autobackup at 08-APR-26 RMAN retention policy will be applied to the command RMAN retention policy is set to recovery window of 7 days using channel ORA_DISK_1 Deleting the following obsolete backups and copies: Type Key Completion Time Filename/Handle -------------------- ------ ------------------ -------------------- Backup Set 1 05-JAN-26 Backup Piece 1 05-JAN-26 /u01/app/oracle/product/19c/dbhome_1/dbs/c-1747225139-20260105-00 deleted backup piece backup piece handle=/u01/app/oracle/product/19c/dbhome_1/dbs/c-1747225139-20260105-00 RECID=1 STAMP=1221696144 Deleted 1 objects Recovery Manager complete. \[oracle@rac01 oracle_autobackup_scripts\]$

2.4.验证备份可用性

validate:可用性

RESTORE DATABASE VALIDATE;

RESTORE CONTROLFILE VALIDATE;

RESTORE SPFILE VALIDATE;

2.5.查看备份信息

LIST BACKUP SUMMARY;

2.6.添加验证数据并进行归档(制造差异好进行对比)

2.6.1.在备份完成后再次对测试的数据表进行新增数据

sqlplus / as sysdba

connect rmanlab/oracle

INSERT INTO recovery_test (test_data, backup_phase) VALUES ('数据-备份后', 'AFTER_BACKUP');

2.6.2.归档最后的变更

sqlplus / as sysdba

alter system archive log current;

2.6.3.备份这个最后的归档日志

rman target / BACKUP ARCHIVELOG ALL DELETE INPUT TAG 'FINAL_ARCH';

bash 复制代码
[oracle@rac01 backup_scripts]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Tue Apr 7 15:25:14 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1747225139)

RMAN> list backup summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
2       B  F  A DISK        08-JAN-26       1       1       NO         TAG20260108T044741
3       B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T155930
4       B  0  A DISK        08-APR-26       1       1       NO         FULL_LEVEL0
5       B  A  A DISK        08-APR-26       1       1       NO         TAG20260408T163048
6       B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163052
7       B  0  A DISK        08-APR-26       1       1       NO         FULL_LEVEL0
8       B  A  A DISK        08-APR-26       1       1       NO         TAG20260408T163229
9       B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163230
10      B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163232
11      B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163234

RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT TAG 'FINAL_ARCH';

Starting backup at 08-APR-26
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=55 RECID=18 STAMP=1230050375
input archived log thread=1 sequence=56 RECID=19 STAMP=1230050484
channel ORA_DISK_1: starting piece 1 at 08-APR-26
channel ORA_DISK_1: finished piece 1 at 08-APR-26
piece handle=/u01/app/oracle/product/19c/dbhome_1/dbs/0d4l255k_1_1 tag=FINAL_ARCH comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_55_1219444403.dbf RECID=18 STAMP=1230050375
archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_56_1219444403.dbf RECID=19 STAMP=1230050484
Finished backup at 08-APR-26

Starting Control File and SPFILE Autobackup at 08-APR-26
piece handle=/u01/backup/autobackup/cf_c-1747225139-20260408-03 comment=NONE
Finished Control File and SPFILE Autobackup at 08-APR-26

RMAN> list backup summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
2       B  F  A DISK        08-JAN-26       1       1       NO         TAG20260108T044741
3       B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T155930
4       B  0  A DISK        08-APR-26       1       1       NO         FULL_LEVEL0
5       B  A  A DISK        08-APR-26       1       1       NO         TAG20260408T163048
6       B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163052
7       B  0  A DISK        08-APR-26       1       1       NO         FULL_LEVEL0
8       B  A  A DISK        08-APR-26       1       1       NO         TAG20260408T163229
9       B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163230
10      B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163232
11      B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T163234
12      B  A  A DISK        08-APR-26       1       1       NO         FINAL_ARCH
13      B  F  A DISK        08-APR-26       1       1       NO         TAG20260408T164125

RMAN>

三、模拟存储完全损坏

3.1.删除所有的数据库文件(彻底进行破坏)

3.1.1.查看数据库所有的重要文件

-- 数据文件

SELECT file_id, file_name, tablespace_name, status, autoextensible FROM dba_data_files;

-- 控制文件

select name,status,is_recovery_dest_file from v$controlfile;

-- 重做日志文件

select * from v$logfile;

-- SPFILE参数文件

select name, value FROM v$parameter WHERE name = 'spfile';

3.1.2.删除所有重要文件(模拟存储损坏)

rm -rf /u01/app/oracle/oradata/orcl/*.dbf

rm -rf /u01/app/oracle/oradata/ORCL/*.ctl

rm -rf /u01/app/oracle/oradata/orcl/*.log

rm -rf $ORACLE_HOME/dbs/spfileorcl.ora

3.1.3.尝试对测试表插入新的数据

四、使用RMAN进行恢复

4.1.查看当前数据库情况

注意:可以留意到当前数据库处于打开状态,但由于重要文件被破坏,实际情况下并不能对其进行相关操作

CONNECT rmanlab/oracle

INSERT INTO recovery_test (test_data, backup_phase) VALUES ('数据-test', 'PRE_BACKUP');

4.2.强制关闭数据库

shutdown abort;

4.3.将数据库启动到nomount状态(使用最小化的pfile)

cat > /tmp/minimal.ora << 'EOF'

db_name='ORCL' # 注意:用实际的数据库名,我这里是ORCL

EOF

sqlplus / as sysdba

STARTUP NOMOUNT PFILE='/tmp/minimal.ora';

4.4.从自动备份恢复spfile

DBID:1747225139

bash 复制代码
rman target /

RUN {
    SET DBID 1747225139;  -- 你的DBID
    
    -- 从自动备份恢复SPFILE到默认位置
    RESTORE SPFILE FROM AUTOBACKUP;
    
    -- 或者指定具体位置
    -- RESTORE SPFILE TO '/u01/app/oracle/product/19c/db_home1/dbs/spfileorcl.ora' FROM '/u01/backup/autobackup/cf_c-1037145303-20251216-01';
    
    -- 重启实例使用恢复的SPFILE
    SHUTDOWN IMMEDIATE;
    STARTUP NOMOUNT;
}

4.5.恢复控制文件

bash 复制代码
rman target /

RESTORE CONTROLFILE FROM AUTOBACKUP;  -- 找不到就用实际地址(前面我们在rman的重要配置中有配置到)
--RESTORE CONTROLFILE FROM '/u01/backup/autobackup/cf_c-1037145303-20251216-01';


RESTORE CONTROLFILE FROM '/u01/backup/autobackup/cf_c-1747225139-20260408-02';
RESTORE CONTROLFILE FROM '/u01/backup/autobackup/cf_c-1747225139-20260408-03';
-- 挂载数据库
ALTER DATABASE MOUNT;

4.6.恢复数据文件

bash 复制代码
--  恢复所有数据文件
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
    RESTORE DATABASE;
    RELEASE CHANNEL c1;
    RELEASE CHANNEL c2;
}
或
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    RESTORE DATABASE;
    RELEASE CHANNEL c1;
}

4.7.应用归档日志

bash 复制代码
--  应用归档日志恢复数据
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    RECOVER DATABASE;
    RELEASE CHANNEL c1;
}

4.7.1.第一次执行

这个错误表明 RMAN 在进行介质恢复时,找不到 sequence=57的归档日志。这说明你的恢复操作需要应用这个归档日志,但它在备份中不存在或无法访问。

关键问题:怎么产生了序列57?

可能的原因:

自动作业(如统计信息收集、审计等)

后台进程活动

之前的恢复操作本身产生了重做

系统表空间维护

4.7.2.第二次执行(尝试强制恢复到备份点)

bash 复制代码
完整恢复:

RMAN TARGET /

RESTORE DATABASE;

RECOVER DATABASE;

ALTER DATABASE OPEN;



或者不完整恢复(指定时间点或SCN):
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;

    -- 先还原数据文件到指定时间点
    RESTORE DATABASE UNTIL TIME '2026-04-08 16:27:00';
 
    -- 然后恢复(应用归档日志)
    RECOVER DATABASE UNTIL TIME '2026-04-08 16:27:00';
    
    RELEASE CHANNEL c1;
}



RUN {

    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;

    RESTORE DATABASE;

    RECOVER DATABASE UNTIL SCN 1107090;

    RELEASE CHANNEL c1;
}

4.8.打开数据库

4.9.立即备份新的控制文件

五、验证恢复完整性

5.1.验证数据库当前状态

SELECT NAME,DBID,OPEN_MODE,DATABASE_ROLE,LOG_MODE FROM v$DATABASE;

5.2.验证数据完整性

5.2.1.不完全备份恢复

CONNECT rmanlab/oracle

-- 应只能看到1条记录(备份前)

SELECT * FROM recovery_test;

问题:在实验开始之前我们插入的应该是两条数据,那为什么我们现在看不到后边插入的那条数据了?

思考:我们第二条数据是在做完一次全备之后新增的,并且在新增完数据之后,我们又再次对归档日志做了一次备份,那么我们最开始恢复的时候理应还需借助归档日志的帮助,从而实现数据的完整恢复。我们在恢复完之后只能看到一条数据,这是由于我们最开始在恢复的过程中使用了UTIL导致了不完整的恢复。

5.2.2.完全备份恢复

重置恢复到之前的环境:

并插入数据进行测试!!!,在这里我们省略前面的步骤,直接从恢复这里入手!!!探讨一下完整恢复和前面恢复的区别

bash 复制代码
[root@rac01 ~]# su - oracle
上一次登录:四 4月  9 11:51:53 CST 2026pts/5 上
[oracle@rac01 ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Thu Apr 9 12:35:17 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (not mounted)

RMAN> select status from v$instance;

using target database control file instead of recovery catalog
STATUS
------------
STARTED

RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

Starting restore at 09-APR-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=15 device type=DISK

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/09/2026 12:36:29
RMAN-06495: must explicitly specify DBID with SET DBID command

RMAN> set DBID 1747225139

executing command: SET DBID

RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

Starting restore at 09-APR-26
using channel ORA_DISK_1

channel ORA_DISK_1: looking for AUTOBACKUP on day: 20260409
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20260408
channel ORA_DISK_1: AUTOBACKUP found: c-1747225139-20260408-00
channel ORA_DISK_1: restoring control file from AUTOBACKUP c-1747225139-20260408-00
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oracle/oradata/ORCL/control01.ctl
output file name=/u01/app/oracle/oradata/ORCL/control02.ctl
Finished restore at 09-APR-26

RMAN> ALTER DATABASE MOUNT;

released channel: ORA_DISK_1
Statement processed

RMAN> ALTER DATABASE NOMOUNT;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 04/09/2026 12:37:47
ORA-02231: missing or invalid option to ALTER DATABASE

RMAN> shutdown immediate

database dismounted
Oracle instance shut down

RMAN> STARTUP NOMOUNT;

connected to target database (not started)
Oracle instance started

Total System Global Area    1073737800 bytes

Fixed Size                     8904776 bytes
Variable Size                784334848 bytes
Database Buffers             272629760 bytes
Redo Buffers                   7868416 bytes

RMAN> RESTORE CONTROLFILE FROM '/u01/backup/autobackup/cf_c-1037145303-20251216-01';

Starting restore at 09-APR-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK

channel ORA_DISK_1: no AUTOBACKUP in 7 days found
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/09/2026 12:41:23
RMAN-06172: no AUTOBACKUP found or specified handle is not a valid copy or piece

RMAN> RESTORE CONTROLFILE FROM '/u01/backup/autobackup/cf_c-1747225139-20260408-03';

Starting restore at 09-APR-26
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/ORCL/control01.ctl
output file name=/u01/app/oracle/oradata/ORCL/control02.ctl
Finished restore at 09-APR-26

RMAN> ALTER DATABASE MOUNT;

released channel: ORA_DISK_1
Statement processed

RMAN>
RESTORE DATABASE;
RMAN>

Starting restore at 09-APR-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=23 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/orcl/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/orcl/ts_app_data01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/orcl/users_data02.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/orcl/rman_data01.dbf
channel ORA_DISK_1: restoring datafile 00008 to /u01/app/oracle/oradata/orcl/rman_test01.dbf
channel ORA_DISK_1: reading from backup piece /u01/backup/autobackup/data/full_0_ORCL_20260408_084l24kq_1_1
channel ORA_DISK_1: piece handle=/u01/backup/autobackup/data/full_0_ORCL_20260408_084l24kq_1_1 tag=FULL_LEVEL0
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
Finished restore at 09-APR-26

RMAN> RECOVER DATABASE;

Starting recover at 09-APR-26
using channel ORA_DISK_1

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=54
channel ORA_DISK_1: reading from backup piece /u01/backup/autobackup/data/archlog_ORCL_20260408_094l24kt_1_1
channel ORA_DISK_1: piece handle=/u01/backup/autobackup/data/archlog_ORCL_20260408_094l24kt_1_1 tag=TAG20260408T163229
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_54_1219444403.dbf thread=1 sequence=54
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=55
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=56
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/19c/dbhome_1/dbs/0d4l255k_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/19c/dbhome_1/dbs/0d4l255k_1_1 tag=FINAL_ARCH
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_55_1219444403.dbf thread=1 sequence=55
archived log file name=/u01/app/oracle/product/19c/dbhome_1/dbs/archarch_1_56_1219444403.dbf thread=1 sequence=56
unable to find archived log
archived log thread=1 sequence=57
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 04/09/2026 12:45:36
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 57 and starting SCN of 1107787

RMAN> ALTER DATABASE OPEN;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 04/09/2026 12:45:51
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

RMAN> ALTER DATABASE OPEN RESETLOGS;

Statement processed

RMAN> CONNECT rmanlab/oracle

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": expecting one of: "auxiliary, catalog, target"
RMAN-01008: the bad identifier was: rmanlab
RMAN-01007: at line 1 column 9 file: standard input

RMAN> select status from v$instance;

STATUS
------------
OPEN

RMAN> 

结果:

六、备份健康检查(日常维护)

6.1.检查备份状态

rman target /

LIST BACKUP SUMMARY;

6.2.验证备份策略

REPORT NEED BACKUP;

REPORT OBSOLETE;

6.3.定期验证备份可用性

RESTORE DATABASE VALIDATE;

RESTORE CONTROLFILE VALIDATE;

相关推荐
disgare3 小时前
MongoDB 底层原理
数据库·mongodb
不会写DN3 小时前
SQL 数据定义(DDL)全解
数据库·sql
linux修理工3 小时前
飞书机器人权限批量导入
服务器·数据库·asp.net
用户6279947182623 小时前
南大通用GBase 8a之基于散列点集合获取最小覆盖圆的方法
数据库
有想法的py工程师3 小时前
PostgreSQL 性能优化实战:一条 Order by 的 SQL 从 5 秒优化到 100ms
大数据·数据库·postgresql·性能优化
captain3763 小时前
数据库设计
数据库
XDHCOM1 天前
ORA-32484重复列名错误,ORACLE数据库CYCLE子句故障修复与远程处理方案
数据库·oracle
翻斗包菜1 天前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql