数据库备份
数据库备份分为逻辑备份和物理备份。逻辑备份用于备份独立对象,如表或者模式;而物理备份则备份文件系统级别的对象粒度,如构成表空间的物理文件。无论数据库处于联机模式还是脱机模式,均可执行数据库的物理备份。
一:逻辑备份
数据库的逻辑备份涉及读取一组数据库行,并将其写入文件。将独立于物理位置读取这些记录。在Oracle中,Data Pump Export实用程序执行此类数据库备份,要恢复使用Data Pump Export生成的文件,请使用Data Pump Import。Data pump Export查询数据库(包括数据字典),并将结果写入称为“导出转储文件”的XML文件中,可以导出完整数据库、特定用户、表空间或特定表。在导出期间,可以选择是否导出与表相关的数据字典信息,如授权、索引和约束。Data Pump Export写入的文件将包含全面重建所有选定对象和数据所需的命令。Data Pump Import可读取XML转储文件进行数据的导入。恢复整个数据库时需要很长时间。
二:物理备份
执行物理备份时,需要复制构成数据库的文件,这些备份也称为“文件系统备份”,因为它们涉及使用操作系统文件备份命令。Oracle支持两种不同的物理文件备份,分为脱机备份和联机备份(也分别称为冷备份和热备份)。
1、冷备份
通过SHUTDOWN命令的NORMAL、IMMEDIATE或者TRANSIONAL选项使数据库正常关闭,将执行一致的脱机备份,备份以下文件:
- 所有数据文件
- 所有控制文件
- 所有归档重做日志文件
- init.ora文件或者服务器参数文件SPFILE
- 文本格式文件,如密码文件和tnsnames.ora
如果在数据库发生异常终止后执行脱机备份,将会出现不一致情形,而且在恢复期间可能需要做更多的工作。
2、热备份
数据库在联机状态下进行的备份,联机备份过程是个很强大的功能,原因有两点,首先,它们提供了完全时间点恢复,第二,允许数据库在备份文件系统时仍然处于打开状态。通过数据库一直处于打开状态,也可以避免在关闭和重启数据库时清除数据库实例的系统全局区(SGA),由于避免了清除SGA内存,从而减少了重启数据库时需要执行的物理I/O数量,数据库性能将得到提高。
可以在数据库打开时备份以下文件:
- 所有数据文件
- 所有归档重做日志文件
- 使用ALTER DATABASE BACKUP CONTROLFILE命令备份的一个控制文件
- SPFILE
注:每当备份整个数据库或者SYSTEM表空间时,RMAN将自动备份控制文件和SPFILE。
Oracle以循环方式写入联机重做日志文件:在填满第一个日志文件后,它开始写入第二个日志文件,在填满第二个日志文件后,它开始写入第三个日志文件,以此类推。在填满最后一个联机重做日志文件后,LGWR后台进程开始覆盖第一个重做日志文件的内容。如下图:
当Oracle以ARCHIVELOG模式运行时,ARCn后台进程会在覆盖每个重做日志文件前进行归档,从而形成归档的重做日志文件,通常将其写入磁盘文件或者磁带设备中,用来恢复数据。大多数生产数据库,特别是OLTP生产数据库,必须以ARCHIVELOG模式运行,为了使用RMAN,数据库必须处于ARCHIVELOG模式。
数据字典如下;
SELECT * FROM v$instance;
SELECT * FROM v$database;
SELECT * FROM Dba_Data_Files;
SELECT * FROM v$datafile;
SELECT * FROM v$tempfile;
SELECT * FROM v$logfile;
SELECT * FROM v$controlfile;
数据库恢复
一、实例恢复
数据库实例包括内存结构和后台进程。实例故障是指实例突然失败造成的数据库故障,如使用SHUTDOWN ABORT关闭数据库,此时启动数据库会使用当前的数据文件和重做日志文件执行实例恢复。实例恢复由数据库自动完成,不需要用户干预。
实例恢复由两个步骤,前滚(ROLL FORWARD)和回滚(ROLLBACK)。前滚是将重做日志文件中记录的用户提交和未提交的事务涉及的数据写入数据文件;回滚是将未提交事务涉及的修改通过UNDO中的记录退回到之前的状态,以保证事务的原子性。
二、介质恢复
介质恢复是由于磁盘损坏或者数据文件损坏而需要的数据库恢复方式,需要用户干预来执行整个介质恢复过程。介质恢复必须要有备份的数据文件,如果需要完全恢复,还需要自备份以来的归档重做日志文件和当前的重做日志文件。
介质恢复需要两个步骤,即还原(RESTORE)和恢复(RECOVER)。还原是将备份的数据文件复制到相应的目录,如果目录的位置改变,则需要使用ALTER DATABASE RENAME DATAFILE指令告诉数据库新的数据文件的位置;恢复是指使用归档重做日志文件和当前的重做日志文件恢复数据库到最新的状态,即进行实例恢复。
三、完全和不完全恢复
完全恢复是指当数据库发生故障后,通过备份将数据库恢复到最新的状态,不丢失任何数据。需要数据库有数据文件的备份,而且有备份以来的全部的归档重做日志和当前的重做日志,这样才不会丢失数据,可以不同粒度的实现完全恢复,如数据库级、表空间级和数据文件级;
不完全恢复不能把数据库恢复到最新状态,会有数据丢失。