在测试服务器恢复RMAN 0级备份步骤

一、准备工作
1、检索备份集信息
在备份服务器上,列出数据库的备份信息:
[root@localhost rman_backup]# ls -lrt
-rwxr-xr-x. 1 oracle oinstall 215895552 6月 11 02:05 arch_HISDB_20260611_40710_1
-rwxr-xr-x. 1 oracle oinstall 255378432 6月 11 02:05 arch_HISDB_20260611_40711_1
-rwxr-xr-x. 1 oracle oinstall 256543744 6月 11 02:05 arch_HISDB_20260611_40712_1
-rwxr-xr-x. 1 oracle oinstall 255606272 6月 11 02:05 arch_HISDB_20260611_40713_1
-rwxr-xr-x. 1 oracle oinstall 8626688 6月 11 02:05 arch_HISDB_20260611_40714_1
-rwxr-xr-x. 1 oracle oinstall 3043840 6月 11 02:05 arch_HISDB_20260611_40721_1
-rwxr-xr-x. 1 oracle oinstall 3408896 6月 11 02:05 arch_HISDB_20260611_40722_1
-rwxr-xr-x. 1 oracle oinstall 28835840 6月 11 02:05 controlfile_HISDB_20260611_40723_1.ora
-rwxr-xr-x. 1 oracle oinstall 37243330560 6月 11 02:11 db_full_bak_HISDB_20260611_40715_1
-rwxr-xr-x. 1 oracle oinstall 41880100864 6月 11 02:18 db_full_bak_HISDB_20260611_40716_1
-rwxr-xr-x. 1 oracle oinstall 32023756800 6月 11 02:25 db_full_bak_HISDB_20260611_40717_1
-rwxr-xr-x. 1 oracle oinstall 38307815424 6月 11 02:32 db_full_bak_HISDB_20260611_40718_1
-rwxr-xr-x. 1 oracle oinstall 2293760 6月 11 02:32 db_full_bak_HISDB_20260611_40719_1
-rwxr-xr-x. 1 oracle oinstall 98304 6月 11 02:32 db_full_bak_HISDB_20260611_40720_1
-rwxr-xr-x. 1 oracle oinstall 98304 6月 11 02:32 spfile_HISDB_20260611_40724_1.ora
[root@localhost rman_backup]#

其中spfile开头的备份文件为参数文件的备份,controlfile开头的备份文件为控制文件的备份文件;
arch开头的备份文件为归档日志的备份文件,db开头的备份文件为数据文件的备份文件。

2、在测试服务器上,创建相关目录并赋予相关权限:
$ mkdir –p /u01/app/oracle/admin/hisdb/adump
$ mkdir –p /oradata/arch
$ mkdir –p /oradata/back
$ mkdir –p /oradata/data/hisdb
$ mkdir –p /oradata/fra

如果使用oracle用户创建以上目录,不需要修改权限,如果使用root用户创建目录,则需要修改目录的属组关系。

3、拷贝备份文件:
将备份文件传输到测试服务器/oradata/back目录下。

4、创建参数文件:
在测试服务器上,利用Oracle自带的init.ora文件创建参数文件,以便使用RMAN恢复参数文件。
cd $ORACLE_HOME/dbs
$ cp init.ora inithisdb.ora
$ vi inithisdb.ora

  • -修改以下参数
    db_name=hisdb
    audit_file_dest=/u01/app/oracle/admin/hisdb/adump
    diagnostic_dest=/u01/app/oracle

5、将数据库启动到nomount状态:
先声明ORACLE_SID环境变量,指定要操作的数据库实例名为hisdb。
export ORACLE_SID=hisdb
启动数据库到nomount状态,由于上文已经设置了ORACKE_SID环境变量值为hisdb,Oracle就会自动去找参数文件,默认先选择$ORACLE_HOME/dbs/spfilehisdb.ora,当前这个文件并不存在,Oracle回去寻址$ORACLE_HOME/dbs/inithisdb.ora文件,也就是上文创建的参数文件。

$ sqlplus / as sysdba
SQL> startup nomount

6、恢复参数文件:
通过RMAN,使用spfile_HISDB_20260611_40724_1.ora文件来恢复参数文件。
$ rman target /
RMAN> run {
allocate channel ch00 type 'sbt_tape';
restore spfile to pfile '/backup/inithisdb.ora' from '/oradata/back/spfile_HISDB_20260611_40724_1.ora';
release channel ch00;
}

7、关闭数据库:
由于之前数据库使用的是临时的参数文件启动,现在已经通过NBU备份恢复了参数文件,因此需要使用恢复后的参数文件启动数据库,所以需要先关闭之前启动的数据库。
$ sqlplus / as sysdba
SQL > shutdown abort

8、修改参数文件
由于通过备份恢复的参数文件是生产环境的参数文件,需要调整以下参数,可根据测试环境的需求进行调整。
例如:
$ vi inithisdb.ora

