RMAN(Recovery Manager)是Oracle官方推荐的物理备份工具,支持完全备份、增量备份(Level 0/1)、归档日志备份,并能跳过未使用数据块,提升备份效率。
rman target /
run {
backup database plus archivelog; -- 备份数据库及归档日志
backup current controlfile; -- 备份控制文件(可选但建议)
}
rman target /
run {
backup incremental level 1 database; -- 一级增量备份(基于上次Level 0或Level 1)
-- 或备份特定表空间
backup incremental level 1 tablespace users;
}
rman target /
run {
restore database; -- 恢复数据文件、控制文件
recover database; -- 应用归档日志至最新状态
alter database open; -- 打开数据库
}
编辑/etc/crontab,添加每日凌晨2点执行的备份脚本:
0 2 * * * /bin/bash /path/to/rman_backup.sh >> /var/log/oracle_rman.log 2>&1
脚本内容示例(rman_backup.sh):
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
rman target / <<EOF
run {
backup database plus archivelog format '/backup/oracle/%U.bak';
delete noprompt obsolete; -- 删除过期备份
}
exit;
EOF
expdp(导出)/impdp(导入)是Oracle的逻辑备份工具,支持全库备份、schema备份、表级备份,适用于跨平台数据迁移或选择性恢复。
expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y
expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=schema_backup.dmp logfile=expdp_schema.log schemas=scott
impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_full.log full=y
remap_schema(重映射schema)或remap_tablespace(重映射表空间)参数。冷备份需在数据库关闭状态下进行,适用于需要完整一致性备份的场景(如版本升级前)。
# 1. 关闭数据库
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EOF
# 2. 复制数据库文件(数据文件、控制文件、归档日志、参数文件)
cp -R /u01/oradata/ORCL /backup/ORCL_cold
# 3. 启动数据库
sqlplus / as sysdba <<EOF
STARTUP;
EOF
# 1. 关闭数据库
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EOF
# 2. 删除原数据库文件(谨慎操作)
rm -rf /u01/oradata/ORCL/*
# 3. 复制备份文件到原位置
cp -R /backup/ORCL_cold/* /u01/oradata/ORCL/
# 4. 启动数据库
sqlplus / as sysdba <<EOF
STARTUP;
EOF
Data Guard是Oracle的高可用解决方案,通过standby数据库(物理/逻辑)实现数据同步,支持switchover(计划切换)和failover(故障切换),确保业务连续性。
-- 修改主库参数(在sqlnet.ora中添加)
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,STANDBY)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=STANDBY ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY';
SQL> ALTER SYSTEM SET FAL_SERVER=STANDBY;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> ALTER DATABASE ARCHIVELOG; -- 确保主库开启归档
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/oradata/ORCL/standby_redo01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/oradata/ORCL/standby_redo02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/oradata/ORCL/standby_redo03.log') SIZE 50M;
SQL> ALTER DATABASE FORCE LOGGING; -- 强制日志模式
rman target sys/password@ORCL auxiliary sys/password@STANDBY
run {
duplicate target database for standby from active database dorecover nofilenamecheck;
}
-- 查看主库redo传输状态
SQL> SELECT PROCESS, STATUS, BLOCKS FROM V$MANAGED_STANDBY;
-- 查看standby库应用状态
SQL> SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
-- 在主库执行
SQL> ALTER DATABASE SWITCHOVER TO STANDBY;
-- 在standby库执行
SQL> ALTER DATABASE SWITCHOVER TO PRIMARY;
当主库不可用时,将standby库提升为primary:
-- 在standby库执行
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;
RMAN> LIST BACKUP;检查备份有效性,避免无效备份;BACKUP ARCHIVELOG ALL DELETE INPUT;实现),防止日志丢失导致无法恢复;RMAN> DELETE NOPROMPT OBSOLETE;删除过期备份,避免磁盘空间耗尽;