Debian上使用 SQL*Plus 进行 Oracle 备份与恢复
一、概念与准备
二、逻辑备份与恢复(Data Pump)
sqlplus / as sysdba
CREATE OR REPLACE DIRECTORY backupdir AS '/oracle/backup';
GRANT READ, WRITE ON DIRECTORY backupdir TO system;
EXIT
expdp system/YourSysPwd@orcl DIRECTORY=backupdir \
DUMPFILE=full_$(date +%F).dmp LOGFILE=full_$(date +%F).log FULL=Y PARALLEL=4
expdp system/YourSysPwd@orcl DIRECTORY=backupdir \
DUMPFILE=scott_$(date +%F).dmp LOGFILE=scott_$(date +%F).log SCHEMAS=SCOTT PARALLEL=2
impdp system/YourSysPwd@orcl DIRECTORY=backupdir \
DUMPFILE=full_2025-09-01.dmp LOGFILE=imp_full_$(date +%F).log FULL=Y PARALLEL=4
# 目标库若不存在用户可先创建;若需改名/换表空间:
impdp system/YourSysPwd@orcl DIRECTORY=backupdir \
DUMPFILE=scott_2025-09-01.dmp LOGFILE=imp_scott_$(date +%F).log \
REMAP_SCHEMA=SCOTT:SCOTT_NEW \
REMAP_TABLESPACE=USERS:USERS_NEW \
TABLE_EXISTS_ACTION=TRUNCATE PARALLEL=2
sqlplus / as sysdba
ALTER SESSION SET CONTAINER=orclpdb;
EXIT
expdp system/YourSysPwd@orclpdb DIRECTORY=backupdir DUMPFILE=pdb_$(date +%F).dmp LOGFILE=pdb_$(date +%F).log FULL=Y
三、物理备份与恢复(RMAN,配合 SQL*Plus)
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
ALTER SYSTEM ARCHIVE LOG START;
EXIT
rman target /
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/oracle/rman/backup_%U';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/oracle/rman/backup_%U';
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/rman/ctl_%F';
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
rman target /
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT; -- 若 SPFILE/控制文件丢失,先从自动备份恢复
RESTORE SPFILE FROM AUTOBACKUP; -- 可选:恢复参数文件
STARTUP NOMOUNT;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;
rman target /
SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';
RESTORE TABLESPACE users;
RECOVER TABLESPACE users;
SQL 'ALTER TABLESPACE users ONLINE';
四、自动化与异地保存
#!/usr/bin/env bash
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
DATE=$(date +%F)
DIR=/oracle/backup
mkdir -p $DIR
expdp system/YourSysPwd@orcl DIRECTORY=backupdir \
DUMPFILE=full_${DATE}.dmp LOGFILE=full_${DATE}.log FULL=Y PARALLEL=4
gzip $DIR/full_${DATE}.dmp
rsync -avz --delete $DIR/ user@backup-server:/backup/oracle/
五、方法对比与选型建议
| 维度 | Data Pump(expdp/impdp) | RMAN(物理备份) |
|---|---|---|
| 备份类型 | 逻辑备份(对象级:表/用户/全库) | 物理备份(数据文件/控制文件/归档日志) |
| 适用场景 | 跨库迁移、部分对象恢复、开发测试 | 生产库快速恢复、实例/介质故障、灾难恢复 |
| 停机要求 | 一般无需停机(非一致性导出除外) | 备份可在运行中;恢复时按场景可能需停机 |
| 恢复粒度 | 库/用户/表级 | 块/数据文件/表空间/全库级 |
| 关键前提 | 需创建 DIRECTORY 并赋权 | 需启用 ARCHIVELOG,建议开控制文件自动备份 |
| 典型命令 | expdp/impdp | RMAN 的 backup/restore/recover |