Skip to content

Oracle RMAN备份恢复命令

RMAN基础命令

RMAN连接命令

命令类型示例命令说明
连接本地数据库rman target /以操作系统认证方式连接到本地数据库
连接远程数据库rman target sys/password@orcl以密码认证方式连接到远程数据库
连接恢复目录rman target / catalog rman/rman@rcat同时连接到目标数据库和恢复目录
连接辅助数据库rman target / auxiliary sys/password@auxdb同时连接到目标数据库和辅助数据库(用于Data Guard或克隆)
只启动RMANrman仅启动RMAN客户端,不连接到数据库
在RMAN中连接RMAN> CONNECT TARGET sys/password@orcl;在RMAN提示符下连接到目标数据库

RMAN基本操作

命令类型示例命令说明
显示RMAN版本RMAN> SHOW ALL;显示RMAN的所有配置参数
显示当前配置RMAN> SHOW CONFIGURATION;显示当前RMAN配置
重置配置RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR;重置特定配置参数为默认值
退出RMANRMAN> EXIT;RMAN> QUIT;退出RMAN客户端
查看帮助RMAN> HELP BACKUP;查看特定命令的帮助信息
查看RMAN日志RMAN> LOG /path/to/rman.log;将RMAN输出记录到日志文件

RMAN备份命令

全库备份

命令类型示例命令说明
全库备份RMAN> BACKUP DATABASE;备份整个数据库(数据文件、控制文件、参数文件)
全库备份并压缩RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;使用压缩备份集备份数据库
全库备份并包含归档日志RMAN> BACKUP DATABASE PLUS ARCHIVELOG;备份数据库并包含所有归档日志
全库备份到指定位置RMAN> BACKUP DATABASE FORMAT '/backup/rman/full_%d_%T_%U.bak';将全库备份到指定路径和格式
增量备份(差异)RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;创建0级增量备份(基础备份)
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;创建1级差异增量备份
增量备份(累积)RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;创建1级累积增量备份

表空间备份

命令类型示例命令说明
单个表空间备份RMAN> BACKUP TABLESPACE users;备份指定表空间
多个表空间备份RMAN> BACKUP TABLESPACE users, tools, undotbs1;备份多个表空间
表空间备份并压缩RMAN> BACKUP AS COMPRESSED BACKUPSET TABLESPACE users;压缩备份表空间

数据文件备份

命令类型示例命令说明
单个数据文件备份RMAN> BACKUP DATAFILE 5;备份指定数据文件(按文件号)
RMAN> BACKUP DATAFILE '/oradata/orcl/users01.dbf';备份指定数据文件(按路径)
多个数据文件备份RMAN> BACKUP DATAFILE 1, 2, 3;备份多个数据文件

控制文件备份

命令类型示例命令说明
手动备份控制文件RMAN> BACKUP CURRENT CONTROLFILE;手动备份当前控制文件
备份控制文件到指定位置RMAN> BACKUP CURRENT CONTROLFILE FORMAT '/backup/rman/control_%d_%T_%U.bak';将控制文件备份到指定位置
包含控制文件到全库备份RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;启用控制文件自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_auto_%d_%T_%F.bak';设置控制文件自动备份格式

归档日志备份

命令类型示例命令说明
备份所有归档日志RMAN> BACKUP ARCHIVELOG ALL;备份所有归档日志
备份指定范围归档日志RMAN> BACKUP ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200;备份指定序列号范围的归档日志
备份最近归档日志RMAN> BACKUP ARCHIVELOG SEQUENCE BETWEEN 100 AND 200;备份指定序列号之间的归档日志
备份归档日志并删除RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;备份所有归档日志并删除输入文件
备份归档日志到指定位置RMAN> BACKUP ARCHIVELOG ALL FORMAT '/backup/rman/arch_%d_%T_%U.bak';将归档日志备份到指定位置

备份集管理

命令类型示例命令说明
查看备份集RMAN> LIST BACKUP;列出所有备份集
查看特定备份集RMAN> LIST BACKUP OF DATABASE;列出数据库备份集
查看备份集详细信息RMAN> LIST BACKUP DETAIL;列出备份集详细信息
查看备份片段RMAN> LIST BACKUPPIECE;列出所有备份片段
查看过期备份RMAN> REPORT OBSOLETE;报告过期的备份
删除过期备份RMAN> DELETE OBSOLETE;删除过期的备份
删除指定备份RMAN> DELETE BACKUP OF DATABASE;删除数据库备份
删除备份片段RMAN> DELETE BACKUPPIECE '/backup/rman/full_orcl_20230101_123456.bak';删除特定备份片段

