一、摘要
Oracle 的备份与恢复有三种标准的模式,大致分为两大类,备份恢复(物理上的)以及导入导出(逻辑上的),

而备份恢复又可以根据数据库的工作模式分为非归档模式 (Nonarchivelog-style)和归档模式(Archivelog-style),

通常,我们把非归档模式称为冷备份,而相应的把归档模式称 为热备份。

  1. 逻辑备份 - 冷备份

利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。

  1. 物理备份 - 冷备份

冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件、控制文件、联机REDO LOG文件,将其拷贝到另外的位置。

此外冷备份也可以包含对参数文件和口令文件的备份,但是这两种备份是可以根据需要进行选择的。

冷备份实际也是一种物理备份,是一个备份数据库物理文件的过程。

因为冷备份要备份除了重做日志以外的所有数据库文件,因此也被成为完全的数据库备份。

  1. 物理备份 - 热备份

热备份是在数据库运行的情况下,采用archive log mode方式备份数据库的方法。

热备份要求数据库处于archive log模式下操作,并需要大量的档案空间。

一旦数据库处于archive log模式,就可以进行备份了,当执行备份时,只能在数据文件级或表空间进行。

  1. 备份方式分类
    Oracle冷备份和热备份的处理
    二、逻辑备份
    现在先来介绍一下逻辑备份方式的方法,利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。

  2. 理论基础:Oracle提供的Export和Import具有三种不同的操作方式(就是备份的数据输出(入)类型):

(1). 表方式(T) 可以将指定的表导出备份;

(2). 全库方式(Full) 将数据库中的所有对象导出;

(3). 用户方式(U) 可以将指定的用户相应的所有数据对象导出;

  1. 在导入导出备份方式中,提供了很强大的一种方法,就是增量导出/导入,但是它必须作为System来完成增量的导入导出,而且只能是对整个数据库进行实施。

增量导出又可以分为三种类别:

(1). 完全增量导出(Complete Export) 这种方式将把整个数据库文件导出备份;
exp system/密码@数据库名 inctype=complete file=存放目录\yyyymmdd.dmp (为了方便检索和事后的查询,通常我们将备份文件以日期或者其他有明确含义的字符命名)
(2). 增量型增量导出(Incremental Export) 这种方式将只会备份上一次备份后改变的结果;

exp system/密码@数据库名 inctype=incremental file=存放目录\yyyymmdd.dmp

(3). 累积型增量导出(Cumulate Export) 这种方式的话,是导出自上次完全增量导出后数据库变化的信息;

exp system/密码@数据库名 inctype=cumulative file=存放目录\yyyymmdd.dmp

  1. 通常情况下,DBA们所要做的,就是按照企业指定或者是自己习惯的标准(如果是自己指定的标准,建议写好计划说明),

一般,我们采用普遍认可的下面的方式进行每天的增量备份:

Mon:完全备份(A)
Tue:增量导出(B)
Wed:增量导出(C)
Thu:增量导出(D)
Fri:累计导出(E)
Sat:增量导出(F)
Sun:增量导出(G)

  1. 这样,我们可以保证每周数据的完整性,以及恢复时的快捷和最大限度的数据损失。

恢复的时候,假设事故发生在周末,DBA可按这样的步骤来恢复数据库:

第一步:用命令CREATE DATABASE重新生成数据库结构;

第二步:创建一个足够大的附加回滚。

第三步:完全增量导入A:
   imp system/密码@数据库名 inctype=RESTORE FULL=Y FILE=A

第四步:累计增量导入E:

   imp system/密码@数据库名 inctype=RESTORE FULL=Y FILE=E

第五步:最近增量导入F:

  imp system/密码@数据库名 inctype=RESTORE FULL=Y FILE=F

通常情况下,DBA所要做的导入导出备份就算完成,只要科学的按照规律作出备份,就可以将数据的损失降低到最小,提供更可靠的服务。

另外,DBA最好对每次的备份做一个比较详细的说明文档,使得数据库的恢复更加可靠。

三、冷备份
冷备份在数据库出现问题是 只会恢复到备份时的那一时间点,备份完成到数据库出现问题需要恢复时的这一时间段内的所有新数据、修改记录都无法恢复。

热备份只能在归档模式下进行,冷备份不需要归档模式,归档模式会对系统性能尤其是磁盘I/O造成一定的影响,但是相对于归档的好处和安全性,相信大多数DBA都会选择归档模式。

1、优点:

只需拷贝文件即可,是非常快速的备份方法。
只需将文件再拷贝回去,就可以恢复到某一时间点上。
与数据库归档的模式相结合可以使数据库很好地恢复。
维护量较少,但安全性确相对较高。
2、缺点:

在进行数据库冷备份的过程中数据库必须处于关闭状态。
单独使用冷备份时,数据库只能完成基于某一时间点上的恢复。
若磁盘空间有限,冷备份只能将备份数据拷贝到磁带等其他外部存储上,速度会更慢。
冷备份不能按表或按用户恢复。
3.基本流程

当数据库可以暂时处于关闭状态时,我们需要将它在这一稳定时刻的数据相关文件转移到安全的区域,

当数据库遭到破坏,再从安全区域将备份的数据库相关文件拷贝回原来的位置,

这样,就完成了一次快捷安全等数据转移。

由于是在数据库不提供服务的关闭状态,所以称为冷备份。

冷备份具有很多优良特性,比如上面图中我们提到的,快速,方便,以及高效。一次完整的冷备份步骤应该是:

Step1. 首先关闭数据库(shutdown normal)

Step2. 拷贝相关文件到安全区域(利用操作系统命令拷贝数据库的所有的数据文件、日志文件、控制文件、参数文件、口令文件等(包括路径))

