8.1 数据库备份与恢复概述

  硬件、数据文件、操作系统都可能损坏或崩溃,程序员或数据维护人员也不可能永远不犯错误。因此,数据库的备份与恢复就显得格外重要。

  备份,就是把数据库复制到转储设备的过程。恢复,就是当发生故障后,利用已备份的文件,重新建立一个完整的数据库。根据出现故障的原因,恢复分为实例恢复和介质恢复两种类型。

  实例恢复:当Oracle实例出现意外后(如意外掉电,后台进程故障等),Oracle自动进行的恢复。

  介质恢复:当存放数据库的介质出现故障时所做的恢复。例如,当一个文件、一个文件的一部分或一个磁盘不能读或不能写时,所进行的恢复操作。

  DBA的主要职责之一,就是备份数据库和在数据库发生故障时高效、安全地恢复数据库。

  备份的方法有逻辑备份、物理备份(冷备份、热备份)等多种方式;恢复的方法也有完全恢复、不完全恢复和RMAN恢复等。

8.1.1 逻辑备份

  逻辑备份是指将数据库中的用户对象导出到一个二进制文件中,需要使用导入/导出工具IMPDP/EXPDP或IMP/EXP。由于逻辑备份具有平台无关性,因此逻辑备份常作为数据迁移的主要手段。

  本节以IMP/EXP工具为例,讲解导入及导出的具体方法。首先强调,IMP或EXP工具是直接在CMD中通过同名的IMP或EXP命令调用的,不需要登录数据库。

  • 导出工具EXP

  使用EXP执行导出操作有以下三种方式。

  (1)表方式。导出指定的表,语法如下:

  1. EXP 数据库用户名/密码@IP地址/实例名 file:/文件名.dmp log=/日志文件名.log
  2. tables=表名1,表名2,…,表名n

  例如,若需要导出scott用户的emp和dept表,就可以执行以下命令:

  1. EXP scott/tiger@127.0.0.1/orcl file:/back/bk.dmp log=d:/back/logfile.log tables=emp,dept

  这样就可以将本机中scott用户的emp表和dept表中的数据保存在f:/back/bk.dmp文件中,并且将日志内容保存在同目录中的logfile.log文件里。

  (2)用户方式。导出指定用户的所有对象和数据,语法如下:

  1. EXP 数据库用户名/密码@IP地址/实例名 file:/文件名.dmp log=/日志文件名.log

  (3)全库方式。导出数据库中的所有对象和数据,此操作需要使用DBA的角色执行,语法如下:

  1. EXP 管理员用户名/密码@IP地址/实例名 file:/文件名.dmp log=/日志文件名.log full=y
  • 导入工具IMP

  执行了导出操作以后,就可以使用IMP工具执行导入操作。与导出操作相对应,导入操作也有以下三种方式。

  (1)表方式。导入指定的表,语法如下:

  1. IMP 数据库用户名A/密码@IP地址/实例名 file:/文件名.dmp log=/日志文件名.log
  2. tables=表名1,表名2,…,表名n fromuser=数据库用户名B touser=数据库用户名A
  3. commit=y ignore=y

  以上命令,就可以将用户B中用tables指定的表导入用户A中。

  (2)用户方式。导入指定用户的所有对象和数据,语法如下:

  1. IMP 数据库用户名A/密码@IP地址/实例名 file:/文件名.dmp log=/日志文件名.log
  2. fromuser=数据库用户名B touser=数据库用户名A commit=y ignore=y

  (3)全库方式。导入数据库中的所有对象和数据,此操作需要使用DBA的角色执行,语法如下:

  1. IMP 数据库用户名A/密码@IP地址/实例名 file:/文件名.dmp log=/日志文件名.log
  2. full=y ignore=y destroy=y

  其中destroy=y表示的是,如果在导入时发现已经存在的数据,则将其删除后重新导入。

  另一种导入/导出方式IMPDP/EXPDP,是从Oracle10g起引入的新方式,称为数据泵(Data Pump)。简单地讲,IMPDP/EXPDP采用了并行地进行导入/导出的方式,比IMP/EXP速度更快。