RMAN恢复命令

数据库恢复

命令类型示例命令说明
全库恢复RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
恢复并恢复整个数据库
全库恢复到指定时间点RMAN> RUN {
SET UNTIL TIME '2023-01-01 12:00:00';
RESTORE DATABASE;
RECOVER DATABASE;
}
将数据库恢复到指定时间点
全库恢复到指定SCNRMAN> RUN {
SET UNTIL SCN 1234567;
RESTORE DATABASE;
RECOVER DATABASE;
}
将数据库恢复到指定SCN
全库恢复到指定日志序列号RMAN> RUN {
SET UNTIL SEQUENCE 100 THREAD 1;
RESTORE DATABASE;
RECOVER DATABASE;
}
将数据库恢复到指定日志序列号
恢复后打开数据库RMAN> ALTER DATABASE OPEN;恢复完成后打开数据库
恢复后打开数据库(resetlogs)RMAN> ALTER DATABASE OPEN RESETLOGS;不完全恢复后以resetlogs方式打开数据库

表空间恢复

命令类型示例命令说明
表空间恢复RMAN> ALTER TABLESPACE users OFFLINE;
RMAN> RESTORE TABLESPACE users;
RMAN> RECOVER TABLESPACE users;
RMAN> ALTER TABLESPACE users ONLINE;
恢复单个表空间
多个表空间恢复RMAN> ALTER TABLESPACE users, tools OFFLINE;
RMAN> RESTORE TABLESPACE users, tools;
RMAN> RECOVER TABLESPACE users, tools;
RMAN> ALTER TABLESPACE users, tools ONLINE;
恢复多个表空间
表空间恢复到指定时间点RMAN> RUN {
SET UNTIL TIME '2023-01-01 12:00:00';
ALTER TABLESPACE users OFFLINE;
RESTORE TABLESPACE users;
RECOVER TABLESPACE users;
ALTER TABLESPACE users ONLINE;
}
将表空间恢复到指定时间点

数据文件恢复

命令类型示例命令说明
数据文件恢复RMAN> ALTER DATABASE DATAFILE 5 OFFLINE;
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
RMAN> ALTER DATABASE DATAFILE 5 ONLINE;
恢复单个数据文件
数据文件恢复到新位置RMAN> RESTORE DATAFILE '/oradata/orcl/users01.dbf' TO '/newlocation/users01.dbf';
RMAN> RECOVER DATAFILE '/oradata/orcl/users01.dbf';
RMAN> ALTER DATABASE RENAME FILE '/oradata/orcl/users01.dbf' TO '/newlocation/users01.dbf';
RMAN> ALTER DATABASE DATAFILE '/newlocation/users01.dbf' ONLINE;
将数据文件恢复到新位置

控制文件恢复

命令类型示例命令说明
从自动备份恢复控制文件RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
从自动备份恢复控制文件
从指定备份恢复控制文件RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM '/backup/rman/control_orcl_20230101_123456.bak';
RMAN> ALTER DATABASE MOUNT;
从指定备份恢复控制文件

归档日志恢复

命令类型示例命令说明
恢复归档日志RMAN> RESTORE ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200;恢复指定范围的归档日志
恢复所有归档日志RMAN> RESTORE ARCHIVELOG ALL;恢复所有归档日志
恢复归档日志到指定位置RMAN> RESTORE ARCHIVELOG ALL TO '/tmp/archivelog/';将归档日志恢复到指定位置

数据库克隆

命令类型示例命令说明
克隆数据库(Active Database Duplication)RMAN> DUPLICATE TARGET DATABASE TO clonedb FROM ACTIVE DATABASE;从活动数据库克隆到目标数据库
克隆数据库到不同路径RMAN> RUN {
ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
DUPLICATE TARGET DATABASE TO clonedb
DB_FILE_NAME_CONVERT=('/oradata/orcl/', '/oradata/clonedb/')
LOGFILE GROUP 1 ('/oradata/clonedb/redo01a.log', '/oradata/clonedb/redo01b.log') SIZE 50M,
GROUP 2 ('/oradata/clonedb/redo02a.log', '/oradata/clonedb/redo02b.log') SIZE 50M,
GROUP 3 ('/oradata/clonedb/redo03a.log', '/oradata/clonedb/redo03b.log') SIZE 50M;
}
将数据库克隆到不同的路径