Step3. 重新启动数据库(startup),以上的步骤我们可以用一个脚本来完成操作:

   su – oracle < sqlplus /nolog

   connect / as sysdba

   shutdown immediate;

   !cp 文件备份位置(所有的日志、数据、控制及参数文件);

   startup;

   exit;

Step4. 这样,我们就完成了一次冷备份,请确定你对这些相应的目录(包括写入的目标文件夹)有相应的权限。

Step5. 恢复的时候,相对比较简单了,我们停掉数据库,将文件拷贝回相应位置,重启数据库就可以了,当然也可以用脚本来完成。

四、热备份

热备份支持在数据库不停机的情况下进行备份,冷备份是必须在数据库shutdown以后使用操作系统的命令对表空间进行拷贝进行的备份。

热备份适用于重要的数据库,比如7x24不能中断的生产系统,同时可以保证数据库在出现崩溃时结合归档日志可以恢复到任意一个时间点,不会造成数据丢失。

1、优点:

可在表空间或数据文件级备份,备份时间短。
可达到秒级恢复(恢复到某一时间点上)。
可对几乎所有数据库实体作恢复。
恢复是快速的,在大多数情况下在数据库仍工作时恢复。
备份时数据库仍可用。
2、缺点:

因难以维护,所以要特别仔细小心,不允许“以失败而告终”。
若热备份不成功,所得结果不可用于时间点的恢复。
不能出错,否则后果严重。

3.基本流程

当我们需要做一个精度比较高的备份,而且我们的数据库不可能停掉(少许访问量)时,

这个情况下,我们就需要归档方式下的备份,就是下面讨论的热备份。

热备份可以非常精确的备份表空间级和用户级的数据,由于它是根据归档日志的时间轴来备份恢复的,理论上可以恢复到前一个操作,甚至就是前一秒的操作。具体步骤如下:

Step1. 通过视图v$database,查看数据库是否在Archive模式下: SQL> select log_mode from v$database;

   如果不是Archive模式

   则设定数据库运行于归档模式下:SQL>shutdown immediate

   SQL>startup mount

   SQL> alter database archivelog;

   SQL> alter database open;

   如果Automaticarchival显示为“Enabled”,则数据库归档方式为自动归档。否则需要手工归档,或者将归档方式修改为自动归档,如:

   正常shutdown数据库,在参数文件中init.ora中加入如下参数

   SQL>shutdown immediate

   修改init.ora:

   LOG_ARCHIVE_START=TRUE

   LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(归档日值存放位置可以自己定义)

   SQL>startup

然后,重新启动数据库,此时Oracle数据库将以自动归档的方式工作在Archive模式下。

其中参数LOG_ARCHIVE_DEST1是指定的归档日志文件的路径,建议与Oracle数据库文件存在不同的硬盘,一方面减少磁盘I/O竞争,另外一方面也可以避免数据库文件所在硬盘毁坏之后的文件丢失。

归档路径也可以直接指定为磁带等其它物理存储设备,但可能要考虑读写速度、可写条件和性能等因素。

注意:当数据库处在ARCHIVE模式下时,一定要保证指定的归档路径可写,否则数据库就会挂起,直到能够归档所有归档信息后才可以使用。

另外,为创建一个有效的备份,当数据库在创建时,必须履行一个全数据库的冷备份,就是说数据库需要运行在归档方式,然后正常关闭数据库,备份所有的数据库组成文件。

这一备份是整个备份的基础,因为该备份提供了一个所有数据库文件的拷贝。(体现了冷备份与热备份的合作关系,以及强大的能力)

Step2. 备份表空间文件:

(1). 首先,修改表空间文件为备份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;

(2).然后,拷贝表空间文件到安全区域 !CP tablespace_name D_PATH;

(3).最后,将表空间的备份模式关闭 ALTER TABLESPACE tablespace_name END BACKUP;

Step3. 对归档日志文件的备份:

  停止归档进程-->备份归档日志文件-->启动归档进程

  如果日志文档比较多,我们将它们写入一个文件成为一个恢复的参考:$ files ls &lt;归档文件路径&gt;/arch*.dbf;export files

Step4. 备份控制文件:

  SQL> alter database backup controlfile to 'controlfile_back_name(一般用2004-11-20的方式)' reuse;

  当然,我们也可以将上面的东东写为一个脚本,在需要的时候执行就可以了:

  脚本范例:

  su – oracle < sqlplus /nolog

  connect / as sysdba

  ALTER TABLESPACE tablespace_name BEGIN BACKUP

  !CP tablespace_name D_PATH

  ALTER TABLESPACE tablespace_name END BACKUP

  

  alter database backup controlfile to 'controlfile_back_name' reuse;

  !files ls &lt;归档文件路径&gt;/arch*.dbf;export files

热备份的恢复,对于归档方式数据库的恢复要求不但有有效的日志备份还要求有一个在归档方式下作的有效的全库备份。

归档备份在理论上可以无数据丢失,但是对于硬件以及操作人员的要求都比较高。

在我们使用归档方式备份的时候,全库物理备份也是非常重要的。

归档方式下数据库的恢复要求从全备份到失败点所有的日志都要完好无缺。

  恢复步骤:LOG_ARCHIVE_DEST_1

   shutdown数据库。

  将全备份的数据文件放到原来系统的目录中。

  将全备份到失败点的所有归档日志放到参数LOG_ARCHIVE_DEST_1所指定的位置。

  利用sqlplus登陆到空实例。(connect / as sysdba)

  然后 startup mount

  set autorecovery on

  recover database;

  alter database open;