外观
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或克隆) |
| 只启动RMAN | rman | 仅启动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; | 重置特定配置参数为默认值 |
| 退出RMAN | RMAN> 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; } | 将数据库恢复到指定时间点 |
| 全库恢复到指定SCN | RMAN> 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; | 删除所有归档日志备份 |
报告命令
| 命令类型 | 示例命令 | 说明 |
|---|---|---|
| 报告数据库 schema | RMAN> 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: 可以使用以下步骤恢复丢失的控制文件:
以nomount模式启动数据库:
sqlSQL> STARTUP NOMOUNT;使用RMAN从自动备份恢复控制文件:
sqlRMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;挂载数据库:
sqlRMAN> ALTER DATABASE MOUNT;恢复数据库(如果需要):
sqlRMAN> RECOVER DATABASE;打开数据库:
sqlRMAN> 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命令添加到备份脚本中,实现自动删除过期备份。
最佳实践
- 定期测试恢复:定期测试RMAN备份的恢复过程,确保备份可以成功恢复。
- 使用压缩备份:对于磁盘备份,使用压缩备份集可以节省存储空间。
- 配置控制文件自动备份:启用控制文件自动备份,确保控制文件丢失时可以快速恢复。
- 使用恢复目录:对于大型环境,建议使用恢复目录来管理RMAN备份,而不是依赖控制文件。
- 合理设置并行度:根据硬件资源情况,合理设置RMAN备份的并行度,提高备份效率。
- 定期清理过期备份:定期使用DELETE OBSOLETE命令清理过期备份,释放存储空间。
- 备份到多个位置:将RMAN备份存储到多个位置,提高备份的安全性。
- 监控备份作业:监控RMAN备份作业的执行情况,及时发现和解决备份失败问题。
- 使用标记备份:对于重要的备份,使用标记(TAG)进行标识,便于后续恢复时查找。
- 文档化备份策略:详细记录RMAN备份策略,包括备份类型、频率、保留策略等,便于团队成员理解和维护。