8.1.2 冷备份及恢复

  我们已经知道,物理备份可以分为冷备份和热备份。冷备份又称脱机备份,是指在关闭数据库后进行的备份;而热备份也称为联机备份,是在数据库运行的同时进行备份,但热备份存在着难以维护等风险。实际应用中,为了确保备份的可靠性,大多采用冷备份。

  冷备份实质就是数据库相关文件的复制:在数据库关闭之后,将所有的关键性文件(数据文件、控制文件、联机文件等)复制到另外的位置。因此,冷备份最重要的一点,就是要知道这些文件的存放位置,而这些位置是可以通过超级管理员SYS账户进行查询的。

  冷备份的具体步骤如下。

  • 使用SYS登录数据库
  1. SQLPLUS sys/change_on_install AS SYSDBA
  • 查询所有控制文件的位置
  1. SELECT * FROM v$controlfile;
  • 查询所有日志文件的位置
  1. SELECT * FROM v$logfile;
  • 查询所有数据文件的位置
  1. SELECT * FROM v$datafile;
  • 查询pfile文件的位置
  1. SHOW PARAMETER pfile;
  • 记录以上所有文件的位置,之后关闭数据库实例
  1. SHUTDOWN immediate
  • 根据记录的位置,将以上所有文件复制到备份目录中

  • 重新启动数据库实例

  1. STARTUP

  冷备份完成以后,如果要进行恢复操作,只需要先关闭数据库实例,然后将之前备份的文件再复制回原目录中,最后重启数据库实例。

8.1.3 RMAN

  RMAN(Recovery Manager,恢复管理器)是一种用于备份和恢复数据的Oracle工具。

  RMAN能够备份整个数据库或某些数据库部件(如表空间、数据文件、控制文件、归档文件、Spfile参数文件等)。RMAN也允许进行增量数据块级别的备份,但增量RMAN备份是时间和空间有效的,因为它们只备份自上次备份以来有变化的那些数据块。而且,通过RMAN提供的接口,可以很好地与第三方的备份与恢复软件(如VERITAS等)对接,从而提供更强大的备份与恢复功能。此外,RMAN还提供了其他更多功能,如数据库的克隆等。

  使用RMAN有Nocatalog和Catalog两种备份及恢复方式。

  Nocatalog方式:用控制文件作为catalog秦桂岭1(目录),每一次备份都要往控制文件里面写很多备份信息,因此控制文件里面会有越来越多的备份信息。

  Catalog方式:首先要创建备份目录并建立恢复目录,即将数据库的备份信息写到恢复目录里面。

  本节以Nocatalog方式为例,介绍使用RMAN进行备份与恢复的基本步骤。

  • 使用Nocatalog方式备份数据

  (1)查看是否开启归档模式

  以SYSDBA角色登录,并执行以下命令:

  1. ARCHIVELOG LIST ;

  如果发现数据库处于非归档模式,则需要通过以下步骤改为归档模式。

  ① 关闭数据库(确保仍然处于SYSDBA角色)

  1. SHUTDOWN immediate;

  ② 将数据库启动到MOUNT模式

  1. START mount;

  ③ 调整数据库的归档模式

  1. ALTER DATABASE archivelog;

  ④ 打开数据库

  1. ALTER DATABASE OPEN;

  ⑤ 确认数据库已处于归档模式

  1. ARCHIVELOG LIST ;

  (2)设置备份时间

  通过参数control_file_record_keep_time设置备份信息的保存时间(单位:天),超时后就自动清除掉以前的备份信息:

  1. ALTER SYSTEM SET control_file_record_keep_time = 天数 SCOPE=BOTH ;

  可以通过以下语句查看是否设置成功:

  1. SHOW PARAMETER CONTROL ;
  • 使用Nocatalog方式恢复数据

  (1)建立Oracle运行环境(包括init或sp文件)

  (2)将备份的控制文件复制到init文件指定的位置

  (3)进入MOUNT模式

  (4)使用RMAN,恢复datafile文件

  (5)通过以下语句,打开resetlogs文件:

  1. ALTER DATABASE OPEN resetlogs;

  实际工作中,会有专业的人员来操作RMAN,开发人员简单了解即可。