RMAN维护命令

备份验证

命令类型示例命令说明
验证备份集RMAN> VALIDATE BACKUPSET 123;验证特定备份集的完整性
验证全库备份RMAN> BACKUP VALIDATE DATABASE;验证数据库备份的完整性(不实际生成备份文件)
验证数据文件RMAN> VALIDATE DATAFILE 5;验证特定数据文件的完整性
检查物理和逻辑损坏RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;检查数据库的物理和逻辑损坏

交叉检查

命令类型示例命令说明
交叉检查所有备份RMAN> CROSSCHECK BACKUP;交叉检查所有备份集
交叉检查归档日志RMAN> CROSSCHECK ARCHIVELOG ALL;交叉检查所有归档日志
交叉检查备份片段RMAN> CROSSCHECK BACKUPPIECE '/backup/rman/full_orcl_20230101_123456.bak';交叉检查特定备份片段
交叉检查代理拷贝RMAN> CROSSCHECK PROXY COPY;交叉检查所有代理拷贝

删除命令

命令类型示例命令说明
删除过期备份RMAN> DELETE OBSOLETE;删除符合保留策略的过期备份
删除过期备份并确认RMAN> DELETE NOPROMPT OBSOLETE;删除过期备份,不需要确认
删除失效备份RMAN> DELETE EXPIRED BACKUP;删除交叉检查后标记为失效的备份
删除指定备份集RMAN> DELETE BACKUPSET 123;删除特定备份集
删除归档日志备份RMAN> DELETE BACKUP OF ARCHIVELOG ALL;删除所有归档日志备份

报告命令

命令类型示例命令说明
报告数据库 schemaRMAN> REPORT SCHEMA;报告数据库的schema信息(数据文件、表空间)
报告过期备份RMAN> REPORT OBSOLETE;报告符合保留策略的过期备份
报告需要备份的文件RMAN> REPORT NEED BACKUP;报告需要备份的文件
报告备份概况RMAN> REPORT BACKUP SUMMARY;报告备份的摘要信息

RMAN配置命令

通道配置

命令类型示例命令说明
配置磁盘通道RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%d_%T_%U.bak';配置磁盘通道的默认格式
配置并行通道RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;配置磁盘设备的并行度为4
配置SBT通道RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT PARMS 'SBT_LIBRARY=/usr/lib/oracle/19.0.0.0/lib/libosbws.so, SBT_PARMS=(OSB_WS_PFILE=/home/oracle/.osbws/orcl.osb)';配置磁带库(SBT)通道

备份保留策略

命令类型示例命令说明
配置恢复窗口RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;配置恢复窗口为7天
配置冗余度RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 3;配置备份冗余度为3(保留3份完整备份)
禁用保留策略RMAN> CONFIGURE RETENTION POLICY TO NONE;禁用备份保留策略

其他配置

命令类型示例命令说明
配置控制文件自动备份RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;启用控制文件自动备份
配置控制文件自动备份格式RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_%d_%T_%F.bak';设置控制文件自动备份格式
配置归档日志删除策略RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;配置归档日志删除策略(备份2次后可删除)
配置默认设备类型RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;设置默认备份设备类型为磁盘
配置快照控制文件RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/backup/rman/snapcf_%d.f';设置快照控制文件的路径和名称

RMAN常用脚本示例

全库备份脚本

bash
#!/bin/bash
# 全库备份脚本

ORACLE_SID=orcl
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
PATH=$ORACLE_HOME/bin:$PATH

# 日志文件
LOGFILE=/backup/rman/full_backup_$(date +%Y%m%d_%H%M%S).log

# RMAN备份命令
$ORACLE_HOME/bin/rman target / log $LOGFILE << EOF
RUN {
  CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/full_%d_%T_%U.bak';
  CONFIGURE CONTROLFILE AUTOBACKUP ON;
  CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_%d_%T_%F.bak';
  BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG DELETE INPUT;
  DELETE OBSOLETE;
}
EOF

