温馨提示×

Debian SQLPlus如何进行数据备份与恢复

小樊
46
2026-01-01 23:51:29
栏目: 云计算

Debian上使用 SQL*Plus 进行 Oracle 备份与恢复

一、概念与准备

  • SQL*Plus 是 Oracle 的命令行客户端,不是备份工具。常见做法是通过 SQLPlus 执行环境准备与调用 Oracle 的备份工具,例如 Data Pump(expdp/impdp) 做逻辑备份,或在 SQLPlus 中启用 ARCHIVELOG 后用 RMAN 做物理备份与恢复。为便于导出,需先在数据库里创建 DIRECTORY 对象并授予读写权限,导出文件实际写入该目录对应的 操作系统路径

二、逻辑备份与恢复(Data Pump)

  • 场景:跨库迁移、按用户/表导出、开发测试环境快速还原。
  • 步骤与示例:
    1. 以管理员登录并创建目录对象(示例目录为 /oracle/backup):
      sqlplus / as sysdba
      CREATE OR REPLACE DIRECTORY backupdir AS '/oracle/backup';
      GRANT READ, WRITE ON DIRECTORY backupdir TO system;
      EXIT
      
    2. 全库导出(Data Pump):
      expdp system/YourSysPwd@orcl DIRECTORY=backupdir \
        DUMPFILE=full_$(date +%F).dmp LOGFILE=full_$(date +%F).log FULL=Y PARALLEL=4
      
    3. 按用户导出:
      expdp system/YourSysPwd@orcl DIRECTORY=backupdir \
        DUMPFILE=scott_$(date +%F).dmp LOGFILE=scott_$(date +%F).log SCHEMAS=SCOTT PARALLEL=2
      
    4. 导入恢复(示例:全库):
      impdp system/YourSysPwd@orcl DIRECTORY=backupdir \
        DUMPFILE=full_2025-09-01.dmp LOGFILE=imp_full_$(date +%F).log FULL=Y PARALLEL=4
      
    5. 导入恢复(示例:按用户,含重映射):
      # 目标库若不存在用户可先创建;若需改名/换表空间:
      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
      
    6. 多租户(PDB)场景,先切到目标容器再导出/导入:
      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
      
  • 提示:
    • 使用 Data Pump 需确保 Oracle 目录对象存在且 OS 目录可写;导出文件位于该 OS 路径。
    • 导入时常用 TABLE_EXISTS_ACTION=TRUNCATE/REPLACE/SKIP 控制对象已存在时的行为;跨库迁移可用 REMAP_SCHEMA/REMAP_TABLESPACE 适配账户与表空间差异。

三、物理备份与恢复(RMAN,配合 SQL*Plus)

  • 场景:生产库快速恢复、实例/数据文件损坏、灾难恢复。
  • 步骤与示例:
    1. 在 SQL*Plus 启用归档并打开自动归档(需停机一次进入 MOUNT):
      sqlplus / as sysdba
      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      ALTER SYSTEM ARCHIVE LOG START;
      EXIT
      
    2. RMAN 基本配置与全库备份(示例备份到 /oracle/rman):
      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;
      
    3. 典型恢复流程(数据文件丢失或损坏):
      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;
      
    4. 仅表空间损坏的恢复示例:
      rman target /
      SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';
      RESTORE TABLESPACE users;
      RECOVER TABLESPACE users;
      SQL 'ALTER TABLESPACE users ONLINE';
      
  • 提示:
    • RMAN 备份为物理备份,适合快速实例级恢复;务必开启 ARCHIVELOG 以支持在线备份与时间点恢复能力。
    • 建议开启 控制文件自动备份,便于实例/控制文件损坏时快速恢复。

四、自动化与异地保存

  • 将导出/备份命令写入 Shell 脚本,用 crontab 定时执行,并结合 gzip/rsync/scp 做压缩与异地/云端保存;定期做还原演练验证备份可用性。
  • 示例脚本片段(全库 Data Pump + 压缩 + 异地 rsync):
    #!/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
  • 建议:生产环境以 RMAN 为主做实例级保护与快速恢复,配合 Data Pump 做逻辑迁移与按对象恢复,实现互补

0