*.archive_lag_target=0
*.audit_file_dest='/u01/app/oracle/admin/hisdb/adump'
*.compatible='11.2.0'
*.control_files='/oradata/fra/histest/controlfile/control01.ctl'#Restore Controlfile
*.db_block_size=8192
*.DB_CREATE_FILE_DEST='/oradata/data/hisdb/'
*.db_domain=''
*.db_name='hisdb'
*.db_recovery_file_dest='/oradata/fra'
*.db_recovery_file_dest_size=200G
*.db_unique_name='hisdb'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oracleXDB)'
*.log_archive_dest_1='LOCATION=/oradata/arch'
*.log_archive_max_processes=4
*.log_archive_min_succeed_dest=1
*.open_cursors=300
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sec_case_sensitive_logon=FALSE
*.sessions=665
*.undo_tablespace='UNDOTBS1'
*.service_names='HISTEST','oracle10'
*.pga_aggregate_target=16G
*.sga_target=64G

9、创建SPFILE文件
通过上面修改的参数文件inithisdb.ora创建spfile参数文件。
SQL> create spfile from pfile='/backup/inithisdb.ora';

10、使用SPfile启动数据库到nomount状态
$ sqlplus / as sysdba
SQL> startup nomount

二、恢复数据库:
1、恢复控制文件:
使用上文提到的controlfile_HISDB_20260611_40723_1.ora备份文件,恢复控制文件。

$ rman target /
RMAN> restore controlfile from '/oradata/back/controlfile_HISDB_20260611_40723_1.ora';

2、MOUNT数据库:
将数据库启动到MOUNT状态。
$ sqlplus / as sysdba
SQL> alter database mount;

3、编辑恢复数据库脚本:
编辑恢复数据文件脚本restore.sh。

$ vi restore.sh

!/bin/bash

rman target / log='/backup/rman20260611.log' append<<EOF
run {
allocate channel ch00;
allocate channel ch01;
set newname for database to '/backup/hisdb/%b';
RESTORE DATABASE;
switch datafile all;
RECOVER DATABASE;
release channel ch00;
release channel ch01;
}
EOF
Exit

4、修改脚本权限
赋予restore.sh脚本可执行权限。

$ chmod u+x restore.sh

5、恢复数据库
在后台执行restore.sh脚本,恢复数据库。
$ nohup ./restore.sh &

查看恢复日志:
$ tail -f /backup/rman20260611.log

6、修改redo日志路径:
将之前的redo日志调整到本地文件系统,修改redo日志文件的路径:
例如:
SQL> select member from v$logfile;

MEMBER

+DATA/hisdb/datafile/redo03.log
+DATA/hisdb/datafile/redo02.log
+DATA/hisdb/datafile/redo01.log
+DATA/hisdb/datafile/redo4.log
+DATA/hisdb/datafile/redo05.log
+DATA/hisdb/datafile/redo06.log
+DATA/hisdb/datafile/redo07.log
+DATA/hisdb/datafile/redo08.log

将redo日志文件路径调整到本地文件系统:

alter database rename file '+DATA/hisdb/datafile/redo03.log' to '/oradata/data/hisdb/redo03.log';
alter database rename file '+DATA/hisdb/datafile/redo02.log' to '/oradata/data/hisdb/redo02.log';
alter database rename file '+DATA/hisdb/datafile/redo01.log' to '/oradata/data/hisdb/redo01.log';
alter database rename file '+DATA/hisdb/datafile/redo4.log' to '/oradata/data/hisdb/redo04.log';
alter database rename file '+DATA/hisdb/datafile/redo05.log' to '/oradata/data/hisdb/redo05.log';
alter database rename file '+DATA/hisdb/datafile/redo06.log' to '/oradata/data/hisdb/redo06.log';
alter database rename file '+DATA/hisdb/datafile/redo07.log' to '/oradata/data/hisdb/redo07.log';
alter database rename file '+DATA/hisdb/datafile/redo08.log' to '/oradata/data/hisdb/redo08.log';

7、调整临时文件路径:
由于RMAN并不会备份临时文件,在数据库OPEN过程中,如果临时文件的路径正确,Oracle会自动创建临时文件,如果临时文件的路径不正确或者权限不足,将不会创建出临时文件,因此需要调整临时文件的存放路径:

SQL> select name from v$tempfile;

NAME

+DATA/hisdb/datafile/temp01.dbf

将临时文件调整到本地文件系统:
SQL> alter database rename file '+DATA/hisdb/datafile/temp01.dbf' to '/oradata/data/hisdb/temp01.dbf';

8、查看数据库状态:

SQL> select open_mode,database_role from v$database;

OPEN_MODE DATABASE_ROLE


MOUNTED PRIMARY

数据库当前为MOUNT状态。

9、打开数据文件:

SQL> alter database open resetlogs;

10、后续操作:
在新恢复的测试环境中,取消定时任务,DBLINK等;以免影响生产环境。

三、业务验证

posted @ 2026-06-29 11:46  秋之枫叶  阅读(5)  评论(0)    收藏  举报