oracle-RMAN备份与恢复

使用RMAN做整库迁移

目标

将生产环境产生的数据导给测试环境使用(或者在生产库挂掉时使用测试库暂时替代)

  • 生产环境(192.168.18.129)
  • 测试环境(192.168.18.133)
  • 软件环境 Oracle Linux Server release 6.9/oracle11g
    1
    2
    #查看操作系统类型
    $lsb_release -a

操作

打开生产库的归档模式

- 此处使用热备生产库,必须要处于归档模式才行
- 查看是否处于归档模式(已经是归档模式的话跳过此步骤)
1
2
3
$sqlplus /nolog
$conn /as sysdba
SQL>archive log list
- 打开归档模式
1
2
3
4
5
6
SQL>alter system set log_archive_dest_1='location=/home/oracle/arch'; # 配置归档文件路径
SQL>alter system set log_archive_format='arch_sysware_%t_%s_%r.dbf' scope=spfile; #配置归档文件名称格式
SQL>shutdown immediate #一致性关闭数据库
SQL>startup mount #重启到mount
SQL>alter database archivelog; #打开归档模式
SQL>alter database open; #打开数据库

使用RMAN备份生产库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$rman target /
RMAN>configure controlfile autobackup on; #备份时会自动controlfile和spfile
RMAN> backup database;

Starting backup at 24-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00004 name=/u01/app/oracle/oradata/sysware/users01.dbf
input datafile file number=00001 name=/u01/app/oracle/oradata/sysware/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/sysware/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/sysware/undotbs01.dbf
channel ORA_DISK_1: starting piece 1 at 24-JUL-19
channel ORA_DISK_1: finished piece 1 at 24-JUL-19
piece handle=/u01/app/oracle/fast_recovery_area/SYSWARE/backupset/2019_07_24/o1_mf_nnndf_TAG20190724T012348_gmgjo4ls_.bkp tag=TAG20190724T012348 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45
Finished backup at 24-JUL-19

Starting Control File and SPFILE Autobackup at 24-JUL-19
piece handle=/u01/app/oracle/fast_recovery_area/SYSWARE/autobackup/2019_07_24/o1_mf_s_1014426897_gmgjpkto_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 24-JUL-19

将备份文件发送到测试机

  • 只备份controlfile和dbf文件

    1
    2
    3
    $scp /u01/app/oracle/fast_recovery_area/SYSWARE/backupset/2019_07_24/o1_mf_nnndf_TAG20190724T012348_gmgjo4ls_.bkp oracle@192.168.18.133:/u01/app/oracle/fast_recovery_area/SYSWARE/backupset/2019_07_24/o1_mf_nnndf_TAG20190724T012348_gmgjo4ls_.bkp

    $scp /u01/app/oracle/fast_recovery_area/SYSWARE/autobackup/2019_07_24/o1_mf_s_1014426897_gmgjpkto_.bkp oracle@192.168.18.133:/u01/app/oracle/fast_recovery_area/SYSWARE/autobackup/2019_07_24/o1_mf_s_1014426897_gmgjpkto_.bkp
  • 使用生产库pfile参数文件启动测试库

    1
    2
    3
    4
    5
    6
    7
    8
    1.从生产库生成pfile文件
    SQL>create pfile='/u01/backup/pfile20190724.ora' from spfile;
    2.发送到测试机
    $ scp /u01/backup/pfile20190724.ora oracle@192.168.18.133:/u01/backup/pfile20190724.ora
    3.测试库启动
    SQL>startup pfile='/u01/backup/pfile20190724.ora' #从pfile启动
    SQL>create pfile from spfile; # 恢复从pfile启动
    SQL>shutdown immediate

将数据恢复测试库并启动

1
2
3
4
5
RMAN>startup nomount #启动到nomount阶段(便于恢复备份的控制文件)
RMAN>restore controlfile from '/u01/app/oracle/fast_recovery_area/SYSWARE/autobackup/2019_07_24/o1_mf_s_1014426897_gmgjpkto_.bkp';
RMAN>alter database mount;
RMAN>restore database; #接着加载备份的dbf文件
RMAN>alter database open resetlogs; #打开数据库即可

正常启动就可以验证数据与生产库是否一致了