CentOS 上基于 SQL*Plus 的 Oracle 备份与恢复策略
一、策略总览与前提
二、SQL*Plus 可用的备份方法
sqlplus / as sysdbaSHUTDOWN IMMEDIATE;/u01/backup/full_$(date +%F))。STARTUP;ALTER TABLESPACE <ts_name> BEGIN BACKUP;ALTER TABLESPACE <ts_name> END BACKUP;ALTER DATABASE BACKUP CONTROLFILE TO '/u01/backup/ctl_$(date +%F).bak';CREATE DIRECTORY dpdir AS '/u01/backup/dp'; 并授权。expdp system/passwd FULL=Y DIRECTORY=dpdir DUMPFILE=full_$(date +%F).dmp LOGFILE=expdp_full.logexpdp system/passwd SCHEMAS=HR TABLES=EMPLOYEES DIRECTORY=dpdir DUMPFILE=emp.dmp LOGFILE=expdp_emp.log三、SQL*Plus 恢复流程与场景
SHUTDOWN IMMEDIATE;STARTUP;STARTUP MOUNT;SET AUTORECOVERY ON; RECOVER DATABASE; 或 RECOVER AUTOMATIC DATABASE;ALTER DATABASE OPEN;STARTUP MOUNT;RECOVER DATAFILE <file#>;ALTER DATABASE OPEN;ALTER DATABASE DATAFILE <file#> OFFLINE;RECOVER DATAFILE <file#>;ALTER DATABASE DATAFILE <file#> ONLINE;ALTER TABLESPACE <ts_name> OFFLINE IMMEDIATE;RECOVER TABLESPACE <ts_name>;ALTER TABLESPACE <ts_name> ONLINE;SET LOGSOURCE '/u01/archivelog'; RECOVER AUTOMATIC DATABASE;RECOVER AUTOMATIC DATABASE FROM '/u01/archivelog';STARTUP MOUNT;RECOVER DATABASE UNTIL TIME '2025-12-31 10:00:00';RECOVER DATABASE UNTIL SCN 12345678;ALTER DATABASE OPEN RESETLOGS;四、自动化、验证与运维要点
SET AUTORECOVERY ON 或 RECOVER AUTOMATIC 可自动定位并应用归档/联机日志;RECOVER PARALLEL <n> 提升前滚性能,或 NOPARALLEL 关闭并行。SELECT file#, error FROM V$RECOVER_FILE;SELECT * FROM V$RECOVERY_LOG;SELECT name FROM V$ARCHIVED_LOG;SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;CREATE DIRECTORY dpdir AS '/u01/backup/dp';GRANT READ, WRITE ON DIRECTORY dpdir TO system;五、快速命令清单(可直接复用)
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
HOST cp /u01/oradata/ORCL/*.dbf /u01/backup/full_$(date +%F)/
HOST cp /u01/oradata/ORCL/*.ctl /u01/backup/full_$(date +%F)/
HOST cp /u01/oradata/ORCL/*.log /u01/backup/full_$(date +%F)/
STARTUP;
sqlplus / as sysdba
ALTER TABLESPACE USERS BEGIN BACKUP;
HOST cp /u01/oradata/ORCL/USERS01.DBF /u01/backup/ts_users_$(date +%F).dbf
ALTER TABLESPACE USERS END BACKUP;
ALTER DATABASE BACKUP CONTROLFILE TO '/u01/backup/ctl_$(date +%F).bak';
sqlplus / as sysdba
STARTUP MOUNT;
SET AUTORECOVERY ON;
RECOVER DATABASE;
ALTER DATABASE OPEN;
sqlplus / as sysdba
STARTUP MOUNT;
RECOVER DATABASE UNTIL TIME '2025-12-31 10:00:00';
ALTER DATABASE OPEN RESETLOGS;
# 导出
expdp system/passwd FULL=Y DIRECTORY=dpdir DUMPFILE=full_$(date +%F).dmp LOGFILE=expdp_full.log
# 导入
impdp system/passwd FULL=Y DIRECTORY=dpdir DUMPFILE=full_$(date +%F).dmp LOGFILE=impdp_full.log