对 Oracle 备份与恢复 的补充说明-转自tianlesof..
时间:2010-09-07 来源:jasoname
之前曾整理过一片文章,来说明Oracle 的备份与恢复的。
Oracle 备份 与 恢复 概述
http://blog.csdn.net/tianlesoftware/archive/2010/04/16/5490733.aspx
今天又看到了一些知识,与上次说明的角度不一样。 所以整理下,算是对上篇的一个补充说明。
Oracle 备份分逻辑备份和物理备份。
一.逻辑备份
逻辑备份就是exp/imp, 10g 以后推出了数据泵(Data Pump/ expdp/impdp). 数据泵在效率上要比之前的exp/imp 高那么几倍,直观的反应就是备份所花的时间少了。 还有就是Data Pump 的功能要比exp/imp 多一点。
Oracle 10g EXPDP和IMPDP使用说明
http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4674224.aspx
二. 物理备份
先说明一下,RMAN 属于物理备份。 Oracle 分为Archive log 模式 和 NoArchive Log 模式。
1. NoArchive Log 模式下的物理备份
这种模式下只能在数据库关闭的情况下才能备份。 并且只能完全恢复到备份的时间点。
手工备份的步骤如下:
(1) 完全关闭数据库
(2) 备份所有数据库的数据文件,控制文件和联机重做日志
(3) 重新启动数据库
2. NoArchiveLog 模式下的恢复
很简单,关闭数据库后,把备份的数据文件,控制文件和联机重做日志还原,在启动数据库即可。 不过这种备份只能恢复到最后的备份时间点。
3. Archive Log 模式下的物理备份
3.1 脱机备份(冷备份)
步骤如下:
(1) 完全关闭数据库
(2) 备份所有数据库的数据文件
(3) 重新启动数据库
(4) 使用alter system switch logfile 命令强制执行一个联机重做日志切换,一旦归档了联机重做日志,那么就备份所有的归档重做日志。
(5) 使用alter database backup control file to trace 和 alter database backup control file to 'file_name' 命令创建控制文件的一个备份
3.2 联机备份(热备份)
步骤如下:
(1) 使用 alter tablespace ts_name begin backup 命令将需要备份的表空间和数据文件置入联机备份模式。
如果希望备份整个数据库,可以使用alter database begin backup命令。
(2) 备份与刚才置入备份模式的表空间相关的数据文件
(3) 执行alter tablespace ts_name end backup 或者alter database end backup,将表空间或者数据库从热备份模式中取出。
(4) 使用alter system switch logfile 命令,强制执行一次redo log 切换。 一旦完成切换,就备份所有的归档的重做日志。
说明: 为什么要强制切换redo log。 因为恢复操作必须应用在备份期间生成的所有重做上。 Oracle 在联机备份期间不断地物理更新数据文件(除了数据文件头)时,在备份操作期间存在数据块分离的可能性,这种可能性就会导致备份数据文件不一致。 此外,数据文件可能在备份之后,但是在整个备份进程结束之前被写入,由于备份中的每个数据文件可能会有不同的SCN,因此数据文件备份映像会不一致,所以拥有在备份期间生成的重做以应用于恢复是非常重要的。
联机备份的不足:
执行Alter tablespace ts_name begin backup 和 alter database begin backup 命令时,重做日志会发生更改。一般来说,Oracle只将更改矢量存储为重做记录,这些小型的记录指定义已经发生的更改。当数据文件处于联机备份模式时,Oracle 会记录数据文件的整块更改,而不是仅仅记录更改矢量,这意味着联机备份期间总的重做日志会大量增加,这样在热备份进程执行期间所需要的磁盘空间和CPU开销会收到影响。
而RMAN 提供了不将表空间置入热备份模式而执行热备份的功能。 所以就避免了使用I/0操作,当结束数据文件的联机备份状态时,就可以进行正常的操作。
注意:
在Archivelog 模式下,联机备份和脱机备份,不备份联机重做日志 和 控制文件,只是备份归档文件及创建备份的控制文件,这是因为在恢复期间不希望冒险重写联机重做日志或者控制文件。
为什么不恢复联机重做日志,因为在Archive log 模式的恢复期间,联机重做日志中可能有最新的重做,这样当前的联机重做日志将被用于完全的时间点恢复。如果丢失了联机重做日志,就必须用所有的归档日志来执行时间点恢复。
不备份控制文件的原因和重做一样,因为当前的控制文件含有最新的联机重做日志信息和归档的重做日志信息。
4. Archive Log 模式下的恢复
4.1 Archive log 模式下的完全恢复
完全恢复,就是没有数据丢失的恢复,它的前提是所有联机重做日志文件都没有损坏,所有的归档文件都在。 如果丢失了redo log或者 归档文件,就需要执行时间点的恢复。如果丢失了控制文件的备份,就需要恢复控制文件并执行不完全恢复。
完全恢复的步骤如下:
(1)从备份中还原所有数据文件
(2)还原所有备份的归档
(3)加载数据库(startup mount)
(4)恢复数据库(recover database)
(5)Oracle 会提示应用归档重做日志,在提示符下输入:AUTO,Oracle 会自动应用所有重做日志。
(6)应用结束有,打开数据库。
补充:如果用Recover database until cancel 命令会恢复所需的重做日志,在应用完最后一个归档的冲过日志后,需要输入cancel 命令来结束日志应用。
4.2 Archive Log 模式下的表空间恢复和数据文件恢复
可以在数据库加载或者数据库打开时执行表空间或者数据文件的恢复。
表空间的恢复步骤如下:
(1) 是表空间脱机(alter tablespace tbname offilne)
(2) 还原与要恢复的表空间相关联的所有数据文件
(3) 联机恢复表空间(recover tablespace)
(4) 恢复完成后,使表空间联机(alter tablespace tnname online)
数据文件的恢复,它的有点是可以保持表空间的联机,步骤如下:
(1) 使数据文件脱机(alter database datafile 'file_name' offline)
(2) 还原所有要恢复的数据文件
(3) 联机恢复数据文件(recover datafile)
(4) 完成恢复后,使数据文件联机(alter database 'file_name' online).
4.3 Archive Log 模式下时间点恢复
4.3.1 恢复到某一时间点数据库的步骤
(1)从备份中恢复所有数据文件,这个备份要在恢复时间点之前结束
(2)使用命令恢复数据库并应用redo: recover database until time '2010-6-4'
(3)完成恢复后打开数据库
4.3.2 使用SCN 号来恢复,步骤如下:
(1)从备份中恢复所有数据文件,这个备份要在恢复时间点之前结束
(2)使用命令恢复数据库并应用redo: recover database until change '1287299'
(3)打开数据库
SCN 小知识补充:
查看SCN:
SELECT dbms_flashback.get_system_change_number FROM dual;
SELECT CURRENT_SCN FROM V$DATABASE;
查看SCN和timestamp之间的对应关系:
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;
系统时间标记与scn的每5分钟匹配一次。举个例子,比如scn:339988,339989分别匹配09-05-3013:52:00和09-05-30-13:57:00,则当你通过as of timestamp查询09-05-30 13:52:00或09-05-30 13:56:59这段时间点内的时间时,oracle都会将其匹配为scn:339988到undo表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是09-05-30 13:52:00这个时刻的数据。