温馨提示×

centos sqlplus备份恢复技巧

小樊
44
2025-12-07 14:49:18
栏目: 云计算

CentOS 上 SQL*Plus 备份与恢复实用技巧

一、适用场景与总体思路

  • CentOS 环境中,SQL*Plus 主要负责逻辑层面的备份与恢复(如用户/表/数据泵导出导入),物理层面(数据文件、控制文件、归档日志)建议使用 RMAN 或操作系统拷贝配合日志应用。
  • 逻辑备份恢复常用工具:expdp/impdp(Data Pump),配合 SQL*Plus 做前置准备(目录对象、用户、表空间)与后置校验。
  • 物理恢复(介质故障、数据文件损坏)以 RMAN 为主;在 非归档模式 下通常只能做“还原到上次全备”的时点恢复,且联机重做日志无法前滚,需谨慎评估数据丢失风险。

二、逻辑备份与恢复步骤(SQL*Plus + Data Pump)

  • 前置准备(SQL*Plus)
    • 创建目录对象并赋权(指向操作系统备份目录):
      • create or replace directory expdata as ‘/home/oracle/backup’;
      • grant read, write on directory expdata to system;
    • 如需导入到新用户/新库,提前建好 tablespaceuser 并授权:
      • create tablespace tbs_data datafile ‘/u01/oradata/…/tbs_data01.dbf’ size 1G autoextend on;
      • create user appuser identified by *** default tablespace tbs_data;
      • grant connect, resource, dba to appuser;
  • 备份(Data Pump,命令行执行)
    • 全库:expdp system/*** directory=expdata dumpfile=full_$(date +%F).dmp full=y logfile=full_$(date +%F).log
    • 按用户:expdp system/*** directory=expdata schemas=appuser dumpfile=app_$(date +%F).dmp logfile=app_$(date +%F).log
  • 恢复(Data Pump,命令行执行)
    • 按用户导入:impdp system/*** directory=expdata dumpfile=app_2025-12-07.dmp logfile=imp_app_2025-12-07.log
    • 跨用户迁移:impdp system/*** directory=expdata dumpfile=app.dmp remap_schema=appuser:appuser_new logfile=imp_remap.log
    • 表已存在处理:在导入命令中增加 table_exists_action=truncate|replace|skip(如仅导入增量或重跑,常用 truncate)
  • 实用提示
    • 备份/恢复前确保目录对象指向的 操作系统路径 存在且 oracle:oinstall 可写。
    • 导入大量对象时建议加 parallel 参数提升速度;导入后核对 logfile 中的错误与统计信息。

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

  • 适用场景:数据文件、控制文件、整个实例级别的恢复;要求数据库处于 归档模式 以实现 完全恢复
  • 基本流程(RMAN)
    • 全库备份:RMAN> backup database plus archivelog delete input;
    • 丢失数据文件/表空间:RMAN> restore datafile <file#|name>; RMAN> recover datafile <file#|name>;
    • 丢失控制文件:RMAN> restore controlfile from ‘’; RMAN> alter database mount; RMAN> recover database;
    • 打开数据库:RMAN> alter database open resetlogs;(按实际是否需要 resetlogs 执行)
  • 非归档模式的限制
    • 只能还原到最近一次全备的“一致性点”,无法前滚联机日志,会丢失最后一次备份之后的所有变更;必要时需重建控制文件并 clear logfile group
  • SQL*Plus 辅助
    • 恢复前后常用视图核对:
      • v$recover_file(需恢复的数据文件)
      • v$recovery_log(恢复所需重做/归档日志)
      • v$archived_log(已归档日志)
    • 打开数据库:SQL> alter database open;(或按 RMAN 提示执行)。

四、自动化与日常运维建议

  • 定时全备脚本(示例)
    • 目录与环境:/home/oracle/backup;在 oracle 用户下执行;确保 expdp 在 $ORACLE_HOME/bin
    • 示例脚本:
      • #!/bin/bash
        export DATA_DIR=“/home/oracle/backup”
        BAKUP_TIME=$(date +%F)
        $ORACLE_HOME/bin/expdp system/*** directory=expdata dumpfile=full_${BAKUP_TIME}.dmp full=y logfile=full_${BAKUP_TIME}.log
        find ${DATA_DIR} -name “.dmp" -mtime +7 -delete
        find ${DATA_DIR} -name "
        .log” -mtime +30 -delete
    • 加入 crontab(每天 02:00):0 2 * * * /home/oracle/backup/backup.sh
  • 目录与权限
    • 备份目录提前创建并赋权:mkdir -p /home/oracle/backup; chown -R oracle:oinstall /home/oracle/backup
  • 校验与演练
    • 定期在测试环境做 导入验证恢复演练;保留 至少 2–7 天 的备份并异地/离线存放一份。

0