之前的控制文件备份中提及到oracle推荐配置RMAN控制文件自动备份。当数据库结构发生改变或在RMAN每次成功完成备份之后,控制文件都会自动备份。这确保了nocatalog下,最新的备份对于数据库是可知的(信息存储在controlfile里)。
那么,下面的步骤来模拟数据库遭到破坏,只留下之前的pfile初始化文件(1),数据文件备份(2)及controlfile自动备份(3),通过重建数据库来完成恢复。这里的原数据库为非归档运行,RMAN为nocatalog。
首先要知道原数据库的DBID,本例为:1259705794
C:>rman
恢复管理器: Release 10.2.0.1.0 - Production on 星期六 12月 1 15:43:09 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
RMAN> connect target
已连接到目标数据库 (未启动)
RMAN> set dbid=1259705794
正在执行命令: SET DBID
接下来修改pfile里的内容,使之符合新环境的配置,然后通过pfile启动数据库到started
RMAN> startup nomount pfile='F:OracleDBpfile';
Oracle 实例已启动
系统全局区域总计 369098752 字节
Fixed Size 1249056 字节
Variable Size 117440736 字节
Database Buffers 247463936 字节
Redo Buffers 2945024 字节
接下来从控制文件之前的自动备份还原控制文件
RMAN> restore controlfile from autobackup;
启动 restore 于 01-12月-07
使用通道 ORA_DISK_1
恢复区域目标: F:OracleDB/flash_recovery_area
用于搜索的数据库名 (或数据库的唯一名称): TEST
通道 ORA_DISK_1: 在恢复区域中找到自动备份
通道 ORA_DISK_1: 已找到的自动备份: F:ORACLEDBFLASH_RECOVERY_AREATESTAUTOBACK
UP2007_12_01O1_MF_S_640191525_3O21PWJM_.BKP
通道 ORA_DISK_1: 从自动备份复原控制文件已完成
输出文件名=F:ORACLEDBORADATANEWSELFDBCONTROL01.CTL
输出文件名=F:ORACLEDBORADATANEWSELFDBCONTROL02.CTL
输出文件名=F:ORACLEDBORADATANEWSELFDBCONTROL03.CTL
完成 restore 于 01-12月-07
至此,新建的数据库已经拥有了原来的控制文件,这样之前的备份信息对于数据库来说也就可见了。
接下来要在MOUNT的状态下通过ALTER DATABASE RENAME FILE 'A' TO 'B' 将数据文件和REDOLOG文件的位置修改到新的匹配位置!
然后在RMAN中restore database并open resetlogs即可。
对数据库进行一次完全备份!
[@more@]e思考1,将之前的控制文件自动备份恢复至何处在执行restore controlfile from autobackup时rman才能找到? 这一点都是基于startup nomount pfile='?/pfile'里的pfile的内容的。看下面的示例:
selfdb.__db_cache_size=247463936
selfdb.__java_pool_size=4194304
selfdb.__large_pool_size=4194304
selfdb.__shared_pool_size=100663296
selfdb.__streams_pool_size=8388608
*.audit_file_dest='F:OracleDB/admin/selfdb/adump'
*.background_dump_dest='F:OracleDB/admin/selfdb/bdump'
*.compatible='10.2.0.1.0'
*.control_files='F:OracleDBoradatanewselfdbcontrol01.ctl','F:OracleDBoradatanewselfdb
control02.ctl','F:OracleDBoradatanewselfdbcontrol03.ctl'
*.core_dump_dest='F:OracleDB/admin/test/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='test'
*.db_recovery_file_dest='F:OracleDB/flash_recovery_area'*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=selfdbXDB)'
*.fast_start_mttr_target=15
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=122683392
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=368050176
*.undo_management='AUTO'
*.undo_retention=900
*.undo_tablespace='undotbs1'
*.user_dump_dest='F:OracleDB/admin/test/udump'
-------------------------------------------------------------------------*.db_name='test'*.db_recovery_file_dest='F:OracleDB/flash_recovery_area'两行内容就指出了搜索的范围和数据库名称。也就是说,可以通过手工修改这两个参数来使rman找到需要的controlfile自动备份。但这里必须指出,新的数据库名称要和旧的一致。否则在下一步mount数据库的时候,会报错。原因是被还原的控制文件自动备份中包含的是旧的数据库名称,而在启动时使用的pfile中的描述却是新的名称。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/404722/viewspace-987166/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/404722/viewspace-987166/