第1页共30页第11章数据库的备份与恢复学习目标:●了解Oracle数据库备份和恢复的概念。●掌握Oracle数据库备份和恢复的类型。●掌握Oracle数据库的备份和恢复的方法。●掌握利用数据泵技术进行备份和恢复方法。数据库的备份与恢复是保证数据库安全运行的一项重要内容,也是数据库管理员的重要职责。Oracle提供了完善的备份与恢复功能,以保障数据库系统的安全性。如果数据库受到损坏,如数据文件被删除、机器故障、表中数据被误删除等,就可以使用备份文件对数据库进行及时恢复,尽可能地使用户的数据免遭损失,使数据库继续正常运行。本章将介绍数据库备份与恢复的基本概念,数据库脱机的备份与恢复、数据库的导入/导出、以及使用数据泵进行逻辑备份与恢复的方法和应用。11.1概述备份和回复是两个互相联系的概念。备份就是将数据保存起来,而恢复是当意外发生或者处于某种需要时,将备份的信息还原到数据库中。备份与恢复各有不同的方法,在不同的数据库使用条件下需要使用不同的备份与恢复方法。11.1.1备份与恢复的类型数据库备份与恢复主要有三种类型:脱机备份与恢复、联机备份与恢复、逻辑备份与恢复。不同的类型是针对不同的运行条件和故障条件而选择使用的。1.脱机备份与恢复脱机备份与恢复(也称为冷备份与恢复)是在关闭数据库的情况下对数据库文件进行的物理备份与恢复。它是最简单、最安全的方法。脱机备份必须要在关闭数据库后进行,并且是通过SHUTDOWNNORMAL,SHUTDOWNIMMEDIATE或SHUTDOWNTRANSACTION命令关闭数据库后进行。此时,对数据库所使用的必要文件都可以用操作系统的复制命令进行备份与恢复。这样备份的数据库文件。需要注意的是,在进行脱机备份与恢复之前,需要确保数据库有足够长时间保持脱机状态,以保证进行完全备份与恢复。否则,应该考虑使用其他备份与恢复方法。第2页共30页2.联机备份与恢复联机备份与恢复(也称为热备份与恢复)是在数据库处于打开状态下对数据库进行的备份与恢复,要进行联机备份与恢复,数据库必须处于归档模式(ARCHIVELOG)下,而且需要大量档案空间。使用联机备份与恢复的好处是,当一个数据文件或表空间处于备份与恢复状态时,用户仍然可以访问数据库中其他数据。只有能进行联机备份与恢复的数据库才能实现7×24小时的运行,即实现不停机地使用数据库。另外,可以使用脱机备份和联机备份结合的方法来恢复更多的数据。比如:如果昨天进行了一次脱机备份,而今天又进行了联机备份,那么在发生问题时,就可以利用这些资料恢复到今天的信息。3.逻辑备份与恢复逻辑备份与恢复是指利用Oracle提供的工具将数据库中的数据进行导出与导入。Oracle10g提供了两种形式的逻辑备份与恢复工具,分别是导出导入工具(EXP,IMP)和数据泵技术(EXPDP,IMPDP),其中数据泵技术是Oracle10g新引入的技术。导出导入工具(EXP,IMP)和数据泵技术(EXPDP,IMPDP)在使用上区别如下:●EXP和IMP是客户端的工具程序,它们既可以在客户端使用,也可以在服务器端使用。●EXPDP和IMPDP是服务器端的工具程序,它们只能在Oracle服务器端使用,而不能在Oracle客户端使用。●IMP只适用于EXP导出文件,而不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。●逻辑备份与恢复具有以下优点:●具有多种方式。物理备份与恢复是对操作系统文件的备份与恢复,无论文件中有无数据,有无需要备份的数据,都必须备份。而逻辑备份只是数据的备份,不用复制物理文件,可以按需要进行数据库级、方案级、表级的逻辑备份与恢复,可以节省空间。●实现不同操作系统之间的数据传输。由于卸出的数据被存储成一个Oracle格式的二进制文件,其中不包括操作系统信息,所以可以在不同操作系统平台的Oracle数据库之间直接传输数据。●实现不同Oracle版本之间的数据传输。可以在低版本的Oracle数据库中将数据卸出,然后装入另一个高版本的Oracle数据库,实现数据库的升级。但从高版本到低版本需要另外一些操作。11.1.2备份策略为了避免数据丢失,除了需要数据库管理系统本身提供高可靠性的防止故障技术手段之外,还需要数据库用户积极主动的配合,考虑可靠的备份与恢复策略,以保障数据库操作的平稳性,加快故障恢复的过程。备份策略从以下几方面考虑:第3页共30页●如果不必7×24小时工作,可以在NOARCHIVELOG(非归档)模式下操作数据库;如果是7×24小时工作,则需要在ARCHIVELOG(归档)模式下操作数据库。●如果不必7×24小时工作,则根据数据库的操作频繁程度,适当进行脱机备份,如每周或每月;如果是7×24小时工作,则要在脱机备份之后,适当地穿插进行联机备份,如每周两次或每月两次。●在重要的修改以前或以后,执行适当的数据库备份。包括:添加控制文件、表空间、重做日志文件,以及删除表空间、表、用户等。这些都会改变数据库的结构,因此执行适当的数据库备份就显得特别重要。●含有动态数据的表空间比多数静态表空间需要更为频繁的备份。●在磁盘空间允许的情况下,多保存几次以往的备份。●选择适当的备份工具,如果企业有多个Oracle数据库,则应该使用具有恢复目录的恢复管理器(RMAN)进行备份,这将使用户因备份和恢复引起的错误风险达到最小。11.2脱机备份与恢复脱机备份是在数据库处于完全关闭的状态下进行的操作,是对于构成数据库的全部文件的备份,这些需要备份的文件分为以下几类:●参数文件●所有控制文件●所有数据文件●所有联机重做日志文件这些文件在启动数据库的过程中会依次使用,所以只有当它们都被正确地读取和使用后,数据库才能正常启动,用户才能使用数据库。11.2.1脱机备份的文件在进行脱机备份之前,必须要先整理清楚备份文件的位置与清单,它们是备份的依据,备份文件的位置及清单如下:●参数文件包括以下两个,根据数据库名不同,参数文件名会有所不同(本实例中的数据库名为Student)。E:\oracle\product\10.2.0\db_1\Database\PWDStudent.oraE:\oracle\product\10.2.0\db_1\Database\initStudent.ora●控制文件通常可以通过查询数据字典视图V$CONTROL确定位置与清单。查询代码和运行结果如下:SELECTSTATUS,NAMEFROMV$CONTROLFILE;图11.1控制文件位置与清单第4页共30页●数据文件通常可以通过查询数据字典视图DBA_DATA_FILES确定位置与清单。查询代码和运行结果如下:SELECTSTATUS,FILE_NAMEFROMDBA_DATA_FILES;图11.2数据文件位置与清单●联机重做日志文件通常可以通过查询数据字典视图V$LOGFILE确定位置与清单。查询代码和运行结果如下:SELECTGROUP#,STATUS,MEMBERFROMV$LOGFILE;图11.3联机重做日志文件位置与清单11.2.2脱机备份脱机备份首先需要在DOS方式下完全关闭数据库,才能进行文件备份操作,具体步骤如下:(1)在数据库服务器上,打开命令提示符,进入DOS状态。(2)以不连接数据库的方式启动SQL*PLUS。在命令提示符下输入SQLPLUS/NOLOG命令,进入SQL提示符下。如图11.4所示。图11.4在命令提示符下启动SQL*PLUS(3)以具有SYSDBA或SYSOPER权限的数据库用户帐户、SYSDBA连接身份连接数据库。代码和运行结果如下:CONNECTSYSTEM/***ASSYSDBA第5页共30页图12.5连接数据库(4)以IMMEDIATE方式关闭数据库,以便进行脱机备份。代码和运行结果如下:SHUTDOWNIMMEDIATE图12.6以IMMEDIATE方式关闭数据库(5)数据库关闭后,将备份文件复制到指定的机器或磁盘。备份后的参数文件如图11.7所示,备份后的控制文件、数据文件、重做日志文件如图11.8所示。图11.7备份后的参数文件图11.8备份后的控制文件、数据文件、重做日志文件(6)备份完成后,以OPEN方式打开数据库,用户就可以继续使用数据库了。代码和运行结果如下:STARTUPOPEN图11.9重新打开数据库11.2.3脱机恢复第6页共30页当数据库损坏之后,使用脱机恢复操作恢复到备份时的状态。操作步骤如下:(1)以IMMEDIATE方式关闭数据库。(2)将备份文件全部复制到原来的位置。注意,要将全部的备份文件复制回去,以保证数据的同步和一致性。(3)恢复完成后,以OPEN方式启动数据库,就可以继续使用数据库了。11.3数据导出/导入数据的导出/导入是数据库逻辑备份的一种形式,它是使用EXP和IMP两种工具实现的。在Oracle10g以前的版本通常都是使用EXP和IMP进行逻辑备份。在Oracle10g版本中新增加了数据泵技术,本章将对这两种逻辑备份方法分别进行介绍。注意:无论是使用传统的导出/导入方式还是使用数据泵技术导出/导入数据,都需要在DOS命令提示符下完成。11.3.1导出导出是使用EXP命令将数据库对象的结构及其数据转储到特定OS文件中的过程,导出包括导出表、导出方案和导出数据库3种方式。4.EXP命令行的语法EXP命令行的基本语法如下:EXPusername/passwordparameter1[parameter2…]其中:username表示登录数据库的用户名;password表示用户口令;parameter1、parameter2表示参数,EXP命令行可以带有多个参数。下面分别介绍几种常用参数的使用方法。●DIRECT该参数用于指定是否使用直接导出方式,默认值为N。当设置该参数为Y时,采用直接导出方式;当设置该参数为N时,采用常规导出方式。需要注意,直接导出速度要优于常规导出,但要求客户端和服务器端的字符集必须完全一致。●FILE该参数用于指定导出文件名,默认名称为EXPDAT.DMP。●FILESIZE用于指定导出文件的最大尺寸。如果不指定FILESIZE参数,所有对象和数据将被存放到一个导出文件中。通过指定FILESIZE参数,可以将数据库对象分布到多个导出文件中。【例11.1】将SYSTEM方案的“班级表”和“学生表”导出到两个转储文件中,文件名分别是a1.dmp和a2.dmp,指定导出文件最大尺寸为10240B。代码如下:EXPSYSTEM/***TABLES=班级表,学生表FILE=a1.dmp,a2.dmpFILESIZE=10240;●FULL该参数用于指定数据库导出模式,默认值为N。当设置该参数为Y时,导出除SYS外所有其他方案的对象。需要注意,当执行数据库导出时,要求数据库用户必须具有第7页共30页EXP_FULL_DATABASE角色或DBA角色。●INDEXES该参数用于指定是否导出与表和簇相关的索引,默认值为Y。当设置该参数为Y时,导出表和簇的索引:当设置该参数为N时,不导出表和簇的索引。●LOG该参数用于指定导出的日志文件名称,默认情况下不会生成导出日志文件。●OWNER该参数用于指定用户导出模式。需要注意,普通用户只能导出其自身方案,如果要导出其他用户方案,要求用户必须具有EXP_FULL_DATABASE角色或DBA角色。●QUERY该参数用于指定WHERE条件子句,从而导出表的部分数据。需要注意,使用直接导出方式时不能指定该参数。【例11.2】导出SYSTEM方案中的“学生表”,指定导出学号为060101001003的数据,并生成导出日志文件a.1og。代码如下:EXPSYSTEM/***TABLES=学生表QUERY='WHERE学号=060101001003'LOG=a.1og;●TABLES该参数用于指定导出表,格式为schema_name.table_name:partition_name,其中schema_name用于指定方案名,table_nam