echo "全库备份完成,日志文件:$LOGFILE"

增量备份脚本

bash
#!/bin/bash
# 增量备份脚本

ORACLE_SID=orcl
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
PATH=$ORACLE_HOME/bin:$PATH

# 日志文件
LOGFILE=/backup/rman/incremental_backup_$(date +%Y%m%d_%H%M%S).log

# RMAN备份命令
$ORACLE_HOME/bin/rman target / log $LOGFILE << EOF
RUN {
  CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/incr_%d_%T_%U.bak';
  CONFIGURE CONTROLFILE AUTOBACKUP ON;
  BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG DELETE INPUT;
  DELETE OBSOLETE;
}
EOF

echo "增量备份完成,日志文件:$LOGFILE"

归档日志备份脚本

bash
#!/bin/bash
# 归档日志备份脚本

ORACLE_SID=orcl
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
PATH=$ORACLE_HOME/bin:$PATH

# 日志文件
LOGFILE=/backup/rman/arch_backup_$(date +%Y%m%d_%H%M%S).log

# RMAN备份命令
$ORACLE_HOME/bin/rman target / log $LOGFILE << EOF
RUN {
  CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/arch_%d_%T_%U.bak';
  BACKUP ARCHIVELOG ALL DELETE INPUT;
}
EOF

echo "归档日志备份完成,日志文件:$LOGFILE"

常见问题(FAQ)

Q1: 如何查看RMAN备份的详细信息?

A: 可以使用以下RMAN命令查看备份的详细信息:

sql
RMAN> LIST BACKUP DETAIL;

或者查看特定类型的备份:

sql
RMAN> LIST BACKUP OF DATABASE DETAIL;
RMAN> LIST BACKUP OF ARCHIVELOG ALL DETAIL;

Q2: 如何恢复丢失的控制文件?

A: 可以使用以下步骤恢复丢失的控制文件:

  1. 以nomount模式启动数据库:

    sql
    SQL> STARTUP NOMOUNT;
  2. 使用RMAN从自动备份恢复控制文件:

    sql
    RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
  3. 挂载数据库:

    sql
    RMAN> ALTER DATABASE MOUNT;
  4. 恢复数据库(如果需要):

    sql
    RMAN> RECOVER DATABASE;
  5. 打开数据库:

    sql
    RMAN> ALTER DATABASE OPEN;

Q3: 如何验证RMAN备份的完整性?

A: 可以使用以下命令验证RMAN备份的完整性:

sql
RMAN> VALIDATE BACKUPSET <backup_set_number>;

或者验证整个数据库备份的完整性(不实际生成备份文件):

sql
RMAN> BACKUP VALIDATE DATABASE;

Q4: 如何将RMAN备份压缩?

A: 可以使用以下命令创建压缩备份:

sql
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;

Q5: 如何配置RMAN自动删除过期备份?

A: 首先配置备份保留策略,然后使用DELETE OBSOLETE命令删除过期备份:

sql
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> DELETE OBSOLETE;

可以将DELETE OBSOLETE命令添加到备份脚本中,实现自动删除过期备份。

最佳实践

  1. 定期测试恢复:定期测试RMAN备份的恢复过程,确保备份可以成功恢复。
  2. 使用压缩备份:对于磁盘备份,使用压缩备份集可以节省存储空间。
  3. 配置控制文件自动备份:启用控制文件自动备份,确保控制文件丢失时可以快速恢复。
  4. 使用恢复目录:对于大型环境,建议使用恢复目录来管理RMAN备份,而不是依赖控制文件。
  5. 合理设置并行度:根据硬件资源情况,合理设置RMAN备份的并行度,提高备份效率。
  6. 定期清理过期备份:定期使用DELETE OBSOLETE命令清理过期备份,释放存储空间。
  7. 备份到多个位置:将RMAN备份存储到多个位置,提高备份的安全性。
  8. 监控备份作业:监控RMAN备份作业的执行情况,及时发现和解决备份失败问题。
  9. 使用标记备份:对于重要的备份,使用标记(TAG)进行标识,便于后续恢复时查找。
  10. 文档化备份策略:详细记录RMAN备份策略,包括备份类型、频率、保留策略等,便于团队成员理解和维护。