整理自《Oracle database 11g RMAN备份与恢复》
001 逻辑备份与恢复
Oracle database 11g使用Oracle data pump体系结构来支持逻辑备份和恢复。这些实用程序包括数据泵导出程序(expdp)和数据泵导入程序(impdp)。对于逻辑备份来说,时间点恢复是不可能的。RMAN不进行逻辑备份和恢复。
002 Oracle物理备份与恢复
RMAN实际上是物理备份。
在archivelog模式和noarchivelog模式下,Oracle都可以执行脱机备份。此外,如果数据库处于archivelog模式,那么Oracle既可以执行脱机备份,也可以执行联机备份。
2-1 noarchivelog模式下的物理备份
noarchivelog模式只在数据库关闭时支持数据库备份(为什么??答:使用用户管理下的备份,数据库文件头的SCN会被冻结,对应文件块的改变都会被记录到redo日志文件中,归档是对redo日志的备份。不开归档,手动备份下的文件无法恢复到一致性的状态。这样的备份,没有意义。)。此外,noarchivelog模式下数据库的完全恢复只能恢复到备份的时间点。按照下面的步骤可以在noarchivelog模式中执行数据库的手动备份(需要注意的是,如果使用RMAN,这些步骤会有所不同):
(1)完全关闭数据库
(2)备份所有数据库数据文件、控制文件和联机重做日志文件
(3)重新启动数据库
2-2 archivelog模式下的物理备份
archivelog模式下的冷备份步骤:
(1)完全关闭数据库
(2)备份所有数据库数据文件
(3)重新启动数据库
(4)使用alter system switch logfile命令强制执行一个联机重做日志切换。一旦归档了联机重做日志,那么就备份所有归档的重做日志。
(5)使用alter database backup control file to trace命令和alter database backup control file to ’file_name‘命令创建控制文件的一个备份。
当然,在数据库处于archivelog模式时,您有可能想完成数据库的联机备份(热备份)。数据库处于archivelog模式时,Oracle允许在数据库打开和运行的同时备份每个单独的表空间与其数据文件,甚至还可以在不同的时刻备份选择的数据库部分(只要备份策略正确即可,这样仍然可以保持数据一致性)。
使用下面的步骤可以执行表空间的一个联机备份:
(1)使用alter tablespace begin backup命令将需要备份的表空间和数据文件置入联机备份模式。如果希望备份整个数据库,则可以使用alter database begin backup命令将所有数据库表空间置入热备模式。
(2)备份与刚被置入热备份模式的表空间相关联的数据文件(可以选择备份指定的数据文件)。
(3)对于在步骤(1)中置入联机备份模式的每个表空间来说,都要执行alter tablespace end backup命令将其从热备份模式中取出。如果希望将所有表空间从热备份模式中取出,可以使用alter database end backup命令。
(4)使用alter system switch logfile命令强制执行一个联机重做日志切换。
(5)一旦完成了日志切换并归档了当前的联机重做日志,就备份所有归档的重做日志。
需要注意的是,步骤(5)中的日志切换和归档的重做日志备份是必需的,这是因为恢复操作必须应用在备份期间生成的所有重做上。Oracle在联机备份期间不断地物理更新数据文件(除了数据文件头)时,在备份操作期间存在数据块分离的可能性,这种可能性会导致备份的数据文件不一致。此外,数据库数据文件可能在备份之后、但是在整个备份进程结束之前被写入,由于备份中的每个数据文件当前可能会有不同的SCN,因此数据文件备份映像会不一致,所以拥有在备份期间生成的重做以应用于恢复是非常重要的。
执行alter tablespace begin backup命令或alter database begin backup命令时,重做生成会发生更改。一般来说,Oracle只将更改矢量存储为重做记录。这些小型的记录只定义已经发生的更改。当数据文件处于联机备份模式时,Oracle会记录数据库数据文件的整个块更改,而不是仅仅记录更改矢量,这意味着联机备份期间总的重做生成会大幅增加,这样在热备份进程执行期间所需的磁盘空间和CPU开销会受到影响。RMAN提供了不将表空间置入热备份模式而执行热备份的功能,这样就避免了使用额外的I/O操作。当结束数据文件的联机备份状态时,就可以进行正常的操作。
还需要注意的是在archivelog模式的两种备份中(联机备份和脱机备份),并不备份联机重做日志,而是备份数据库的归档的重做日志。此外,也不会备份控制文件,但是会创建备份控制文件,这是因为在恢复期间不希望冒险重写联机重做日志或控制文件(备份的旧的联机重做日志或控制文件肯能会将现有的最新的联机重做日志或控制文件覆盖)。
至于为什么不恢复联机重做日志,那是因为在archivelog模式的恢复期间,联机重做日志中可能有最新的重做,这样当前的(current日志组)联机重做日志将被用于完全的时间点恢复。由于这个原因,我们不在archivelog模式的数据库恢复期间重写联机重做日志。如果数据库丢失了联机重做日志(希望不会发生这种情况),就必须使用所有归档的重做日志来执行时间点恢复。