一、备份策略
适用场景:数据库可正常关闭时的完整备份(如维护窗口期)。
操作步骤:
sqlplus sys/密码@数据库名 as sysdba;SHUTDOWN IMMEDIATE;/u01/backup):HOST cp $ORACLE_BASE/oradata/数据库名/*.dbf /u01/backup/ # 数据文件
HOST cp $ORACLE_BASE/oradata/数据库名/*.ctl /u01/backup/ # 控制文件
HOST cp $ORACLE_BASE/oradata/数据库名/*.log /u01/backup/ # 重做日志文件
STARTUP。适用场景:数据库需保持运行状态的备份(生产环境常用)。
操作步骤:
rman target /;BACKUP DATABASE PLUS ARCHIVELOG; # 备份所有数据文件及归档日志
BACKUP CURRENT CONTROLFILE; # 备份控制文件(冗余)
BACKUP DATABASE PLUS ARCHIVELOG FORMAT '/u01/rman_bak/backup_%U' COMPRESSION ENABLE;。适用场景:需要逻辑级备份(如跨平台迁移、选择性恢复表/用户)。
操作步骤:
CREATE DIRECTORY backup_dir AS '/u01/backup';
GRANT READ, WRITE ON DIRECTORY backup_dir TO 用户名;
expdp 用户名/密码@数据库名 DIRECTORY=backup_dir DUMPFILE=备份名.dmp LOGFILE=导出日志.log FULL=y; # 全库
expdp 用户名/密码@数据库名 DIRECTORY=backup_dir DUMPFILE=用户备份.dmp LOGFILE=用户导出.log SCHEMAS=用户名; # 用户级
expdp 用户名/密码@数据库名 DIRECTORY=backup_dir DUMPFILE=表备份.dmp LOGFILE=表导出.log TABLES=表名; # 表级
适用场景:误操作(如删除表、数据)或逻辑错误导致的数据异常,需快速恢复到指定时间点。
前提条件:
ALTER DATABASE ARCHIVELOG; ALTER DATABASE FLASHBACK ON;);ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/flash_recovery' SCOPE=BOTH;)。SHUTDOWN IMMEDIATE;STARTUP MOUNT;FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-11-09 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
FLASHBACK DATABASE TO SCN 123456789; -- 指定系统改变号
ALTER DATABASE OPEN RESETLOGS;。二、恢复策略
适用场景:数据文件、控制文件等物理文件损坏,且无归档日志或无需恢复到最新状态。
操作步骤:
SHUTDOWN IMMEDIATE;/u01/app/oracle/oradata/数据库名/);STARTUP。适用场景:数据文件损坏、丢失或需要恢复到最新状态(归档模式下)。
操作步骤:
rman target /;RESTORE DATABASE;(RMAN自动定位备份文件);RECOVER DATABASE;(自动应用归档日志和在线重做日志);ALTER DATABASE OPEN;。适用场景:表、用户或部分数据丢失,需精确恢复逻辑数据。
操作步骤:
CREATE DIRECTORY restore_dir AS '/u01/restore';;impdp 用户名/密码@数据库名 DIRECTORY=restore_dir DUMPFILE=备份名.dmp LOGFILE=恢复日志.log FULL=y; # 全库
impdp 用户名/密码@数据库名 DIRECTORY=restore_dir DUMPFILE=用户备份.dmp LOGFILE=用户恢复.log SCHEMAS=用户名; # 用户级
impdp 用户名/密码@数据库名 DIRECTORY=restore_dir DUMPFILE=表备份.dmp LOGFILE=表恢复.log TABLES=表名; # 表级
TABLE_EXISTS_ACTION=APPEND选项追加数据(避免表已存在的错误)。适用场景:归档日志丢失、数据文件损坏且无法恢复到最新状态(如误删除归档日志)。
操作步骤:
SHUTDOWN IMMEDIATE;STARTUP MOUNT;RECOVER DATABASE UNTIL TIME '2025-11-09 09:00:00'; # 恢复到指定时间
RECOVER DATABASE UNTIL SCN 123456789; # 恢复到指定SCN
ALTER DATABASE OPEN RESETLOGS;(重置日志后,数据库会生成新的 incarnation,后续恢复需指定该 incarnation)。适用场景:控制文件损坏或丢失(数据库无法启动)。
操作步骤:
SHUTDOWN IMMEDIATE;$ORACLE_BASE/oradata/数据库名/control01.ctl);STARTUP;ALTER DATABASE BACKUP CONTROLFILE TO TRACE生成创建脚本,手动创建控制文件。