温馨提示×

Ubuntu上Oracle数据库的备份恢复流程是怎样的

小樊
50
2025-09-29 20:29:16
栏目: 云计算

Ubuntu上Oracle数据库备份恢复流程

一、备份流程

1. 准备工作

  • 切换Oracle用户:通过su - oracle切换至Oracle数据库用户,确保操作权限。
  • 配置环境变量:编辑~/.bash_profile~/.bashrc,添加Oracle基础路径(如ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1)、SID(如ORACLE_SID=orcl)、库路径(如LD_LIBRARY_PATH=$ORACLE_HOME/lib)等变量,执行source ~/.bash_profile使配置生效。
  • 确认归档模式:以SYSDBA身份登录SQL*Plus(sqlplus / as sysdba),执行archive log list确认数据库处于归档模式(若未开启,需执行shutdown immediate→修改/u01/app/oracle/product/19c/dbhome_1/dbs/init.ora中的LOG_ARCHIVE_DEST参数→startup mountalter database archivelog;alter database open;)。

2. 选择备份工具

(1)RMAN(物理备份,推荐)

RMAN是Oracle官方推荐的物理备份工具,支持全备、增量备份、压缩备份及自动恢复,适用于生产环境。

  • 基础备份命令:通过终端执行rman target /连接目标数据库,输入以下命令完成全备(包含数据文件、控制文件、归档日志):
    BACKUP DATABASE PLUS ARCHIVELOG;
    
    如需增量备份(仅备份自上次备份后修改的块),可使用:
    BACKUP DATABASE PLUS ARCHIVELOG INCREMENTAL LEVEL 1;
    
  • 带日志的备份脚本:创建/home/oracle/scripts/rman_backup.sh,内容如下:
    #!/bin/bash
    export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
    export ORACLE_SID=orcl
    export PATH=$ORACLE_HOME/bin:$PATH
    rman target / <<EOF
    run {
      allocate channel ch1 type disk;
      backup database plus archivelog format '/backup/oracle/full_%U.bkp';
      release channel ch1;
    }
    exit;
    EOF
    
    执行chmod +x /home/oracle/scripts/rman_backup.sh添加执行权限,再通过crontab -e添加定时任务(如每天凌晨2点执行):
    0 2 * * * /home/oracle/scripts/rman_backup.sh >> /backup/oracle/backup.log 2>&1
    
(2)expdp/impdp(逻辑备份,适用于跨平台迁移)

expdp(数据泵导出)和impdp(数据泵导入)是Oracle提供的逻辑备份工具,适用于需要迁移数据到其他环境或进行选择性恢复的场景。

  • 创建逻辑备份目录:以SYSDBA身份登录SQL*Plus,执行以下命令创建逻辑目录(对应Ubuntu物理路径)并授权:
    CREATE OR REPLACE DIRECTORY EXPDP_DIR AS '/backup/oracle/logical';
    GRANT READ, WRITE ON DIRECTORY EXPDP_DIR TO PUBLIC;
    
  • 执行导出命令:通过终端执行expdp命令,导出指定用户或全库数据(如导出hr用户所有数据):
    expdp hr/hr_password@orcl DIRECTORY=EXPDP_DIR DUMPFILE=hr_full.dmp LOGFILE=hr_export.log FULL=Y
    
    导出完成后,备份文件将存储在/backup/oracle/logical目录下。

二、恢复流程

1. 准备工作

  • 确认备份可用性:检查物理备份文件(如RMAN备份的/backup/oracle/full_*.bkp)或逻辑备份目录(如/backup/oracle/logical/hr_full.dmp)是否存在且未损坏。
  • 创建恢复目录:若使用RMAN恢复,需创建恢复目录(可选但推荐),用于存储备份元数据:
    CREATE USER rman_cat IDENTIFIED BY rman_pass;
    GRANT CONNECT, RESOURCE TO rman_cat;
    GRANT RECOVERY_CATALOG_OWNER TO rman_cat;
    CONNECT rman_cat/rman_pass;
    CREATE CATALOG;
    REGISTER DATABASE; -- 注册目标数据库
    

2. 选择恢复方式

(1)RMAN恢复(物理恢复)

RMAN恢复适用于数据文件损坏、丢失或数据库崩溃的场景,支持完整恢复、不完全恢复(如恢复到指定时间点)。

  • 完整恢复(全备+归档日志)
    1. 关闭数据库:SHUTDOWN IMMEDIATE;
    2. 启动到MOUNT状态:STARTUP MOUNT;
    3. 恢复数据库:RESTORE DATABASE;(RMAN自动查找备份文件并恢复数据文件)
    4. 恢复归档日志:RECOVER DATABASE;(应用归档日志和在线重做日志,使数据库达到一致状态)
    5. 打开数据库:ALTER DATABASE OPEN;
  • 不完全恢复(恢复到指定时间点)
    1. 关闭数据库:SHUTDOWN IMMEDIATE;
    2. 启动到NOMOUNT状态:STARTUP NOMOUNT;
    3. 恢复控制文件(若控制文件损坏):RESTORE CONTROLFILE FROM '/backup/oracle/controlfile.bkp';
    4. 启动到MOUNT状态:ALTER DATABASE MOUNT;
    5. 恢复数据库到指定时间点:RECOVER DATABASE UNTIL TIME '2025-09-28:18:00:00';
    6. 打开数据库(需使用RESETLOGS重置日志序列):ALTER DATABASE OPEN RESETLOGS;
(2)impdp恢复(逻辑恢复)

impdp恢复适用于逻辑备份的场景,如跨平台迁移、选择性恢复表或用户数据。

  • 执行导入命令:通过终端执行impdp命令,导入逻辑备份文件(如导入hr用户数据):
    impdp hr/hr_password@orcl DIRECTORY=EXPDP_DIR DUMPFILE=hr_full.dmp LOGFILE=hr_import.log FULL=Y
    
    若需恢复特定表(如employees表),可添加TABLES=employees参数:
    impdp hr/hr_password@orcl DIRECTORY=EXPDP_DIR DUMPFILE=hr_full.dmp LOGFILE=hr_import.log TABLES=employees
    

三、注意事项

  • 备份验证:定期执行RMAN> LIST BACKUP;(RMAN)或impdp hr/hr_password@orcl DIRECTORY=EXPDP_DIR DUMPFILE=hr_full.dmp LOGFILE=test_import.log FULL=Y(逻辑)验证备份完整性。
  • 权限管理:确保Oracle用户对备份目录有读写权限(如chown -R oracle:oinstall /backup/oracle)。
  • 日志监控:备份和恢复过程中,实时监控日志文件(如/backup/oracle/backup.loghr_import.log),及时排查错误。
  • 测试恢复:定期在测试环境执行恢复流程,确保备份文件有效且恢复步骤正确。

0