温馨提示×

Linux Oracle备份与恢复方法是什么

小樊
48
2025-08-29 19:05:48
栏目: 云计算

Linux环境下Oracle数据库备份与恢复方法

一、物理备份(基于RMAN工具)

RMAN(Recovery Manager)是Oracle官方推荐的物理备份工具,支持完全备份增量备份(Level 0/1)、归档日志备份,并能跳过未使用数据块,提升备份效率。

1. 全库备份(含归档日志)

rman target /
run {
    backup database plus archivelog;  -- 备份数据库及归档日志
    backup current controlfile;       -- 备份控制文件(可选但建议)
}

2. 增量备份(仅备份变化数据)

rman target /
run {
    backup incremental level 1 database;  -- 一级增量备份(基于上次Level 0或Level 1)
    -- 或备份特定表空间
    backup incremental level 1 tablespace users;
}

3. 恢复流程(以全库恢复为例)

rman target /
run {
    restore database;                 -- 恢复数据文件、控制文件
    recover database;                 -- 应用归档日志至最新状态
    alter database open;              -- 打开数据库
}

4. 自动化备份(通过cron定时任务)

编辑/etc/crontab,添加每日凌晨2点执行的备份脚本:

0 2 * * * /bin/bash /path/to/rman_backup.sh >> /var/log/oracle_rman.log 2>&1

脚本内容示例(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 {
    backup database plus archivelog format '/backup/oracle/%U.bak';
    delete noprompt obsolete;         -- 删除过期备份
}
exit;
EOF

二、逻辑备份(基于Data Pump工具)

expdp(导出)/impdp(导入)是Oracle的逻辑备份工具,支持全库备份schema备份表级备份,适用于跨平台数据迁移或选择性恢复。

1. 全库备份

expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y

2. 特定schema备份

expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=schema_backup.dmp logfile=expdp_schema.log schemas=scott

3. 恢复流程(以全库恢复为例)

impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_full.log full=y

4. 注意事项

  • 导入前需确保目标数据库存在对应的schema(若恢复全库,需提前创建);
  • 若恢复到不同数据库,可使用remap_schema(重映射schema)或remap_tablespace(重映射表空间)参数。

三、物理冷备份(数据库关闭时备份)

冷备份需在数据库关闭状态下进行,适用于需要完整一致性备份的场景(如版本升级前)。

1. 备份步骤

# 1. 关闭数据库
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EOF

# 2. 复制数据库文件(数据文件、控制文件、归档日志、参数文件)
cp -R /u01/oradata/ORCL /backup/ORCL_cold

# 3. 启动数据库
sqlplus / as sysdba <<EOF
STARTUP;
EOF

2. 恢复步骤

# 1. 关闭数据库
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EOF

# 2. 删除原数据库文件(谨慎操作)
rm -rf /u01/oradata/ORCL/*

# 3. 复制备份文件到原位置
cp -R /backup/ORCL_cold/* /u01/oradata/ORCL/

# 4. 启动数据库
sqlplus / as sysdba <<EOF
STARTUP;
EOF

四、Oracle Data Guard(高可用与灾难恢复)

Data Guard是Oracle的高可用解决方案,通过standby数据库(物理/逻辑)实现数据同步,支持switchover(计划切换)和failover(故障切换),确保业务连续性。

1. 物理standby配置步骤(简要)

(1)准备主库(Primary Database)

-- 修改主库参数(在sqlnet.ora中添加)
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,STANDBY)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=STANDBY ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY';
SQL> ALTER SYSTEM SET FAL_SERVER=STANDBY;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> ALTER DATABASE ARCHIVELOG;  -- 确保主库开启归档
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/oradata/ORCL/standby_redo01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/oradata/ORCL/standby_redo02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/oradata/ORCL/standby_redo03.log') SIZE 50M;
SQL> ALTER DATABASE FORCE LOGGING;  -- 强制日志模式

(2)创建standby数据库

  • 使用RMAN从主库备份恢复standby数据库:
rman target sys/password@ORCL auxiliary sys/password@STANDBY
run {
    duplicate target database for standby from active database dorecover nofilenamecheck;
}

(3)监控数据同步

-- 查看主库redo传输状态
SQL> SELECT PROCESS, STATUS, BLOCKS FROM V$MANAGED_STANDBY;

-- 查看standby库应用状态
SQL> SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

2. 角色切换(Switchover)

-- 在主库执行
SQL> ALTER DATABASE SWITCHOVER TO STANDBY;

-- 在standby库执行
SQL> ALTER DATABASE SWITCHOVER TO PRIMARY;

3. 故障切换(Failover)

当主库不可用时,将standby库提升为primary:

-- 在standby库执行
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

五、备份与恢复注意事项

  1. 备份验证:定期执行RMAN> LIST BACKUP;检查备份有效性,避免无效备份;
  2. 归档日志保护:确保归档日志及时备份(可通过BACKUP ARCHIVELOG ALL DELETE INPUT;实现),防止日志丢失导致无法恢复;
  3. 存储空间管理:使用RMAN> DELETE NOPROMPT OBSOLETE;删除过期备份,避免磁盘空间耗尽;
  4. 恢复测试:每季度至少进行一次恢复测试,确保备份流程和命令正确;
  5. 环境一致性:恢复环境的Oracle版本、操作系统、字符集需与生产环境一致,避免兼容性问题。

0