备份方法: 逻辑备份和物理备份

逻辑备份: 拖过逻辑导出对数据进行备份, 逻辑备份的数据只能给予备份时刻进行数据转储, 所以, 恢复也只能恢复到备份时保存的数据. 逻辑备份适合备份哪些很少变化的数据表, 如果通过逻辑备份进行全库恢复, 通常需要重建数据库, 导入备份数据来完成, 对于可用性要求很高的数据库, 这种恢复的时间太长, 通常不被采用, 由于逻辑备份具有平台无关性, 所以更为常见的是, 逻辑备份被作为一个数据迁移及移动的主要手段.

物理备份: 指拖过物理文件拷贝的方式对数据库进行备份, 物理备份又可分为冷备份和热备份. 冷备份是指对数据库进行关闭后拷贝的备份, 这样的备份具有一致和完整的时间点数据, 恢复时只需恢复所有文件就可以启动数据库; (所有文件中包含redo日志文件, contrl file, datafile), 在生产系统中最为常见的备份方式是热备份, 进行热备份的数据库需要运行在归档模式下, 热备份不需要关闭数据库, 从而能够保证系统的持续运行, 在进行恢复时, 通过备份的数据文件及归档日志文件, 数据库可以进行完全恢复, 恢复可以一直进行到最后一个归档日志(剩下的内容可以通过redo日志文件进行恢复), 如果联机日志存在(redo log), 则恢复可以继续, 实现无数据损失的完全恢复. rman 也属于物理备份这一块.

通常, 完全恢复应用于那些由于硬件故障导致的数据库损失, 在这种情况下需要最大可能的恢复数据; 不完全恢复通常用于恢复用户错误, 比如用户不小心删掉了不该删掉的内容.

不完全恢复: 在实际管理中, 很多情况下进行的是不完全恢复, 不完全恢复主要有 4 种类型: 基于时间的恢复(Time-based Recovery), 基于放弃的恢复(cancel-based Recovery), 基于改变的恢复(Change-based Recovery) 和基于日志序列的恢复(Log sequece recovery)

数据库的运行模式(非归档->归档)

archive log list; 获得当前归档的信息

生产库都运行在归档模式下. 曾经见过很多用户由于缺乏必要的监控和备份策略, 在归档模式下由于归档空间耗尽而导致数据库故障的案例.

更改数据库模式,(非归档->归档)

  • 修改必要的初始化参数(log_archive_start: 用于定义是否启动自动归档, oracle10g后, 这个参数废弃, log_archive_format: 用于定义归档文件格式, 可以采用缺省值, log_archive_dest: 用于定义归档文件路径, log_archive_dest_n: oracle准许多路归档路径, 一般可以使用 log_archive_dest_1 参数即可.
  • 以 immediate 方式关闭数据库
  • 启动实例到 mount 状态
  • 更改运行模式并打开数据库 alter database archivelog; alater database open; archive log list;

备份推荐方式

冷备 + rman

rman: 不需要将表空间设置成热备模式, 从而可减少对于数据库的影响, 另外 RMAN 的备份信息可以通过控制文件或者额外的目录数据库进行管理, 功能大但是相对复杂. 任何使用 oracle 数据库的用户都应当使用 rman 来进行备份恢复管理, 这是非常重要的基本技能.

rman 的好处:

rman 支持除逻辑备份以外的所有备份类型, 包括完整备份, 增量备份, 表空间备份, 数据文件备份, 控制文件备份, 归档日志备份 等.

自动生成备份日志

rman 的备份脚本和 OS 无关, 方便移植.

强大的报表功能可以方便的获悉备份的可用性.

使用 rman 进行备份, 需要了解一个重要概念: 恢复目录, rman 在进行备份时, 需要将备份信息存储起来, 这些信息将用来进行恢复, 如果丢失了这些信息, 恢复将变得极其困难和复杂. 缺省 rman 将这些信息存储在控制文件中, 那么此时控制文件的安全就变得极为重要, 对于重要的数据库, 使用控制文件进行信息存储是不够稳妥的; oracle也支持将rman的备份信息存储在目录数据库中(catalog database), 目录数据库可以使用一个独立的数据库, 也可以使用现有的数据库中的一个表空间, 一个目录数据库可以备份多个数据库, 但是注意, 恢复目录同样需要进行备份, 通常使用逻辑备份即可.

1) 使用 nocatlog 方式进行备份( 即备份信息保存在 control file 中, 最好还是建立一个 catlog, 这样安全)

因为这样, contrl file的安全就变得很重要, oracle支持自动备份控制文件, 可以通过如下方式设置控制文件的自动备份:

rman target /

configure controlfile autobackup on;

这个设置可以在rman 中查询: show controlfile autobackup; 也可以在数据库中, select * from v$rman_configuration; 中查询, 注意一下备份路径, 由于oracle10g后引入了闪回区的新特性, 所以自动备份存储在闪回区中; 如果不适用闪回区或者适用 oracle 9i, 则自动备份存储于 $oracle_home/dbs 目录下

如果控制文件等出现问题, 就可以使用之前的自动备份的控制文件了(包含spfile)

在rman中输入: restore spfile to ‘spfile位置’ from autobackup;   -- 恢复 spfile

在rman中输入: restore controlfile to ‘spfile位置’ from autobackup;  -- 恢复 controlfile

最后, 强烈建议大家打开自动备份 control file

全备:

backup database tag=leon070301;   -- 表示7月3日的第1个备份